AR에 눈을 뜨다, 마커리스 Hand-Eye Calibration 핵심 원리
드디어 컴퓨터 비전 개론 강의의 마지막 주제, 증강현실(Augmented Reality, AR)다. AR은 현실 세계 위에 가상의 정보를 자연스럽게 겹쳐 보여주는 매력적인 기술이지만, 이 '자연스러움' 뒤에는 현실과 가상 세계를 정확히 일치시키기 위한 정교한 기술, 즉 정렬(Registration)이 숨어있다. 마치 영화 속 아이언맨 슈트의 HUD처럼, 가상의 정보가 현실의 특정 위치에 딱 맞아떨어지려면 카메라가 지금 어디서 무엇을 보고 있는지(카메라의 위치와 방향, 즉 pose)를 기가 막히게 알아내야 한다.
초기 AR 시스템들은 특정 마커(marker)를 인식해 카메라의 pose를 추정했지만, 마커를 항상 사용할 수 있는 것도 아니고, 때로는 미관을 해치기도 한다. 그래서 등장한 것이 바로 카메라 자체의 움직임이나 위치를 외부 센서(예: 광학 트래커, 로봇 팔 엔코더)를 통해 추적하고, 이를 바탕으로 카메라 pose를 알아내는 방식이다. 이때, "카메라"와 이 "외부 센서" 사이의 보이지 않는 공간적 관계를 정확히 파악하는 과정이 필수적인데, 이것이 바로 오늘 우리가 깊이 파고들 Hand-Eye Calibration의 핵심이다! 이 기술은 마커 없이도 AR 시스템이 정밀하게 현실을 인지하고 가상을 덧씌울 수 있게 하는, 그야말로 AR의 '눈'을 뜨게 하는 마법과도 같다.
이번 시간에는 복잡한 수식의 향연보다는 Hand-Eye Calibration의 핵심 원리(high-level concept)와 주요 방법론들이 어떤 아이디어에 기반하는지, 그리고 왜 중요한지에 대해 집중적으로 이야기 나눠보겠다.
1. Hand-Eye Calibration, 그것이 알고 싶다! 🤔
Hand-Eye Calibration이란 무엇일까? 가장 간단하게 정의하자면, "손(Hand, 로봇 팔 끝단이나 외부 위치 센서)과 눈(Eye, 카메라) 사이의 고정된 3차원 공간에서의 상대적인 위치 및 방향 관계(변환 행렬 X)를 찾아내는 과정"이다.
- 예를 들어, 로봇 팔의 끝에 카메라가 매달려 있다고 생각해보자. 로봇 베이스를 기준으로 로봇 팔 끝(손)이 어디 있는지는 로봇의 엔코더 값을 통해 알 수 있다. 하지만 우리가 진짜 궁금한 것은 카메라(눈)가 어디서 세상을 보고 있느냐이다. 이때 로봇 팔 끝(손)과 카메라(눈) 사이의 정확한 기하학적 관계(X)를 안다면, 로봇 팔 끝의 정보로부터 카메라의 pose를 계산해낼 수 있다.
- 또 다른 예는 카메라 근처 어딘가에 위치 추적 센서의 일부(마커 등)가 부착되어 있는 경우이다. 추적 시스템은 이 센서 마커의 위치와 방향을 알려주지만, 카메라 자체의 위치와 방향을 직접 알려주지는 않는다. 여기서도 센서 마커(손)와 카메라(눈) 사이의 변환 X를 알아내는 것이 관건이다.
왜 이 X가 그렇게 중요할까? 외부 센서는 카메라의 움직임을 직접적으로 알려주지 않거나, 혹은 센서가 인지하는 좌표계와 카메라 좌표계가 다르기 때문이다. 하지만 이 둘 사이의 고정된 변환 관계 X만 정확히 알고 있다면, 센서가 측정한 값(예: 센서의 움직임 변화량 A)을 이용해 카메라가 세상을 보는 방식의 변화(B) 또는 카메라의 절대적인 pose를 추론해낼 수 있다. 즉, X는 서로 다른 두 좌표계를 연결하는 핵심 열쇠인 셈이다!
기본적인 접근법은 간단하다. 시스템을 여러 다른 자세(pose)로 움직인다. 각 자세마다 외부 센서가 감지한 정보(예: 이전 자세 대비 현재 자세의 변환 A)와, 같은 시간 동안 카메라가 감지한 정보(예: 카메라가 본 특정 패턴의 이전 자세 대비 현재 자세의 변환 B)를 한 쌍으로 수집한다. 이렇게 수집된 여러 쌍의 (A, B) 데이터 속에 숨어있는 미지의 X를 수학적으로 찾아내는 것이 Hand-Eye Calibration의 여정이다.
2. Hand-Eye Calibration의 주요 접근법들 🛠️
Hand-Eye Calibration 문제를 푸는 방법은 여러 가지가 있지만, 여기서는 세 가지 주요 방법론의 핵심 아이디어를 살펴보겠다. 각 방법론은 "어떻게 하면 X를 가장 잘 찾을 수 있을까?"라는 질문에 서로 다른 해법을 제시한다.
방법 1: AX = YB 형태 (Y를 먼저 구하고 X를 푸는 방식)
- High-level Concept: 이 방법은 마치 두 개의 중요한 미지수(X와 Y)를 풀어야 하는데, 그중 하나(Y)를 먼저 비교적 쉽게 풀 수 있다면, 그 결과를 이용해서 나머지 하나(X)를 푸는 전략과 비슷하다. 여기서 Y는 보통 캘리브레이션 보드(기준 패턴)와 그 보드에 부착된 센서 마커 사이의 변환 관계를 의미한다.
- 핵심 아이디어:
- 먼저, 캘리브레이션 보드 좌표계와 보드에 부착된 센서 마커 좌표계 사이의 변환 Y를 알아낸다. (예를 들어, 센서 프로브를 이용해 보드 위의 특정 점들과 센서 마커 기준의 해당 점들의 3D 좌표를 측정하여 Paired-Point Registration으로 Y를 계산한다.)
Solving Y using OPA - 그다음, 시스템을 움직이면서 센서의 움직임(A)과 카메라가 본 보드의 움직임(B)을 측정한다.
- 이미 알고 있는 Y와 측정된 A, B를 이용하여
AX = YB
(또는 유사한 형태의 방정식)를 만족하는 X를 계산한다.Solving X using OPA
- 먼저, 캘리브레이션 보드 좌표계와 보드에 부착된 센서 마커 좌표계 사이의 변환 Y를 알아낸다. (예를 들어, 센서 프로브를 이용해 보드 위의 특정 점들과 센서 마커 기준의 해당 점들의 3D 좌표를 측정하여 Paired-Point Registration으로 Y를 계산한다.)
- 간단 요약: "센서와 카메라 사이의 관계 X를 찾기 위해, 먼저 보조적인 기하 관계 Y를 해결하고, 그 정보를 활용해 X를 구한다."
- 특징: 개념적으로는 과정을 나누어 생각할 수 있지만, 실제 정확도 측면에서는 다른 방법들에 비해 다소 떨어질 수 있다고 알려져 있다. Y를 구하는 과정에서의 오차가 X 계산에 영향을 줄 수 있기 때문이다.
방법 2: AX = XB 형태 (가장 보편적인 방식)
- High-level Concept: 이 방법은 Hand-Eye Calibration 문제의 가장 고전적이고 보편적인 해법으로, "손(센서)의 움직임(A)과 눈(카메라)의 움직임(B) 사이에는 어떤 고정된 관계(X)가 있어서, 손이 특정 방식으로 움직이면 눈도 그에 상응하는 특정 방식으로 움직일 수밖에 없다"는 아름다운(?) 원리에 기반한다. 여기서 X가 바로 센서 좌표계와 카메라 좌표계 사이의 변환이다.
- 핵심 아이디어:
- 카메라가 부착된 로봇 팔이나, 카메라와 함께 움직이는 센서를 여러 다른 자세로 움직인다.
- 두 개의 서로 다른 시점(자세 1과 자세 2) 사이에서, 센서가 얼마나 움직였는지(변환 A)를 측정한다. (예: 자세 1일 때 센서의 pose를
A1
, 자세 2일 때 센서의 pose를A2
라고 하면, A는A1^-1 * A2
와 같이 계산된다. 즉, 자세 1에서 자세 2로 가기 위한 센서의 상대적인 움직임이다.) - 같은 두 시점 사이에서, 카메라가 바라보는 세상(보통 고정된 캘리브레이션 패턴)이 어떻게 변했는지(변환 B)를 측정한다. (예: 자세 1일 때 카메라가 본 패턴의 pose를
B1
, 자세 2일 때 패턴의 pose를B2
라고 하면, B는B1 * B2^-1
와 같이 계산된다. 즉, 자세 1에서 본 패턴을 자세 2에서 본 패턴으로 만들기 위한 상대적인 움직임이다.Building AX=XB - 이렇게 얻은 여러 쌍의 (A, B)에 대해,
AX = XB
라는 근본적인 행렬 방정식이 성립한다. 이 방정식을 수학적으로 풀어 미지의 X (회전 성분RX
와 이동 성분tX
)를 찾아낸다. (보통 회전 부분을 먼저 풀고, 그 결과를 이용해 이동 부분을 푼다.)
- 간단 요약: "센서가 움직인 여러 방식(A들)과 그때마다 카메라가 세상을 본 방식의 변화(B들)를 관찰하여, 그 둘을 항상 일관되게 연결하는 숨겨진 기하학적 고리 X를 찾아낸다."
- 특징: 로봇 공학 분야에서 매우 널리 사용되며, 별도의 센서 마커 Y 등을 먼저 구할 필요가 없어 상대적으로 과정이 간단하면서도 꽤 정확한 결과를 준다.
- 한계점:
- 카메라 자체를 움직여야 하므로, 카메라가 무겁거나 크면(예: 현미경, 내시경) 사용자의 손떨림 등으로 인해 카메라가 촬영한 이미지에서 특징점(예: 체스보드 코너)을 부정확하게 검출할 수 있고, 이는 X 계산의 오차로 이어진다.
- 카메라를 크게 움직여야 충분한 정보를 얻을 수 있는데, AR 응용에서 사용되는 외부 위치 센서의 경우 측정 범위가 제한적이라 카메라의 큰 움직임을 추적하지 못할 수 있다.
방법 3: AX = BYC 형태 (카메라 대신 패턴을 움직이는 방식)
- High-level Concept: 이 방법은
AX = XB
방식의 한계점을 극복하기 위해 제시된 아이디어로, 특히 AR 환경에서 위치 센서를 사용할 때 더 정확한 결과를 얻기 위해 고안되었다. 핵심은 "카메라나 센서는 가만히 두거나 최소한으로 움직이고, 대신 카메라가 보고 있는 캘리브레이션 패턴을 적극적으로 움직여서 필요한 데이터를 얻자"는 것이다. 캘리브레이션 패턴은 보통 카메라나 로봇 팔보다 훨씬 가볍고 작아서 더 정밀하고 안정적으로 움직일 수 있다.
- 핵심 아이디어:
- 카메라와 외부 센서는 가능한 한 고정된 상태를 유지한다.
- 대신, 카메라가 바라보고 있는 캘리브레이션 패턴을 여러 다른 위치와 자세로 움직인다.
- 이때, 센서의 움직임(A, 만약 센서와 패턴 위에 각각 마커가 있다면 이들 사이의 상대적 움직임), 카메라가 관찰한 캘리브레이션 패턴의 움직임(B), 그리고 카메라 좌표계와 패턴 좌표계 사이의 변환(C) 등의 정보를 활용한다.
- 이 정보들을
AX = BYC
(또는 이와 유사한 형태의 방정식, 변수들의 정확한 의미는 시스템 구성에 따라 달라질 수 있음)라는 관계식에 넣어, 우리가 원하는 센서-카메라 간 변환 X와, 부가적으로 패턴과 센서 마커(또는 카메라와 패턴) 간의 변환 Y (또는 C)를 동시에 추정한다.
- 간단 요약: "무거운 카메라 대신 가벼운 패턴을 정교하게 움직여서 더 깨끗하고 정확한 데이터를 얻고, 이를 통해 센서-카메라 관계(X)와 경우에 따라 패턴 관련 관계(Y 또는 C)까지 한 번에 알아낸다."
- 특징:
- 패턴을 움직임으로써 손떨림과 같은 노이즈를 줄이고 데이터 획득의 정확도를 높일 수 있다.
AX=XB
방식보다 상대적으로 작은 움직임 범위에서도 다양한 시야각 변화를 만들어낼 수 있어, 측정 범위가 제한된 위치 센서 사용 시 유리하며 센서 오차를 줄이는 데 도움이 된다.- 실제 실험 결과에서도
AX=BYC
방식이AX=XB
방식에 비해 재투영 오차(Re-projection error)가 감소하고 더 안정적인 캘리브레이션 결과를 보여주는 것으로 보고된다.
3. Hand-Eye Calibration, AR 시스템에 날개를 달다! 🧚
자, 이렇게 고생해서 Hand-Eye Calibration으로 센서와 카메라 사이의 비밀스러운 관계 X를 알아냈다고 치자. 이것이 실제 AR 시스템에서는 어떻게 구현될까?
핵심은, 일단 X값만 정확히 알고 있으면, 그 다음부터는 외부 위치 센서로부터 실시간으로 얻어지는 센서의 자세 정보(예: 현재 센서의 월드 좌표계 기준 pose A_world_sensor
)와 이 X를 수학적으로 착착 조합하기만 하면, 현재 카메라의 정확한 3D 공간상의 위치와 방향(예: A_world_camera = A_world_sensor * X
)을 마커 없이도 실시간으로 계산해낼 수 있다는 것이다!
AX = XB
방법을 사용했다면, 센서의 현재 pose (또는 이전 pose 대비 변화량 A)를 알 때, X를 이용해 카메라의 pose (또는 이전 pose 대비 변화량 B)를B = X^-1 * A * X
(만약 A, B가 절대 pose라면,Pose_cam = Pose_sensor * X
) 와 같이 바로 계산할 수 있다.AX = BYC
방법을 사용했다면, X와 함께 Y (또는 C) 값도 얻게 되는데, 이후 센서의 pose 정보와 이 Y (또는 C) 값, 그리고 X를 적절히 조합하여 최종적인 카메라의 pose를 얻게 된다.
이렇게 실시간으로 계산된 카메라의 정확한 pose 정보가 있으면, 드디어! 가상의 3D 객체를 현실 공간의 원하는 위치에, 마치 원래부터 그 자리에 있었던 것처럼 흔들림 없이, 아주 정확하게 증강시킬 수 있게 되는 것이다. 이는 단순히 게임이나 엔터테인먼트를 넘어, 수술 중 환자의 몸 내부에 정확한 위치에 가이드라인을 보여주는 수술 네비게이션, 로봇이 주변 환경을 정확히 인지하고 작업을 수행하는 로봇 제어 등 고도의 정밀함이 요구되는 다양한 AR 응용 분야에서 그 진가를 발휘한다.
결론
Hand-Eye Calibration은 증강현실 시스템이 마커라는 보조 수단 없이도, 외부 센서의 도움을 받아 스스로의 '눈', 즉 카메라의 위치와 방향을 정확하게 파악할 수 있도록 하는 핵심 기술이다. AX = XB
와 같은 보편적인 방법부터, AX = BYC
처럼 특정 환경(예: 위치 센서 사용 AR)에서의 정확도와 안정성을 높이기 위한 방법까지, 다양한 접근법들이 연구되고 활용되고 있다.
어떤 방법을 사용하든, 이 정밀한 캘리브레이션 과정이야말로 현실과 가상 세계 사이의 매끄러운 연결을 가능하게 하며, 사용자에게 더욱 몰입감 있고 정확한 AR 경험을 제공하는 굳건한 기반이 된다. 컴퓨터 비전의 여정 마지막에서 만난 이 Hand-Eye Calibration은, 앞으로 우리가 만들어갈 더욱 발전된 AR 시스템의 미래를 밝혀주는 중요한 등불이 될 것이라 믿어 의심치 않는다.
추천글:
[컴퓨터비전개론] Overview of 3D Computer Vision - Homogeneous Transformation Matrix (HTM)
[컴퓨터비전개론] Camera Calibration - Intrinsic & Extrinsic Parameters, Homography