논문

하루에도 수만개의 글자를 읽고 있습니다. 하루에도 수백장의 종이를 들춰 읽습니다.
이것은 그 읽기에 대한 일기입니다.

Planar Motion and Hand-Eye Calibration Using Inter-Image Homographies from a Planar Scene

[cite]10.5220/0004293701640168[/cite]

1 INTRODUCTION

로보틱스 분야에서 Simultaneous Localisation and Mapping (SLAM)는 반세기동안 주목받아온 분야입니다. 이 알고리즘은 주변을 탐색하면서 지도를 생성할 뿐 아니라 자기 스스로의 위치 또한 알 수 있게 해 줍니다.

SLAM에서의 mapping 알고리즘에서, 평면(planar)이거나 평면에 가까운 씬(near-planar scene) 환경은 fundamental matrix나 그 비슷한 방법을 사용한 재구성 방법은 degenerate되거나 ill-condition의 경우라고 잘 알려져 있습니다. 반면 평면 호모그래피는 평면 씬에 잘 맞는 알고리즘입니다. 하지만 3D 구조를 만들어내지는 못합니다.

이 논문에서는 픽셀이 정사각형 skew가 없는 한 카메라가 높이가 변하지 않는 상태에서 움직이는 환경을 가정하였습니다. 또한 카메라의 내부 변수는 일정하게 변하지 않고 카메라의 방향 또한 바닥 노멀 벡터에 대한 회전 외에는 변하지 않는다고 가정합니다. 이러한 상황에서 이미지간 호모그래피는 degeneracy를 피할 뿐 아니라 카메라 움직임의 파라미터화를 가능하게 합니다.

이미지간 호모그래피는 유클리디언 변환(Euclidian or, affine transform)이라고 표현되며 모션 파라미터는 QR 분해를 통해 쉽게 복원할 수 있습니다. 이것은 이미지 플레인이 바닥에 평행일 때만 가능합니다. 하지만 틸트가 존재할 경우 이러한 방법을 사용하지 못합니다. 이 논문에서는 하나의 호모그래피 계산을 통하여 움직임과 틸트까지 구하는 방법을 다루고 있습니다.

틸트를 구해야 하는 또 다른 이유는, rectified 이미지만이 올바른게 스티치될 수 있기 때문입니다. visual navigation system에서 지도를 만들 때 rectified 이미지를 사용합니다.

틸트를 계산하는건 또한 partial hand-eye 캘리브레이션 문제로 볼 수 있습니다. hand-eye 캘리브레이션은 원래 로봇 팔과 팔에 붙어있는 카메라간의 관계를 구하는 문제입니다.

2 CAMERA PARAMETRISATION

일단 카메라는 모바일 플랫폼에 잘 고정되어있고 바닥위에 놓여있다고 가정합시다. 즉 카메라는 위치 이동 $t$와 바닥 면에 대하여 회전 각도인 $\varphi $로 표현할 수 있다는 뜻입니다. 틸느는 상수 각도인 $\Psi$$\theta$로 정의됩니다. 이 모든 파라미터들을 계산해 낼 거싱ㅂ니다. 카메라는 plane $ z = 0 $위에서 움직인다고 가정합시다. ground plane은 $ z = 1 $입니다.

두개의 연속된 이미지를 A, B라고 하였을 때 그와 관련된 카메라 행렬은 다음과 같습니다.

$$P_A = R_{\Psi \theta} [I | 0], \\
P_B = R_{\Psi \theta} R_{\varphi} [I | -t]$$

여기서 $R_{\Psi \theta}$는 y축에 대해서 $\theta$만큼 회전 한 뒤, x축에 대해서 $\Psi$만큼 회전한 회전입니다. 또한 $R_{\varphi}$는 z축(바닥의 노멀)에 대한 회전입니다.

이를 이용하여 A에서 B로의 호모그래피 H는 다음과 같습니다.

$$H = \lambda R_{\Psi \theta} R_{\varphi} T R_{\Psi \theta}^T$$

여기서 $\lambda$는 0이 아닌 실수이고,

