논문

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

Robot Hand-Eye Calibration using Structure-from-Motion

[cite]10.1177/02783640122067372[/cite]

1 Introduction

여기에서 다루는 내용은 로봇의 visual servoing을 하기 위한 내용입니다. 주로 다루게 될 문제는 로봇의 end-effector에 달려있는 카메라와 end-effector 자체간의 지역적 관계를 결정하는 것입니다. 이 관계는 rigid transformation이며, 이는 rotation, translation을 포함하고 있습니다. 이를 hand-eye transformation이라고 하며, 이를 계산하는 것을 hand-eye calibration이라고 합니다.

실제적인 hand-eye calibiration을 위해서는 아래 조건들을 만족해야만 합니다.

  • 별도의 calibration jig 없이 수행되어야 한다.
  • 특별한 혹은 큰 움직임을 요하는 것은 어려우며 또한 피해야 한다.

Hand-eye calibration은 한세기 전부터 연구되어 왔으며, 대부분의 방법은 end-effector 움직임과 카메라 움직임을 euclidean transformation으로 가정하고 문제를 해결해였습니다. End-effector 움직임을 엔코더를 통해 알아낼 수 있다면 카메라는 이미지를 통해 계산해야 할 것 입니다.

End-effector와 카메라의 움직임을 알고 있다는 가정 하에 이 문제를 푸는 여러 방법들이 제안되었습니다. 이들은 각기 다른 표현들을 사용하였지만 공통적으로 (1) 회전에 대해서 minimal parameterization을 행했고, (2) 카메라 움직임을 계산하기 위해 고정된 calibration jig에 대하여 pose estimation을 사용하였습니다.

다른 방법으로는 Wei와 그 동료들이 제안한 방법이 있는데, 별다른 jig 없이 hand-eye calibration과 카메라 캘리브레이션을 동시에 계산하는 것입니다. 하지만 이는 복잡한 non-linear minimization을 필요로 하고, 제한된 움직임을 필요로 합니다.

기존의 방법들에 비해 여기서 소개할 방법은 크게 두가지 다른 아이디어를 가지고 있습니다. 첫번째는 minimal parameterization이 작은 각도의 변화에서는 ill-conditioned로 제대로 작동하지 않는 단점을 극복하기 위해서 특별한 선형대수적인 방법을 사용하였고, 두번째는 카메라 모션은 structure-from-motion 알고리즘을 통하여 별도의 calibration jig 없이 계산할 수 있도록 하였습니다.

2 Background

기본적인 notation을 정의하고 hand-eye calibratio의 전통적인 표현에 대해서 먼저 소개하고자 합니다.

2.1 Notation

Rigid transformations은 homogeneous 행렬로 다음과 같이 나타낼 수 있습니다.

$$\begin{bmatrix} &\ R &\ &\ t \\
0 &\ 0 &\ 0 &\ 1 \end{bmatrix}$$

R은 3 * 3 크기의 회전 행렬이며 t는 3 * 1 의 이동 벡터입니다. 이 변환은 종종 $ (R, t) $로 묶어서 표현하기도 합니다.

선형식에서는 선형 연산자 $vec$과 tensor product, 즉 Kronecker product를 사용할 것입니다. $vec$는 행렬을 재정렬하여 하나의 벡터로 나타낸 것입니다.

$$vec(M) = ( M_{11}, \dots, M_{1n}, \dots, M_{mn})^T$$

Kronecker product는 $\otimes$로 표현합니다.

$$M \otimes N = \begin{bmatrix} M_{11} N &\ \dots &\ M_{1n}N \\
\vdots &\ \ddots &\ \vdots \\
M_{m1} N &\ \dots &\ M_{mn} N \end{bmatrix}$$

2.2 Hand-eye problem formulation

전통적인 방법과 마찬가지로 카메라의 움직임을 $ A = (R_a, t_a) $로 표현하고자 합니다. End-effector는 $ B = (R_b, t_b) $로 표현합니다. 둘을 결합하여 hand-eye transformation은 $ X = (R_x, t_x) $가 됩니다. 이는 곧 다음 homogeneous 행렬 곱을 이뤄냅니다.

$$AX = XB$$

여기서 A는 카메라를 통해 추정할 것이고, B는 알고 있다고 가정합니다. 최종적으로 구하여야 하는 값은 X입니다.

위의 식은 각 움직임 i에 대하여 2개로 분리될 수 있습니다.

$$R_{ai} R_x = R_x R_{bi}$$

$$R_{ai} t_x + t_{ai} = R_x t_{bi} + t_x$$

Tsai와 Lenz가 제안한 방법에서는 첫번째 식을 least square minimzation으로 풀어내어 회전에 축과 각도를 계산해냈습니다. $R_x$이 계산되고 나면 두번째 식 역시 linear least squares 방법으로 계산해 낼 수 잇습니다.

