【TIPS】PX4姿态解算基本原理(下)

姿态解算基本方法

陀螺仪测量绕三个轴转动的角速度,因此利用陀螺仪的输出值进行一段时间的积分可以得到一组姿态角。但是这组角度值为陀螺仪自身坐标系下的角度值,若要求得导航坐标系下的姿态角,一般利用陀螺信号通过与欧拉角、方向余弦矩阵或四元数进行微分的方法进行姿态信息的更新。

欧拉角法

假设陀螺仪在第n个时刻的航向角为 ϕ \phi ϕ,横滚角为 θ \theta θ,俯仰角为 ψ \psi ψ,其含义为陀螺仪从初始位置,经过绕 z z z轴旋转 ϕ \phi ϕ角度,绕 y y y轴旋转 θ \theta θ角度,绕 x x x轴旋转 ψ \psi ψ角度,得到了n时刻的姿态,此时需要计算n+1时刻的姿态。设n+1时刻的航向角为 ϕ + Δ ϕ \phi+\Delta\phi ϕ+Δϕ,横滚角为 θ + Δ θ \theta+\Delta\theta θ+Δθ,俯仰角为 ψ + Δ ψ \psi+\Delta\psi ψ+Δψ,该姿态也是n时刻经过了三次旋转得到的,要想计算n+1时刻的姿态,只要在n时刻姿态的基础上,加上对应的姿态角度变化量即可,姿态角度的变化量可以通过角速度与采用时间周期积分即可。

