회전과 로보틱스 / NOTE 12

쿼터니언에서 오일러각으로

Quaternion → Euler

회전행렬을 거쳐 Roll·Pitch·Yaw를 구하는 식을 살펴봅니다.

♫ 이 문서 듣기

개념에서 수식으로

먼저 이해할 내용

자세 계산은 쿼터니언으로 수행하더라도 결과를 Roll·Pitch·Yaw로 읽고 싶을 수 있다. 이 글에서는 쿼터니언을 회전행렬 성분에 연결한 뒤, 그 성분에서 세 각도를 구하는 과정을 다룬다.

기호를 먼저 읽기

q₁ … q₄
입력 쿼터니언의 네 성분
φ, θ, ψ
출력할 세 회전각
ArcTan[x,y]
원문의 두 인수 아크탄젠트
ArcSin[·]
사인 값에서 각도를 읽는 역함수

이 글의 흐름

먼저 원문의 ArcTan 인수 정의를 확인한다. 각도식에 들어가는 행렬 성분을 찾고, 그 자리에 쿼터니언 성분식을 넣은 관계를 읽는다.

역삼각함수의 입력을 먼저 확인한다

원문은 ArcTan[x,y]를 y/x의 각도로 설명한다. 따라서 첫 인수와 둘째 인수의 역할을 읽은 뒤 코드의 함수 인수 순서와 맞춘다. 분수 y/x만 계산하면 두 값의 부호 조합을 잃을 수 있으므로, 두 인수 표기의 의미를 유지한다.

주제와 표기

Quaternion BAq^ →Rotation MatrixABR→Euler Angle (Roll φ x^B, Pitch θ y^B, Yaw ψ z^B, ZYX)

ArcTan[x,y] gives the arc tangent of y/x
φ around x^B, θ around y^B, ψ around z^B

각도에 필요한 행렬 성분을 q로 바꾼다

Roll은 r₃₃과 r₃₂, Pitch는 r₃₁, Yaw는 r₁₁과 r₂₁의 관계로 읽는다. 다음 등호 뒤의 q 성분식은 같은 값을 쿼터니언으로 표현한 것이다. q₁² 등의 제곱항과 서로 다른 성분의 곱을 구분해 계산한다.

ABR=(r11r12r13r21r22r23r31r32r33)=Rz^[ψ]Ry^[θ]Rx^[ϕ]
ϕ=ArcTan[ABR33,ABR32]=ArcTan[2q121+2q42,2(q3q4q1q2)]
θ=arcsin[ABR31]=ArcTan[1ABR312,ABR31]=arcsin[2(q2q4+q1q3)]
ψ=ArcTan[ABR11,ABR21]=ArcTan[2q121+2q22,2(q2q3q1q4)]

반대 방향의 좌표 표기를 혼용하지 않는다

뒤에서는 좌표계 첨자가 다른 형태의 식을 다시 제시한다. 이를 별도의 확인 구간으로 읽고, 앞의 행렬과 무조건 같은 방향의 변환이라고 가정하지 않는다. 세 각도를 하나의 결과로 사용할 때에는 같은 좌표계 규약에서 계산한 값끼리 묶는다.

수식
ϕ=ArcTan[BAR33,BAR32]=ArcTan[2q121+2q42,2(q3q4q1q2)]
θ=arcsin[BAR31]=arcsin[2(q2q4+q1q3)]
ψ=ArcTan[BAR11,BAR21]=ArcTan[2q121+2q22,2(q2q3q1q4)]

정리하면

각도 복원에는 수식뿐 아니라 각도 구간의 선택이 필요하다. 좌표계가 바뀌거나 인수 순서를 뒤집으면 같은 숫자도 다른 자세로 해석될 수 있다.