본문 바로가기

Fundamental

Quaternion kinematics for the error-state Kalman filter 내용 정리 Part 1

본 포스트는 Joan Solà의 "Quaternion kinematics for the error-state Kalam filter (2017)" 페이퍼를 정리한 포스트이다. 이는 Quaternion과 SO(3) 군, Error-state Kalman filter 모델링에 대해 자세히 나와있어서 SLAM을 공부할 때 이론적인 부분을 참고하면 좋은 페이퍼이다.

1 Quaternion Definition and properties

1.1 Definition of quaternion

두 개의 복소수 A=a+bi,C=c+di가 주어졌을 때 이를 Q=A+Cj와 같이 구성하고 kij로 정의하면 Q는 쿼터니언 공간 H 안에 존재하는 수가 된다.
(1)Q=a+bi+cj+dkH

이 때, a,b,c,dR이고 {i,j,k}는 다음과 같이 정의된 3개의 허수를 의미한다.
(2)i2=j2=k2=ijk=1

이는 다음과 같은 성질을 만족한다.
(3)ij=ji=k,jk=kj=i,ki=ik=j

임의의 쿼터니언 Q는 복소수가 0일 때도 쿼터니언을 만족해야하므로 다음과 같은 수 또한 모두 쿼터니언이다.
(4)Q=aRH,Q=biIH,Q=a+biZH

또한 실수가 0일 때도 쿼터니언을 만족해야 하는데 이때는 특별히 복소수 {i,j,k}만으로 구성된 순수 쿼터니언(pure quaternion)이라고 한다. 이는 순수 쿼터니언 공간 Hp=Im(H)에 존재한다고 정의한다.
(5)Q=bi+cj+dkHpH.

쿼터니언을 표기하는데는 다양한 방법들이 존재한다. 본 페이지에서 설명하는 쿼터니언은 ijk=1 조건인 오른손법칙을 만족하는 쿼터니언이다. 이는 Q=(w,x,y,z)와 같이 실수부 w가 앞에있고 허수부 x,y,z가 뒤에 있는 순서로 표기한다. 이러한 성질들을 만족하는 쿼터니언을 특별히 Hamilton Quaternion이라고 한다.


1.1.1 Alternative representations of the quaternion

쿼터니언은 앞서 설명한 실수부+허수부로 표기할 수 있을 뿐만 아니라 스칼라+벡터로도 표기할 수 있다.
(6)Q=qw+qxi+qyj+qzkQ=qw+qv,

여기서 qw는 실수부 또는 스칼라 파트이며, qv=qxi+qyj+qzk는 허수부 또는 벡터 파트이다. 이는 다음과 같이 표기되기도 한다.
(7)Q=<qw,qv>

가장 자주 사용되는 표기법은 다음과 같이 벡터로 표기하는 법이다.
(8)q[qwqv]=[qwqxqyqz]

이와 같은 표기법은 쿼터니언과 관련된 대수 연산을 사용할 수 있도록 해준다.

1.2 Main quaternion properties

1.2.1 Sum

두 쿼터니언의 덧셈은 다음과 같이 정의한다.
(9)p+q=[pwpv]±[qwqv]=[pw±qwpv±qw]

쿼터니언의 덧셈 연산은 교환법칙과 결합법칙을 만족한다
(10)p+q=q+p
(11)p+(q+r)=(p+q)+r

1.2.2 Product

Hamilton Quaternion의 곱은 과 같이 표기하며, 앞서 설명한 (1)과 (2)의 법칙을 따른다.
(12)pq=[pwqwpxqxpyqypzqzpwqx+pxqw+pyqzpzqypwqypxqz+pyqw+pzqxpwqz+pxqypyqx+pzqw]

이를 스칼라와 벡터 표기로 다시 나타내면 다음과 같다.
(13)pq=[pwqwpvqvpwqv+qwpv+pv×qv]

위 연산에는 cross product가 포함되어 있으므로 쿼터니언의 곱셈은 교환법칙이 성립하지 않는다.
(14)pqqp

하지만 만약 pv×qv=0이 성립하는 경우 교환법칙이 성립한다. 또한, 쿼터니언의 곱셈은 결합법칙이 성립한다.
(15)(pq)r=p(qr)

그리고 덧셈에 대한 분배법칙이 성립한다.
(16)p(q+r)=pq+pr
(17)(p+q)r=pr+qr

두 쿼터니언의 곱은 다음과 같이 행렬곱으로도 나타낼 수 있다.
(18)q1q2=[q1]Lq2andq1q2=[q2]Rq1

이 때, [q1]L,[q2]R은 각각 왼쪽, 오른쪽 쿼터니언 곱셈에 대한 행렬을 의미하며 (12)에 의해 다음과 같이 나타될 수 있다.
(19)L=[qwqxqyqzqxqwqzqyqyqzqwqxqzqyqxqw][q2]R=[qwqxqyqzqxqwqzqyqyqzqwqxqzqyqxqw]

또한, (13)로부터 다음과 같이 나타낼 수 있다.
(20)L=qwI+[0qvqv[qv]×][q2]R=qwI+[0qvqv[qv]×]

여기서 []× 연산자는 3차원 벡터로부터 반대칭행렬(skew symmetric matrix)를 생성하는 연산자이다.
(21)×[0azayaz0axayax0]

또한 반대칭행은 [a]×=[a]×를 만족한다. 반대칭행렬은 벡터에 곱해지면 cross product를 하는 것과 동일한 연산을 수행한다.
(22)×b=a×b,a,bR3

따라서 임의의 3개의 쿼터니언 q,x,p이 존재할 때 곱셈은 다음과 같이 나타낼 수 있다.
(23)qxp=(qx)p=[p]R[q]Lx=q(xp)=[q]L[p]Rx

이는 곧 아래 공식이 성립하는 것을 의미한다.
(24)R[q]L=[q]L[p]R

1.2.3 Identity

항등 쿼터니언(identity quaternion) q1은 다음과 같은 공식 q1q=qq1=q를 만족하며 다음과 같이 정의된다.
(25)q1=1=[10v]

1.2.4 Conjugate

쿼터니언의 켤레복소수는 다음과 같이 정의된다.
(26)qqwqv=[qwqv]

