Home Quaternion differentiation
Post
Cancel

Quaternion differentiation

[!] 이 문서에서 사용되는 \vec 표기는 벡터가 아니라 pure quaternion입니다. 예를 들어 w0+wxi+wyj+wzk 형태의 사원수. 또한 \hat은 표기는 unit quaternion 입니다.

[!] 아래 유도 과정을 이해 하기 위해선 사원수에 대한 이해가 필요합니다.

Intro

q^new=q^old+12wq^oldΔt

Angular velocity vector를 사원수 orientation에 적용(수치 적분) 하는 방법을 찾다가 위와 같은 식 발견했는데 많은 사람들이 유도 과정에 대한 이해는 생략하고 black box formula 처럼 사용하는듯 했다..

Quaternion differentiation

q^(t)t 에서의 rotation quaternion이고, r^은 unit time에 대한 rotational motion 이라고 생각한다면,

q^(0)=q^0 q^(t)=r^tq^0

위와 같이 쓸 수 있다.

unit quaternion r^은 오일러 공식을 이용해 아래와 같이 지수 함수로 표현 할 수 있다.

r^=eθ2u

여기서 u는 실수 부분이 0이고 벡터 파트는 회전축 단위 벡터인 pure quaternion 이다.

u=uxi+uyj+uzk

오일러 공식을 테일러 급수를 이용해 유도 할 때 ex의 x 자리에 i를 넣어 유도하는 부분을 기억하자. 허수 단위 i가 제곱해서 -1이 되듯 pure quaternion u도 제곱하면 -1이 된다. 즉 대수적 성질이 동일하다.

r^t=exp(θ2ut) q^(t)=exp(θ2ut)q^0

양변을 미분하면,

q^=θ2uexp(θ2ut)q^0 q^=θ2uq^

여기서 θu는 각속도 pure quaternion w 이기 때문에

q^=12wq^

위와 같은 미분방정식을 얻게 된다.

Integration

이제 각속도와 Orientation에 대한 미분 방정식이 주어졌으니, 일반적인 방법대로 수치적분을 하면 된다.

Δq^Δt12wq^0 Δq^12wq^0Δt q^1q^0+12wq^0Δt

여느 수치 적분법이 그렇듯 Δt가 크면 오류도 커진다. 더군다나 orientation을 나타내는 quaternion은 unit quaternion이어야 하기 때문에, 오류를 고려하여 시뮬레이션 중에 orientation을 renormalization하는 작업이 필요하다.

References

https://en.wikipedia.org/wiki/Quaternion
https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation
https://gamedev.stackexchange.com/questions/108920/applying-angular-velocity-to-quaternion

This post is licensed under CC BY 4.0 by the author.

Constraints in physics engine

Weighted Reservoir Sampling