본문 바로가기

Robot/Robot Program - ROS

ARDUnity를 이용해서 튀는 공(bounced ball)의 방향에 따라 아두이노의 LED를 유니티에서 끄고 켜기

새로운 무언가를 익히고 또 공부하는 것은 참~ 재미있습니다. 이런 저런 지식들이 쌓여간다는 일종의 묘한 쾌감이 있지요.~ 물론 저처럼 몹시 기초스러운 것만 야곰야곰 쉽게쉽게 익히는 얍삽함(^^)을 가지는 경우도 있지만 말이죠^^. 아무튼 요즘 제가 새롭게 취미처럼 시작한 것이 유니티(Unity)와 아두이노(Arduino), 그리고 그 사이를 연결해 주는 아두니티(ARDUnity)입니다. 아주 재미나게 보고 있죠^^ 최근 두 세개의 글도 포스팅했구요.^^ 앞선 글들은 모두 아두니티가 제공하는 예제를 놓고 진행을 했는데요. 오늘은 처음으로 그냥 맨땅에서^^ 살짝 진행하는 것을 해보겠습니다.^^ 아 그렇다고 뭐 처음부터 예제를 제가 만들었다는 것은 아니구요. 아두니티가 제공하는 예제를 보고 익혔죠^^

이름에도 나와있지만, 유니티 화면에 공(Ball)을 놓고 그 공이 튀는 것에 따라 LED를 끄고 키는 예제를 만들려고 합니다. 이제 몇 번 구동해봤다고 위 시작화면이 익숙해 지려고 합니다.^^

떵그러니 있는 저 화면이 괜찮은것 같아요~ 뭔가... 이제 멋지게 한 번 채워볼까.. 하는 그런 욕심도 불러 일으키는 뭔가가 있죠^^

첫 글에서 아두니티를 설치[바로가기]하는 것은 했으니 Asset Store에서 불러오고, 사소한 에러가 하나 뜰 수도 있는데 그걸 설정으로 잡으면 저렇게 메뉴바에 ARDUnity라고 뜹니다. 그 안에서 Wire Editor를 클릭해서 저렇게 탭에 끼워두면 작업하기 편한듯 합니다.^^

이제 Hierarchy -> 3D Object -> Plane을 추가합니다.

요런 아이가 생겼네요. 살짝 색상 등의 재질을 손봐주고 싶은데 말이죠^^. 뭐 유니티에서 당연히 할 수 있는거지만,

저렇게 ARDUnity에서도 몇몇 쓸만한 Resource를 제공합니다. Assets -> ARDUnity -> Resource -> FloorTile을 마우스로 잡고 Plane에 넣어주면

저렇게 바뀝니다^^.

이제 또 하나 더... Hierarchy -> Create -> 3D Object -> Sphere를 선택해서 구를 하나 추가합니다.

저렇게 생겼네요~~~^^

그걸 Ball이라고 이름을 변경하고, Transform속성에서 Posittion을 2로 해서 살짝 높은 곳에 위치시킵니다.

그리고, 튀는 등의 운동이 필요하므로 Ball을 선택한 상태에서 Add ComponentPhysics를 선택하고,

Rigidbody를 선택합니다.

저런 화면이 나타날 텐데요. Rigidbody가 선택되었으니 일단 공의 성격은 가진 것이라 생각하면 됩니다^^ 그리고...

다시... Assets -> ARDUnity -> Resource에서 이번에는 Green속성을 Ball로 가져가구요. 그리고 중요한 튀게 해야하니까^^ InfinityBounce라는 속성도 Ball에 넣어 줍니다.

그렇게 하면 Ball이 초록(^^)으로 바뀐것도 보이구요^^. 또 위 그림 오른쪽에 Sphere ColliderMaterialInfinityBounce가 적용된 것도 확인됩니다.

이제 Main Camera의 위치를 위 그림의 Camera Preview를 보면서 제일 마음에 드는 각도로 조절 하구요^^

또, Directional Light도 그림자가 마음에 드는 쪽으로 옮겨 두세요^^ 이제 이 상태에서 중간 점검 한 번 할까요?^^