이는 다음과 같은 성질을 갖는다.
(27)qq=qq=qw2+qx2+qy2+qz2=[qw2+qx2+qy2+qz20v]
(28)(pq)=qp

1.2.5 Norm

쿼터니언의 놈은 다음과 같이 정의된다.
(29)qqq=qq=qw2+qx2+qy2+qz2R

이는 다음과 같은 성질을 갖는다.
(30)pq=qp=pq

1.2.6 Inverse

쿼터니언의 역은 q1과 같이 표기하며 다음과 같은 특성을 지닌다.
(31)qq1=q1q=q1

q1은 다음과 같이 구할 수 있다.
(32)q1=q/q2

1.2.7 Unit or normalized quaternion

단위 쿼터니언은 q=1의 특징을 가진다. 따라서 아래와 같은 특성을 만족한다.
(33)q1=q

단위 쿼터니언은 3차원 공간에서 물체의 방향을 표현하거나 회전을 수행하는 연산자로써 사용된다. 위 성질은 역방향 회전이 기존 벡터에 켤레복소수 쿼터니언을 곱함으로써 얻어질 수 있다는 것을 의미한다. 단위 쿼터니언은 항상 다음과 같이 표현될 수 있다.
(34)q=[cosθusinθ]

이 때, u=uxi+uyj+uzk는 단위 벡터를 의미하며 θ는 스칼라 값이다.

1.3 Additional quaternion properties

1.3.1 Quaternion commutator