{ ψ ( n + 1 ) = ψ ( n ) + Δ ψ = ψ ( n ) + ( d ψ d t ) Δ t θ ( n + 1 ) = θ ( n ) + Δ θ = θ ( n ) + ( d θ d t ) Δ t ϕ ( n + 1 ) = ϕ ( n ) + Δ ϕ = ϕ ( n ) + ( d ϕ d t ) Δ t \begin{cases} \psi(n+1)=\psi(n)+\Delta\psi=\psi(n)+\Big(\displaystyle\frac{d\psi}{dt}\Big)\Delta t\\ \\ \theta(n+1)=\theta(n)+\Delta\theta=\theta(n)+\Big(\displaystyle\frac{d\theta}{dt}\Big)\Delta t\\ \\ \phi(n+1)=\phi(n)+\Delta\phi=\phi(n)+\Big(\displaystyle\frac{d\phi}{dt}\Big)\Delta t\\ \end{cases} ψ(n+1)=ψ(n)+Δψ=ψ(n)+(dtdψ)Δtθ(n+1)=θ(n)+Δθ=θ(n)+(dtdθ)Δtϕ(n+1)=ϕ(n)+Δϕ=ϕ(n)+(dtdϕ)Δt

从n时刻到n+1时刻需要经过三次绕轴旋转,三次绕轴旋转的角速度分别为 d ψ d t , d θ d t , d ϕ d t \displaystyle\frac{d\psi}{dt},\displaystyle\frac{d\theta}{dt},\displaystyle\frac{d\phi}{dt} dtdψ,dtdθ,dtdϕ,姿态角是以导航坐标系为参考,而陀螺仪读出的角速度 [ g x g y g z ] T \begin{bmatrix} g_x & g_y & g_z \end{bmatrix}^T [gxgygz]T是以载体坐标系为参考,因此需要将读到的数据经过变换,才能用于计算姿态的变化。

z z z轴旋转的角速度为 d ϕ d t \displaystyle\frac{d\phi}{dt} dtdϕ,三次旋转首先就是绕着 z z z轴旋转, [ 0 0 d ϕ d t ] T \begin{bmatrix} 0 & 0 & \displaystyle\frac{d\phi}{dt} \end{bmatrix}^T [00dtdϕ]T表示第一步绕 z z z轴转动的角速度,由于之后该坐标系还要经过绕 y y y轴和绕 x x x轴的两次旋转,因此 [ 0 0 d ϕ d t ] T \begin{bmatrix} 0 & 0 & \displaystyle\frac{d\phi}{dt} \end{bmatrix}^T [00dtdϕ]T经历两次旋转后也要经历两次变换, M x , M y M_x,M_y Mx,My表示绕 x , y x,y x,y轴的旋转矩阵, [ g x g y g z ] z T \begin{bmatrix} g_x & g_y & g_z \end{bmatrix}_z^T [gxgygz]zT表示绕 z z z轴的旋转角速度在两次旋转后的等效旋转角速度。

[ g x g y g z ] z = M x M y [ 0 0 d ϕ d t ] = [ 1 0 0 0 c o s ψ s i n ψ 0 − s i n ψ c o s ψ ] [ c o s θ 0 − s i n θ 0 1 0 s i n θ 0 c o s θ ] [ 0 0 d ϕ d t ] \left[ \begin{array}{c} g_x\\ g_y\\ g_z\\ \end{array} \right] _z=M_xM_y\left[ \begin{array}{c} 0\\ 0\\ \displaystyle\frac{d\phi}{dt}\\ \end{array} \right] =\left[ \begin{matrix} 1& 0& 0\\ 0& cos\psi& sin\psi\\ 0& -sin\psi& cos\psi\\ \end{matrix} \right] \left[ \begin{matrix} cos\theta& 0& -sin\theta\\ 0& 1& 0\\ sin\theta& 0& cos\theta\\ \end{matrix} \right] \left[ \begin{array}{c} 0\\ 0\\ \displaystyle\frac{d\phi}{dt}\\ \end{array} \right] gxgygz z=MxMy 00dtdϕ = 1000cosψsinψ0sinψcosψ cosθ0sinθ010sinθ0cosθ 00dtdϕ

同理,绕 y y y轴旋转的角速度 [ 0 d θ d t 0 ] T \begin{bmatrix} 0 & \displaystyle\frac{d\theta}{dt} & 0 \end{bmatrix}^T [0dtdθ0]T还要经过绕 x x x轴的旋转, M x M_x Mx表示绕 x x x轴的旋转矩阵, [ g x g y g z ] y T \begin{bmatrix} g_x & g_y & g_z \end{bmatrix}_y^T [gxgygz]yT表示绕 y y y轴的旋转角速度在一次旋转后的等效旋转角速度。

[ g x g y g z ] y = M x [ 0 d θ d t 0 ] = [ 1 0 0 0 c o s ψ s i n ψ 0 − s i n ψ c o s ψ ] [ 0 d θ d t 0 ] \left[ \begin{array}{c} g_x\\ g_y\\ g_z\\ \end{array} \right] _y=M_x\left[ \begin{array}{c} 0\\ \displaystyle\frac{d\theta}{dt}\\ 0\\ \end{array} \right] =\left[ \begin{matrix} 1& 0& 0\\ 0& cos\psi& sin\psi\\ 0& -sin\psi& cos\psi\\ \end{matrix} \right] \left[ \begin{array}{c} 0\\ \displaystyle\frac{d\theta}{dt}\\ 0\\ \end{array} \right] gxgygz y=Mx 0dtdθ0 = 1000cosψsinψ0sinψcosψ 0dtdθ0

同理,绕 x x x轴旋转的角速度 [ d ψ d t 0 0 ] T \begin{bmatrix} \displaystyle\frac{d\psi}{dt} & 0 & 0 \end{bmatrix}^T [dtdψ00]T不需要经过旋转, [ g x g y g z ] x T \begin{bmatrix} g_x & g_y & g_z \end{bmatrix}_x^T [gxgygz]xT表示绕 x x x轴的旋转角速度的等效旋转角速度。

[ g x g y g z ] x = [ d ψ d t 0 0 ] \left[ \begin{array}{c} g_x\\ g_y\\ g_z\\ \end{array} \right] _x=\left[ \begin{array}{c} \displaystyle\frac{d\psi}{dt}\\ 0\\ 0\\ \end{array} \right] gxgygz x= dtdψ00

将绕三轴旋转的角速度经过旋转变换的等效旋转角速度进行相加,即是n+1时刻陀螺仪读出的角速度 [ g x g y g z ] T \begin{bmatrix} g_x & g_y & g_z \end{bmatrix}^T [gxgygz]T

[ g x g y g z ] = [ 1 0 0 0 c o s ψ s i n ψ 0 − s i n ψ c o s ψ ] [ c o s θ 0 − s i n θ 0 1 0 s i n θ 0 c o s θ ] [ 0 0 d ϕ d t ] + [ 1 0 0 0 c o s ψ s i n ψ 0 − s i n ψ c o s ψ ] [ 0 d θ d t 0 ] + [ d ψ d t 0 0 ] = [ 1 0 − s i n θ 0 c o s ψ c o s θ s i n ψ 0 − s i n ψ c o s θ c o s ψ ] [ d ψ d t d θ d t d ϕ d t ] \begin{aligned} \begin{bmatrix} g_x \\ g_y \\ g_z \end{bmatrix} &= \begin{bmatrix} 1 & 0 & 0\\ 0 & cos\psi & sin\psi\\ 0 & -sin\psi & cos\psi \end{bmatrix} \begin{bmatrix} cos\theta & 0 & -sin\theta\\ 0 & 1 & 0\\ sin\theta & 0 & cos\theta \end{bmatrix} \begin{bmatrix} 0 \\ 0 \\ \displaystyle\frac{d\phi}{dt} \end{bmatrix} + \begin{bmatrix} 1 & 0 & 0\\ 0 & cos\psi & sin\psi\\ 0 & -sin\psi & cos\psi \end{bmatrix} \begin{bmatrix} 0 \\ \displaystyle\frac{d\theta}{dt} \\ 0 \end{bmatrix} + \begin{bmatrix} \displaystyle\frac{d\psi}{dt} \\ 0 \\ 0 \end{bmatrix}\\ &= \begin{bmatrix} 1 & 0 & -sin\theta\\ 0 & cos\psi & cos\theta sin\psi\\ 0 & -sin\psi & cos\theta cos\psi \end{bmatrix} \begin{bmatrix} \displaystyle\frac{d\psi}{dt} \\ \displaystyle\frac{d\theta}{dt} \\ \displaystyle\frac{d\phi}{dt} \end{bmatrix} \end{aligned} gxgygz = 1000cosψsinψ0sinψcosψ cosθ0sinθ010sinθ0cosθ 00dtdϕ + 1000cosψsinψ0sinψcosψ 0dtdθ0 + dtdψ00 = 1000cosψsinψsinθcosθsinψcosθcosψ dtdψdtdθdtdϕ

对矩阵求逆,得:

[ d ψ d t d θ d t d ϕ d t ] = 1 c o s θ [ c o s θ s i n θ s i n ψ s i n θ c o s ψ 0 c o s θ c o s ψ − c o s θ s i n ψ 0 s i n ψ c o s ψ ] [ g x g y g z ] \left[ \begin{array}{c} \displaystyle\frac{d\psi}{dt}\\ \displaystyle\frac{d\theta}{dt}\\ \displaystyle\frac{d\phi}{dt}\\ \end{array} \right] =\frac{1}{cos\theta}\left[ \begin{matrix} cos\theta& sin\theta sin\psi& sin\theta cos\psi\\ 0& cos\theta cos\psi& -cos\theta sin\psi\\ 0& sin\psi& cos\psi\\ \end{matrix} \right] \left[ \begin{array}{c} g_x\\ g_y\\ g_z\\ \end{array} \right] dtdψdtdθdtdϕ =cosθ1 cosθ00sinθsinψcosθcosψsinψsinθcosψcosθsinψcosψ gxgygz

由上式即可用n+1时刻陀螺仪读出的角速度 [ g x g y g z ] T \begin{bmatrix} g_x & g_y & g_z \end{bmatrix}^T [gxgygz]T求出姿态角的旋转角速度,已知n时刻的姿态角,即可求出n+1时刻的姿态角。

这种使用直接使用欧拉角来更新姿态的方法物理意义直观明显,但是由于需要计算较多的三角函数,因此计算量较大,而且当俯仰角接近±90°时,矩阵中的 c o s θ cos\theta cosθ会等于0,这会导致出现奇异性问题,即万向节死锁现象。

方向余弦法

r n r_n rn是导航坐标系中的矢径, r b r_b rb是载体坐标系中的矢径, ω n \omega_n ωn是以导航坐标系为参考的载体坐标系旋转的角速度矩阵,由科氏定理有:

d r n d t = d r b d t + ω n × r n \frac{dr_n}{dt}=\frac{dr_b}{dt}+\omega_n\times r_n dtdrn=dtdrb+ωn×rn

在载体坐标系内,矢径 r b r_b rb的大小和方向是固定不变的,因此:

d r b d t = 0 \frac{dr_b}{dt}=0 dtdrb=0

从而有:

d r n d t = ω n × r n \frac{dr_n}{dt}=\omega_n\times r_n dtdrn=ωn×rn

陀螺仪测得的角速度是以载体坐标系为参考的旋转角速度矩阵 ω b = [ ω x ω y ω z ] T \omega_b=\begin{bmatrix}\omega_x & \omega_y & \omega_z\end{bmatrix}^T ωb=[ωxωyωz]T,所以将等式两边都变换到载体坐标系中,即:

d ( R b n r b ) d t = R b n ( ω b × r b ) \frac{d(R_b^n r_b)}{dt}=R_b^n(\omega_b \times r_b) dtd(Rbnrb)=Rbn(ωb×rb)

d R b n d t r b + R b n d r b d t = R b n ( ω b × ) r b \frac{dR_b^n}{dt}r_b+R_b^n\frac{dr_b}{dt}=R_b^n(\omega_b \times) r_b dtdRbnrb+Rbndtdrb=Rbn(ωb×)rb

d r b d t = 0 \displaystyle\frac{dr_b}{dt}=0 dtdrb=0代入, ( ω b × ) (\omega_b \times) (ωb×)为旋转角速度矩阵的反对称矩阵,记作 Ω b \Omega_b Ωb,有:

d R b n d t r b = R b n Ω b r b \frac{dR_b^n}{dt}r_b=R_b^n \Omega_b r_b dtdRbnrb=RbnΩbrb

最终得到旋转矩阵变化率与载体旋转角速率之间的关系:

d R b n d t = R b n Ω b \frac{dR_b^n}{dt}=R_b^n \Omega_b dtdRbn=RbnΩb

式中:

Ω b = ( ω b × ) = [ 0 − ω z ω y ω z 0 − ω x − ω y ω x 0 ] \Omega_b=(\omega_b \times)= \begin{bmatrix} 0 & -\omega_z & \omega_y\\ \omega_z & 0 & -\omega_x\\ -\omega_y & \omega_x & 0 \end{bmatrix} Ωb=(ωb×)= 0ωzωyωz0ωxωyωx0

对这个时变系数齐次微分方程可以利用毕卡逼近法求解,可得:

R b n ( t ) = R b n ( 0 ) + ∫ 0 t R b n ( τ ) Ω b ( τ ) d τ R_b^n(t)=R_b^n(0)+\int_0^t R_b^n(\tau) \Omega_b(\tau) d\tau Rbn(t)=Rbn(0)+0tRbn(τ)Ωb(τ)dτ
R b n ( t ) = R b n ( 0 ) [ I + ∫ 0 t Ω b ( τ ) d τ + ∫ 0 t ∫ 0 τ Ω b ( τ 1 ) d τ 1 Ω b ( τ ) d τ + ∫ 0 t ∫ 0 τ ∫ 0 τ 1 Ω b ( τ 2 ) d τ 2 Ω b ( τ 1 ) d τ 1 Ω b ( τ ) d τ + ⋯ ] R_b^n(t)=R_b^n(0)\bigg[ I+\int_0^t \Omega_b(\tau) d\tau +\int_0^t\int_0^\tau \Omega_b(\tau_1)d\tau_1 \Omega_b(\tau) d\tau +\int_0^t\int_0^\tau\int_0^{\tau_1} \Omega_b(\tau_2)d\tau_2 \Omega_b(\tau_1)d\tau_1 \Omega_b(\tau) d\tau +\cdots \bigg] Rbn(t)=Rbn(0)[I+0tΩb(τ)dτ+0t0τΩb(τ1)dτ1Ωb(τ)dτ+0t0τ0τ1Ωb(τ2)dτ2Ωb(τ1)dτ1Ωb(τ)dτ+]

级数收敛,若积分时段内 ω b \omega_b ωb的方向保持不变可得闭合解:

R b n ( t ) = R b n ( 0 ) e x p ( ∫ 0 t Ω b ( τ ) d τ ) R_b^n(t)=R_b^n(0)exp\left(\int_0^t \Omega_b(\tau) d\tau\right) Rbn(t)=Rbn(0)exp(0tΩb(τ)dτ)

进一步进行泰勒展开,得:

e x p ( Δ θ × ) = I + ( Δ θ × ) + ( Δ θ × ) 2 2 ! + ( Δ θ × ) 3 3 ! + ⋯ = I + [ 1 − Δ θ 2 3 ! + Δ θ 4 5 ! − ⋯ ] ( Δ θ × ) + [ 1 2 − Δ θ 2 4 ! + Δ θ 4 6 ! − ⋯ ] ( Δ θ × ) 2 = I + s i n Δ θ Δ θ ( Δ θ × ) + 1 − c o s Δ θ Δ θ 2 ( Δ θ × ) 2 \begin{aligned} exp(\Delta \theta \times)&= I+(\Delta \theta \times)+\frac{(\Delta \theta \times)^2}{2!}+\frac{(\Delta \theta \times)^3}{3!}+\cdots\\ &=I+\bigg[1-\frac{\Delta \theta ^2}{3!}+\frac{\Delta \theta ^4}{5!}-\cdots\bigg](\Delta \theta \times)+\bigg[\frac{1}{2}-\frac{\Delta \theta ^2}{4!}+\frac{\Delta \theta ^4}{6!}-\cdots\bigg](\Delta \theta \times)^2\\ &=I+\frac{sin\Delta \theta}{\Delta \theta}(\Delta \theta \times)+\frac{1-cos\Delta \theta}{\Delta \theta^2}(\Delta \theta \times)^2 \end{aligned} exp(Δθ×)=I+(Δθ×)+2!(Δθ×)2+3!(Δθ×)3+=I+[13!Δθ2+5!Δθ4](Δθ×)+[214!Δθ2+6!Δθ4](Δθ×)2=I+ΔθsinΔθ(Δθ×)+Δθ21cosΔθ(Δθ×)2

若等式 ( Δ θ 0 × ) = ∫ t t + Δ t Ω b ( τ ) d τ \displaystyle(\Delta \theta _0\times)=\int_{t}^{t+\Delta t} \Omega_b(\tau) d\tau (Δθ0×)=tt+ΔtΩb(τ)dτ成立,则微分方程的精确解为:

R b n ( t + Δ t ) = R b n ( t ) [ I + s i n Δ θ 0 Δ θ 0 ( Δ θ 0 × ) + 1 − c o s Δ θ 0 Δ θ 0 2 ( Δ θ 0 × ) 2 ] R_b^n(t+\Delta t)=R_b^n(t)\bigg[I+\frac{sin\Delta \theta_0}{\Delta \theta_0} (\Delta \theta_0 \times)+\frac{1-cos\Delta \theta_0}{\Delta \theta_0^2} (\Delta \theta_0 \times)^2\bigg] Rbn(t+Δt)=Rbn(t)[I+Δθ0sinΔθ0(Δθ0×)+Δθ021cosΔθ0(Δθ0×)2]

式中:

[ Δ θ 0 × ] = [ 0 − Δ θ z Δ θ y Δ θ z 0 − Δ θ x − Δ θ y Δ θ x 0 ] Δ θ 0 2 = ( Δ θ x ) 2 + ( Δ θ y ) 2 + ( Δ θ z ) 2 [\Delta \theta_0 \times]= \begin{bmatrix} 0 & -\Delta \theta_z & \Delta \theta_y\\ \Delta \theta_z & 0 & -\Delta \theta_x\\ -\Delta \theta_y & \Delta \theta_x & 0 \end{bmatrix}\\ \Delta \theta_0^2=(\Delta \theta_x)^2+(\Delta \theta_y)^2+(\Delta \theta_z)^2 [Δθ0×]= 0ΔθzΔθyΔθz0ΔθxΔθyΔθx0 Δθ02=(Δθx)2+(Δθy)2+(Δθz)2

运用方向余弦法进行姿态解算,避免了欧拉角法中的万向节死锁问题,可全姿态工作。但是解算矩阵微分方程时实质上是解算九个线性微分方程,计算量大,实时计算困难,所以工程上并不实用。

四元数法

四元数 Q Q Q的定义为:

Q = q 0 + q 1 i ⃗ + q 2 j ⃗ + q 3 k ⃗ Q=q_0+q_1\vec i+q_2\vec j+q_3\vec k Q=q0+q1i +q2j +q3k

式中 q 0 , q 1 , q 2 , q 3 q_0,q_1,q_2,q_3 q0,q1,q2,q3是实数, i ⃗ , j ⃗ , k ⃗ \vec i,\vec j,\vec k i ,j ,k 是相互正交的单位向量。

定义四元数的范数和模分别为:

∥ Q ∥ = q 0 2 + q 1 2 + q 2 2 + q 3 2 ∣ Q ∣ = q 0 2 + q 1 2 + q 2 2 + q 3 2 \parallel Q\parallel=q_0^2+q_1^2+q_2^2+q_3^2\\ |Q|=\sqrt{q_0^2+q_1^2+q_2^2+q_3^2} Q∥=q02+q12+q22+q32Q=q02+q12+q22+q32

∥ Q ∥ = 1 \parallel Q\parallel=1 Q∥=1,则称 Q Q Q为规范化四元数。

P = p 0 + p 1 i ⃗ + p 2 j ⃗ + p 3 k ⃗ P=p_0+p_1\vec i+p_2\vec j+p_3\vec k P=p0+p1i +p2j +p3k ,则两个四元数相乘的表达式为:

P ⊗ Q = r 0 + r 1 i ⃗ + r 2 j ⃗ + r 3 k ⃗ P\otimes Q=r_0+r_1\vec i+r_2\vec j+r_3\vec k PQ=r0+r1i +r2j +r3k

将上式写成矩阵形式,有:

[ r 0 r 1 r 2 r 3 ] = [ p 0 − p 1 − p 2 − p 3 p 1 p 0 − p 3 p 2 p 2 p 3 p 0 − p 1 p 3 − p 2 p 1 p 0 ] [ q 0 q 1 q 2 q 3 ] \left[ \begin{array}{c} r_0\\ r_1\\ r_2\\ r_3\\ \end{array} \right] =\left[ \begin{matrix} p_0& -p_1& -p_2& -p_3\\ p_1& p_0& -p_3& p_2\\ p_2& p_3& p_0& -p_1\\ p_3& -p_2& p_1& p_0\\ \end{matrix} \right] \left[ \begin{array}{c} q_0\\ q_1\\ q_2\\ q_3\\ \end{array} \right] r0r1r2r3 = p0p1p2p3p1p0p3p2p2p3p0p1p3p2p1p0 q0q1q2q3

四元数乘法满足分配率和结合律,不满足交换律。

四元数本身在物理意义上代表一个转动,又可以看成一个算子。一个坐标系相对另一个坐标系的相对转动可以用四元数唯一地表示出来,用四元数来描述载体坐标系相对导航坐标系的转动时,可得姿态矩阵的四元数表达式为:

R b n = [ q 0 2 + q 1 2 − q 2 2 − q 3 2 2 ( q 1 q 2 − q 0 q 3 ) 2 ( q 1 q 3 + q 0 q 2 ) 2 ( q 1 q 2 + q 0 q 3 ) q 0 2 − q 1 2 + q 2 2 − q 3 2 2 ( q 2 q 3 − q 0 q 1 ) 2 ( q 1 q 3 − q 0 q 2 ) 2 ( q 2 q 3 + q 0 q 1 ) q 0 2 − q 1 2 − q 2 2 + q 3 2 ] R_b^n= \begin{bmatrix} q_0^2+q_1^2-q_2^2-q_3^2 & 2(q_1q_2-q_0q_3) & 2(q_1q_3+q_0q_2)\\ 2(q_1q_2+q_0q_3) & q_0^2-q_1^2+q_2^2-q_3^2 & 2(q_2q_3-q_0q_1)\\ 2(q_1q_3-q_0q_2) & 2(q_2q_3+q_0q_1) & q_0^2-q_1^2-q_2^2+q_3^2 \end{bmatrix} Rbn= q02+q12q22q322(q1q2+q0q3)2(q1q3q0q2)2(q1q2q0q3)q02q12+q22q322(q2q3+q0q1)2(q1q3+q0q2)2(q2q3q0q1)q02q12q22+q32

可得出四元数与欧拉角的关系为:

{ ϕ = a r c t a n 2 ( q 2 q 3 + q 0 q 1 ) q 0 2 − q 1 2 − q 2 2 + q 3 2 θ = − a r c s i n [ 2 ( q 1 q 3 − q 0 q 2 ) ] ψ = a r c t a n 2 ( q 1 q 2 + q 0 q 3 ) q 0 2 + q 1 2 − q 2 2 − q 3 2 \begin{cases} \phi=arctan\displaystyle\frac{2(q_2q_3+q_0q_1)}{q_0^2-q_1^2-q_2^2+q_3^2}\\ \\ \theta=-arcsin[2(q_1q_3-q_0q_2)]\\ \\ \psi=arctan\displaystyle\frac{2(q_1q_2+q_0q_3)}{q_0^2+q_1^2-q_2^2-q_3^2}\\ \end{cases} ϕ=arctanq02q12q22+q322(q2q3+q0q1)θ=arcsin[2(q1q3q0q2)]ψ=arctanq02+q12q22q322(q1q2+q0q3)

{ q 0 = c o s ϕ 2 c o s θ 2 c o s ψ 2 + s i n ϕ 2 s i n θ 2 s i n ψ 2 q 1 = s i n ϕ 2 c o s θ 2 c o s ψ 2 − c o s ϕ 2 s i n θ 2 s i n ψ 2 q 2 = c o s ϕ 2 s i n θ 2 c o s ψ 2 + s i n ϕ 2 c o s θ 2 s i n ψ 2 q 3 = c o s ϕ 2 c o s θ 2 s i n ψ 2 + s i n ϕ 2 s i n θ 2 c o s ψ 2 \begin{cases} \displaystyle q_0=cos\frac{\phi}{2}cos\frac{\theta}{2}cos\frac{\psi}{2}+sin\frac{\phi}{2}sin\frac{\theta}{2}sin\frac{\psi}{2}\\ \\ \displaystyle q_1=sin\frac{\phi}{2}cos\frac{\theta}{2}cos\frac{\psi}{2}-cos\frac{\phi}{2}sin\frac{\theta}{2}sin\frac{\psi}{2}\\ \\ \displaystyle q_2=cos\frac{\phi}{2}sin\frac{\theta}{2}cos\frac{\psi}{2}+sin\frac{\phi}{2}cos\frac{\theta}{2}sin\frac{\psi}{2}\\ \\ \displaystyle q_3=cos\frac{\phi}{2}cos\frac{\theta}{2}sin\frac{\psi}{2}+sin\frac{\phi}{2}sin\frac{\theta}{2}cos\frac{\psi}{2}\\ \end{cases} q0=cos2ϕcos2θcos2ψ+sin2ϕsin2θsin2ψq1=sin2ϕcos2θcos2ψcos2ϕsin2θsin2ψq2=cos2ϕsin2θcos2ψ+sin2ϕcos2θsin2ψq3=cos2ϕcos2θsin2ψ+sin2ϕsin2θcos2ψ

四元数的微分方程为:

Q ˙ = 1 2 Q ⊗ ω b = 1 2 M ( ω b ) Q \dot Q=\frac{1}{2}Q\otimes\omega_b=\frac{1}{2}M(\omega_b)Q Q˙=21Qωb=21M(ωb)Q

式中:

M ( ω b ) = [ 0 − ω x − ω y − ω z ω x 0 ω z − ω y ω y − ω z 0 ω x ω z ω y − ω x 0 ] M(\omega_b)= \begin{bmatrix} 0 & -\omega_x & -\omega_y & -\omega_z\\ \omega_x & 0 & \omega_z & -\omega_y\\ \omega_y & -\omega_z & 0 & \omega_x\\ \omega_z & \omega_y & -\omega_x & 0 \end{bmatrix} M(ωb)= 0ωxωyωzωx0ωzωyωyωz0ωxωzωyωx0

把四元数微分方程展开成矩阵形式,得:

[ q ˙ 0 q ˙ 1 q ˙ 2 q ˙ 3 ] = 1 2 [ 0 − ω x − ω y − ω z ω x 0 ω z − ω y ω y − ω z 0 ω x ω z ω y − ω x 0 ] [ q 0 q 1 q 2 q 3 ] \left[ \begin{array}{c} \dot{q}_0\\ \dot{q}_1\\ \dot{q}_2\\ \dot{q}_3\\ \end{array} \right] =\frac{1}{2}\left[ \begin{matrix} 0& -\omega _x& -\omega _y& -\omega _z\\ \omega _x& 0& \omega _z& -\omega _y\\ \omega _y& -\omega _z& 0& \omega _x\\ \omega _z& \omega _y& -\omega _x& 0\\ \end{matrix} \right] \left[ \begin{array}{c} q_0\\ q_1\\ q_2\\ q_3\\ \end{array} \right] q˙0q˙1q˙2q˙3 =21 0ωxωyωzωx0ωzωyωyωz0ωxωzωyωx0 q0q1q2q3

由上式可求得姿态四元数 Q Q Q,将其代入姿态矩阵解析式可求姿态矩阵 R b n R_b^n Rbn,进而求得姿态角。

对于一阶常微分方程 { y ′ = f ( x , y ) y ( x 0 ) = y 0 \begin{cases}y^{'}=f(x,y)\\y(x_0)=y_0\end{cases} {y=f(x,y)y(x0)=y0,采用四阶龙格-库塔法求解,其数值解表达式为:

{ y n + 1 = y n + h 6 ( K 1 + 2 K 2 + 2 K 3 + K 4 ) K 1 = f ( x n , y n ) K 2 = f ( x n + h 2 , y n + h 2 K 1 ) K 3 = f ( x n + h 2 , y n + h 2 K 2 ) K 4 = f ( x n + h , y n + h K 3 ) \begin{cases} \displaystyle y_{n+1}=y_n+\frac{h}{6}(K_1+2K_2+2K_3+K_4)\\ K_1=f(x_n,y_n)\\ \displaystyle K_2=f(x_n+\frac{h}{2},y_n+\frac{h}{2}K_1)\\ \displaystyle K_3=f(x_n+\frac{h}{2},y_n+\frac{h}{2}K_2)\\ \displaystyle K_4=f(x_n+h,y_n+hK_3) \end{cases} yn+1=yn+6h(K1+2K2+2K3+K4)K1=f(xn,yn)K2=f(xn+2h,yn+2hK1)K3=f(xn+2h,yn+2hK2)K4=f(xn+h,yn+hK3)

对于四元数微分方程,应用上述公式,得到数值解表达式为:

{ Q ( t n + 1 ) = Q ( t n ) + h 6 ( K 1 + 2 K 2 + 2 K 3 + K 4 ) K 1 = 1 2 M [ ω b ( t n ) ] Q ( t n ) K 2 = 1 2 M [ ω b ( t n + h 2 ) ] [ Q ( t n ) + K 1 2 h ] K 3 = 1 2 M [ ω b ( t n + h 2 ) ] [ Q ( t n ) + K 2 2 h ] K 4 = 1 2 M [ ω b ( t n + h ) ] [ Q ( t n ) + K 3 h ] \begin{cases} \displaystyle Q(t_{n+1})=Q(t_n)+\frac{h}{6}(K_1+2K_2+2K_3+K_4)\\ \displaystyle K_1=\frac{1}{2}M[\omega_b(t_n)]Q(t_n)\\ \displaystyle K_2=\frac{1}{2}M[\omega_b(t_n+\frac{h}{2})][Q(t_n)+\frac{K_1}{2}h]\\ \displaystyle K_3=\frac{1}{2}M[\omega_b(t_n+\frac{h}{2})][Q(t_n)+\frac{K_2}{2}h]\\ \displaystyle K_4=\frac{1}{2}M[\omega_b(t_n+h)][Q(t_n)+K_3h] \end{cases} Q(tn+1)=Q(tn)+6h(K1+2K2+2K3+K4)K1=21M[ωb(tn)]Q(tn)K2=21M[ωb(tn+2h)][Q(tn)+2K1h]K3=21M[ωb(tn+2h)][Q(tn)+2K2h]K4=21M[ωb(tn+h)][Q(tn)+K3h]

式中:

h = t n + 1 − t n h=t_{n+1}-t_n h=tn+1tn

四元数的初值由惯导的初始对准确定。

{ R b n = [ q 0 2 + q 1 2 − q 2 2 − q 3 2 2 ( q 1 q 2 − q 0 q 3 ) 2 ( q 1 q 3 + q 0 q 2 ) 2 ( q 1 q 2 + q 0 q 3 ) q 0 2 − q 1 2 + q 2 2 − q 3 2 2 ( q 2 q 3 − q 0 q 1 ) 2 ( q 1 q 3 − q 0 q 2 ) 2 ( q 2 q 3 + q 0 q 1 ) q 0 2 − q 1 2 − q 2 2 + q 3 2 ] = [ r 11 r 12 r 13 r 21 r 22 r 23 r 31 r 32 r 33 ] q 0 2 + q 1 2 + q 2 2 + q 3 2 = 1 \begin{cases} R_{b}^{n}=\left[ \begin{matrix} q_{0}^{2}+q_{1}^{2}-q_{2}^{2}-q_{3}^{2}& 2(q_1q_2-q_0q_3)& 2(q_1q_3+q_0q_2)\\ 2(q_1q_2+q_0q_3)& q_{0}^{2}-q_{1}^{2}+q_{2}^{2}-q_{3}^{2}& 2(q_2q_3-q_0q_1)\\ 2(q_1q_3-q_0q_2)& 2(q_2q_3+q_0q_1)& q_{0}^{2}-q_{1}^{2}-q_{2}^{2}+q_{3}^{2}\\ \end{matrix} \right] =\left[ \begin{matrix} r_{11}& r_{12}& r_{13}\\ r_{21}& r_{22}& r_{23}\\ r_{31}& r_{32}& r_{33}\\ \end{matrix} \right]\\ q_{0}^{2}+q_{1}^{2}+q_{2}^{2}+q_{3}^{2}=1\\ \end{cases} Rbn= q02+q12q22q322(q1q2+q0q3)2(q1q3q0q2)2(q1q2q0q3)q02q12+q22q322(q2q3+q0q1)2(q1q3+q0q2)2(q2q3q0q1)q02q12q22+q32 = r11r21r31r12r22r32r13r23r33 q02+q12+q22+q32=1

可得四元数初值 q 0 , q 1 , q 2 , q 3 q_0,q_1,q_2,q_3 q0,q1,q2,q3的大小为:

{ ∣ q 0 ∣ = 1 2 1 + r 11 + r 22 + r 33 ∣ q 1 ∣ = 1 2 1 + r 11 − r 22 − r 33 ∣ q 2 ∣ = 1 2 1 − r 11 + r 22 − r 33 ∣ q 3 ∣ = 1 2 1 − r 11 − r 22 + r 33 \begin{cases} \displaystyle |q_0|=\frac{1}{2}\sqrt{1+r_{11}+r_{22}+r_{33}}\\ \displaystyle |q_1|=\frac{1}{2}\sqrt{1+r_{11}-r_{22}-r_{33}}\\ \displaystyle |q_2|=\frac{1}{2}\sqrt{1-r_{11}+r_{22}-r_{33}}\\ \displaystyle |q_3|=\frac{1}{2}\sqrt{1-r_{11}-r_{22}+r_{33}}\\ \end{cases} q0=211+r11+r22+r33 q1=211+r11r22r33 q2=211r11+r22r33 q3=211r11r22+r33

根据 { 4 q 0 q 1 = r 32 − r 23 4 q 0 q 2 = r 13 − r 31 4 q 0 q 3 = r 21 − r 12 \begin{cases}4q_0q_1=r_{32}-r_{23}\\4q_0q_2=r_{13}-r_{31}\\4q_0q_3=r_{21}-r_{12}\end{cases} 4q0q1=r32r234q0q2=r13r314q0q3=r21r12 q 0 , q 1 , q 2 , q 3 q_0,q_1,q_2,q_3 q0,q1,q2,q3的符号可由下式确定:

{ s i g n ( q 1 ) = s i g n ( q 0 ) s i g n ( r 32 − r 23 ) s i g n ( q 2 ) = s i g n ( q 0 ) s i g n ( r 13 − r 31 ) s i g n ( q 3 ) = s i g n ( q 0 ) s i g n ( r 21 − r 12 ) \begin{cases} sign(q_1)=sign(q_0)sign(r_{32}-r_{23})\\ sign(q_2)=sign(q_0)sign(r_{13}-r_{31})\\ sign(q_3)=sign(q_0)sign(r_{21}-r_{12})\\ \end{cases} sign(q1)=sign(q0)sign(r32r23)sign(q2)=sign(q0)sign(r13r31)sign(q3)=sign(q0)sign(r21r12)

描述刚体旋转的四元数为规范化四元数,但由于计算误差等各种因素的影响,计算过程中四元数会逐渐失去规范化特征,所以需要对四元数进行规范化处理。

q i = q ^ i q ^ 0 2 + q ^ 1 2 + q ^ 2 2 + q ^ 3 2 q_i=\frac{\hat q_i}{\sqrt{\hat q_0^2+\hat q_1^2+\hat q_2^2+\hat q_3^2}} qi=q^02+q^12+q^22+q^32 q^i

式中: i = 0 , 1 , 2 , 3 i=0,1,2,3 i=0,1,2,3 q ^ 0 , q ^ 1 , q ^ 2 , q ^ 3 \hat q_0,\hat q_1,\hat q_2,\hat q_3 q^0,q^1,q^2,q^3是四元数更新所得的值。

四元数法只需求解四个未知量的线性微分方程组,在进行数值积分时只需要进行加减法和乘法运算,计算量比欧拉角法和方向余弦法都小,且算法简单,易于操作,是较实用的工程方法。但四元数法对有限转动引起的不可交换误差的补偿程度不够,所以只适用于低动态运载体如运输机等的姿态解算;而对高动态运载体,姿态解算时的算法漂移会十分严重。

  • 39
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后厂村路练习生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值