하지만 두단계로 나눠진 풀이 때문에 첫번째에서 생긴 오차가 두번째 풀이까지 영향을 주기 때문에 이를 피해기 위해 quaternions을 이용한 non-linear minimization 방법 또한 제안되었습니다.

2.3 Computing the camera motions

기존의 방법들 또한 이미지로부터 카메라 움직임을 계산하였습니다. 먼저 2D에서 3D로의 대응점을 찾아냅니다. 여기서 3D점은 calibration jig의 지점들이며 이들 지점들이 이미지 i로 투영된 점들입니다. 다음 이로부터 내부 카메라 파라미터를 계산하고 카메라의 자세 $P_i = (R_i, t_i)$를 계산합니다. 마지막으로 i-1, i 이미지에 대한 카메라 움직임 $A_i = (R_{ai}, t_{ai})$를 다음 조합을 통해 계산합니다.

$$A_i = (R_i R^T_{i-1}, t_i - R_i R^T_{i-1} t_{i-1})$$

한편 모든 카메라가 움직이는 동안 모든 이미지를 동시에 고려할 수 있다면 multi-frame structure-from-motion을 사용할 수 있습니다. 이 방법의 장점은 미리 알고 있는 3D 물체가 없어도 된다는 것입니다. 보통은 카메라 내부 변수에 대해 미리
캘리브레이션되어있다고 가정하고 출발하며, 씬에 대해서 구조의 재구성은 가능해지나 알지 못하는 어떤 scale factor에 대하여 모션이 정의되므로 주의하여야 합니다. 따라서 카메라 움직임은 다음과 같이 표현할 수 있습니다.

$$A_i(\lambda) = \begin{bmatrix} &\ R_{ai} &\ &\ \lambda u_{ai} \\
0 &\ 0 &\ 0 &\ 1 \end{bmatrix}$$

여기서 $u_{ai}$는 카메라 움직임에 평행한, $t_{ai} = \lambda u_{ai}$인 유닛 벡터입니다. 따라서 보통은 첫번째 움직임에 대한 스케일을 기준으로 $ \lambda = ||t_{a1}||$ 를 정의합니다.

Structure-from-motion 방법은 affine 카메라 모델을 사용하여 행렬 factorization 방법을 통하여 간단하게 복원할 수 있습니다. 하지만 affine 모델은 perspective 모델의 1차 근사 값이기 때문에 euclidean 카메라 움직임 또한 근사 값을 얻을 수밖에 없습니다.

따라서 non linear 방법의 정확도를 가지면서도 affine 방법에 기반한 새로운 알고리즘을 제안하고자 합니다.

3 A new linear formulations

이제 hand-eye calibratino의 식을 카메라 움직임을 계산하기 위하여 euclidena 재구성을 할 수 있도록 변화시키고자 합니다. 이는 작은 회전에 대해서도 해를 구할 수 있는 방법입니다.

3.1 Using structure-from-motion

앞에서 살펴본 것과 같이 SFM을 사용하면 알지 못하는 스케일에 대하여 식이 구성됩니다.

$$A_i (\lambda)X = XB_i$$

그리고 이는 두개의 식으로 분리됩니다.

$$R_{ai} R_x = R_x R_{bi} \\
R_{ai} t_x + \lambda u_{ai} = r_x t_{bi} + t_x$$

여기서 우리가 구하고자 하는 값은 $R_x, t_x, \lambda$입니다.

3.2 Linear formulation

새로운 수식은 Sylvester equation $UV + VW = T$에서 영감을 받았습니다. 이는 종종 다음과 같은 수식으로 표현됩니다.

$$(U \otimes I + I \otimes W ) vec(V) = vec(T)$$

또한 Kronecker product의 한 성질로,

$$vec(CDE) = (C \otimes E^T) vec(D)$$

가 있습니다.

이를 둘로 나누었던 위의 식에 대입하면 최종적으로 다음과 같은 식으로 정리할 수 있습니다.

$$\begin{bmatrix}
I_9 - R_{ai} \otimes R_{bi} &\ 0_{9 \times 3} &\ 0_{9 \times 1} \\
I_3 \otimes (t_{bi}^T) &\ i_3 - R_{ai} &\ -u_{ai} \end{bmatrix} \begin{bmatrix} vec(R_x) \\ t_x \\ \lambda \end{bmatrix} =
\begin{bmatrix} 0_{9 \times 1} \\ 0_{3 \times 1} \end{bmatrix}$$

이 식을 기본으로 모든 문제를 풀어나갈 것입니다.

3.3 Algebraic analysis

이전에 연구된 것과 같이 평행하지 않는 회전 축을 가지는 두개의 움직임이 있으면 hand-eye transformation을 계산할 수 있다고 합니다. 여기서 소개하는 방법은 이 조건을 만족하기도 하지만 부분적인 조건하에서도 partial calibration이 가능하다는 것을 설명하고자 합니다.

즉 end-effector의 움직임을 각각 pure translations, pure rotations, planar motions, generatl motion으로 나누어 살펴볼 것입니다.