쿼터니언 교환자(commutator는 [p,q]pqqp와 같이 정의한다. (13)로부터 다음 공식을 얻을 수 있다.
(35)pqqp=2pv×qv

이는 곧 다음과 같다.
(36)pvqvqvpv=2pv×qv

해당 성질은 특정 공식의 유도과정에서 종종 사용된다.

1.3.2 Product of pure quaternions

순수 쿼터니언은 Q=qv, q=[0,qv]와 같이 실수부가 0이고 허수부만 존재하는 쿼터니언을 말한다. (13)로부터 두 순수 쿼터니언의 곱셈을 다음과 같이 나타낼 수 있다.
(37)pvqv=pvqv+pv×qv=[pvqvpv×qv]

동일한 순수 쿼터니언의 곱셈에 대해서는 다음과 같다.
(38)qvqv=qvqv=qv2

또한 pure unitary quaternion uHp,u=1의 곱셈에 대해서는 다음과 같다.
(39)uu=1

이는 허수의 곱셈 ii=1과 동일한 결과이다.

1.3.3 Natural powers of pure quaternions

임의의 자연수 nN에 대하여 연산자를 사용하여 n번 곱한 쿼터니언을 qn이라고 하자. 만약 순수 쿼터니언 vv=uθ이고 θ=vR, u는 pure unitary quaternion 일 때, (38)에 의해 다음과 같은 순환적 패턴이 형성된다.
(40)v2=θ2,v3=uθ3,v4=θ4,v5=uθ5,v6=θ6


그리고 u에 대해 다음과 같은 패턴이 형성된다.
(41)u2=1,u3=u,u4=1,u5=u,u6=1,


1.3.4 Exponential of pure quaternions

쿼터니언의 exponential은 다음과 같이 나타낼 수 있다.
(42)eqk=01k!qkH

실수부만 존재하는 쿼터니언의 경우 이에 대한 exponential은 일반적인 exponential과 동일하다. 순수 쿼터니언 v=vxi+vyj+vzk에 대한 exponential 은 다음과 같이 정의한다.
(43)ev=k=01k!vkH

이 때, v=uθ,  θ=v,  unitary u과 (40)을 활용하여 위 식을 전개하면 다음과 같이 스칼라와 벡터 수열로 분리할 수 있다.
(44)euθ=(1θ22!+θ44!+)+(uθuθ33!+uθ55!+)

이는 cosθ, sinθ 공식에 대한 수열을 나타내므로 다음과 같이 표현할 수 있다.
(45)ev=euθ=cosθ+usinθ=[cosθusinθ]

이는 오일러 공식 eiθ=cosθ+isinθ와 동일하다. 또한, ev2=cos2θ+sin2θ=1이므로 순수 쿼터니언(pure quaternion)의 exponential은 단위 쿼터니언(unit quaternion)이 된다는 것을 확인할 수 있다. 순수 쿼터니언의 exponential은 다음의 성질을 만족한다.
(46)ev=(ev).

매우 작은 각도에 대한 쿼터니언은 u=v/v 공식이 0으로 나눠지는 것을 방지하기 위해 고차항을 제거한 테일러 급수로 나타낸다.
(47)ev[1θ2/2v(1θ2)/6][1v]θ0[10]

1.3.5 Exponential of general quaternions

쿼터니언의 곱셈은 교환법칙을 만족하지 않으므로 일반적인 쿼터니언 p,q에 대해 ep+q=epeq가 성립하지 않는다. 하지만 실수부끼리 곱하는 경우 교환법칙이 성립한다. 일반적인 쿼터니언의 exponential은 다음과 같이 실수부와 허수부로 분해할 수 있다.
(48)eq=eqw+qv=eqweqv

이를 (45)을 사용하여 uθ=qv와 같이 표현하면 다음 공식을 얻을 수 있다.
(49)eq=eqw[cosqvqvqvsinqv]

1.3.6 Logarithm of unit quaternions

단위 쿼터니언은 q=1의 성질을 만족하므로 이에 대한 log 연산은 다음과 같이 나타낼 수 있다.
(50)logq=log(cosθ+usinθ)=log(euθ)=uθ=[0uθ]

따라서 단위 쿼터니언(unit quaternion)의 log 연산은 순수 쿼터니언(pure quaternion)이 되는 것을 알 수 있다. angle-axis 값 u,θ는 (45)을 통해 구할 수 있다.
(51)u=qv/qvθ=arctan(qv,qw)

매우 작은 각도에 대한 쿼터니언은 0으로 나뉘어지는 것을 방지하기 위해 arctan에 대한 테일러 급수로 나타낸다.
(52)log(q)=uθ=qvarctan(qv,qw)|qv|qvqw(1qv|23qw2)qvθ00.

1.3.7 Logarithm of general quaternions

만약 q가 일반적인 쿼터니언이라면 log 연산은 다음과 같다.
(53)logq=log(qqq)=logq+logqq=logq+uθ=[logquθ]

1.3.8 Exponential forms of the type qt

임의의 쿼터니언 qH와 실수 tR가 주어졌을 때 이에 대한 지수승은 다음과 같이 나타낼 수 있다.
(54)qt=exp(log(qt))=exp(tlog(q)).

만약 q=1이면 q=[cosθ,usinθ]이고 log(q)=uθ를 만족하므로 이를 활용하면 다음과 같이 나타낼 수 있다.
(55)qt=exp(tuθ)=[costθusintθ]

2 Rotations and cross-relations

2.1 The 3D vector rotation formula


위 그림은 오른손법칙을 사용하여 3차원 공간 상의 임의의 벡터 xu축을 중심으로 ϕ만큼 회전시키는 모습을 나타낸다. xu축에 평행인 벡터 x와 직교하는 벡터 x로 분해할 수 있다.
(56)x=x+x.

두 벡터는 다음과 같이 계산할 수 있다. 이 때, αxu축 사이의 각도를 의미한다.
(57)x=u(xcosα)=uuxx=xx=xuux.

회전이 수행되는 동안 u축에 평행한 x은 회전하지 않는다.
(58)x=x

그리고 u축에 직교하는 파트들은 u와 수직인 평면 내부에서 회전하게 된다. 따라서 평면 내부에 서로 직교하는 두 basis {e1,e2}가 있다고 했을 때 이는 다음과 같이 나타낼 수 있다.
(59)e1=xe2=u×x=u×x

두 basis는 e1=e2를 만족한다. 따라서 x=e11+e20과 같이 쓸 수 있고 ϕ만큼 회전한 직교벡터에 대해서는 다음과 같이 나타낼 수 있다.
(60)x=e1cosϕ+e2sinϕ

이는 다음과 같이 전개해서 나타낼 수 있다.
(61)x=xcosϕ+(u×x)sinϕ

따라서 최종적으로 회전한 벡터 x는 다음과 같이 쓸 수 있다.
(62)x=x+x=x+xcosϕ+(u×x)sinϕ

2.2 The rotation group SO(3)

3차원 공간에서 SO(3) 군은 원점을 중심으로 회전하는 연산에 대한 군을 말한다. 회전은 벡터의 길이와 상대벡터의 방향을 보존하는 선형 변환 연산이다. 이는 로보틱스에서 강체(rigid body)의 움직임 중 회전을 표현하는데 주로 사용된다. 강체의 움직임이란 물체의 형태가 변화하지 않아서 각도, 상대적인 회전량(relative orientation), 거리 등이 보존되는 움직임을 의미한다.

유클리디언 공간에서 vR3 벡터에 대해 회전을 수행하는 연산자 r:R3R3;vr(v)가 주어졌을 때 이는 다음과 같은 성질을 만족한다.

  • 회전은 벡터의 놈을 보존한다.

(63)r(v)=<r(v),r(v)>=<v,v>v,vR3

  • 회전은 두 벡터에 대한 각도를 보존한다.

(64)<r(v),r(w)>=<v,w>=vwcosα,v,wR3

  • 회전은 두 벡터의 상대 회전량(relative orientation)을 보존한다.

(65)u×v=wr(u)×r(v)=r(w)


위 성질을 토대로 SO(3) 군을 다음과 같이 정의할 수 있다.
(66)SO(3):{r:R3R3/v,wR3,  r(v)=v,  r(v)×r(w)=r(v×w)}

SO(3) 군은 일반적으로 회전행렬(rotation matrix)를 사용하여 표기한다. 하지만 쿼터니안을 사용하여 SO(3)를 표기하는 방법 또한 널리 사용된다. 본 챕터에서는 두 표기법이 동일하다는 것을 증명한다. 두 표기법은 개념적으로나 대수적으로 많은 부분에서 유사하다.

2.2 The rotation group and the rotation matrix

회전연산자 r은 선형성을 가진다. 따라서 선형성을 가진 스칼라나 벡터, 행렬로도 r을 표현할 수 있다. 그 중 대표적인 것이 회전행렬 RR3×3을 통해 회전연산자를 표현하는 방법이다.
(67)r(v)=Rv

내적 <a,b>=ab 을 활용하여 (63)에 해당 공식을 적용하면 모든 v에 대해 다음 공식이 적용된다.
(68)(Rv)(Rv)=vRRv=vv.

이를 통해 회전행렬의 직교하는 성질을 유도할 수 있다.
(69)RR=I=RR

회전행렬 R=[r1,r2,r3]와 같이 열행렬 ri로 표기하면 직교행렬의 성질에 의해 다음 공식이 성립한다.
(70)<ri,ri>=riri=1<ri,rj>=rirj=0,if ij

이에 따라 3차원 공간에서 변환 시 벡터의 놈과 각도를 보존하는 군을 Orthogonal 군이라고 하며 줄여서 O(3)라고 표현한다. Orthogonal 군은 강체의 변환일 때 회전과 비강체의 변환일 때 반사(reflection)로 구성되어 있다. 여기서 군이라는 표현을 사용하는 이유는 두 개의 직교하는 O(3) 행렬을 곱하면 언제나 직교하는 O(3) 행렬이 나오기 때문이다. 즉, 곱셈에 대해 닫혀있다. 이는 역행렬 또한 직교행렬의 성질을 만족하는 것을 의미한다. 따라서 (69)에 의해 회전행렬의 역행렬은 전치행렬과 동일하다.
(71)R1=R

그리고 강체의 움직임에 한해서 상대적인 회전량을 보존하는 성질 (65)에 의해 다음과 같은 제약조건이 추가된다.
(72)det(R)=1

Orthogonal 군에서 특별히 위와같이 positive unit determinant를 만족하는 군을 Speical Orthonogal 군, 즉 SO(3)군이라고 한다. 군의 성질을 만족해야 하므로 임의의 두 SO(3) 회전행렬의 곱은 항상 SO(3) 회전행렬이 된다.

2.3.1 The exponential map

Exponential map(+Logarithm map)은 3차원 공간의 회전을 조금 더 편하게 쉽게 이해 및 응용할 수 있게 해주는 강력한 수학적 도구이다. 이는 미세한 변화량에 대한 미적분(infinitesimal calculus)과 3차원 회전을 연결시켜주는 고리 역할을 수행한다. 또한, 3차원 회전에 대한 자코비안을 정의하거나, 섭동(perturbation) 모델링을 정의하거나 속도를 정의하고 사용할 수 있도록 해주는 핵심적인 역할을 수행한다. 따라서 3차원 공간에서 회전에 대한 추정 문제를 사용할 때 필수적으로 사용된다.

회전은 강체 움직임(rigid motion)의 성질을 만족한다. 이 때, 강체 움직임의 성질이란 처음 t0=0 순간의 방향 r(0)으로부터 t 초 후 현재의 방향 r(t)까지 물체가 회전했을 때 SO(3) 군 내에서 연속적인 궤적(continuous trajectory)를 정의할 수 있음을 말한다. 이러한 연속적인 궤적은 시간 t에 따라 회전을 미분할 수 있음을 의미한다.



앞서 SO(3)의 제약조건 중 (69)에 대한 시간미분 값을 유도하면 다음과 같다.
(73)ddt(RR)=R˙R+RR˙=0

위 식을 정리하면 다음과 같은 공식을 얻을 수 있다.
(74)RR˙=(RR˙)

이는 RR˙이 반대칭행렬(skew -symmetric matrix)의 성질을 만족하는 것을 의미한다. 이러한 3x3 반대칭행렬의 집합을 so(3)라고 하며 SO(3) 군의 Lie Algebra라고 한다. 3x3 반대칭행렬은 다음과 같은 형태를 갖는다.
(75)×[0ωzωyωz0ωxωyωx0]

반대칭행렬은 3자유도를 가지며 (???)에서 설명한 것처럼 cross product 연산자로 사용된다. 이는 ωR3[ω]×so(3)과 같이 임의의 3차원 벡터는 so(3)와 일대일 매핑 관계에 있다는 것을 알 수 있다.
(76)RR˙=[ω]×

위 식은 다음과 같이 일반미분방정식(ordinary differential equation, ODE) 형태를 가진다.
(77)R˙=R[ω]×

원점 부근에서 R=I라고 하면 R˙=[ω]×의 식이 유도된다. 따라서 so(3)는 원점 근처에서 r(t)의 시간에 대한 미분 공간으로 해석할 수 있다. 이는 SO(3) 군에 대한 접평면(tangent space)를 의미한다. 또는 velocity space이라고도 불린다. 따라서, ω는 순간적인 각속도를 의미한다.

만약 각속도 ω가 일정한 경우, 미분방정식은 다음과 같이 나타낼 수 있다.
(78)R(t)=R(0)e[ω]×t=R0e[ωt]×

exponential e[x]×는 테일러 급수로 전개하여 나타낼 수 있다. R0,R(t)는 회전행렬을 의미하므로 e[ωt]×=R(0)R(t)와 같이 나타낼 수 있다. 임의의 벡터 ϕωΔt를 시간 Δt에 대한 회전벡터로 정의하면 다음 공식을 얻을 수 있다.
(79)R=e[ϕ]×

이는 [ϕ]×를 exponential map을 통해 회전행렬로 변환이 가능함을 의미한다. 즉, so(3)에서 SO(3) 군으로 변환을 의미한다.
(80)exp:so(3)SO(3);[ϕ]×exp([ϕ]×)=e[ϕ]×

2.3.2 The capitalized exponential map

앞서 소개한 exponential map은 종종 표기법에서 혼란을 일으킨다. 이는 주로 ϕR3][ϕ]×so(3)을 혼용하면서 발생한다. 이러한 표기의 혼란을 막기 위해 R3SO(3)로 변환하는 연산은 대문자 Exp 연산이라고 정의한다.
(81)Exp:R3SO(3);ϕExp(ϕ)=e[ϕ]×

