Machineboy空

Augmented Reality: ARKit의 대략적 원리(VIO, 평면 감지, 오브젝트 분류) 본문

언어/swift

Augmented Reality: ARKit의 대략적 원리(VIO, 평면 감지, 오브젝트 분류)

안녕도라 2024. 7. 7. 14:22

1️⃣ ARKit 정의

ARKit은 camera 정보와  관성 시스템(가속도계와 자이로스코프IMU)를 사용해 6Dof 포즈를 추적하는 기술이다!

ARKit은 간단한 2D 평면 탐지 기능을 갖춘 VIO 시스템이다. 
VIO는 공간 내에서 장치의 상대적인 위치(6DOF 포즈)를 실시간으로 추적한다. 

<증강 현실 · 가상 현실과 공간 컴퓨팅: 차세대 공간 컴퓨팅의 이론과 예제> 에린 팡길리넌 외 지음(2020)
ARKit은 애플이 VIO알고리즘을 센서에 가깝게 연동하고 포즈 계산에서 오류와 불확실성을 주리고자 많은 시간을 보정에 할애할 수 있게 했기 때문에 다른 AR들에 비해 우수하다.

VIO 관련 개념

* 6-DoF Pose (6 degrees of freedom)

 

6자유도(6DoF)는 강체가 움직일 수 있는 자유의 정도를 표현하는 것.

3차원 직각 좌표계에서 운동 물체의 상하 움직임(pitching), 수평 흔들림(rolling), 좌우 회전(yawing)의 세 가지 동작과

각 축과 평행하게 이동하는 좌우 움직임, 앞뒤 움직임, 상하 움직임의 세 가지 동작을 합하여

모두 6가지 자유롭게 움직일 수 있는 자유의 정도를 표현한 것이다.

 

https://terms.tta.or.kr/dictionary/dictionaryView.do?subject=6%20Degrees%20of%20Freedom

 

TTA정보통신용어사전

한국정보통신기술협회(TTA)는 정보통신 기술 발전과 타 분야와의 기술 융합에 따라 무수히 생성되는 정보통신용어를 해설하고 표준화하여, 전문가뿐만 아니라 비전문가들도 올바르게 활용할 수

terms.tta.or.kr

 

 

* Dead-reckoning(데드레커닝, 추측 항법)

  • 데드(Dead) : 신호를 받지 못하고 있는 상태
  • 레커닝(Reackoning): 추산한다, 신호가 없는 동안에 추측하여 상태 정보를 갱신한다.

예측값과 계산값의 오차를 계산하며 보정하는 알고리즘의 일종인듯.

 

https://kilius.tistory.com/entry/멀티플레이어-동기화-기법-dead-reckoning

 

멀티플레이어 동기화 기법( dead reckoning )

멀티플레이 게임에서 데드 레커닝(dead reckoning)은 동기화 기법 중 하나입니다. 데드 레커닝은 클라이언트에서 먼저 예측을 하여 서버와의 동기화를 최소화하는 방법입니다. 데드 레커닝을 사용

kilius.tistory.com

 

 

* VIO(Visual Inertial Odometry, 시각적 관성 주행거리 측정)

Odometry Odometry

로봇에 장착된 바퀴의 회전수 등을 이용해 움직임을 트랙킹하고 위치를 추정하는 방법
Visual Odometry Odometry + 카메라(Visual)

연속된 카메라 이미지들을 비교해서 프레임간 rotation과 translation을 추정하고 변화를 쌓아가며 트랙킹한다.
Visual Inertial Odometry Odometry + 카메라(Visual) + IMU(Inertial, 관성을 읽을 수 있는 센서)

데드레커닝을 통해 6Dof의 3축 lineal acceleration(선형 가속도)와 3축 angular velocity(회전 속도/ 각속도)를 측정

 

https://m.blog.naver.com/dnjswns2280/222082887872

 

[SLAM] Visual Intertial Odometry

Content Odometry & State estimation Odometry는 원래 로봇에 장착된 바퀴의 회전수 등을 이용하...

blog.naver.com

 

 


2️⃣ ARKit의 평면 탐지

