[SLAM] Quaternions
Remind
- rotation matrix는 3 자유도를 9개의 요소를 통해 표현한다.
오일러 각도와 rotation vector는 compact하지만 singularity problem을 겪는다.
- 복소수 \(\mathbb{C}\)
- 2차원 복소수 평면의 벡터를 표현하기 위해 사용
- unit 복소수를 통한 복소수 곱은 2D 평면 상의 회전을 표현할 수 있음
- 예를 들어, 복소수 \(i\)의 곱은 복소수 벡터를 시계 반대방향으로 90도 회전하는 것과 같음
- 이와 비슷하게 3차원 회전을 표현할 때는 quaternion을 사용
- Quaternion
- Hamilton에 의해 발견되었으며, 복소수에서 연장된 개념이다.
- compact하며 not singular함
- quaternion을 복소수와 비교하면 더 쉽게 이해할 수 있다.
- 예를 들어, 복소수 평면의 벡터를 \(\theta\)만큼 회전할 때, 이 복소수 벡터에 극좌표로 표현된 \(e^{i\theta}\)만큼 곱한다.
- 유명한 오일러 방정식으로 적어보면 다음과 같다.
- 수식 2.19는 unit 복소수로, 2차원에서 회전은 unit 복소수로 표현될 수 있다.
이와 비슷하게, 3차원 회전은 unit quaternion을 표현될 수 있다.
quaternion \(q\)는 하나의 real part와 세가지 imaginary parts로 이루어져 있다. 수식 2.20처럼 실수를 앞에 작성하고, 세가지 허수를 뒤에 작성할 수 있다.
- scalar와 vector를 사용하여 quaternion을 표현할 수 있다.
- s: quaternion real part, v: quaternion imaginary parts
- quaternion의 imaginary parts가 0이면, real quaternion이라 불림
- quaternion의 real part가 0이면, imaginary quaternion이라 불림
- 3차원 공간의 회전을 표현하기 위해 unit quaternion을 사용할 수 있다.
- 복소수 \(i\)의 곱은 90도를 회전하는 것과 같다. 그렇다면 quaternion에서도 \(i\)의 곱이 \(i\) 축으로 90도 회전하는 것과 같을까? 그러면 \(ij=k\)는 \(i\)축으로 90도 회전한 뒤, \(j\)축으로 90도 회전하면 \(k\)축으로 90도 회전하는 것과 같다는 의미인가?
- 답은 NO… \(ij=k\)를 만족하려면 \(i\)의 곱은 180도 회전과 같아야 한다. 또한 \(i^2=-1\)의 의미는 \(i\)축으로 360도 회전하면 반대 방향이 얻어진다는 것이다.
- 조금 이해가 잘 안 될 수 있지만 최소한 우리는 unit quaternion이 3차원 회전을 표현할 수 있다는 걸 안다. 우선 quaternion의 properties와 operations에 대해 알아보자.
Quaternion Operations
- Quaternion은 복소수와 유사하게 덧셈, 뺄셈, 곱셈 등 연산을 할 수 있다.
- 두 quaternions \(q_a, q_b\)가 있을 때, \([s_a, v_a]^T\)로 표현된다. 혹은 다음처럼 표현할 수 있다.
이때 연산은 아래처럼 표현된다.
Use Quaternion to Represent a Rotation
- 한 point의 rotation을 표현하기 위해 quaternion을 사용할 수 있다. 3차원 point \(p=[x,y,z]^T\)와 이를 rotation한 \(p'\)를 단위 quaternion q로 표현해보자.
- 만약 matrix로 표현하면, \(p'=Rp\)가 될 것이다.
- 3차원 vector로 표현하려면, 우선 3차원 point를 imaginary quaternion으로 확장한다.
- 세 좌표를 imaginary part로 두고, real part는 0으로 둔다. 그러면 rotation된 \(p'\)는 다음처럼 표현될 수 있다.
- 이때 곱은 quaternion multiplication이며, 결과도 quaternion이다.
- \(p'\)의 imaginary part를 취하면 rotation 이후 좌표를 얻을 수 있다.
- quaternion multiplication 참고
Conversion of Quaternions to Other Rotation Representations
- unit quaternion으로도 rotation을 표현할 수 있고, rotation matrix나 rotation vector로도 표현할 수 있다. 그러면 quaternion과 rotation vector/matrix 간의 conversion에 대해 알아보자.
Rotation angle
- 우선 회전 각도를 구해야 한다.
- 우리는 quaternion multiplication이 matrix multiplication으로 표현될 수 있다는 걸 안다. 예를 들어, 단위 quaternion \(q=[s,v]^T\)일 때 수식 2.34처럼 정의한다.
- \(+\)와 \(\oplus\)는 quaternion을 4X4 matrix로 매핑해준다. 이를 통해 수식 2.35처럼 quaternion multiplication을 matrix 형태로 쓸 수 있다.
- \(v_1^{\land} v_2\)\(=v_1 \times v_2\)이다. 이때 \(v_1^{\land}\)는 \(v_1\)의 skew-symmetric matrix.
- 왼쪽 \(q_1^{+}q_2\)는 matrix multiplication이고 오른쪽 \(q_1q_2\)는 quaternion multiplication이다.
- \(\oplus\)도 마찬가지로 수식 2.36을 얻을 수 있다.
- 수식 2.33과 수식 2.36을 통해 유도하면 수식 2.37을 얻을 수 있다.
- \(q^{+}\)과 \(q^{\oplus}\)를 기반으로 수식 2.38을 얻을 수 있다.
- \(p\prime\)과 \(p\)는 둘 다 imaginary quaternion이기 때문에, 수식 2.38의 matrix의 오른쪽 하단은 quaternion에서 rotation matrix으로 가는 transformation formula를 나타낸다.
- quaternion에서 rotation vector로 가는 transformation formula를 얻기 위해서 수식 2.39의 양변에 trace를 취한다.
- 수식 2.17을 바탕으로 수식 2.41을 도출할 수 있다.
- 수식 2.41의 양변에 cosine을 씌우면 수식 2.42가 나오게 된다. 이로부터 수식 2.43을 유도할 수 있다.
Rotation axis
- 앞서 살펴본 바와 같이, rotation 축은 rotation 전후로 바뀌지 않는다. (\(Rn=n\))
- Quaternion의 imaginary part를 $v=[v_1, v_2, v_3]$라고 하면,
- 따라서 \(q\)의 imaginary part \(v\)는 rotation axis \(n\)이라고 할 수 있다.
- 위는 \(q\)가 단위 quaternion일 때 얻은 결과이고, 모든 quaternion에 대해서는 normalize를 통해 일반화가 가능하다.
- 결과적으로 quaternion에서 rotation으로의 변환은 다음처럼 정리할 수 있다.
- \(\theta=2\arccos{s}\)이므로 \(s=\cos{\frac{\theta}{2}}\)이고, \(s^2+v^2=1\)이므로 \(v\)의 크기는 \(\sin{\frac{\theta}{2}}\)
- 따라서 \(v\)의 크기인 \(\sin{\frac{\theta}{2}}\)로 normalize하는 것
This post is licensed under CC BY 4.0 by the author.