두 연산자 exp, Exp 사이에는 다음과 같은 관계가 성립한다.
(82)Exp(ϕ)exp([ϕ]×)


다음 섹션에서는 벡터 ϕ가 회전벡터 또는 angle-axis 벡터로 불리는 것에 대해 설명한다. 따라서 임의의 각도 θu축에 대해 ϕ=ωΔt=θu와 같이 나타낼 수 있다.

2.3.3 Rotation matrix and rotation vector: the Rodrigues rotation formula

회전행렬 R은 회전벡터 ϕ=θu에 exponential map을 적용함으로써 정의된다. (79)에 ϕ=θu를 활용하여 테일러 전개해보면 다음과 같다.
(83)R=eθ[u]×=I+θ[u]×+12θ2[u]×2+13!θ3[u]×3+14!θ4[u]×4+

u는 단위벡터이므로 반대칭행렬 [u]×는 다음을 만족한다.
(84)[u]×2=uuI[u]×3=[u]×

따라서 모든 [u]×의 지수승은 [u]×[u]×2로 표현이 가능하다.
(85)×4=[u]×2,[u]×5=[u]×,[u]×6=[u]×2,[u]×7=[u]×,

따라서 [u]×[u]×2로 테일러 전개를 묶은 후 sinθ, cosθ 공식을 적용하면 회전벡터로부터 회전행렬을 구하는 공식이 나오는데 이를 특별히 Rodrigues rotation formula라고 한다.
(86)R=I+sinθ[u]×+(1cosθ)[u]×2

이는 R{θ}Exp(θ)와 같이 나타낼 수 있다. 위 공식은 다양한 변형 공식이 존재하는데 대표적으로 (84)를 활용하여 다음과 같이 나타낼 수 있다.
(87)R=Icosθ+[u]×sinθ+uu(1cosθ)

2.3.4 The logarithm maps

exponential map의 역연산으로 logarithm map을 정의할 수 있다.
(88)log:SO(3)so(3);Rlog(R)=[uθ]×

이 때,
(89)θ=arccos(trace(R)12)u=(RR)2sinθ

와 같으며 () 연산은 []× 연산의 역연산을 의미히나다. 즉, ([v]×)=v이고 [V]×=V이다. exponential map과 동일하게 대문자 연산 Log를 정의할 수 있다. 이는 회전행렬로부터 회전벡터를 구하는 연산이다.
(90)Log:SO(3)R3;RLog(R)=uθ

소문자 연산자와 대문자 연산자 사이에는 다음과 같은 성질을 만족한다.
(91)Log(R)(log(R))