ARKit의 두 번째 부분은 간단한 평면 탐지다.
(중략)
이는 광학 시스템에 의해 감지된 특징(데모에서 볼 수 있는 작은 점이나 포인트 클라우드)을 통해 계산되며 알고리즘은 특징을 파악해 어떤 세 점이든 평면을 정의할 수있도록 평균값을 낸다. 이 작업을 충분히 반복하면 실제의 바닥이 어디쯤인지 추정할 수 있다. 

 

ARKit은 Lidar 센서 등을 활용해 물체로 보내 빛이 돌아오는 시간을 기록하여 거리 정보를 확인하고, 감지된 3점을 활용해 평면을 정의하나보다!

 


광학시스템 관련 개념

* Point Cloud (포인트 클라우드)

Lidar 센서, RGB-D센서 등으로 수집되는 데이터로 물체에 빛/신호를 보내서 돌아오는 시간을 기록하여 각 빛/신호 당 거리 정보를 계산하고, 하나의 포인트(점)을 생성한다. 포인트 클라우드는 3차원 공간상에 퍼져 있는 여러 포인트(Point)의 집합(set cloud)를 의미한다.

 

https://23min.tistory.com/8

 

포인트 클라우드(Point Cloud)란?

Point Cloud Lidar 센서, RGB-D센서 등으로 수집되는 데이터를 의미한다. 이러한 센서들은 아래 그림처럼 물체에 빛/신호를 보내서 돌아오는 시간을 기록하여 각 빛/신호 당 거리 정보를 계산하고, 하

23min.tistory.com


3️⃣ ARKit의 오브젝트 분류 및 배치

AR은 어떻게 3D 구조물과 기하학을 함께 파악할 수 있는가? 예를 들어 내 포켓몬은 스만트폰 화면상에 나타나는 거대 육면체를 닮은 구조물 뒤로 숨거나 맞부딪쳐 튕겨 나올 수 있다는 것을 어떻게 아는가? 실시간 장치 밀도가 높은 3D 재구성, 실시간 3D 장면 분할, 3D 오브젝트 분류, 클라우드 훈련 모델로 로컬 프로세싱을 채우는 것이 여기서의 도전 과제다. 

관련 개념

* Image Recognition 및 Classification

해당 이미지가 건물인지 등을 파악하는 건 ML일듯

 

https://medium.com/ddiddu-log/이미지-인식의-정의와-주요-모델-비교-1-이미지-분류-image-classification-ae7a59bfaf65

 

이미지 인식: 1. 이미지 분류(Image Classification)의 정의와 주요 모델 비교

CNN, VGG-16, ResNet, MobileNet, Custom CNN

medium.com

 

 

* AR Cloud

현실 공간의 같은 장소에 디지털 객체를 지속적으로 위치시키는 것!

 

https://engine.roa.ai/articles/145660

 

AR Cloud는 무엇이며, 왜 중요한가? - 로아AI

이번 컬럼은 앞선 AR 컬럼 연재에 이은 네 번째 컬럼으로 AR의 미래에서 가장 중요한 역할을 하게 될 AR Cloud(AR 클라우드)에 대해서 다루고자 한다. 스마트폰 이후의 컴퓨터, ‘AR(증강현실) 헤드셋

engine.roa.ai


*** 원문: <증강 현실 · 가상 현실과 공간 컴퓨팅: 차세대 공간 컴퓨팅의 이론과 예제> 에린 팡길리넌 외 지음(2020)

 

ARKit은 간단한 2D 평면 탐지 기능을 갖춘 VIO 시스템이다. VIO는 공간 내에서 장치의 상대적인 위치(6DOF 포즈)를 실시간으로 추적한다. 

 

즉, 디스플레이의 모든 프레임이 새로 고침 할 때마다 포즈의 위치가 재계산되는데, 이는 초당 약 30회 이상이다. 이런 계산은 병렬로 두 번 수행된다.

실제 세계의 한 지점을 각 프레임마다 카메라 센서상의 픽셀과 일치시킴으로써 시각적인(카메라)시스템을 통해 포즈를 추적할 수 있다.

또한 포즈는 관성 시스템(가속도계와 자이로스코프IMU)에 의해 추적된다.

 

