Post

[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}\)만큼 곱한다.
    • 유명한 오일러 방정식으로 적어보면 다음과 같다.

image

  • 수식 2.19는 unit 복소수로, 2차원에서 회전은 unit 복소수로 표현될 수 있다.
  • 이와 비슷하게, 3차원 회전은 unit quaternion을 표현될 수 있다.

  • quaternion \(q\)는 하나의 real part와 세가지 imaginary parts로 이루어져 있다. 수식 2.20처럼 실수를 앞에 작성하고, 세가지 허수를 뒤에 작성할 수 있다. image

    • \(i, j, k\)는 quaternion의 세가지 imaginary parts이다.
    • imaginary parts는 수식 2.21의 관계를 만족한다. image

    • i, j, k는 세가지 축이며 스스로 제곱하면 복소수와 같고 서로 곱해질 때는 외적과 같음
    • 수식 2.21에서 다음처럼 \(ijk=-1\)을 도출할 수 있음
    • \[\begin{align*} i \cdot j \cdot k &= (i \cdot j) \cdot k \quad \\ &= k \cdot k \quad \\ &= -1 \quad \end{align*}\]
  • scalar와 vector를 사용하여 quaternion을 표현할 수 있다. image
    • 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\)로 표현된다. 혹은 다음처럼 표현할 수 있다. image

이때 연산은 아래처럼 표현된다.

  1. addition과 subtraction image

  2. multiplication
    • \(q_a\)의 각 요소와 \(q_b\)의 각 요소의 곱이다. image
    • vector form으로는 scalar form보다 간단하게 표현할 수 있다. image
  3. Length image
    • product의 length는 수식 2.26처럼 length의 product와 같다는 것이 증명되었다. 따라서 unit quaternion은 다른 unit quaternion과 곱해졌을 때 단위 길이를 유지하게 된다. image
  4. Conjugate
    • quaternion의 conjugate는 imaginary parts의 음수이다. 켤레 quaternion끼리 곱해지면 real quaternion을 얻을 수 있다. real part \(s^2+v^Tv\)는 quaternion의 길이 \(s^2+x^2+y^2+z^2\)와 같다. image
  5. Inverse image
    • 이 정의에 따르면, quaternion \(q\)의 length가 1일 때 \(q^{*}=q^{-1}\)이다.
    • quaternion \(q\)와 inverse quaternion \(q^{-1}\)의 product는 1이다. image
    • \(q\)가 unit quaternion이면, inverse와 conjugate이 같다. image
  6. Scalar Multiplication
    • 벡터처럼 quaternion도 scalar와 곱해질 수 있다. image


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으로 확장한다. image
    • 세 좌표를 imaginary part로 두고, real part는 0으로 둔다. 그러면 rotation된 \(p'\)는 다음처럼 표현될 수 있다.
    • 이때 곱은 quaternion multiplication이며, 결과도 quaternion이다. image
    • \(p'\)의 imaginary part를 취하면 rotation 이후 좌표를 얻을 수 있다.
    • quaternion multiplication 참고 image


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처럼 정의한다. image
  • \(+\)와 \(\oplus\)는 quaternion을 4X4 matrix로 매핑해준다. 이를 통해 수식 2.35처럼 quaternion multiplication을 matrix 형태로 쓸 수 있다. image
    • \(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을 얻을 수 있다. image
  • 수식 2.33과 수식 2.36을 통해 유도하면 수식 2.37을 얻을 수 있다. image
  • \(q^{+}\)과 \(q^{\oplus}\)를 기반으로 수식 2.38을 얻을 수 있다. image
  • \(p\prime\)과 \(p\)는 둘 다 imaginary quaternion이기 때문에, 수식 2.38의 matrix의 오른쪽 하단은 quaternion에서 rotation matrix으로 가는 transformation formula를 나타낸다. image
  • quaternion에서 rotation vector로 가는 transformation formula를 얻기 위해서 수식 2.39의 양변에 trace를 취한다.
  • 수식 2.17을 바탕으로 수식 2.41을 도출할 수 있다. image image
  • 수식 2.41의 양변에 cosine을 씌우면 수식 2.42가 나오게 된다. 이로부터 수식 2.43을 유도할 수 있다. image image

Rotation axis

  • 앞서 살펴본 바와 같이, rotation 축은 rotation 전후로 바뀌지 않는다. (\(Rn=n\))
  • Quaternion의 imaginary part를 $v=[v_1, v_2, v_3]$라고 하면, image image
  • 따라서 \(q\)의 imaginary part \(v\)는 rotation axis \(n\)이라고 할 수 있다.
  • 위는 \(q\)가 단위 quaternion일 때 얻은 결과이고, 모든 quaternion에 대해서는 normalize를 통해 일반화가 가능하다.
  • 결과적으로 quaternion에서 rotation으로의 변환은 다음처럼 정리할 수 있다. image
  • \(\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.