$$T = \begin{bmatrix} 1 &\ 0 &\ -t_x \\
0 &\ 1 &\ -t_y \\
0 &\ 0 &\ 1 \end{bmatrix}$$

3 TILT ESTIMATION

틸트의 존재는 원근효과를 냅니다. 이것이 가져오는 왜곡이 쉽게 모션 정보를 가져오지 못하게 만듭니다. 만약 틸트 앵글 두가지가 고정이 된다면 이미지를 rectify하고 QR 분해를 통하여 움직임에 관한 $t$$\varphi$를 쉽게 구할 수 있습니다. 따라서 두가지 변수를 없애보고자 합니다.

3.1 Eliminating $\varphi$

앞의 식에서 $\Psi, \theta$를 모션 파라미터들과 분리시켜봅시다.

$$R_{\Psi \theta}^T H R_{\Psi \theta} = \lambda R_{\varphi} T$$

양변 좌측에 $R_{\varphi}^T$를 곱해줌으로써 아래와 같이 변화할 수 있습니다.

$$R_{\Psi \theta}^T M R_{\Psi \theta} = \lambda^2 T^T T$$

$$M = H^T H$$

변환된 식은 symmetric하므로, 좌, 우 변을 각각 L, R이라고 하여봅시다. 이 중 R은 다음과 같습니다.

$$R = \lambda^2 \begin{bmatrix} 1 &\ 0 &\ -t_x \\
0 &\ 1 &\ -t_y \\
-t_x &\ -t_y &\ 1 + t_x^2 + t_y^2 \end{bmatrix}$$

3.2 Iterative Scheme

앞에서 살펴본 것과 같이 L이 포함하고 있는 $R_{\Psi \theta}$은 두가지 회전이 결합된 것이므로, 4가지 항으로 표현할 수 있습니다. 이들을 각각 $c_\Psi = \cos \Psi, s_\Psi = \sin \Psi, c_\theta = \cos \theta, s_\theta = \sin \theta $라고 표현하도록 합시다.

$R_{11}, R_{12}, R_{22}$는 t에 대하여 비종속적이므로, 등식에 따라 결과적으로 $L_{11} - L_{22} = 0, L_{12} = 0 $입니다.

위의 식을 2개의 틸트 파라미터에 대하여 동시에 푸는 대신, 하나는 고정된 상태에서 나머지 파라미터에 대하여 풀고, 역할을 바꾸어 식을 다시 푸는 것을 반복하는 방법으로 풀고자 합니다.

$$R_{\Psi \theta} = \begin{bmatrix} c_\theta &\ 0 &\ s_\theta \\
s_\Psi s_\theta &\ c_\Psi &\ -s_\Psi c_\theta \\
-c_\Psi s_\theta &\ s_\Psi &\ c_\Psi c_\theta \end{bmatrix}$$

알고리즘음 다음과 같습니다.

  1. $ \hat{M} = H^T H $
  2. $ \theta_0 = 0 $
  3. $ R = R_{\Psi \theta} $
  4. for $j = 1, \dots, N$ do
  5. $ \hat{M} = R_{\theta_{j-1}}^T \hat{M} R_{\theta_{j-1}} $
  6. Solve for $\Psi_j$
  7. $ \hat{M} = R_{\Psi_{j-1}}^T \hat{M} R_{\Psi_{j-1}} $
  8. Solve for $\theta_j$
  9. end for
  10. $ R = R_{\theta_0} R_{\Psi_1} \dots R_{\theta_N} $

6과 8 과정에서는 각각 5와 7의 식을 푼 다음 SVD를 이용하여 풀어냅니다.

4 EXPERIMENTS

랜덤하게 생성된 파라미터 들에 대하여 평가하였습니다.

4.1 Path Reconstruction

합성 이미지와 실제 환경에 대해 실험하였으며, 시뮬레이션에서는 노이즈를 추가하였습니다.

4.2 Ill-Conditioned Motion

이동 t가 pure-x 혹은 pure-y translsation이거나 그에 가까울 경우 틸트를 계산하는 것에 실패하였습니다. 자세히 말하면 x의 경우 $\Psi$의 추정에, y의 경우 $\theta$의 추정에 취약한 모양새였습니다.


Add a Comment Trackback