회전과 로보틱스 / NOTE 04

회전행렬에서 쿼터니언으로

Matrix → Quaternion

회전행렬 성분과 쿼터니언 성분의 관계 및 유도 과정을 정리합니다.

♫ 이 문서 듣기

개념에서 수식으로

먼저 이해할 내용

이미 회전행렬을 알고 있다면, 그 안의 정보를 다시 쿼터니언 네 성분으로 정리할 수 있다. 이 글에서는 대각 성분을 더하거나 빼서 각 성분의 제곱을 분리하고, 나머지 성분의 차이로 부호를 정하는 흐름을 다룬다.

기호를 먼저 읽기

r₁₁, r₂₂, r₃₃
회전행렬의 세 대각 성분
q₁ … q₄
복원하려는 쿼터니언 성분
Sign[·]
값의 부호를 구별하는 연산
q₁²+q₂²+q₃²+q₄²
단위 쿼터니언에서는 1이 되는 합

이 글의 흐름

결과식을 먼저 살핀 뒤 단위 길이 조건을 사용하여 대각 성분 조합을 정리한다. 각 조합이 4qᵢ²로 모이는 과정을 확인하면 제곱근과 1/2 계수가 등장하는 이유를 이해할 수 있다.

크기를 구하는 식과 부호를 정하는 식을 나눈다

q₁은 대각 성분의 합으로 구하고, q₂·q₃·q₄는 대각 성분의 차이와 Sign 항을 함께 사용한다. 제곱근은 성분의 크기에 관련되고, Sign은 방향에 관련된다. 따라서 제곱근 부분만 계산해서는 전체 쿼터니언을 결정한 것으로 볼 수 없다.

주제와 표기

Rotation MatrixABR →QuaternionBAq^

q1=12r11+r22+r33+1
q2=Sign[r32r23]2r11r22r33+1
q3=Sign[r13r31]2r22r33r11+1
q4=Sign[r21r12]2r33r11r22+1

Rotation Matrix BAR → Quaternion BAq^

수식

1

단위 길이 조건을 이용해 항을 묶는다

먼저 네 성분의 제곱합이 1이라는 조건을 둔다. 다음으로 r₁₁+r₂₂+r₃₃+1에 각 대각 성분의 표현을 대입한다. 같은 종류의 항을 묶고 제곱합을 1로 바꾸면 4q₁²가 남는다.

BAq^=(q1q2q3q4)
q12+q22+q32+q42=1

2

r11+r22+r33+1
=(2q121+2q22)+(2q121+2q32)+(2q121+2q42)+1
=2(1+2q12+q12+q22+q32+q42)=2(1+2q12+1)
=4q12

다른 성분도 같은 방식으로 분리한다

대각 성분의 부호 조합을 바꾸면 q₂², q₃², q₄²를 각각 남길 수 있다. 네 식의 모양을 따로 외우기보다 어떤 대각 성분은 더하고 어떤 성분은 빼는지 비교한다. 마지막 q₄ 전개의 중간에는 a₄라는 표기도 나타나므로, q₄와의 동일성이 별도 정의 없이 확정된 것으로 읽지 않는다.

r11r22r33+1
=(2q121+2q22)(2q121+2q32)(2q121+2q42)+1
=2(1+q12q22+q32+q42)=2(12q22+q12+q22+q32+q42)=2(12q22+1)
=4q22
r11+r22r33+1
=(2q121+2q22)+(2q121+2q32)(2q121+2q42)+1
=2(1+q12+q22q32+q42)=2(12q32+q12+q22+q32+q42)=2(12q32+1)
=4q32
r11r22+r33+1
=(2q121+2q22)(2q121+2q32)+(2q121+2q42)+1
=2(1+q12+q22+q32q42)=2(12a42+q12+q22+q32+q42)=2(12a42+1)
=4q42

3

분리한 제곱을 성분으로 되돌린다

4qᵢ²에서 성분을 얻으면 제곱근 앞에 1/2이 붙는다. 나머지 부호는 처음 제시한 차이와 Sign 항으로 연결된다. 근호 안이 허용 범위에 있는지, 선택한 부호식이 0이 되는지까지 확인해야 실제 계산으로 옮길 수 있다.

q1=12r11+r22+r33+1
q2=Sign[r32r23]2r11r22r33+1
q3=Sign[r13r31]2r22r33r11+1
q4=Sign[r21r12]2r33r11r22+1

정리하면

대각 성분의 조합은 쿼터니언 성분의 크기를, 비대각 성분의 차이는 부호 선택의 단서를 제공한다. 다만 부호식이 0이 되는 경우까지 모든 회전에서 자동으로 해결된다고 단정하지 않는다.