이전 글을 반드시 참고할 것
https://normal-engineer.tistory.com/187?category=954775
쿼터니언 quaternion (1) 쿼터니언 개념과 오일러각
쿼터니언은 해밀턴이 고안한 대수체계인데, 이 대수체계가 회전과 연관이 있어서 물리에서 많이 사용된다. 이 글에서는 내가 생각하는 쿼터니언 개념 및 수학적인 계산, 표현을 정리해놓는다.
normal-engineer.tistory.com
쿼터니언 업데이트 식
navigation 문제에서 오일러각의 단점인 gimball lock을 피하기 위해, 오일러각을 사용하는 대신 쿼터니언을 이용해서 navigation frame에 대한 body frame의 각도를 계속 업데이트한다. 오일러각과 쿼터니언은 서로 바꿔가며 쓸 수 있기 때문이다.
따라서 쿼터니언에 대한 업데이트 식을 알아야 수치적으로 적분할 수 있다.
일단 쿼터니언의 미분값을 알아야 한다.
q(t)라는 쿼터니언이 Δt시간 후에 q(t+Δt)라는 벡터로 변할 때 쿼터니언의 시간변화율을 구해보자. 지금 이 과정은 navigation에서 사용하기 위한 과정이기 때문에 쿼터니언 q는 inertial frame에서 body frame으로 좌표 변환해주는 쿼터니언이다.
inertial frame에 대해서 body frame은 각 축마다 →ω=[P,Q,R]⊤의 각속도로 회전하고 있다.
t라는 시간에 →ω 각속도로 회전하는 경우 Δt동안 회전한 각도 μ가 있을 때
Δμ=ωΔt로 표현할 수 있다. 여기서 ω는 각속도 벡터의 크기라고 생각하면 된다.
→ω=Pi+Qj+Rk 는 이미 정해진 것이고 앞에서 Δμ와 오일러 축에 대한 표현으로 각속도를 표현하면 아래와 같다.
→ω=ω(cosαi+cosβj+cosγk)=ΔμΔt(cosαi+cosβj+cosγk)
두 식은 같으므로 아래의 관계식을 얻을 수 있다.
P=cosαΔμΔtQ=cosβΔμΔtR=cosγΔμΔt
그런데 우리는 q(t)라는 쿼터니언이 Δt라는 짧은 시간동안 회전한 쿼터니언을 알고 싶다. 이 쿼터니언을 알고 있어야 미소 시간에 대한 미소 쿼터니언 변화량을 구해서 쿼터니언의 시간 변화율을 구할 수 있기 때문이다.
시간 t일 때 오일러 축을 기준으로 Δμ가 회전할 때
q(Δ→μ)0=cos(Δμ2)≈1q(Δ→μ)1=cosαsinΔμ2≈cosαΔμ2q(Δ→μ)2=cosβsinΔμ2≈cosβΔμ2q(Δ→μ)3=cosγsinΔμ2≈cosγΔμ2
이 식을 우리가 알고 있는 각속도인 P,Q,R에 대해서 표현하고자 한다면 앞서 구했던 각속도와 Δμ에 대한 식을 이용한다.
즉, q(Δ→μ)≈1+12(PΔt)i+12(QΔt)j+12(RΔt)k
이제 q(Δ→μ)를 알고 있으므로 쿼터니언 미분을 구해보자.
이전 글에서 A에서 B를 거쳐 C라는 frame으로 회전하는 과정일 때 qCA=qBAqCB라고 표현했었다.
따라서 시간 t+Δt에 대한 쿼터니언은 다음과 같이 표현할 수 있다.
q(t+Δt)=q(t)q(Δ→μ)
미분의 정의를 이용해서 식을 써보자.
˙q=limΔt→0q(t+Δt)−q(t)Δt=limΔt→0q(t)[q(Δ→μ)−1]Δt=(q0+q1i+q2j+q3k)∗12(Pi+Qj+Rk)
이와 같이 ˙qBI=12qBIωBB/I로 나타낼 수 있다.
(지금까지 썼던 ω가 inertial frame(I)에서 본 body frame(B)의 각속도를 body frame 기준으로 표현한 것이므로 ωBB/I로 표기한다. 쿼터니언 qBI는 Inertial에서 body로 바꿔주는 회전을 나타낸다.)
많은 과정을 거쳐서 Inertial frame에서 body frame으로 가는 쿼터니언에 대한 미분을 구했다. 이 규칙은 다른 frame으로 바뀌더라도 동일하다.
그런데 사실 navigation에서 쿼터니언은 주로 navigation frame과 body frame 사이의 변환을 용이하게 하기 위해 둘 사이의 변환을 구하는 데에 사용된다.
즉 qBL가 qBI보다 중요한 것이다. (L은 navigation frame을 의미한다)
따라서 ˙qBL를 구해야한다.
˙qBI=12qBIωBB/I에서 I 대신 L로 바꾸면 되는 문제이지만 보통은 ωBB/L를 직접적으로 구하지 않으므로 다른 방식으로도 생각해보자.
qBL=qILqBI˙qBL=˙qILqBI+qIL˙qBI˙q′L=(˙qLI)∗=12(qLIωLL/I)∗=−12ωLL/IqIL˙qBL=−12ωLL/IqlLqBI+12q′LqBlωBB/I˙qBL=−12ωLL/IqBL+12qBLωBB/I
위의 과정을 거쳐 ωLL/I과 ωBB/I에 대한 쿼터니언 업데이트 식을 구할 수 있다. 두 각속도는 navigation 과정에서 구할 수 있는 것이므로, 이 값들로 업데이트 식을 표현한 것이라 이해해도 좋다.
사실 ωBB/L도 ωBB/I−CBLωLL/I로 구할 수 있어서 바로
˙qBL=12qBLωBB/L를 써도 되긴 하지만
위의 식이 더 편리하다.
NOTE
이 노트는
˙qBL=12qBLωBB/L와 ˙qBL=−12ωLL/IqBL+12qBLωBB/I가 같다는 것을 밝히기 위한 설명이다.
˙qBL=12qBLωBB/L=12qBL(ωBB/I−ωBB/L)
ωBB/L=(qBL)∗ωLL/IqBL 이 식을 위에 대입한다.
⇒˙qBL=12qBLωBB/I−12ωLL/IqBL
'항공우주 Aeronautical engineering' 카테고리의 다른 글
[추진] 추진공학에 대한 개요 (2) 분류 (0) | 2022.03.02 |
---|---|
[추진] 추진공학에 대한 개요 (1) 기본 원리 (0) | 2022.02.25 |
[항법] 쿼터니언 quaternion (1) 쿼터니언 개념과 오일러각 (1) | 2022.01.25 |
[비행동역학] Stick-free와 Stick-fixed static stability의 차이 (0) | 2022.01.06 |
[비행동역학] Lateral dynamics에 대한 이해 (0) | 2021.12.17 |