지금까지 설명한 대소문자 exponential, logarithm map을 그림으로 표현하면 다음과 같다.




2.3.5 The rotation action

3차원 공간에서 임의의 벡터 xu축을 중심으로 각도 θ만큼 회전시키기 위해서는 다음과 같은 선형연산이 적용된다.
(92)x=Rx

이 때, R=Exp(uθ)이다. 이를 Rodrigues formula (86)을 사용하여 표현하면 다음과 같다.
(93)x=Rx=(I+sinθ[u]×+(1cosθ)[u]×2)x=x+sinθ[u]×x+(1cosθ)[u]×2x=x+sinθ(u×x)+(1cosθ)(uuI)x=x+x+sinθ(u×x)(1cosθ)x=x+(u×x)sinθ+xcosθ

이는 정확히 벡터의 회전 공식 (62)과 동일하다.

2.4 The rotation group and the quaternion

본 섹션에서는 SO(3)의 표기법으로 쿼터니언을 사용하는 방법에 대해 설명한다. 또한, 쿼터니언과 회전행렬이 어떠한 연관성이 있는지 설명한다. 쿼터니언이 벡터를 회전하는 연산은 다음과 같이 나타낼 수 있다.
(94)r(v)=qvq

또한, 이를 통해 제약조건 (30)를 활용하여 (63)를 다시 표기하면 다음과 같다.
(95)qvq=q2v=v

이를 통해 q=1 조건을 유도할 수 있다. 즉, 단위 쿼터니언(unit quaternion)만이 물체의 3차원 회전에 대한 연산을 수행할 수 있음을 의미한다. 이를 통해 다음 공식이 성립한다
(96)qq=1=qq

이는 회전행렬의 직교성질인 RR=I=RR (69)와 유사하다. 또한 아래와 같은 전개를 통해 (65)이 성립함을 보일 수 있다.
(97)r(v)×r(w)=(qvq)×(qwq)(36)=12((qvq)(qwq)(qwq)(qvq))=12(qvwqqwvq)=12(q(vwwv)q)(36)=q(v×w)q=r(v×w)

위 전개를 통해 단위 쿼터니언은 곱셈 연산에 대해 닫힌 연산을 수행하는 군을 형성하는 것을 알 수 있다. 단위 쿼터니언 군의 manifold는 기하학적으로 R4차원의 단위 구(unit sphere)를 형성한다. 4차원 구는 일반적으로 표현할 수 없으므로 이를 단순화하여 3차원 구를 통해 manifold를 설명한다. 이러한 단위 쿼터니언의 군을 S3라고 부른다.



2.4.1 The exponential map

임의의 단위 쿼터니언이 qS3가 주어졌을 때 이는 직교조건 qq=1을 만족한다. 따라서 회전행렬과 마찬가지로 직교조건에 대해 미분을 취하면 다음과 같다.
(98)d(qq)dt=q˙q+qq˙=0

이를 전개하면 다음과 같다.
(99)qq˙=(q˙q)=(qq˙)

이는 곧 qq˙이 순수 쿼터니언임(pure quaternion)을 의미한다. 순수 쿼터니언은 실수부가 0이므로 켤레복소수를 취하면 음수인 자기 자신이 된다. 순수 쿼터니언을 ΩH라고 하면 다음과 같이 나타낼 수 있다.
(100)qq˙=Ω=[0Ω]Hp

이를 정리하면 다음과 같다.
(101)q˙=qΩ

원점 부근에서 q=1이 되고 위 식은 q˙=ΩHp와 같이 나타낼 수 있다. 따라서 순수 쿼터니언 공간 Hp는 접평면(tangent space)을 의미하며 S3 군의 Lie Algebra라고 불린다.



단위 쿼터니언의 경우 회전행렬과 달리 접평면이 velocity space를 의미하지 않고 half-velocity space를 의미한다. 이에 대해서는 뒷 섹션에서 자세히 설명한다. 만약 Ω가 일정한 경우 미분방정식은 다음과 같이 나타낼 수 있다.
(102)q(t)=q(0)eΩt

위 식에서 q(t)q0가 모두 단위 쿼터니언이므로 eΩt 또한 단위 쿼터니언이 된다. 이는 (45)에서 한 번 유도한 적이 있다. VΩΔt와 같이 정의하면
(103)q=eV

와 같이 나타낼 수 있다. 이는 회전행렬과 마찬가지로 순수 쿼터니언(pure quaterinon)에 exponential map을 취하면 단위 쿼터니언(unit quaternion)을 만들 수 있음을 의미한다.
(104)exp:HpS3;Vexp(V)=eV

2.4.2 The capitalized exponential map

exponential map에 사용되는 순수 쿼터니언 V은 일반적으로 V=θu=ϕu/2와 같이 u축을 중심으로 회전하고자 하는 각도 ϕ의 절반의 각도 θ=ϕ/2를 사용한다. 이에 대해 직관적으로 이해해보면 다음과 같다. 임의의 벡터 x가 쿼터니언에 의해 회전하기 위해서는 x=qxq과 같이 두 번에 걸쳐서 쿼터니언이 곱해지기 때문에 V에 절반의 각도를 사용하는 것으로 이해할 수 있다.

쿼터니언과 angle-axis 표현법 v=ϕuR3 사이의 직접적인 관계를 표현하기 위해 angle-axis의 절반의 각도를 사용하는 순수 쿼터니언으로 변환하는 대문자 exponential map에 대해 정의할 수 있다.
(105)Exp:R3S3;vExp(v)=ev/2

대문자와 소문자 exponential map 사이의 관계는 다음과 같다.
(106)Exp(v)exp(v/2)

임의의 각속도를 ω=2ΩR3와 같이 정의하면 (101), (102)은 다음과 같이 다시 나타낼 수 있다.
(107)q˙=12qωq=eωt/2

2.4.3 Quaternion and rotation vector

임의의 angle-axis 벡터 v=ϕu가 주어졌을 때, 이에 대한 exponential map은 오일러 공식의 확장 버전으로 표현할 수 있다.
(108)qExp(v)=Exp(ϕu)=eϕu/2=cosϕ2+usinϕ2=[cos(ϕ/2)usin(ϕ/2)]

