Tango 앱 개발의 기초 지식 요약

jyuko입니다. Tango의 공부로 소스 코드를 바라보면서, A-Frame을 만지거나 미니 드론 날리기도 합니다.

Tango 앱 개발의 근거로 Tango를 이해하는 데 필요한 요소 기술을 정리해 둡니다.
Tango에 대한 개요는 이전 기사을 참조하십시오.

깊이 카메라(depth camera)



깊이를 측정하는 센서를 이용해 깊이를 가진 3차원 거리 화상을 촬영하는 카메라를 가리키는 것 같습니다.

PHAB2 Pro 사양을 다시 검토하면 심도 카메라 (TOF 방식)로 설명되었습니다.
TOF 방식은 "Time Of Flight"의 약자로 적외선을 조사하여 반사하여 돌아올 때까지의 시간으로 거리를 측정하는 구조입니다.

딥스 카메라로 3D 스캔이나 모션 캡쳐를 하는 디바이스로서는 Kinect이 유명할까 생각합니다.
또, 자세한 구조는 비공개입니다만, LeapMotion 도 적외선을 날려 3D 캡쳐를 실시하는 점은 공통입니다.

가까운 장래에 스마트 폰을 비롯한 모바일 장치에 깊이 카메라가 표준 탑재되어 있을지도 모릅니다.

점 구름 데이터(point cloud)



깊이 카메라에서 얻은 데이터 형식입니다.
메쉬가 아닌 포인트의 집합체로 형상을 나타내고 있습니다.



빛의 반사로 측정하고 있기 때문에, 하나하나의 점은 물체 표면의 좌표가 됩니다.
이러한 점군 데이터로부터, 메쉬 형식으로 변환하는 수법도 몇가지 있다고 합니다.

포인트는 위치 (XYZ 좌표)뿐만 아니라 색상 (RGB 값)을 가질 수 있습니다.
RGB 카메라 (보통 카메라)로 얻은 이미지에서 깊이 카메라로 얻은 좌표에 해당하는 위치의 RGB 값을 취하면 대략적인 색상 정보를 포함하여 캡처 할 수 있습니다.

Tango 앱 개발에는 불필요하다고 생각되지만, 점군 데이터를 취급하는 오픈 소스 라이브러리도 소개해 둡니다.
Point Cloud Library (PCL)

다시 한번 Tango를 만져보십시오.



사전 설치된 Google 앱에서는 점 구름이 선으로 연결되어 가상 공간을 만들 수 있는 데모가 흐릅니다.


이전 기사에서도 소개했습니다만, Tango Unity SDK 의 Example에 있는 "ExperimentalMeshBuilderWithColor"입니다.
카메라를 돌리면 실내를 캡처하여 메쉬를 할 수 있습니다.


색 정보를 가지는 point cloud를 메쉬 형식으로 변환할 수 있다는 것은, 즉 그러한 것입니다.

Tango Unity SDK 코드 읽기



Project Tango UnitySDK Examples 언제든지 읽을 수 있습니다.
점 구름 데이터(point cloud)가 인터페이스에 건너기까지의 처리는, 이하의 3 파일을 바라보고 있다고 어쩐지 이해할 수 있습니다.

TangoSDK/Core/Scripts/TangoWrappers/DepthProvider.cs



파일 이름과 주석으로 깊이 카메라에서 정보를 얻는 C API 래퍼.UpdateTangoEmulation() 에서 XYZ 좌표와 색 정보를 m_emulatedPointCloud 에 채워 넣어 두고, GetTangoEmulation() 가 불려 가면 return 하고 있다.

TangoSDK/Core/Scripts/Listener/DepthListener.cs


SendIfAvailable()는 위의 _FillEmulatedPointCloud()에서 점 구름 데이터를 가져와 이벤트 핸들러에 전달합니다._FillEmulatedPointCloud()DepthProvider.GetTangoEmulation()에서 래퍼에서 데이터를 가져옵니다.

TangoSDK/Core/Scripts/TangoWrappers/TangoApplication.cs


Update() 에서 DepthProvider.UpdateTangoEmulation() 실행에서 DepthListener.SendIfAvailable() 하고 있기 때문에, 이벤트 핸들러에 pointCloud가 건네준다.

보인다! 나에게도 Tango가 보인다!

요약



따라서 궁극적으로 ITangoPointCloud 인터페이스의 OnTangoPointCloudAvailable()에서 Tango.TangoPointCloudData을 얻을 수 있습니다.
XYZ와 C의 배열m_points이 점군 데이터(point cloud)입니다.
사용법은 여기 .

역시 이론으로부터 들어가면, API 사양이나 소스 코드의 보이는 방법이 다릅니다.
하지 않고 이벤트 구동을 제대로 이해하는 계기가 되었습니다.

좋은 웹페이지 즐겨찾기