지난 글에서 ARCore를 사용하기 위한 프로젝트의 생성과 초기화 과정을 살펴보았습니다.
이번 글에서는 ARCore를 이용하여 어떻게 개발을 진행해야 할 것인지 배경지식을 살펴보도록 하겠습니다.
오늘 다루는 내용은 제가 여러가지 조사하면서 정리한 내용이다보니 잘못된 부분이 있을 수 있습니다.
우리가 주로 사용하게 되는 AR용 디바이스는 대부분 스마트폰일 것입니다.
ARCore를 설치하고 라이브러리를 이용하여 개발을 시작하게 되는데 여러가지 자료를 검색, 참고해보면 어느정도 이상의 기능은 벌써 만들어져 있고 우리는 그냥 가져와서 쓰는 수준입니다.
물론 구현하고자 하는 알고리즘, 비즈니스 프로세스 등은 직접 만들어나가야 겠지요.
이처럼 내부적으로 구현된 내용들은 어떻게 구성되고 처리될까요?
스마트폰에는 카메라, 깊이센서(이건 있는 경우도 있고 없는 경우도 있겠군요), 자이로 스코프, 광센서, 가속도계 등 많은 센서들이 준비되어 있습니다.
ARCore 플랫폼은 스마트폰이 보유하고 있는 다양한 센서, 장치 등을 활용하여 데이터를 수집합니다.
이렇게 수집된 데이터들을 COM 프로세스라는 것을 이용해서 필요한 데이터, 정보 등을 계산하고, 또 수많은 특징점을 계산하게 됩니다.
여기서 특징점이라고 하는 것인 간단하게 보면 시각적으로 다른 영역을 캡쳐한 데이터 포인트라고 볼 수 있습니다.
또한 우리가 사용할 알고리즘이 해당 이미지에서 특정 항목을 추적할 때 사용할 수 있는, 이미지가 가지는 고유 마커라고 할 수 있습니다.
수 년전까지는 AR 시스템을 구현할 때에는 특정 기호가 그려진 마커를 이용하여 위치, 객체의 종류 등을 인식하고 활용했었죠.
그러한 마커의 기능을 하는 것입니다.
COM은 Concurrent Odometry and Mapping, 즉 동시 주행거리측정(또는 주행기록) 및 지도작성 이라는 의미를 가진 프로세스입니다.
ARCore에서는 COM 프로세스를 이용하여 실제 세계의 내부에서 스마트폰이 어느 공간에 위치하고 있는지, 그리고 현재 카메라가 어떤 방향을 가리키고 있는지를 파악하고 있습니다.
COM 프로세스의 기반이 되는 기술을 SLAM이라고 하는데 SLAM은 Simultaneous Localization and Mapping, 즉 동시 현지화 및 매핑.. "동시 위치추정 및 지도 작성(이 쪽이 더 이해하기 쉽겠네요)"이라는 의미를 가지고 있으며, 환경 모델, 맵과 그 안에서 움직이는 로봇의 상태를 동시에 구성하는 것을 목적으로 가진 시스템이라고 볼 수 있습니다.
우리 주변에서 SLAM 기술이 적용되는 흔한 예로 로봇 청소기를 들 수 있습니다.
ARCore에서 사용되는 SLAM 프로세스는 센서가 수집한 다양한 환경 데이터와 상태 데이터를 이용하여 환경의 모델, 맵의 구성을 동시에 추정하는 역할을 합니다.
그리고 여기서 추정된 내용을 기반으로 수많은 특징점들을 도출해 낸다고 생각하시면 되겠네요.
로봇청소기의 경우에는 이러한 추정 내용을 이용하여 최적의 경로를 계산, 적용하고 있습니다.
아래의 그림은 "Past, Present, and Future of Simultaneous Localization and Mapping: Toward the Robust-Perception Age (2017)" (Link: https://ieeexplore.ieee.org/abstract/document/7747236 ) 라는 논문에서 제시된 SLAM 시스템의 구성입니다.
이 글은 논문에 대한 분석 글이 아니므로 논문의 내용에 대한 설명은 하지 않겠습니다.
이처럼 센서를 기반으로 한 환경 데이터의 수집과 COM 프로세스를 통한 스마트폰의 현재 위치, 카메라가 가리키는 방향, 기타 다양한 특정점들을 계산해 내는 작업을 지속적으로 수행하고 정보를 갱신하면서 ARCore는 증강현실을 구현해 나갑니다.
그렇다면 이렇게 추출된 정보와 특징점들을 우리는 어떻게 사용할 수 있을까요?
COM 프로세스를 통하여 스마트폰의 POSE(Position and Orientation, 위치와 방향)을 계산해 냈으니, 이제 증강현실을 위한 다양한 정보, 객체를 화면에 표시하여야 합니다.
그렇게 화면에 정보를 표시하려면 기준이 되는 좌표계가 있어야겠죠.
아무곳에나 정보와 객체를 그려주는 것이 아니라 한 번 그려놓은 객체와 정보는 우리가 다른 곳을 살펴보다가 다시 돌아와도 여전히 그 자리에 존재해야 합니다.
이처럼 실세계에서 가상의 마커 역할을 하는 점을 앵커라고 하는데 이 앵커(Anchors, 닻)를 고정시키기 위한 기준이 되는 좌표계, 즉 땅바닥이 되어 줄 평면이 필요하겠죠,
그래서 COM 프로세스를 통하여 추출된 특징점들로 클러스터를 구성하고 이를 바탕으로 평면이 될 수 있는 영역을 인식합니다.
평면이 인식되면 해당 정보를 가진 평면 좌표계를 생성하게 되고 이렇게 생성된 평면 좌표계를 기반으로 앵커를 설치하게 됩니다.
이 앵커를 기준으로 하여 여러 객체나 정보 등을 배치합니다.
우리가 이동하거나 스마트폰을 움직이게 되면 현재의 위치, 방향을 기준으로 생성된 평면에 지정된 좌표에 설치된 앵커 위에 객체와 정보가 표시된다.... 라는 것이죠.
ARCore를 이용하여 증강현실 앱, 시스템을 개발하는 것은 이러한 과정을 기반으로 가지고 진행됩니다.
그렇다면 우리가 해야하는 작업은 명확하게 드러났군요.
우리가 세상에 존재하기 위해서는 일단 우리가 어디에 있는지를 먼저 파악하고 우리의 위치를 중심으로 세상을 넓혀가야 합니다.
ARCore의 개발도 동일한 흐름을 통해서 하나씩 세상을 구축해 나간다고 생각하시면 쉽게 이해가 될 것입니다.
'관련 기술 > AR(증강현실)' 카테고리의 다른 글
Sceneform을 적용하여 기본 AR앱을 만들어보자 (1) (0) | 2020.07.30 |
---|---|
AR앱 개발 시 Sceneform SDK를 이용한 방법과 직접 구현하는 방법 (0) | 2020.07.29 |
ARCore 프로젝트 생성 및 초기설정 하기 (0) | 2020.06.28 |
ARCore 개발환경 설정 (0) | 2020.06.25 |
ARCore에 대하여 (0) | 2020.06.23 |