위 식은 주로 angle-axis 표현법에서 쿼터니언으로 변환하는 공식으로 사용되며 q=q{v}Exp(v)와 같이 표기한다.

2.4.4 The logarithmic maps

단위 쿼터니언 또한 회전행렬과 마찬가지로 exponential map에 대한 역연산인 logarithmic map이 존재한다.
(109)log:S3Hp;qlog(q)=uθ

또한 대문자 logratihmic map 역시 존재한다. 이는 임의의 쿼터니언을 3차원 벡터로 변환하는 연산이다.
(110)Log:S3R3;qLog(q)=uϕ

두 연산 사이에는 다음과 같은 관계가 성립한다.
(111)Log(q)2log(q)

ϕu는 다음과 같이 구할 수 있다.
(112)ϕ=2arctan(qv,qw)u=qv/qv

매우 작은 움직임을 표현하는 쿼터니언에 대해서는 위 식과 같이 u를 구할 수 없다. 이럴 경우에는 테일러 급수를 사용하여 고차항을 버리고 근사된 값을 사용한다.
(113)Log(q)=θu2qvqw(1qv23qw2)

2.4.5 The rotation action

앞서 설명한 내용과 같이 3차원 공간에서 임의의 벡터 xu축을 중심으로 ϕ만큼 회전하고 싶으면 다음과 같이 2번의 쿼터니언 곱을 통해 회전을 표현할 수 있다.
(114)x=qxq

이 때, q=Exp(uϕ)를 의미하며 임의의 벡터 x 또한 다음과 같은 쿼터니언 형태로 변형된다.
(115)x=xi+yj+zk=[0x]Hp

2번의 쿼터니언 곱이 벡터의 회전을 수행하는 것을 증명하기 위해서 (13), (107)를 사용하여 위 공식을 다음과 같이 나타낼 수 있다.
(116)x=qxq=(cosϕ2+usinϕ2)(0+x)(cosϕ2usinϕ2)=xcos2ϕ2+(uxxu)sinϕ2cosϕ2uxusin2ϕ2=xcos2ϕ2+2(u×x)sinϕ2cosϕ2(x(uu)2u(ux))sin2ϕ2=x(cos2ϕ2sin2ϕ2)+(u×x)(2sinϕ2cosϕ2)+u(ux)(2sin2ϕ2)=xcosϕ+(u×x)sinϕ+u(ux)(1cosϕ)=(xuux)cosϕ+(u×x)sinϕ+uux=xcosϕ+(u×x)sinϕ+x

위 전개를 통해 쿼터니언 연산이 벡터의 회전 공식과 동일하다는 것을 알 수 있다.

2.4.6 The double cover of the manifold of SO(3)

임의의 단위 쿼터니언 q가 주어졌다고 했을 때, 항등 쿼터니언(identity quaternion) q1=[1,0,0,0]q 사이의 각도 θ는 다음과 같이 표현할 수 있다.
(117)cosθ=q1q=q(1)=qw

또한, 3차원 물체가 q에 의해 ϕ 각도만큼 회전했을 때 q는 다음과 같다.
(118)q=[qwqv]=[cosϕ/2usinϕ/2]

위 두 식을 종합해보면 qw=cosθ=cosϕ/2인 것을 알 수 있다. 즉, 단위 쿼터니언 공간 S3에서 움직이는 각도 θ는 실제 물체가 움직이는 각도의 절반 ϕ/2 인 것을 알 수 있다.
(119)θ=ϕ/2



만약 θ=π/2인 경우 실제 월드 상의 물체는 ϕ=π만큼 회전한다. 그리고 θ=π만큼 반바퀴 회전을 하면 실제 월드 상의 물체는 ϕ=2π만큼 한 바퀴 회전을 한다.

2.5 Rotation matrix and quaternion

임의의 angle-axis 벡터 v=uϕ가 주어졌을 때, q=Exp(uϕ)를 통해 단위 쿼터니언을 만들 수 있고 또한 R=Exp(uϕ)를 통해 회전행렬을 만들 수 있다. 그리고 위 두 값을 통해 3차원 공간 상의 임의의 벡터 xu축을 중심으로 ϕ만큼 회전시킬 수 있다.
(120)v,xR3,q=Exp(v),R=Exp(v)

이는 곧 다음 공식이 성립함을 의미한다.
(121)qxq=Rx

위 두 식은 모두 x에 대한 선형변환 식이다. 이를 토대로 회전행렬과 단위 쿼터니언 사이의 변환식을 다음과 같이 유도할 수 있다.
(122)R=[qw2+qx2qy2qz22(qxqyqwqz)2(qxqz+qwqy)2(qxqy+qwqz)qw2qx2+qy2qz22(qyqzqwqx)2(qxqzqwqy)2(qyqz+qwqz)qw2qx2qy2+qz2]

위 변환식은 R=R{q}와 같이 나타낸다. 또한, (???)를 참고해서 쿼터니언을 행렬곱 형태로 만들면 다음과 같이 다시 쓸 수 있다.
(123)qxq=[q]R[q]L[0x]=[0Rx]

이를 통해 다음과 같이 다른 변환 공식을 유도할 수 있다.
(124)R=(qw2qvqv)I+2qvqv+2qw[qv]×

회전행렬과 단위 쿼터니언 사이에는 다음과 같은 성질이 만족한다.
(125)R{[1,0,0,0]}=IR{q}=R{q}R{q}=R{q}R{q1q2}=R{q1}R{q2}

위 성질들을 토대로 쿼터니언의 지수승은 다음과 같이 변환된다.
(126)R{qt}=R{q}t

이는 스칼라 t에 대해 단위 쿼터니언과 회전행렬의 구형 보간법(spherical interpolation)이 서로 연관이 있음을 의미한다.

2.6 Rotation composition

단위 쿼터니언의 합성(composition)은 회전함수의 합성과 유사하다. 즉, 동일한 순서로 곱셈을 수행한다.
(127)qAC=qABqBCRAC=RABRBC

이는 결합법칙을 사용하여 다음과 같이 나타낼 수 있다.
(128)xA=qABxBqAB=qAB(qBCxcqBC)qAB=(qABqBC)xc(qBCqAB)=(qABqBC)xc(qABqBC)=qACxcqACfor quaternion

(129)xA=RABxB=RAB(RBCxC)=(RABRBC)xC=RACxCfor rotation matrix