이후 캘먼 필터를 통해 두 시스템의 출력을 결합한 후 어느 쪽이 실제 위치(ground truth)에 대한 최상의 추정치를 제공하는지 판단해 ARKit SDK를 통해 해당 포즈를 업데이트 한다.

* 칼만 필터(Kalman filter): 시간에 따라 변하는 시스템의 상태를 추정하는 방법 중 하나로써 시스템 모델의 예측값과 노이즈가 포함된 관측값을 바탕으로 현재 상태를 재귀적으로 예측하고 업데이트하는 알고리즘을 말한다.

 

주행 거리계(odometer)가 차량이 이동한 거리를 추적하듯이 VIO시스템은 아이폰이 6D공간에서 이동한 거리를 추적한다. 여기서 6D란 XYZ이동(평행이동)의 3D와 pitch, yaw, roll 의 3D를 의미한다. 

 

VIO가 제공하는 가장 큰 이점은 IMU 판독이 초당 약 1000회에 달할 뿐 아니라 가속(사용자 동작)기반이라는 점이다. 데드 레커닝(Dead reckoning)은 IMU 판독 값에서 장치 이동을 측정하는 데 사용한다. 내가 당신에게 한 발짝 내딛으라고 부탁한 후 그 걸음이 몇 인치인지 추정하는 것처럼 데드 레커닝 역시 기본적으로는 (이런식으로) 추측한다. 관성 시스템의 오차는 시간이 지남에 따라 누적되므로 IMU 프레임 간의 시간이 늘어지거나 시각 시스템을 통한 리셋없이 관성 시스템이 돌아갈 수록 추적 결과는 실제 값에도 동떨어질 것이다.

 

시각/광학 측정은 일반적으로 초당 30프레임, 즉 카메라의 프레임 속도로 진행되며 거리(프레임 간 장면 변역)를 기준으로 삼는다. 광학 시스템은 일반적으로 거리에 따라(그리고 어느 정도는 시간에 따라) 오차를 축적하므로 이동 거리가 길어질 수록 오차도 커진다.

 

좋은 소식인데 각 시스템의 장점이 서로의 약점을 무마한다. 따라서 시각과 관성 추적 시스템은 상호 의존하지 않는 각각 완전히 다른 측정 시스템 위에 세워져 있다. 즉 카메라가 가려지거나 광학적 요소가 거의 없는 장면(예 흰벽)을 비출 때 관성 시스템이 몇 프레임 정도 그런 '부하를 버텨줄' 수 있다. 반대로 장치가 아주 가만히 있을 때 시각 시스템은 관성 시스템보다도 더 안정적인 포즈를 제공할 수 있다. 캘먼 필터는 지속적으로 최고의 품질을 지닌 포즈를 선택하며 그 결과는 안정적인 추적이다.

 

지금까지는 그렇다고 쳐도 흥미로운 점이라면 VIO 시스템이 수년동안 사용돼 왔고 업계에서도 널리 쓰이며 이미 구현되 꽤 많이 돼 시장에도 나와있다는 사실이다. 따라서 애플이 VIO를 사용한다는 사실 자체만으로는 큰 의미가 없다. 살펴봐야 할 것은 시스템이 그토록 강력한 이유다. 

 

ARKit의 두 번째 부분은 간단한 평면 탐지다. 이는 콘텐츠를 얹어놓을 지면을 파악하려면 필요하다. 그렇지 않다면 그 콘텐츠는 끔찍하게도 우주에 둥둥 떠다니는 것처럼 보일 것이다. 이는 광학 시스템에 의해 감지된 특징(데모에서 볼 수 있는 작은 점이나 포인트 클라우드)을 통해 계산되며 알고리즘은 특징을 파악해 어떤 세 점이든 평면을 정의할 수있도록 평균값을 낸다. 이 작업을 충분히 반복하면 실제의 바닥이 어디쯤인지 추정할 수 있다. 이 점들은 스파스 포인트 클라우드를 형성하며 이번 장의 앞부분에서 살펴봤던 광학적 추적이 사용된다. 스파스 포인트 클라우드는 추적에 훨씬 적은 메모리와 CPU시간을 사용하며 관성 시스템의 지원 덕분에 광학 시스템은 적은 수의 포인트로도 충분히 추적할 수 있따. 이것은 밀집된 포인트 클라우드와는 다른 포인트 클라우드의 형태로 극사실화에 가깝게 보일 수도 있다.(연구 중인 일부 추적기는 밀집된 포인트 클라우드로 사용하는데 그렇게 되면 훨씬 더 혼란스럽다)

 

 

