[SLAM] Rotation Matrix
본 내용은 slambook(https://github.com/gaoxiang12/slambook-en)을 바탕으로 작성되었습니다.
Rotation Matrix
Points, Vectors, and Coordinate Systems
우리 일상 공간은 3차원으로 구성되어 있고, 우리는 3D movements를 사용하기 위해 태어났다. 3D 공간은 3개의 축으로 구성되어 있으므로 하나의 공간 좌표의 위치는 3개의 coordinate으로 특정될 수 있다.
points와 vectors
points는 길이와 부피가 없는 공간 요소이다. 두 points를 연결하면 vector가 형성된다. 이때 vector는 한 점과 다른 점을 연결하는 화살표라고 할 수 있다. 3D 공간에서 한 점의 좌표는 \(\mathbb{R}^3\)로 연결된다. linear space의 base \((e_1, e_2, e_3)\)가 있을 때, vector \(a\)는 다음과 같이 표현될 수 있다.
이때 \((a_1, a_2, a_3)^T\)가 \(a\)의 coordinate이며, \(\mathbb{R}^3\)에서는 3개의 coordinate 축이 orthogonal하게 구성되어 있다. 예를 들어, \(x\)와 \(y\)축이 주어졌을 때, \(z\)축은 left-hand rule 혹은 right-hand rule에 의해 결정될 수 있다.
vector a, b의 inner product(내적)
vector 내적은 두 vector가 얼마나 유사한지를 나타내는 척도로 사용된다.vector a, b의 outer product(외적)
외적의 결과 vector는 두 vector에 perpendicular한 값이 되며, 길이는 \(|a||b|sin<a,b>\)이다. \(a \wedge\)는 \(a\)의 skew-symmetric matrix로, 외적 \(a \times b\)를 행렬 곱으로 변환시켜준다.
Euclidean Transforms Between Coordinate Systems
우리는 real scene에서 다양한 좌표계를 정의한다. 예를 들어, 로봇을 움직일 때는 일반적으로 world coordinate(\(x_W, y_W, z_W\))을 정의하며, 카메라나 로봇을 좌표계(\(x_C, y_C, z_C\))로 설정하기도 한다.
- 만약 카메라 좌표계에서 vector \(p\)가 \(p_c\)라면, world coordinate 상에서는 \(p_w\)로 정의될 것이다. 그렇다면 두 coordinate 간에는 어떻게 전환이 일어날까? 우선 카메라 좌표계에서 coordinate values를 얻은 뒤, coordinate transform을 수행하면 될 것이며, 이는 transform matrix \(T\)로 표현된다.
- Rigid body motion은 두 좌표계 사이의 motion으로, rotation과 translation으로 구성된다. Rigid body motion 과정에서 vector의 길이와 각도는 변하지 않는다.
Euclidean transformation
Euclidean transformation은 rotation과 translation으로 구성되어 있다.
Rotation
- 단위 길이의 orthogonal한 base \((e_1, e_2, e_3)\)가 있을 때, rotation을 하면 \((e\prime_1, e\prime_2, e\prime_3)\)이 된다. 또한 같은 vector \(a\)가 있을 때, 두 좌표계에서 각각 \([a_1, a_2, a_3]^T\)와 \([a\prime_1, a\prime_2, a\prime_3]^T\)으로 표현된다.
이때 양쪽 식에 \((e_1, e_2, e_3)\)를 곱하면 다음과 같이 rotation matrix \(R\)을 정의할 수 있다.
Rotation matrix \(R\)은 두 좌표계 bases의 내적으로 구성되어 있다. 이때 base vector의 길이가 1이기 때문에, \(R\)은 두 좌표계 bases 각도의 cosine 값이 된다. 따라서 \(R\)을 direction cosine matrix로 부르기도 한다.
- Rotation matrix는 determinant가 1인 orthogonal matrix이다. 따라서 special orthogonal group \(SO(n)\)을 다음과 같이 정의할 수 있다.
이러한 집합은 n 차원의 공간 상의 rotation matrix로 구성되어 있다. 예를 들어, \(SO(3)\)은 3차원의 공간 상의 rotation을 의미한다.
- 앞서 말했듯 rotation matrix는 orthogonal하다. 따라서 rotation matrix의 역행렬은 반대 방향의 rotation을 나타낸다. 위 수식 2.6의 정의에 따르면, \(a=Ra\prime\)일 때, \(a\prime\)은 다음처럼 표현된다.
따라서 \(R^T\)는 반대 방향의 rotation이라는 것을 확인할 수 있다.
Translation
world 좌표계에서 vector \(a\)가 있을 때, rotation \(R\)과 translation \(t\) 이후에 \(a\prime\)을 얻을 수 있다. translation은 간단하게 rotation된 좌표에 translation vector \(t\)를 더하면 된다.
이 책에서는 좌표계 1과 2가 있을 때, vector \(a\)를 vector \(a_1\)와 \(a_2\)로 다음처럼 정의한다.
이때 \(R_{12}\)는 좌표계 2에서 좌표계 1로의 rotation을 의미한다.
\(t_{12}\)은 translation vector로, 물리적 의미를 고려하여 이해해야 한다. 좌표계 1의 origin으로부터 좌표계 2의 origin을 가리키는 vector이므로, coordinates는 좌표계 1로부터 활용된다. 따라서 본 책에서는 \(t_{12}\)를 좌표계 1로부터 2로 가는 vector로 이해하기를 권한다. 만약 world system \(W\)에서 camera system \(C\)로 가는 vector가 있다면, 수학적 기호로 \(t_{WC}\)로 표기한다.
Transform Matrix and Homogeneous Coordinates
수식 2.9이 Euclidean space의 rotation과 translation에 대해 설명하고 있지만, 여전히 transformation 관계가 linear하지 않다는 문제가 남아있다. 예를 들어, \(R_1, t_1\)과 \(R_2, t_2\)의 transformation이 있다고 하자.
그러면 a부터 c까지의 transformation은 다음과 같다.
하지만 이 수식은 깔끔 명료하지 않다. 그래서 homogeneous coordinates와 transform matrices를 사용하여 수식 2.9를 다시 정리하면 다음과 같다.
이때 3D vector의 끝에 1을 더하여 homogenous coordinates라는 4D vector로 만들었다. 이런 4차원 vector에서는 rotation과 translation을 하나의 matrix에 적을 수 있으며, linear하게 바꿀 수 있다. 수식 2.11에서 행렬 \(T\)는 transform matrix라고 불린다.
\(R\): 3x3, \(t\): 3x1, \(T\): 4x4
\(\tilde{a}\)는 \(a\)의 homogenous coordinates을 나타낸다. 이를 통해 위에서 깔끔명료하지 않았던 수식을 다시 나타낼 수 있다.
그러나 단순히 1을 더하고 빼는 것만으로 homogeneous coordinates의 symbol을 사용하는 것은 불편하다. 따라서 이 책에서는 \(b = Ta\)로 바로 적기로 한다.
transformation matrix의 집합은 다음과 같이 special Euclidean group으로 정의된다.
transform matrix의 역함수는 inverse transformation을 의미한다.
또한 \(T_{12}\)는 좌표계 1에서 좌표계 1로의 transformation을 의미한다.
이 책에서 \(Ta\)는 homogeneous coordinates를 나타내고, \(Ra\)는 non-homogenous coordinates를 나타내는 것으로 한다.