이 때, qij 또는 Rij의 의미는 특정 i 방향(orientation)에서 j 방향으로 변환하는 연산자를 의미한다. 또는 i 좌표계에서 j 좌표계로의 변환으로도 이해할 수 있다.

2.7 Spherical linear interpolation (SLERP)

단위 쿼터니언은 두 방향(orientation) q0,q1이 주어졌을 때 두 지점을 구의 선형 보간(spherical linear interpolation)하기 상대적으로 쉬운 특징을 가지고 있다. 구의 선형보간은 출발지가 q0 이고 목적지가 q1일 때, 특정 시간 t에서 보간함수 q(t),t[0,1]를 구하는 문제가 된다. 보간함수는 초기조건으로 q(0)=q0,q(1)=q1를 가진다. 보간함수 q(t)를 사용하면 t[0,1] 구간에서 물체가 고정된 속도로 자연스럽게 q0q1로 회전할 수있다.

Method 1 첫 번째 방법은 쿼터니언 대수학을 이용하는 것이다. 방향의 변화량 Δq를 사용하여 q1=q0Δq0와 같이 표현하는 방법이다.
(130)Δq=q0q1

위 변화량에 logarithmic map을 사용하여 angle-axis 회전벡터 Δv=uΔϕ를 얻을 수 있다.
(131)uΔϕ=Log(Δq)

최종적으로 u축은 유지한 상태에서 시간 t[0,1]에 따른 각도의 변화량을 δϕ=tΔϕ라고 하면 δq=Exp(uδϕ)와 같이 나타낼 수 있다. 이를 다시 위 공식에 대입하면 다음과 같이 보간함수를 구할 수 있다.
(132)q(t)=q0Exp(tuΔϕ)

이를 자세히 풀어쓰면 q(t)=q0Exp(tLog(q0q1))가 되고 이를 다시 정리하면 다음과 같다.
(133)q(t)=q0(q0q1)t

이는 (55)과 같이 벡터 형태로 나타낼 수 있다.
(134)q(t)=q0[cos(tΔϕ/2)usin(tΔϕ/2)]


Note: 위 식을 회전행렬에 대한 식으로 변경하면 다음과 같다.
(135)R(t)=R0Exp(tLog(R0R1))=R0(R0R1)t

Rt를 Rodrigues 공식 (86)을 사용하여 다시 표현하면 다음과 같다.
(136)R(t)=R0(I+sin(tΔϕ)[u]×+(1cos(tΔϕ))[u]×)

Method 2 다른 구의 선형보간 방법은 쿼터니언 대수학을 사용하거나 manifold에 종속되지 않는 방법이다. 위 그림에서 보면 q0,q1은 단위 원 내에 존재하는 단위벡터로 볼 수 있다. 보간함수 q(t)q0q1의 최단거리를 동일한 각속도로 움직이는 단위벡터로 생각할 수 있다. 최단거리는 두 지점을 포함하는 하나의 평면 호(planar arc)를 형성하는데 이를 π 평면이라고 정의한다.

첫 번째 접근 방법은 두 단위벡터 q0,q1 사이의 각도를 대수학적으로 구하는 것이다.
(137)cos(Δθ)=q0q1Δθ=arccos(q0q1)

다음으로 π 평면 내에서 두 개의 직교하는 basis {q0,q]}를 정의한다. qq1q0에 대해 직교화한 basis 벡터를 의미한다.
(138)q=q1(q0q1)q0q1(q0q1)q0



따라서 q1은 다음과 같이 나타낼 수 있다.
(139)q1=q0cosΔθ+qsinΔθ

따라서 보간함수 q(t)q0π 평면을 따라 각도 tΔθ만큼 움직이는 함수가 된다.
(140)q(t)=q0cos(tΔθ)+qsin(tΔθ)

Method 3 이와 유사한 방법으로 Glenn Davis in Shoemake (1985)가 제안한 방법이 있다. 이 방법은 q0,q1이 속한 π 평면 내에 임의의 벡터는 선형조합(linear combination)을 통해 나타낼 수 있는 성질을 활용한다. Δθ를 (137)을 통해 계산하고 q를 (139)을 통해 구한 후 (140)에 넣으면 다음과 같다. 이 때, sin(ΔθtΔθ)=sinΔθcostΔθcosΔθsintΔθ의 성질을 활용함으로써 Davis's formula를 얻을 수 있다.
(141)q(t)=q0sin((1t)Δθ)sin(Δθ)+q1sin(tΔθ)sinΔθ

위 식을 s=1t과 같이 치환하여 표현하면 다음과 같은 대칭성을 가진다.
(142)q(s)=q1sin((1s)Δθ)sin(Δθ)+q0sin(sΔθ)sin(Δθ)

이는 위 공식과 q0,q1이 바뀐 것을 제외하고 정확히 동일하다.

앞서 소개한 모든 쿼터니언 기반의 구의 선형보간 방법들(SLERPs)들은 보간하는 실제 회전각도가 ϕπ와 같은 조건을 가진다. 하지만 이전 챕터에서 설명한 쿼터니언의 SO(3) double cover 성질에 의해, 실제 단위 쿼터니언 공간에서 수행되는 보간은 Δθπ/2를 만족해야 한다. 따라서 만약 cos(Δθ)=q0q1<0이면 q1q1로 치환한 후 보간을 수행한다.

2.8 Quaternion and isoclinic rotations: explaining the magic

본 섹션에서는 다음 두 질문에 대한 답변을 제시한다. Joan Solà는 이를 마법(magic)이라고 부른다.

  • qxq 연산이 벡터 x를 회전하는 공식이 되는가?
  • 왜 쿼터니언을 생성할 때 회전하고자 하는 각도의 절반의 각도를 입력해야 하는가? q=eϕ/2=[cosϕ/2,usinϕ/2]?

위 질문에 답을 하기 위해서는 대수적으로 단위 쿼터니언 곱이 벡터의 회전이라는 것을 증명한 (116) 이상의 기하학적인 설명이 필요하다. (123)을 다시 보면 다음과 같다.
(143)qxq=[q]R[q]L[0x]=[0Rx]

단위 쿼터니언 q은 다음 두 성질을 만족한다.
(144)[q][q]=I4det([q])=+1

