앞에서 우리는 회전 및 변환 행렬을 곱하여 어떤 점이나 좌표계를 transform하였다. 하지만 회전 행렬을 보면, R⊂SO(3)이므로 직교행렬(RTR=I) 및 det(R)=1이라는 제약조건이 붙는다. 이러한 제약조건은 회전 행렬에 대한 어떤 함수(error 등)을 최적화하기 어렵게 만든다. 또한 회전은 3개의 각도에 의해 정의되지만 회전행렬은 9개의 수가 사용되는 등의 중복성 문제 또한 가지고 있다. 따라서 이번 글에서는 회전 및 변환에 대한 여러가지 표현식과 최적화에 유용하게 사용할 수 있는 Lie Group 및 Lie Algebra에 대해 알아본다.
1. Euler Angle
이전 글에서 회전을 R3D(Ψ,ϕ,θ)=Rz(Ψ)Ry(ϕ)Rx(θ)와 같이 나타내었으며, 이는 순서대로 x축, y축, z축을 중심으로 회전변환을 수행했다는 의미이다. Euler angle은 단순하게 해당 각도를 (θ,ϕ,Ψ)와 같이 표현한 것이며, 각 각도를 roll-pitch-yaw라는 이름으로 부르기도 한다. 하지만 Euler angle은 짐벌락 등의 문제가 발생하기도 하여, 큰 시스템을 구축할 경우에는 잘 사용되지 않지만 각 모듈의 검증 시에 간단하게 적용해볼 수 있는 장점이 있다.
2. Rodrigues' Rotation Formula
로드리게스 식(Rodrigues' rotation formula)은 회전축이 되는 어떤 단위 벡터 nr과 회전 각도 θ가 주어졌을 때, 점 p에 대한 회전행렬을 구하는 식이다.
먼저 점 p를 회전축 nr에 평행한 성분과 수직한 성분으로 나눈다.
p∥=(nr⋅p)nrp⊥=p−p∥=p−(nr⋅p)nr
w=nr×p=nr×p⊥으로 nr,p⊥에 수직이며, nr,p 사이의 각도를 Ψ라고 하면 다음과 같다.
∣p⊥∣=∣p∣sinΨ=∣w∣
이제 p를 회전 시킨 prot를 구해보자. 먼저, p∥의 경우 회전축 nr을 기준으로 θ만큼 회전시켜도 그대로이므로, p∥,rot=p∥이다. p⊥,rot는 회전하더라도 ∣p⊥,rot∣=∣p⊥∣와 같이 크기 변화는 없지만 방향 변화가 있는데, 이를 우리가 알고있는 값인 p,nr등으로 나타내기 위하여 w,p⊥의 성분으로 다시 분해한다.
먼저, p⊥,rot의 p⊥방향 성분의 크기는 ∣p⊥,rot∣cosθ이지만, ∣p⊥,rot∣=∣p⊥∣이므로 ∣p⊥,rot∣cosθ=∣p⊥∣cosθ이며, 여기에 p⊥방향의 단위벡터 np⊥를 곱하여 p⊥방향 성분을 구하면 ∣p⊥∣cosθ⋅np⊥=p⊥cosθ이다.
마찬가지로 w방향 성분을 구하면 ∣p⊥,rot∣sinθ=∣p⊥∣sinθ=∣w∣sinθ→∣w∣sinθ⋅nw=wsinθ 이다.
이 두 결과를 결합하여 p⊥,rot를 구하고, 최종적으로 prot를 구하면 다음과 같다.
어떤 벡터들 a,b,c 에 대해서 a×(b×c)=(a⋅c)b+(a⋅b)c가 성립하는데(벡터의 삼중곱, (a×b)×c=−c×(a×b)), 이를 위에 적용하면 nr(nr⋅p)=nr×(nr×p)+p이다. 이를 prot의 식에 적용하여 외적을 skew-symmetric 행렬을 통해 나타내면 다음과 같다.
특별히 a2+b2+c2+d2=1이고, a=cos(θ/2),r=(b,c,d)=sin(θ/2)nr이라고 한다면, prot를 다음과 같이 쓸 수 있고(직접 대입해보면 유도할 수 있음), 이를 Euler-Rodrigues' rotation formula라고 한다 (가정에 θ/2가 나오지만 아래의 식은 θ만큼 회전한 점을 찾는 식이라는 것에 주의).
쿼터니온(Quaternion)은 회전의 또 다른 표현 방법이며, 다음과 같이 확장된 복소수 표현을 사용한다.
q=q0+q1i+q2j+q3k
여기서 i2=j2=k2=ijk=1이며, i,j,k사이의 곱에서 교환법칙은 성립하지 않는다. 따라서 추가적으로 k=ij=−ji등의 성질을 유추할 수 있다. 보통 쿼터니온을 표현할 경우 위의 식처럼 복소수 부분까지 모두 표현하지는 않고, q=(s,v),s=q0∈ℜ,v=(q1,q2,q3)∈ℜ3와 같이 실수부와 허수부를 나열한 형태로 표현한다.
이제 쿼터니온 기본 연산의 특성을 알아보자. 여기서는 두 쿼터니온 qa=(sa,va)=sa+xai+yaj+zak, qb=(sb,vb)=sb+xbi+ybj+zbk가 주어졌다고 가정한다.
합 또는 차: qa±qb=(sa±sb,va±vb)
곱: qaqb=(sasb−vaTvb,savb+sbva+va×vb), 각 성분 별로 모두 전개해보면 해당 식이 성립함을 알 수 있으며, 마지막 term의 외적에서 곱에 대한 교환법칙이 성립하지 않음을 볼 수 있다.
켤래: q∗=(s,−v), q∗q=qq∗=(s2+vTv,0)
크기(norm): ∣q∣=s2+x2+y2+z2, ∣qaqb∣=∣qa∣∣qb∣
역(inverse): q−1=q∗/∣q∣2,(qaqb)−1=qb−1qa−1
스칼라곱: kq=(ks,kv)
내적: qa⋅qb=sasb+xaxbi+yaybj+zazbk
일반적으로 쿼터니온에서 3차원 점을 나타내기 위하여 허수부에 해당하는 3개의 원소를 사용한다. 즉 p=(x,y,z)라는 점은 쿼터니온에서 pq=(0,p)=xi+yj+zk로 나타난다(이러면 실수부가 필요없는게 아닌가 하는 의문이 들 수 있지만 회전 변환 등에 사용됨).
이제 쿼터니온을 사용하여 회전 변환을 수행해보자. 우선 복소수에서의 회전은 다음과 같은 오일러 공식을 통해 표현할 수 있다.
eiθ=cosθ+sinθi
이때, 실수부가 0이고, 허수부(v)의 크기가 1인 쿼터니온을 단위 쿼터니온 nr이라고 할 때, 위의 곱셈 공식에서 nr2=−1이 됨을 확인할 수 있다. 따라서 단위 쿼터니온은 복소수 i와 같은 특성을 보이고, 오일러 공식에도 적용이 가능하다.
enrθ=cosθ+sinθnr=cosθ+sinθv=(cosθ,sinθv)
여기서 회전을 나타내는 오일러 공식의 결과가 (cosθ,sinθv)라는 쿼터니온으로 나타나는 것을 볼 수 있으며, 이를 점 pq에 적용하여 회전시키게 된다. 다만, 회전 변환 쿼터니온을 q라고 할 때, 축 v를 중심으로 θ만큼 회전시키기 위하여 q=(cos(θ/2),sin(θ/2)v)로 두며, 다음과 같이 곱한다.
qpqq−1=(0,p+2a(v×p)+2(v×(v×p)))
여기서 a=cos(θ/2)이며, 이 식은 앞에서 보았던 Euler-Rodrigues' rotation formula와 일치한다. 즉, qpqq−1이 쿼터니온을 이용한 회전변환임을 의미하며, 추가적으로 q−1=q∗이다. 또한 회전 쿼터니온의 형태에서 norm이 1이 되어야 함을 알 수 있다.
또한 Euler-Rodrigues' rotation formula에 쿼터니온을 대입하여 점 p에 대해 정리하면 회전 행렬 R을 구할 수 있으며, 이를 통해 쿼터니온에서 회전 행렬을 구하는 방법을 다음과 같이 알 수 있다 (q=q0+q1i+q2j+q3k).