Post

[SLAM] Rotation Vectors and the Euler Angles

Rotation Vectors and the Euler Angles

Rotation Vectors

image

위에서 배웠던 수식 2.7에 대해 다시 고민해보자. 앞서 \(SO(3)\)은 3차원 공간에서의 rotation을 의미한다고 했다.

  1. \(SO(3)\)는 9개의 요소를 가진 rotation matrix이다. 하지만 3D rotation은 3 자유도(x, y, z)로만 표현된다. 이때 matrix expression이 여분으로 남는다. 비슷하게 transformation matrix는 6 자유도(x, y, z, pitch, roll, yaw)를 16개의 요소로 표현한다. 이것보다 더 matrix를 compact하게 표현할 수 있는 방법이 있을까? image

  2. rotation matrix와 transformation matrix는 다음과 같은 제한사항이 있다: determinant가 1인 orthogonal matrix여야 한다.

  • 그렇다면 rotation과 translation을 좀 더 compact하게 표현하려면 어떻게 해야할까? rotation은 회전 축과 회전 각도로 표현될 수 있다. 따라서 우리는 회전 축과 방향이 평행하고 회전 각도와 길이가 똑같은 rotation vector를 정의한다. 이러면 3차원 벡터로만 rotation을 표현할 수 있다.

  • 이와 비슷하게, rotation vector와 translation vector를 통해 transformation matrix를 표현할 수 있다. 이때 차원은 6차원이 된다.

  • Rotation vector \(R\)에 대해 다시 생각해보자. 회전 축 \(n\), 회전 각도 \(\theta\)가 주어질 때, 벡터 \(\theta n\)으로 rotation을 표현할 수 있다.

  • Rotation vector에서 Rotation matrix로의 전환은 \(\mathit{Rodrigues' formula}\)로 유도할 수 있다. 자세한 유도 과정은 생략한다. image

  • 기호 \(\wedge\)는 skew-symmetric(반대칭) 전환을 의미한다.

  • 반대로, Rotation matrix에서 Rotation vector로의 전환도 계산할 수 있다. 수식 2.15의 양변에 trace를 씌워보자. image

  • 수식 2.16에서 회전 각도 \(\theta\)를 구할 수 있다. image

  • 회전 축 \(n\)은 회전 전후로 변하지 않는다. \(n\)은 eigenvalue가 1인 rotation matrix \(R\)의 eigenvector이다. image

Euler Angles

  • rotation matrix와 rotation vector에 대해 공부했지만, rotation이 어떻게 되는지 떠올리기는 어렵다.

  • Euler angle(오일러 각도)는 이러한 rotation을 묘사하기 위한 매우 직관적인 방법을 소개한다. 오일러 각도는 하나의 rotation을 다른 각도의 세 rotation으로 decompose하기 위한 세 가지 primal 축을 활용한다.

  • decomposition 방법론이 다양하기 때문에, 오일러 각도에 대한 다양한 정의가 존재한다. 예를 들어, XYZ 순서로 회전할 수도 있고, ZYZ나 ZYX로 회전할 수도 있다. 또한 고정 축 주변으로 도는지 혹은 회전 이후 축으로 도는지에 따라 나눌 수 있다.

  • 대표적으로 많이 사용되는 오일러 각도는 yaw-pitch-roll 각도이다. yaw-pitch-roll 각도는 ZYX 축의 회전과 같기 때문에, ZYX 오일러 각도를 예시로 들 수 있다.
    강체(rigid body)의 전면부가 X축이라고 하자. 그러면 오른쪽은 Y축이 될 것이고, 상단은 Z축이 될 것이다. (그림 참고) 그러면 ZYX 각도는 다음처럼 어떤 rotation도 표현할 수 있게 된다. image

  1. yaw 각도 \(\theta_{yaw}=y\)를 얻기 위하여 Z축을 따라 물체를 회전한다.
  2. pitch 각도 \(\theta_{pitch}=p\)를 얻기 위하여 1번 회전 이후 Y축을 회전한다.
  3. roll 각도 \(\theta_{roll}=r\)을 얻기 위하여 2번 이후 X축을 회전한다.
  • 이 방법대로면, \([y,p,r]^T\)와 같은 3차원 벡터로 어떤 rotation이든지 표현할 수 있다. 이러한 오일러 각도에서는 회전 유무에 따라 축의 의미와 alignment가 바뀔 수 있다.

  • 다른 오일러 각도도 3차원 벡터로 표현하기 위하여 3개의 축으로 decompose할 수 있지만, 축과 순서는 바뀔 수 있다. 예를 들어, 방금 예시의 ypr 각도는 ZYX 순서이다. 이와 유사하게 XYZ, ZYZ 순서가 있지만 딱히 불리는 이름은 없다.

  • 오일러 각도의 대표적인 약점은 Gimbal lock이다. ypr일 때, pitch 각도가 90이면, 첫번째 rotation(Z축)과 세번째 rotation(X축)이 동일한 축을 활용하게 된다. 그러면 자유도를 하나 잃게 되어, singularity problem이 발생한다. 이때문에 오일러 각도는 interpolation이나 iteration 문제에 적합하지 않으며 human-computer interaction에 활용된다.

  • Gimbal lock은 gimbal과 XYZ 축, 두 가지 방법으로 이해할 수 있다. 우선 gimbal을 통해 이해해 보자.

image

  • 위 그림의 b를 보면, y gimbal(yaw)가 x gimbal(roll)과 겹쳐진 것을 확인할 수 있다. 이처럼 gimbal lock 문제가 생기면 하나의 축에 대한 자유도가 사라져 특정 방향으로 회전이 불가능해진다.

  • 다음으로 책에 나와 있는 XYZ 축의 예시를 보자.

image

  • 위 그림에서 보면, 회전 이전(1번째 그림) Z축과 ZYX 회전 이후(3번째 그림) X축이 방향만 다르고 같은 축인 것을 알 수 있다. 이때 회전 이전 Z축과 ZYX 회전 이후 X축에 짐벌을 올려놓았다고 상상해보면, 둘이 겹치는 것을 확인할 수 있다.
This post is licensed under CC BY 4.0 by the author.