잘 되네요~~ 이제 아두이노와 연결을 위해 ARDUnity를 사용해야죠^^ 본격적으로~~^^

일단, Create -> Create Empty를 선택합니다.

그리고 이름을 ARDUnity라고 폼나게(^^)적고, 그 상태에서 마우스 우클릭으로 Create Empty를 한 번 더 선택해서...

ARDUnity안에 LED라고 이름을 바꿔줍니다.

이제...다시 ARDUnity를 선택하고, Add Component를 선택합니다.

그리고, ARDUnity를 선택하고,

ArdunityApp을 선택합니다. 이제 시작입니다. 제일 중요한 요소를 추가해야 하는 거죠...

그러면 Wire Editor에 ArdunityApp 블럭이 생성되었습니다.

다시 Add Compoent에서 CommSocket으로 가서 CommSerial을 선택합니다.

그러면 저렇게 해당 블럭이 나타납니다.

ArdunityAppCommSocket 포트에서 마우스로 선을 빼서 CommSerialCommSocket에 연결해 줍니다.

그러면 저러게 나타납니다. 이때 아두이노 보드가 PC에 연결이 되어있다면 Search로 열려있는 포트를 볼 수 있습니다.^^. 이제 아두니티를 사용하는 시작과 통신에 대한 설정이 끝났습니다.

이제.. 위 그림처럼 LED를 클릭합니다. 그 상태에서 Add ComponentARDUnity를 선택하고...

BasicAnalogOutput을 선택합니다.

그러면 wire editor에 또 해당 블럭이 나타납니다.

위 그림처럼 AnalogOutputArdunityApp을 연결하고, 위 그림 오른쪽처럼 Analog OutputSketch Options의 Pin 속성을 13번으로 해둡니다.

그리고, 다시 LED에서 Add Component로 Output의 CurveOutput을 추가합니다. 그리고 curves속성에서

이 부분은 약간 복잡한데... LED를 끄고 키는 동작만 하는 것이 아니라 원래 의도는 부드럽게 키고, 끄는 것입니다. 그래서 일종의 산과 같은 모양의 신호를 만들어 주는 것입니다. 저 부분은 먼저 Start를 클릭해서 나타나는 창에서 0~0.5로 가로축을, 0~1로 세로축을 잡아주면 됩니다.

다음 loop를 선택해서 0~0.1로 가로를 잡고, 세로는 1로 둡니다.

또 end는 start의 반대로 잡아 주면 됩니다.

그러면 위 그림처럼 만들어 집니다.

이제 CurveOutput을 또 AnalogOutput에 연결해 둡니다.

이제 Ball을 클릭하고, Add Component에서 Reactor를 선택하고

ColliderReactor를 추가합니다. 위에서 만든 CurveOutput에 Ball에 대한 반응을 입력으로 주기 위해서 입니다.

그래서 위 블럭의 Get CollisionCurveOutput에 연결해 주면 됩니다.

위 두 블럭은 아두니티를 세팅하는 기본이 되는 것입니다.

그 다음 세 블럭은 공이 튀는 정도를 받아서 LED를 키고 끄기 위한 값을 생성해서 아두이노의 출력으로 보내는 역할을 하는 것입니다.

아.. 하나 빼먹었네요.. 계속 반복해야 하므로, LED에서 Curve OutputOptions에서 loop를 체크해제 하셔야 합니다. 이제 또 중간 점검을 해볼까요.. 위 그림에서 Analog Output의 Value와 Curve가 Ball의 튐에 따라 변화하는 모습을 확인할 수 있게 말이죠...^^

위 동영상을 보면 아두이노에 연결된 LED를 동작시킬 신호가 부드럽게 잘 인가될 것이라는 것을 직접 눈으로 확인할 수 있지요.. 이제 아두이노와 직접 연결해야죠^^

위 그림처럼 ARDUnity를 누르면 ArdunityApp의 속성에서 Export Sketch를 할 수 있게 됩니다.

뭐.. 즐거운 마음(^^)으로 이름을 지정해 주고....

업로드를 눌러버리죠^^

이제... 동작이 될 겁니다. 마무리는 동영상으로 하시죠^^

반응형