이 포스트는 장형기님의 SLAM 관련 100가지 질문을 참조하여 하나씩 알아보고 정리하기 위해 적어 놓는 것입니다.
3D 공간 회전 표현
1. SO(3) 행렬
Lie군 중 하나인 Special Orthogonal 3 (SO(3)) 군은 3차원 회전 행렬과 이에 닫혀있는 연산들로 구성된 군을 의미하며 3차원 물체의 회전을 표현할 때 사용합니다.
SO(3) 군의 특성
Associativity: (R1∗R2)∗R3=R1∗(R2∗R3)
Identity element: R∗I=I∗R=R 을 만족하는 3x3 항등행렬 I가 존재한다.
Inverse (1/R)∗R=R∗(1/R)=I을 만족하는 역행렬이 존재한다. 이때 1/R은 RT가 됩니다.
Composition: SO(3)군의 합성은 아래와 같이 행렬의 곱셈 연산으로 수행합니다. R1∗R2=R3∈SO(3)
Determinant: det(R)=1을 만족합니다.
Rotation: P2 공간 상의 점 또는 벡터 x=[xyz]T∈P2 를 다른 방향의 점 또는 벡터 X'로 회전시킬 수 있습니다. X′=R∗x
Adjoint: 임의의 회전행렬 R과 R의 접평면에 존재하는 임의의 각속도 w가 주어졌을 때 adjoint 행렬의 성질에 의해 다음과 같은 유용한 공식들이 도출됩니다.
exp((Rw)∧)=Rexp(w∧)RT=exp(Rw∧RT)
회전 행렬
Rx(ϕ)=⎝⎜⎛1000cos(ϕ)sin(ϕ)0−sin(ϕ)cos(ϕ)⎠⎟⎞
Ry(ψ)=⎝⎜⎛cos(ψ)0−sin(ψ)010sin(ψ)0cos(ψ)⎠⎟⎞
Rz(θ)=⎝⎜⎛cos(θ)sin(θ)0−sin(θ)cos(θ)0001⎠⎟⎞
각 축마다 이런식으로 회전행렬을 정의할 수 있습니다. 회전 순서에 따라 결과값이 달라질 수 있기 때문에 꼭 신경써줘야 합니다.
장점과 단점
장점: 직관적인 행렬 곱을 통해 여러 회전 연산을 쉽게 구성할 수 있고 점과 벡터를 회전시키는데 매우 효율적
단점: det(R)=1과 직교성을 유지해야하기 때문에 계산과정에서 수치적 안정성이 중요한 문제로 대두됩니다. 또 필요한 메모리가 크다고 합니다.
2. 쿼터니언(Quaternion)
쿼터니언은 3D 회전을 표현하는 4개의 요소로 이루어진 수학적 구조로, 허수 단위 i,j,k를 기반으로 하는 복소수의 확장 버전입니다. 쿼터니언은 다음과 같은 형태로 표현됩니다. q=w+xi+yj+zk
q = s + v로 쓰기도 합니다. s는 w 성분에 해당하는 스칼라(scalar)값이고, v는 q의 x,y,z 성분에 해당하는 벡터(vector) 부분입니다.
쿼터니언의 특징
쿼터니언의 허수 성분인 i,j,k는 다음과 같은 특징을 같습니다.
i2=j2=k2=−1
ij=−ji=kjk=−kj=iki=−ik=j
쿼터니언은 곱셈의 교환법칙이 성립되지 않습니다.
쿼터니언은 켤레를 같습니다.
q = s+v의 켤레 쿼터니언은 다음과 같습니다.
qˉ=s−v
쿼터니언의 회전
축 A에 대한 각도 θ 만큼의 회전을 쿼터니언으로 나타내면,
q=cos(θ/2)+Asin(θ/2)
장점과 단점
장점: 회전 연산을 연속적으로 할 때 발생할 수 있는 문제인 짐벌락(Gimbal Lock)을 방지할 수 있습니다. 쿼터니언 곱셈을 통해 회전 연산을 수행하는 방식이 안정적이며 빠릅니다.
단점: 추상적이어서 해석이 직관적이지 않고, 정규화 필요성 때문에 수치적 오류가 발생할 수 있습니다.
축-각도(Axis-Angle)
회전 각도를 통해 회전을 나타내는 방식입니다.
회전은 단일 축 u 주위에서 특정 각도 θ만큼 회전하는 것으로 표현됩니다.
Rotation = (u , θ)
장점과 단점
장점: 회전의 방향과 크기를 직관적으로 이해할 수 있습니다.
쿼터니언의 벡터 성분과 밀접하게 연관되기 때문에 쿼터니언으로 쉽게 변환이 가능합니다.
단점: 회전 간의 합성을 직접적으로 수행할 수 없는 단점이 있고 계산 과정에서 비선형 함수가 사용되므로 회전 합성에 비효율적일 수 있습니다.