***

ARKit이 지닌 두 가지 수수께끼는 "단안렌즈에서 3D를 어떻게 얻는가? 그리고 (줄자를 사용하는 시연에서처럼)메트릭 스케일을 어떻게 얻는가?"이다. 여기의 비결은 정말 뛰어난 성능의 IMU 오차 제거(즉, 데드 레커닝의 예측을 매우 정확하게 만드는 것)이다. 그게 성공하면 다음과 같은 일이 일어난다.

 

단안 렌즈에서 3D를 얻으려면 현재 위치에 대한 양안 시차 계산을 수행할 수 있도록 서로 다른 위치에서 바라본 장면 두 개가 있어야 한다. 이런 방식은 우리의 눈이 3D를 지각하는 방식뿐 아니라 일부 추적기가 스테레오 카메라에 의존하는 이유와 유사하다. 두 대의 카메라가 있는 경우 두 카메라 사이의 거리를 알고 있을 뿐더러 한 프레임을 동시에 캡처할 수 있으므로 계산하기도 쉽다. 하나의 카메라 만으로 계산하려면 한 프레임을 캡처한 다음 이동해서 다시 두 번째 프레임을 캡처해야 한다.

 

IMU의 데드 레커닝을 사용하면 두 프레임 사이에서 이동한 거리를 계산한 다음 일반적인 방식으로 스테레오 계산을 수행할 수 있다. IMU가 충분히 정확하다면 이 두 프레임 사이의 '움직임'은 손을 가만히 두려고 할 때처럼 미세한 근육의 움직임만으로도 포착된다. 때문에 마법처럼 보이는 것이다.

 

메트릭 스케일을 구하고자 시스템은 IMU의 정확한 데드 레커닝에 의존한다. IMU가 제공하는 가속과 시간 측정을 역진 적분해 속도를 계산하고 다시 그 결과를 적분해 IMU 프레임 간에 이동한 거리를 얻을 수 있다. 수학은 어렵지 않다. 진짜 어려운 작업은 IMU에서 오류를 제거해 거의 완벽한 가속도를 측정하는 것이다. 스마트폰을 움직이는 데 걸리는 몇 초 동안 초당 1000회 누적되는 미세한 오차가 곧 30%이상의 메트릭 스케일 오차로 나타날 수 있다. 애플이 이런 오차를 한 자릿수로 낮췄다는 사실은 인상적이다.

 

***
ARKit은 애플이 VIO알고리즘을 센서에 가깝게 연동하고 포즈 계산에서 오류와 불확실성을 주리고자 많은 시간을 보정에 할애할 수 있게 했기 때문에 다른 AR들에 비해 우수하다.

 

***

ARKit은 장면에서 빛의 (간단한) 실시간 추정값을 제공하므로 개발자는 시뮬레이션 된 라이팅을 현실의 빛과 일치하도록 즉각적으로 조정할 수 있을 뿐 아니라 동시에 애니메이션을 일으킬 수도 있다. 

***

AR은 어떻게 3D 구조물과 기하학을 함께 파악할 수 있는가? 예를 들어 내 포켓몬은 스만트폰 화면상에 나타나는 거대 육면체를 닮은 구조물 뒤로 숨거나 맞부딪쳐 튕겨 나올 수 있다는 것을 어떻게 아는가? 실시간 장치 밀도가 높은 3D 재구성, 실시간 3D 장면 분할, 3D 오브젝트 분류, 클라우드 훈련 모델로 로컬 프로세싱을 채우는 것이 여기서의 도전 과제다. 

***

스마트폰이 3D 데이터 구조를 캡처하고 관리하는 동안 지나간 사건을 거슬러 올라가며 파악하려면 AR 클라우드가 필요하다.