2016년 6월 29일 수요일

아두니티(ARDUnity) 시작하기

아두니티 에셋이 유니티 프로젝트에 임포트(Import)되면 상단 메뉴에 ARDUnity 관련 메뉴가 나타납니다. 또한, Project View에 ARDUnity 폴더가 생긴 것을 확인할 수 있습니다.
(만약, 임포트 에러가 해결되지 않는다면 메뉴가 나타나지 않습니다. <해결 방법 보기>)

아두니티의 메뉴는 다음과 같습니다.
  • Wire Editor: 아두니티 전용 편집기
  • Add Utility: 유용한 기능들
  • PlayMaker Add-on: PlayMaker 사용자를 위한 Add-on
  • View User Guide: 사용자 설명서 보기
  • Online Document: 온라인 문서 사이트 가기
  • About ARDUnity: 버전 정보 확인

아두니티 에셋 폴더 구성은 다음과 같습니다.
  • Arduino: 아두이노 라이브러리
  • Examples: 아두니티 예제
  • Plugins: 멀티 플랫폼 빌드를 위한 플러그인
  • Resource: 예제에 사용된 리소스
  • Scripts: 아두니티 C# 소스

유니티 씬(Scene)에서 아두니티를 사용하려면 아두니티 컴포넌트를 GameObject에 추가해야 합니다. 아두니티 컴포넌트를 추가하는 방법은 2가지가 있습니다.
  1. Wire Editor의 메뉴를 이용하는 방법
  2. 유니티 Add Component 메뉴를 이용하는 방법

Wire Editor 메뉴를 이용하는 방법
Wire Editor Window를 띄운 후 적당한 위치에 Docking시키고, 마우스 오른쪽 버튼을 누르면 메뉴가 나타납니다.

유니티 Add Component 메뉴를 이용하는 방법
유니티 상단 메뉴 혹은 GameObject의 Inspector View의 Add Component를 이용해서도 아두니티 컴포넌트를 추가할 수 있습니다.

아두니티 컴포넌트를 추가할 때 메뉴가 비활성화 된 경우가 있는데, 이런 경우는 다음과 같습니다.
  1. GameObject가 선택되지 않은 경우
  2. 해당 아두니티 컴포넌트가 필요로하는 컴포넌트가 없는 경우

그럼, 아두니티를 Scene에서 사용하기 위해 시작해보겠습니다.
먼저, Empty GameObject를 하나 만든 후 이름을 Ardunity라 변경합니다.
그 다음 Ardunity GameObject를 선택한 후, Wire Editor에서 메뉴를 띄워 ARDUINO/Add ArdunityApp을 선택합니다.
그러면 Ardunity GameObject에 ArdunityApp이란, 컴포넌트가 추가된 것을 확인할 수 있으며 Wire Editor상에도 ArdunityApp Block이 나타납니다.




ArdunityApp은 연결할 아두이노 보드를 의미하고 Scene에 반드시 1개 이상 있어야 합니다. 아두이노 보드 당 1개 씩인데 만약, 여러 개의 아두이노 보드를 연결하려 하면 보드 개수만큼 ArdunityApp이 Scene에 존재해야 합니다.
다음으로 할 일은 아두이노 보드와 통신할 CommSocket을 추가하는 것입니다.
아두니티가 지원하는 통신 방식은 다음과 같습니다.
  • USB2Serial: CommSerial (Windows/OSX)
  • Bluetooth: CommBluetooth (Android) <Deluxe 버전만 가능>
  • BLE: CommBLE (OSX/Android/iOS) <Ardunity Brain 보드만 가능>
  • TCP/IP: CommWiFi (Windows/OSX/Android/iOS) <Deluxe 버전만 가능>
가장 기본적인 연결은 USB 케이블을 통한 USB2Serial 통신이기에 CommSerial을 추가하면 됩니다.

CommSocket을 추가하려면 반드시 ArdunityApp이 추가되어 있어야 메뉴가 활성화되며, Wire Editor 메뉴에서 Unity/Add CommSocket/CommSerial을 선택합니다.




이제 ArdunityApp이 CommSocket을 사용할 수 있도록 서로 연결시킵니다.
ArdunityApp의 붉은색으로 표시된 CommSocket을 클릭한 후 드래그하여 CommSerial의 CommSocket에 드롭하면 서로 연결됩니다.