3.3.1 Pure translations

End-effector의 움직임이 pure-translation일 경우 $R_{bi} = I_3$이 되어 수식은 $ t_{ai} = R_x t_{bi}$가 됩니다. 따라서 카메라 움직임의 크기는 end-effector의 크기와 같습니다.

  • Proposition 1 : 3개의 독립적인 pure translation이 존재한다면 $R_x$와 scale factor $\lambda$를 구할 수 있습니다. translation은 관측되지 않습니다.

수식의 정리를 통해 $R_x$$\lambda$를 구하는 방법을 보여주고 있습니다. 자세한 내용은 논문을 참고하기 바랍니다.

  • Proposition 2: 최소한 2개의 독립적인 pure translation이 있다면 $R_x$$\lambda$를 구할 수 있습니다.

3.3.2 Pure rotations

이 때에는 end-effector가 $t_{bi} = 0 $인 상태입니다.

  • Proposition 3 : 로봇의 end-effector가 평행이지 않은 축에 대하여 최소 2개의 pure rotation이 있다면 $R_x$과 알지 못하는 스케일에 대한 $t_x / \lambda $에 대한 translation을 계산할 수 있습니다. 그리고 이 둘은 분리됩니다.

3.3.3 Planar motions

차와 같은 로봇들은 평면 위에서 움직입니다. 이러한 경우 로봇과 카메라의 회전은 같은 축 $n_b$을 가지며, 이것은 $R_x n_b = n_a$이고 움직임 평면에 orthogonal 합니다.

  • Lemma 2 : Identity rotation이 아니고 zero pure translation이 아니라면 $R_x$$\lambda$를 계산할 수 있다. 하지만 translation은 카메라 움직임 평면의 노멀에 따르는 알지 못하는 높이 $\alpha$에 대해서만 정의된다.

  • Proposition 4 : 두개의 planar 움직임은 다음 조건을 만족할 경우, $R_x$와 스케일 팩터 $\lambda$를 계산할 수 있습니다.

    • 두개의 움직임이 linearly 독립적인 pure translation일 때
    • 둘 중 하나의 움직임이 0이 아닌 pure translation일 때
    • 두 움직임이 identity rotation이 아니고 $(I_3 - R_{b2})t_{b1} - (I_3 - R_{b1})t_{b2} \neq 0 $ 일 때

3.3.4 The general case

  • Proposition 5 : 로봇의 end-effector가 서로 평행하지 않는 2개의 독립적인 general 움직임을 가질 경우 $(R_x, t_x)$를 복원할 수 있으며 $\lambda$ 또한 계산이 가능합니다.

4 Experiments

기존의 axis/angle 방법 M1, dual quaternion 방법 M2, non-linear minimization 방법 M3, 제안하는 새로운 방법 M4에 대해 비교하였습니다.

4.1 Error measurement

Translation에 대한 오류는 $ ||\hat{t} - t || / || t || $로 상대 오차를 측정하였습니다. 회전에 대해서는 quaternion norm을 사용하여 $ || \hat{q} - q ||$로 측정하였습니다.

4.2 Simulations

시뮬레이션 상황에서 실험하였습니다.

4.2.1 Simulation procedure

먼저 Roll-Pitch-Yaw의 각도와 translation를 가우시안을 통하여 무작위로 선택합니다. 두번째로 비슷한 방법으로 로봇의 움직임을 정의합니다. 세번째로 움직임에 노이즈를 추가합니다. 마지막으로 hand-eye calibration을 수행합니다.

4.2.2 Inserting noise

카메라 translation에 노이즈를 추가하였습니다. 노이즈는 평균 0, 분산 1을 갖는 노이즈를 생성한 다음 scalar $v$를 곱하고 translation의 크기를 곱하여 생성하였습니다. 회전에 대해서는 아무 각도에 대해 $ (1 + vr)$을 곱하여 생성하였습니다. $r$은 가우시안 노이즈입니다.

4.2.3 Robustness to noise

scalar v를 0에서 20%까지 조러해가면서 노이즈에 대해 테스트해보았습니다. 이동에 대해서는 최대 1m, 회전은 180도까지 허용하였을 때, M1, M4가 좋은 결과를 보였습니다.

두번째로 이동에 대해서는 2cm, 회전에 대해서는 10도까지의 노이즈를 추가하였을 때에도 M4는 노이즈에 적은 영향을 받았습니다.

4.2.4 Influence of motion number

v = 0.01로 고정하고 오차의 크기는 1cm, 10도까지로 한 상태에서 캘리브레이션 움직임의 수를 2에서 15까지로 조절하였습니다. 역시 M4가 높은 정확도를 보여주었습니다.

4.3 Experiments on real data

실제 ground-truth를 알 수 없기 때문에 RMS 에러를 측정하여 판단하였습니다. M4가 가장 적은 오차를 보여주었습니다.


Add a Comment Trackback