이는 SO(4)의 성질과 동일하다. 즉, 단위 쿼터니언은 R4 공간에서 회전행렬을 의미한다. 구체적으로 말하면, 단위 쿼터니언의 곱은 R4 공간에서 등복각회전(isoclinic rotation)을 수행한다. 따라서 (123)은 R4 공간에서 x가 2번의 등복각회전을 수행하는 것을 의미한다. 등복각회전을 이해하기 위해서는 우선 R4 공간에서 일반적인 회전을 이해해야 한다.

다음은 양영욱님의 저서 수학으로 시작하는 3D 게임 개발에 회전 관련 챕터 내용을 주로 참고하여 작성하였다. 2차원 R2 공간에서 회전은 점을 중심으로 회전한다. 그리고 3차원 R3 공간에서 회전은 선을 중심으로 회전한다. 두 차원에서 회전의 공통점이 있다면 점들은 회전하면서 반드시 원을 그린다 사실이다. R2 공간에서는 이러한 원들이 모두 한 평면 공간상에 존재하지만 R3 공간에서는 서로 평행한 여러 평면에 존재한다.


어느 차원에서든 점이 회전하면 당연히 원이 그려지며 그 원이 존재하는 평면이 있게 된다. 따라서 회전을 점이나 선을 기준으로 하지 않고 특정 면을 기준으로 보면 차원과 상관없이 회전을 정의할 수 있으며 이러한 평면을 회전평면(rotation plane)이라고 부른다. 회전이 성립하려면 우선 2차원의 면이 존재해야하므로 1차원에서는 회전이 불가능함을 알 수 있다. R2 공간에서는 2차원 회전평면을 제외하면 0차원 (2차원-2차원)이 남기 때문에 점을 중심으로 회전한다고 볼 수 있고 R3 공간에서는 2차원 회전평면을 제외한 1차원 (3차원-2차원)이 남기 때문에 선을 중심으로 회전한다고 볼 수 있다. 따라서 이를 확장하면 R4 공간에서는 2차원 회전평면을 제외하면 2차원 (4차원-2차원)이 남기 때문에 R4 공간에서 회전은 면을 중심으로 회전한다는 것을 알수 있다.

하지만 우리는 R4 공간에서 면을 중심으로 회전하는 것을 쉽게 생각할 수 없으므로 이를 2차원 면이 아닌 1차원의 회전축 2개를 중심으로 회전한다고 생각해볼 수 있다. 그렇다면 각각의 회전축과 수직을 이루는 회전평면 2개를 생각할 수 있다. 즉, R4 공간에서 회전은 회전평면 πA,πB 상에서 각각 α,β 각만큼 2개의 회전동시에 일어난다고 볼 수 있다. 이 때, πA,πB 평면은 서로 직교(orthogonal)하며 이런 회전을 이중회전(double rotation)이라고 부른다. 만약 회전각 α,β가 같다면 특별히 이를 등복각 회전(isoclinic rotation)이라고 부른다.


앞서 소개한 단위 쿼터니언 q의 곱은 이러한 R4 공간에서 등복각 회전을 의미하며 따라서 q를 곱하는 것의 기하학적 의미는 R4 공간에 존재하는 두 개의 회전평면 πA,πB에서 θ만큼 동시에 두 회전이 일어나게 되는 것을 말한다. 흥미로운 점은 이러한 두 개의 회전평면 πA,πB 중 하나의 회전평면은 쿼터니언의 벡터를 이루는 i,j,k축을 중심으로 회전하는 3차원 공간의 회전평면이라는 사실이다. 따라서 우리는 3차원 공간 상에서 순수 쿼터니언(pure quaternion)으로 변형된 벡터 x가 회전하는 것을 원하므로 하나의 회전평면에서만 회전이 일어나게끔 해야한다.

등복각 회전에는 왼쪽 등복각(left-isoclinic) 회전과 오른쪽 등복각(right-isoclinic) 회전이 존재한다. 왼쪽 등복각 회전은 단위 쿼터니언을 왼쪽에서 곱했을 때 나타나고 오른쪽 등복각 회전은 오른쪽에서 곱했을 때 나타난다.
(145)qx:Left isoclinic rotationxq:Right isoclinic rotation

이 때, 두 회전의 곱셈은 교환법칙을 만족한다.
(146)[q]R[q]L=[q]L[q]R

i,j,k 축이 이루는 3차원의 회전평면을 πA라고 하고 나머지 회전평면을 πB라고 했을 때, 실제 벡터가 회전하려면 πA에서만 회전이 일어나고 πB에서는 회전이 발생하면 안된다. 왼쪽 등복각 회전은 πA에서 반시계 방향 회전이 일어나고 πB에서도 반시계 방향 회전이 일어나는 반면, 오른쪽 등복각 회전은 πA에서 시계방향 회전이 일어나고 πB에서 시계방향 회전이 일어난다. 즉, πA는 단위 쿼터니언을 곱하는 방향에 따라 회전의 방향이 바뀌지만 πB에서는 방향에 상관없이 항상 같은 방향의 회전이 일어난다. 따라서 단위 쿼터니언을 양쪽에 곱하면 πA 평면의 회전은 상쇄되어 없어지고 πB 평면 상의 회전만 반시계 방향으로 연달아 두 번 하는 것과 동일한 효과를 얻는다.



하지만 우리의 목적은 πA에서만 회전이 일어나는 것을 원하므로 오른쪽 등복각 회전에 반대 방향의 단위 쿼터니언 q을 곱해줌으로써 πB 평면의 회전을 상쇄시켜줌과 동시에 πA2θ만큼 회전을 수행할 수 있다. 이러한 기하학적 이유로 인해 단위 쿼터니언의 곱이 qxq가 된다.
(147)[0x]=qxq=[q]R[q]L[0x]


단위 쿼터니언 곱은 하나의 동등한 R4 행렬로 나타낼수 있다.
(148)R4[q]R[q]L=[q]L[q]R=[100R]

이 때, RR3 공간에서 회전행렬을 의미하며 R4R4의 부분공간인 R3 공간 내의 벡터를 회전시키는 행렬이 된다.

References

[1] Sola, Joan. "Quaternion kinematics for the error-state Kalman filter." arXiv preprint arXiv:1711.02508 (2017).