다음으로 할 일은 아두이노 보드에 스케치를 업로드하는 것입니다. (스케치가 업로드에 대해 궁금하면 관련글 보기)
ArdunityApp 컴포넌트 메뉴를 보면 Export Sketch가 있습니다. 이 메뉴는 바로 Wire Editor상의 편집 내용을 아두이노 스케치로 자동 생성해주는 기능입니다.
이 메뉴를 선택하여 PC의 적당한 위치에 아두이노 스케치 코드를 만듭니다.
(주의: 스케치 코드 생성 시 이름은 함수나 변수 이름 명명 규칙과 같이 숫자가 먼저오거나 띄어쓰기를 하면 안되고 영어로 작성해야 합니다.)
만들어진 아두이노 스케치를 Arduino IDE를 이용해서 열어보면 코드가 이미 작성되어 있는 것을 확인할 수 있습니다.

이것을 아두이노 보드에 업로드시키면 유니티와 아두이노를 연결할 준비는 끝납니다.

이제 아두이노 보드와 유니티를 연결해봅시다.
먼저, 유니티의 Play버튼을 눌러 Scene을 실행합니다.
ArdunityApp의 컴포넌트 메뉴를 보면 Connect 버튼이 나타난 것을 확인할 수 있습니다.

이 Connect버튼을 누르기 전에 CommSerial의 포트를 선택해야 합니다.

Search버튼을 눌러 포트 자동 검색을 시킨 후, Dropdown 버튼을 눌러 포트를 선택하면 됩니다.
포트 선택을 했다면 이제 ArdunityApp의 Connect버튼을 눌러 아두이노 보드와 연결되는 지 확인합니다.
연결이 된다면 fps부분에 현재, 통신 주기가 표시됨을 확인할 수 있습니다.

매번 포트 선택과 Connect버튼 누르는 것이 귀찮다면 ArdunityApp의 AutoConnect 옵션을 이용해서 유니티가 실행되면 자동으로 연결되는 기능을 사용해도 좋습니다. (자동 연결이 되려면 포트 선택은 미리 해두어야 하며, 보드는 연결되어 있어야 합니다.)

또한, 유니티 Build이후 통신 상태를 점검할 수 있도록 Debug기능을 제공합니다. 이것은 Game View화면에 ArdunityApp의 상태가 출력되는 기능입니다.

현재, 아두니티는 그냥 보드와 연결만 될 뿐 아무 동작도 하지 않습니다. 그 이유는 아직 아무 기능도 붙이지 않았기 때문입니다.
이제 하나씩 활용하는 방법을 포스트하겠습니다.


댓글 3개:


  1. 잘 봤습니다. 지금 아두이노와 관련된 과제를 진행하면서 하나하나 따라 해볼려고 하는데요...
    조금 오래된 글이지만 질문 드려도 될까요?
    다른 아두이노 스케치에는 문제가 없었는데 위 포스팅 그대로 따라했더니

    Failed to open CommObject!
    UnityEngine.Debug:Log(Object)
    Ardunity.ArdunityApp:OnCommSocketOpenFailed()
    UnityEngine.Events.UnityEvent:Invoke()
    Ardunity.CommSerial:Update() (at Assets/ARDUnity/Scripts/CommSocket/CommSerial.cs:62)

    이 에러가 뜨면서 연결이 안되네요 어떤게 문제일까요 ㅠㅠ

    답글삭제
    답글
    1. CommSerial을 사용중이라면 본 에러는 포트 Open 실패를 의미합니다.
      포트 번호가 잘못된 경우 나올 수 있습니다.
      또한, 아두이노 보드가 응답하지 않아도 나옵니다.
      이 경우 Sketch가 제대로 upload되지 않았거나 baudrate가 같지 않으면 나타날 수 있습니다.
      포럼에 본 문제를 자세히 올려주시면 대응해드리겠습니다.
      (https://groups.google.com/forum/#!forum/ardunity-forum-kor)

      삭제
  2. 혹시 직접 만든 유니티 게임을 아두이노로부터 값을 입력받아 키보드키와 연결하는 것은 불가능한가요?

    답글삭제