四元數的筆記

定義

四元數 \(h = a + bi + cj + dk\)ide

共軛: $ h^* = a -bi -cj -dk$函數

逆: $ h^{-1} = \frac{h^*}{|h|^2}$spa

因此單位四元數的共軛等於他的逆code

單位四元數(絕對值爲1的四元數)若實部爲cos(t),它的共軛做用是一個角度爲2t的轉動,轉軸爲虛部的方向。orm

四元數的優勢是:blog

  • 表達式無奇點,無萬向鎖(和例如歐拉角之類的表示相比)
  • 比矩陣更簡煉,旋轉矩陣有9個變量(也更快速)
  • 單位四元數能夠表示四維空間中的一個轉動。

只有單位四元數才能表示旋轉,因此在Eigen中通常會有quaternion.normialzed()進行歸一化的處理get

任給一個單位四元數q,計算它的虛部,咱們就立刻能夠知道轉軸是什麼,計算一個單位四元數的實部,它的反餘弦值給出旋轉角的一半。在四元數表示下,計算轉軸和旋轉角變得異常簡單。io

四元數的微分

當咱們使用旋轉軸加上旋轉角表示旋轉的時候,咱們定義以下class

\(v =u \theta\) , u是單位向量,\(\theta = ||v||\)pdf

而且由泰勒展開,咱們有, \(e^v = e^{u\theta} = cos\theta + usin\theta\)

記住一個繞軸u旋轉\(\theta\)角度的旋轉,表示成四元數的時候是作兩次旋轉,對應的q是\(cos(\frac {\theta}{2}) + u sin(\frac {\theta}{2})\) = $
\begin{bmatrix}
cos(\frac {\theta}{2}) \
u sin(\frac {\theta}{2}) \
\end{bmatrix}$

\[x^{'} = q \bigotimes x \bigotimes q^{*} = Rx\]

對應的當咱們旋轉很小的角度,\(\theta\) --> 0的時候,咱們對上面的矩陣和e函數求近似值,有

對時間求微分

\[ \frac {d q(t)}{dt} = lim \frac{q(t+\Delta t) - q(t)}{\Delta t}\]

代入就有

\[ \frac {d R(t)}{dt} = lim \frac{\Delta RR(t) - R(t)}{\Delta t}\]

\[\omega _L = \frac{d\theta _L(t)}{dt}\]

\[\frac{d R^{e}_{b}}{dt} = [\sideset {^e} {}\omega] _{\times} R^{e}_{b}\]

\[\frac{d R^{e}_{b}}{dt} = R^{e}_{b} [\sideset {^b} {}\omega ]_{\times} \]

看上面的公式,角速度在不一樣的座標系表示下,一個是乘在左邊的一個是在右邊的,若是把右邊的一個R乘過去,

\[\dot{R(t)}R(t)^T = \phi(t)^\wedge\]

這個是否是很熟悉,就是李羣和李代數之間的變換關係。

在下面的那篇論文中能夠證實,

說明李羣中對應的skew-matrix不是隨便選取的(不是隻要知足反對成矩陣的性質),是有必定的方法。\(\omega\)又叫作rotation vector. encodes the angle and axis of rotation

\[\dot q(t) = \frac{1}{2}q(t) \bigotimes \omega(t)\]

在一段時間內\([t_n,t_{n+1}]\),\(\dot \omega =0\),

上面的左邊就是\(e^{\omega \Delta t/2}\),根據上面說的這個指數對應的旋轉角是\(w_n \Delta t\),因此有,

\[q(n+1) = q(n) \bigotimes q\{w_n \Delta t\}\]

這樣咱們就有了相鄰時刻的四元數關係,上面的全部公式均可以在下面的論文找到。

Quaternion kinematics for the error-state Kalman filter

相關文章
相關標籤/搜索