Quaternions

2021. 4. 10. 23:56Notes/3D Vision

Reference: Quaternions*

3D 상에서 angle을 나타내는 방법중 하나인 quaternion에 대해서 공부해 보았다. Quaternion은 rotation matrix에 비해 파라미터 수도 적고 unique한 rotation을 구할 수 있어서 많이 쓰인다.

유래

Quaternion은 한국말로 사원수라고 불리는데 처음 생기게 된 유래는 a+bia+bi로 나타내어지는 복소수는 2차원의 복소 평면상에서 표현할 수가 있는데 3차원 공간을 표현하는 수는 없을까하는 관점에서 나왔다고 한다. 그래서 j2=1,ijj^2=-1, i\neq jjj를 새로 도입을 했을때 곱 연산에서 나오게 되는 ij,jiij,ji를 실수,ii,jj로 이루어진 수 체계에서 표현을 할 수가 없는 문제가 생겨 새롭게 k2=1,ki,kjk^2=-1,k\neq i, k\neq jkk를 새로 도입하여서 실수, i,j,ki, j, k로 이루어진 사원수라는 수 체계를 완성했다고 한다.

연산 규칙

i2=j2=k2=ijk=1jk=kj=iki=ik=jij=ji=ki^2=j^2=k^2=ijk=-1 \\ jk=-kj=i \\ ki=-ik=j \\ ij = -ji = k

곱셈에 대해서 교환법칙이 성립하지 않는다.

Quaternion Algebra

quaternion q가 있다고 하면 다음과 같이 나타낼 수 있다.

q=q0+q1i+q2j+q3kq=q_0+q_1\bold+q_2\bold+q_3\bold
  • Addition
p+q=(p0+q0)+(p1+q1)i+(p2+q2)j+(p3+q3)kp+q=(p_0+q_0)+(p_1+q_1)\bold+(p_2+q_2)\bold+(p_3+q_3)\bold
  • Multiplication
pq=p0qo(p1q1+p2q2+p3q3)+p0(q1i+q2j+q3k)+q0(p1i+p2j+p3k)+(p2q3p3q2)i+(p3q1p1q3)j+(p1q2p2q1)kpq=p_0q_o-(p_1q_1+p_2q_2+p_3q_3)+p_0(q_1\bold+q_2\bold+q_3\bold)+q_0(p_1\bold+p_2\bold+p_3\bold)+(p_2q_3-p_3q_2)\bold+(p_3q_1-p_1q_3)\bold+(p_1q_2-p_2q_1)\bold
  • Conjugate

    conjugate of qq, denoted qq^*

    q=q0q1iq2jq3k(q)=qq+q=2q0qq=q02+q12+q22+q32=qq(pq)=qpq^*=q_0-q_1\bold-q_2\bold-q_3\bold \\ (q^*)^*=q \\ q+q^*=2q_0 \\ qq^*=q_0^2+q_1^2+q_2^2+q_3^2=q^*q \\ (pq)^*=q^*p^*
  • Norm
    q=qqpq2=(pq)(pq)=pqqp=pq2p=ppq2=p2q2|q|=\sqrt \\ |pq|^2 = (pq)(pq)^* = pqq^*p^* = p|q|^2p^* = pp^*|q|^2=|p|^2|q|^2
  • Inverse
    q1=qq2q^{-1}=\frac{|q|^2}

Quaternion Rotation Operator

quaternion은 알다시피 변수가 4개인 4차원의 vector이다. 그러면 이 quaternion은 3차원상에서 어떤 형태로 존재하는가 하면 우선 real part가 0이 pure quaternion을 봐보자.

unit pure quaternion qq에 대해서 다음과 같은 연산을 정의하자

Lq(v)=qvq=(q02q)v+2(qv)q+2q0(q×v)Lq(v)=qvq=qvq=vL_q(\bold)=q\boldq^*=(q^2_0-||\bold||)\bold+2(\bold\cdot\bold)\bold+2q_0(\bold\times\bold) \\||L_q(\bold)||=||q\boldq^*||=|q|\cdot||v||\cdot|q^*|=||\bold||

우선 이 연산은 v\bold의 길이를 바꾸지 않는 연산이며 만약 v\boldq\bold랑 나란하다면 즉, v=kq\bold=k\bold의 형식으로 나타낼 수 있다면

qvq=q(kq)q=(q02q2)(kq)+2(qkq)q+2q0(q×kq)=k(q02+q2)q=kqq\boldq^*=q(k\bold)q^*=(q^2_0-||\bold||^2)(k\bold)+2(\bold\cdot k\bold)\bold+2q_0(\bold\times k\bold)\\=k(q_0^2+||\bold||^2)\bold=k\bold

q\bold와 나란한 어떤 vector도 LqL_q연산을 통해서 v\bold의 값을 바꿀 수 없다. 이러한 사실들을 통해서 LqL_qq\bold에 관한 rotation이 아닐까 하고 추측을 해볼 수 있다. 그리고 이 추측을 구체화 해볼 것이다.

우선 LqL_q operator는 linear operation 이다.

Lq(a1v1+a2v2)=a1Lq(v1)+a2Lq(v2)L_q(a_1\bold_1+a_2\bold_2)=a_1L_q(\bold_1)+a_2L_q(\bold_2)

Theorem 1. 모든 unit quaternion에 대해서

q=q0+q=cosθ2+u^sinθ2q=q_0+\bold=\cos\frac{\theta}+\hat\sin\frac{\theta}

이며 모든 vR3\bold\in\mathbb^3에 대해 LqL_q operator를 v\bold에 적용하는 것은 u^\hat를 축으로 해 angle을 θ\theta만큼 돌리는 vector의 rotation과 같다.

이 Theorem 1의 증명은 v\boldq\bold에 수직인 성분과 평행한 성분으로 나누어 Lq(v)L_q(\bold)를 전개해서 풀면 위에 설명한 회전에 해당하는 rotation matrix와 v\bold의 곱의 형태를 얻을 수 있게 되며 그 rotation matrix는 다음과 같다.

R=(q02q2)I3+2qqT+2q0q×q×=(0q3q2q30q1q2q10)R=(q^2_0-||\bold||^2)I_3+2\bold\bold^T+2q_0\bold_{\times} \\ q_{\times}=\begin 0 & -q_3&q_2\\q_3&0&-q_1\\-q_2&q_1&0\end

Theorem 2. 다음과 같은 모든 unit quaternion과

q=q0+q=cosθ2+u^sinθ2q=q_0+\bold=\cos\frac{\theta}+\hat\sin\frac{\theta}

모든 vR3\bold\in\mathbb^3에 대해서 LqL_v\bold에 적용하는 것은 v\bold를 가만히 두고 coordinate frame을 u^\hat를 축으로 해 θ\theta만큼 회전하는 것과 같다.

Quaternion Operator Sequences

ppqq를 unit quaternion이라 하면 u\bold에 우선 LpL_p를 적용하고 그 결과인 v\bold를 얻고 그 결과에 LqL_q를 적용해 w\bold를 얻는다고 하면 LqLpL_q\circ L_p의 계산은 다음과 같이 나타낼 수 있다.

LqLp(u)=Lq(v)=qvq=q(pup)q=(qp)u(qp)=Lqp(u)L_q\circ L_p(\bold)=L_q(\bold)=q\boldq^*=q(p\boldp^*)q^*\\=(qp)\bold(qp)^*=L_(\bold)

'Notes > 3D Vision' 카테고리의 다른 글

Darboux Frame  (0) 2021.04.10
ICP(Iterative Closest Algorithm) 정리  (0) 2021.04.10