Quaternion kinematics for ESKF-预测

前言

在看vins-mono, okvis, msckf等基于imu的vslam论文时,发现这些主流的slam前端vio都需要计算imu的预积分及其协方差,而计算方法类似,都是参考Quaternion kinematics for the error-state KFIndirect Kalman Filter for 3D Attitude Estimation,可见这两篇文章的影响力,抱着这样的好奇心开始了对其中一篇文章的阅读.

四元素和旋转操作(基础)

1. 四元素定义和表示形式

定义:
Q = a + b i + c j + d k Q=a+bi+cj+dk Q=a+bi+cj+dk
其中a为实部,(b,c,d)为虚部.也可表示成下面形式:
q = [ q w q v ] = [ q w q x q y q z ] \mathbf{q}=\begin{bmatrix} q_{w}\\ \mathbf{q}_{v} \end{bmatrix}=\begin{bmatrix} q_{w}\\ q_{x}\\ q_{y}\\ q_{z} \end{bmatrix} q=[qwqv]=qwqxqyqz
用一个四维向量表示,这个是最常见的表示形式

2. 一些四元素性质
  • 加法和乘法:
    p + q = [ p w + q w q v + p v ] p ⊗ q = [ p w q w − p x q x − p y q y − p z q z p w q x + p x q w + p y q z − p z q y p w q y − p x q z + p y q w + p z q x p w q z + p x q y − p y q x + p z q w ] \begin{matrix} \mathbf{p}+\mathbf{q}=\begin{bmatrix} p_{w}+q_{w}\\ \mathbf{q}_{v}+\mathbf{p}_{v} \end{bmatrix}\\ \mathbf{p}\otimes \mathbf{q}=\begin{bmatrix} p_{w}q_{w}-p_{x}q_{x}-p_{y}q_{y}-p_{z}q_{z}\\ p_{w}q_{x}+p_{x}q_{w}+p_{y}q_{z}-p_{z}q_{y}\\ p_{w}q_{y}-p_{x}q_{z}+p_{y}q_{w}+p_{z}q_{x}\\ p_{w}q_{z}+p_{x}q_{y}-p_{y}q_{x}+p_{z}q_{w} \end{bmatrix} \end{matrix} p+q=[pw+qwqv+pv]pq=pwqwpxqxpyqypzqzpwqx+pxqw+pyqzpzqypwqypxqz+pyqw+pzqxpwqz+pxqypyqx+pzqw
  • 左乘右乘矩阵:
    q 1 ⊗ q 2 = Q 1 + q 2 → Q 1 + = q w I + [ 0 − q v T q v [ q v ] × ] q 1 ⊗ q 2 = Q 2 − q 1 → Q 2 − = q w I + [ 0 − q v T q v − [ q v ] × ] [ q v ] × = [ 0 − q z q y q z 0 − q x − q y q x 0 ] \begin{matrix} \mathbf{q}_{1}\otimes \mathbf{q}_{2}=\mathbf{Q}_{1}^{+}\mathbf{q}_{2}\rightarrow \mathbf{Q}_{1}^{+}=q_{w}\mathbf{I}+\begin{bmatrix} 0 & -\mathbf{q}_{v}^{T}\\ \mathbf{q}_{v} & \begin{bmatrix} \mathbf{q}_{v} \end{bmatrix}_{\times } \end{bmatrix} \\ \mathbf{q}_{1}\otimes \mathbf{q}_{2}=\mathbf{Q}_{2}^{-}\mathbf{q}_{1}\rightarrow \mathbf{Q}_{2}^{-}=q_{w}\mathbf{I}+\begin{bmatrix} 0 & -\mathbf{q}_{v}^{T}\\ \mathbf{q}_{v} & -\begin{bmatrix} \mathbf{q}_{v} \end{bmatrix}_{\times } \end{bmatrix} \\ \begin{bmatrix} \mathbf{q}_{v} \end{bmatrix}_{\times }=\begin{bmatrix} 0 & -q_{z} & q_{y} \\ q_{z} & 0 & -q_{x} \\ -q_{y} & q_{x} & 0 \end{bmatrix} \end{matrix} q1q2=Q1+q2Q1+=qwI+[0qvqvT[qv]×]q1q2=Q2q1Q2=qwI+[0qvqvT[qv]×][qv]×=0qzqyqz0qxqyqx0
  • 共轭四元素:
    q ∗ = [ q w − q v ] \mathbf{q}^{*}=\begin{bmatrix} q_{w}\\ \mathbf{-q}_{v} \end{bmatrix} q=[qwqv]
  • 单位或归一化四元素性质:
    q − 1 = q ∗ \begin{matrix} \mathbf{q}^{-1}=\mathbf{q}^{*}\\ \end{matrix} q1=q
3. 旋转和交叉关系
  • 3D向量(也即旋转向量,轴角)表示旋转:
    ( u , θ ) u = u x i + u y j + u z k \begin{matrix} \left ( \mathbf{u},\theta \right ) \\ \mathbf{u}=u_{x}i+u_{y}j+u_{z}k \end{matrix} (u,θ)u=uxi+uyj+uzk
  • 四元素和旋转向量:
    q = [ cos ⁡ ( θ / 2 ) u sin ⁡ ( θ / 2 ) ] \begin{matrix} \mathbf{q}=\begin{bmatrix} \cos \left ( \theta /2 \right )\\ \mathbf{u}\sin \left ( \theta /2 \right ) \end{bmatrix} \end{matrix} q=[cos(θ/2)usin(θ/2)]
  • 旋转向量和旋转矩阵(Rodrigues公式):
    R = I + sin ⁡ θ [ u × ] + ( 1 − cos ⁡ θ ) [ u ] × 2 \mathbf{R}=\mathbf{I}+\sin \theta \begin{bmatrix} \mathbf{u}_{\times } \end{bmatrix} +\left ( 1-\cos \theta \right )\begin{bmatrix} \mathbf{u} \end{bmatrix}_{\times }^{2} R=I+sinθ[u×]+(1cosθ)[u]×2
  • 四元素转旋转矩阵:
    R = [ q w 2 + q x 2 − q y 2 − q z 2 2 ( q x q y − q w q z ) 2 ( q x q z + q w q y ) 2 ( q x q y + q w q z ) q w 2 − q x 2 + q y 2 − q z 2 2 ( q y q z − q w q x ) 2 ( q x q z − q w q y ) 2 ( q y q z + q w q x ) q w 2 − q x 2 − q y 2 + q z 2 ] R=\begin{bmatrix} q_{w}^{2}+q_{x}^{2}-q_{y}^{2}-q_{z}^{2} & 2\left ( q_{x}q_{y}-q_{w}q_{z} \right ) & 2\left ( q_{x}q_{z}+q_{w}q_{y} \right ) \\ 2\left ( q_{x}q_{y}+q_{w}q_{z} \right ) & q_{w}^{2}-q_{x}^2+q_{y}^{2}-q_{z}^2 & 2\left ( q_{y}q_{z}-q_{w}q_{x} \right ) \\ 2\left ( q_{x}q_{z}-q_{w}q_{y} \right ) & 2\left ( q_{y}q_{z}+q_{w}q_{x} \right ) & q_{w}^2-q_{x}^2-q_{y}^2+q_{z}^2 \end{bmatrix} R=qw2+qx2qy2qz22(qxqy+qwqz)2(qxqzqwqy)2(qxqyqwqz)qw2qx2+qy2qz22(qyqz+qwqx)2(qxqz+qwqy)2(qyqzqwqx)qw2qx2qy2+qz2
4. 扰动和时间微分
  • 扰动:
    Δ q L = [ 1 Δ θ L / 2 ] + O ( ∥ Δ θ L ∥ 2 ) , Δ R L = I + [ Δ θ ] × + O ( ∥ Δ θ L ∥ 2 ) \Delta \mathbf{q}_{L}=\begin{bmatrix} 1 \\ \Delta \mathbf{\theta }_{L}/2 \end{bmatrix} +O(\left \| \Delta \mathbf{\theta }_{L} \right \|^{2}) ,\Delta \mathbf{R}_{L}=\mathbf{I}+[\Delta \mathbf{\theta}]_{\times }+O(\left \| \Delta \mathbf{\theta}_{L} \right \|^{2}) ΔqL=[1ΔθL/2]+O(ΔθL2),ΔRL=I+[Δθ]×+O(ΔθL2)
  • 时间微分:
    q ˙ = 1 2 Ω ( ω L ) q = 1 2 q ⊗ ω L , R ˙ = R [ ω L ] × Ω ( ω L ) = Q − ( ω ) = [ 0 − ω T ω − [ ω ] × ] = [ 0 − ω x − ω y − ω z ω x 0 ω z − ω y ω y − ω z 0 ω x ω z ω y − ω x 0 ] \begin{matrix} \dot{\mathbf{q}}= \begin{matrix} \frac{1}{2}\boldsymbol{\Omega}(\boldsymbol{\omega} _{L})\mathbf{q}=\frac{1}{2}\mathbf{q}\otimes \boldsymbol{\omega }_{L} \end{matrix} , \dot{\mathbf{R}}=\mathbf{R}[\boldsymbol{\omega}_{L}]_{\times }\\ \mathbf{\Omega }(\boldsymbol{\omega}_{L})=Q^{-}(\boldsymbol{\omega})=\begin{bmatrix} 0 & -\boldsymbol{\omega} ^{T} \\ \boldsymbol{\omega} & -[\boldsymbol{\omega}]_{\times } \end{bmatrix}= \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} \end{matrix} q˙=21Ω(ωL)q=21qωL,R˙=R[ωL]×Ω(ωL)=Q(ω)=[0ωωT[ω]×]=0ωxωyωzωx0ωzωyωyωz0ωxωzωyωx0
  • 时间微分推导:
    q ˙ = lim ⁡ Δ t → 0 q ( t + Δ t ) − q ( t ) Δ t = lim ⁡ Δ t → 0 q ⊗ Δ q L − q Δ t = lim ⁡ Δ t → 0 q ⊗ ( [ 1 Δ θ L / 2 ] − [ 1 0 ] ) Δ t = lim ⁡ Δ t → 0 q ⊗ [ 0 Δ θ L / 2 ] Δ t = 1 2 q ⊗ [ 0 ω L ] \begin{matrix} \dot{\mathbf{q}}=\frac{\lim }{\Delta t\rightarrow 0}\frac{\mathbf{q}(t+\Delta t)-\mathbf{q}(t)}{\Delta t}\\ =\frac{\lim }{\Delta t\rightarrow 0}\frac{\mathbf{q}\otimes \Delta \mathbf{q}_{L}-\mathbf{q}}{\Delta t}\\ =\frac{\lim }{\Delta t\rightarrow 0}\frac{\mathbf{q}\otimes(\begin{bmatrix} 1\\ \Delta \theta _{L}/2 \end{bmatrix}-\begin{bmatrix} 1\\ 0 \end{bmatrix})}{\Delta t}\\ =\frac{\lim }{\Delta t\rightarrow 0}\frac{\mathbf{q}\otimes \begin{bmatrix} 0\\ \Delta \theta _{L}/2 \end{bmatrix}}{\Delta t}\\ =\frac{1}{2}\mathbf{q}\otimes \begin{bmatrix} 0\\ \boldsymbol{\omega }_{L} \end{bmatrix} \end{matrix} q˙=Δt0limΔtq(t+Δt)q(t)=Δt0limΔtqΔqLq=Δt0limΔtq([1ΔθL/2][10])=Δt0limΔtq[0ΔθL/2]=21q[0ωL]
  • 乘积微分:
    ( q 1 ⊗ q 2 ) ˙ = q 1 ˙ ⊗ q 2 + q 1 ⊗ q 2 ˙ \dot{(\mathbf{q}_{1}\otimes \mathbf{q}_{2})}=\dot{\mathbf{q}_{1}}\otimes \mathbf{q}_{2}+\mathbf{q}_{1}\otimes \dot{\mathbf{q}_{2}} (q1q2)˙=q1˙q2+q1q2˙
5. 旋转速率的时间积分
  • 前向积分:
    q n + 1 = q n ⊗ q { ω n Δ t } \mathbf{q}_{n+1}=\mathbf{q}_{n}\otimes \mathbf{q}\left \{ \boldsymbol{\omega _{n}}\Delta t\right \} qn+1=qnq{ωnΔt}
  • 后向积分:
    q n + 1 = q n ⊗ q { ω n + 1 Δ t } \mathbf{q}_{n+1}=\mathbf{q}_{n}\otimes \mathbf{q}\left \{ \boldsymbol{\omega _{n+1}}\Delta t\right \} qn+1=qnq{ωn+1Δt}
  • 中值积分:
    q n + 1 ≈ q n ⊗ q { ω n + 1 + ω n 2 Δ t } \mathbf{q}_{n+1}\approx \mathbf{q}_{n}\otimes \mathbf{q}\left \{ \frac{\boldsymbol{\omega} _{n+1}+\boldsymbol{\omega} _{n}}{2} \Delta t\right \} qn+1qnq{2ωn+1+ωnΔt}

IMU驱动系统的误差状态运动学

1. 为什么要选择误差状态而不是实际的运动状态?

  • 方向误差状态极小(即,它具有与自由度相同的参数数量),避免了与过度参数化(或冗余)有关的问题以及由此产生的相关协方差矩阵奇异的风险.
  • 误差状态系统始终在接近原点的位置运行,因此远离可能的参数奇异性,万向节锁定问题等,从而保证了线性化的有效性.
  • 误差状态始终很小,这意味着所有二阶乘积都可以忽略不计。 这使得Jacobian的计算非常容易和快速。 一些雅可比行列甚至可能是恒定的,或者等于可用状态的大小.
  • 误差状态变化缓慢,因为所有的大的信号变化已经被积分在名义状态里了.因此,在卡尔曼滤波过程中,相较于估计过程,我们可以以更低的频率来执行更新过程.

2. 连续时间内的系统运动方程

  • 状态表示
    在这里插入图片描述
  • 真实状态
    [ p t ˙ = v t v t ˙ = a t q t ˙ = 1 2 q t ⊗ ω t a b t ˙ = a ω ω b t ˙ = ω ω g t ˙ = 0 ] → ω m = ω t + ω b t + ω n a m = R t T ( a t − g t ) + a b t + a n [ p t ˙ = v t v t ˙ = R t ( a m − a b t − a n + g t ) q t ˙ = 1 2 q t ⊗ ( ω m − ω b t − ω n ) a b t ˙ = a ω ω b t ˙ = ω ω g t ˙ = 0 ] \begin{bmatrix} \dot{\mathbf{p}_t}=\mathbf{v}_t\\ \dot{\mathbf{v}_t}=\mathbf{a}_t\\ \dot{\mathbf{q}_t}=\frac{1}{2}\mathbf{q}_t\otimes \boldsymbol{\omega }_{t}\\ \dot{\mathbf{a}_{bt}}=\mathbf{a}_{\omega } \\ \dot{\boldsymbol{\omega }_{bt}}=\boldsymbol{\omega }_{\omega } \\ \dot{\mathbf{g}_{t}}=0 \end{bmatrix} \xrightarrow[\boldsymbol{\omega }_{m}=\boldsymbol{\omega}_{t}+\boldsymbol{\omega}_{bt}+\boldsymbol{\omega }_{n}]{\mathbf{a}_{m}=\mathbf{R}_{t}^{T}(\mathbf{a}_{t}-\mathbf{g}_{t})+\mathbf{a}_{bt}+\mathbf{a}_{n}} \begin{bmatrix} \dot{\mathbf{p}_{t}}=\mathbf{v}_{t}\\ \dot{\mathbf{v}_{t}}=\mathbf{R}_{t}(\mathbf{a}_{m}-\mathbf{a}_{bt}-\mathbf{a}_{n}+\mathbf{g}_{t})\\ \dot{\mathbf{q}_{t}}=\frac{1}{2}\mathbf{q}_{t}\otimes (\boldsymbol{\omega}_{m}-\boldsymbol{\omega}_{bt}-\boldsymbol{\omega}_{n})\\ \dot{\mathbf{a}_{bt}}=\mathbf{a}_{\omega}\\ \dot{\boldsymbol{\omega}_{bt}}=\boldsymbol{\omega}_{\omega}\\ \dot{\mathbf{g}_{t}}=0 \end{bmatrix} pt˙=vtvt˙=atqt˙=21qtωtabt˙=aωωbt˙=ωωgt˙=0am=RtT(atgt)+abt+an ωm=ωt+ωbt+ωnpt˙=vtvt˙=Rt(amabtan+gt)qt˙=21qt(ωmωbtωn)abt˙=aωωbt˙=ωωgt˙=0
    式中 ( a m , ω m ) (\mathbf{a}_{m},\boldsymbol{\omega}_{m}) (am,ωm)为IMU传感器读数(带有噪声), ( a t , ω t ) (\mathbf{a}_{t}, \boldsymbol{\omega}_{t}) (at,ωt)为真实的加速度和角速率.
  • 名义状态
    [ p ˙ = v v ˙ = R ( a m − a b ) + g q ˙ = 1 2 q ⊗ ( ω m − ω b ) a b ˙ = 0 w b ˙ = 0 g ˙ = 0 ] \begin{bmatrix} \dot{\mathbf{p}}=\mathbf{v}\\ \dot{\mathbf{v}}=\mathbf{R}(\mathbf{a}_{m}-\mathbf{a}_{b})+\mathbf{g}\\ \dot{\mathbf{q}}=\frac{1}{2}\mathbf{q}\otimes (\boldsymbol{\omega}_{m}-\boldsymbol{\omega}_{b})\\ \dot{\mathbf{a}_{b}}=0\\ \dot{\boldsymbol{w}_{b}}=0\\ \dot{\mathbf{g}}=0 \end{bmatrix} p˙=vv˙=R(amab)+gq˙=21q(ωmωb)ab˙=0wb˙=0g˙=0
  • 误差状态
    [ δ p ˙ = δ v δ v ˙ = − R [ a m − a b ] × δ θ − R δ a b + δ g − R a n δ θ ˙ = − [ ω m − ω b ] × δ θ − δ ω b − ω n δ a b ˙ = a ω δ ω b ˙ = ω ω δ g ˙ = 0 ] \begin{bmatrix} \dot{\delta \mathbf{p}}=\delta\mathbf{v}\\ \dot{\delta \mathbf{v}}=-\mathbf{R}[\mathbf{a}_{m}-\mathbf{a}_{b}]_{\times } \delta\boldsymbol{\theta }-\mathbf{R}\delta\mathbf{a}_{b}+\delta\mathbf{g}-\mathbf{R}\mathbf{a}_{n}\\ \dot{\delta\boldsymbol{\theta}}=-[\boldsymbol{\omega}_{m}-\boldsymbol{\omega}_{b}]_{\times }\delta\boldsymbol{\theta}-\delta\boldsymbol{\omega}_{b}-\boldsymbol{\omega}_{n}\\ \dot{\delta\mathbf{a}_{b}}=\mathbf{a}_{\omega}\\ \dot{\delta\boldsymbol{\omega}_{b}}=\boldsymbol{\omega}_{\omega}\\ \dot{\delta\mathbf{g}}=0 \end{bmatrix} δp˙=δvδv˙=R[amab]×δθRδab+δgRanδθ˙=[ωmωb]×δθδωbωnδab˙=aωδωb˙=ωωδg˙=0
  • 误差状态的推导
    在进行误差状态方程推导前,必须明确: 误差状态=真实状态-名义状态
    位置误差状态: δ p t ˙ = p t ˙ − p ˙ = v t − v = δ v \dot{\delta\mathbf{p}_{t}}=\dot{\mathbf{p}_t}-\dot{\mathbf{p}}=\mathbf{v}_{t}-\mathbf{v}=\delta\mathbf{v} δpt˙=pt˙p˙=vtv=δv
    加速度偏置误差状态: δ a b ˙ = a b t ˙ − a b ˙ = a ω \dot{\delta\mathbf{a}_{b}}=\dot{\mathbf{a}_{bt}}-\dot{\mathbf{a}_{b}}=\mathbf{a}_{\omega} δab˙=abt˙ab˙=aω
    角速度偏置误差状态: δ ω b ˙ = ω b t ˙ − ω b ˙ = ω ω \dot{\delta\boldsymbol{\omega}_{b}}=\dot{\boldsymbol{\omega}_{bt}}-\dot{\boldsymbol{\omega}_{b}}=\boldsymbol{\omega}_{\omega} δωb˙=ωbt˙ωb˙=ωω

    速度误差状态:
    根据扰动公式有: R t = R Δ R = R ( I + [ δ θ ] × ) + O ( ∥ [ δ θ ] ∥ 2 ) \mathbf{R}_{t}=\mathbf{R}\Delta\mathbf{R}=\mathbf{R}(\mathbf{I}+[\delta\boldsymbol{\theta}]_{\times})+O(\left \| [\delta\boldsymbol{\theta}] \right \|^{2}) Rt=RΔR=R(I+[δθ]×)+O([δθ]2)
    a β = a m − a b \mathbf{a}_{\beta}=\mathbf{a}_{m}-\mathbf{a}_{b} aβ=amab为加速度的大信号部分, δ a β = − δ a b − a n \delta\mathbf{a}_{\beta}=-\delta\mathbf{a}_{b}-\mathbf{a}_{n} δaβ=δaban为加速度的小信号部分,则有:
    v ˙ = R a β + g a t = R t ( a β + δ a β + g + δ g ) \begin{matrix} \dot{v}=\mathbf{Ra}_{\beta}+\mathbf{g}\\ \mathbf{a}_{t}=\mathbf{R}_{t}(\mathbf{a}_{\beta}+\delta\mathbf{a}_{\beta}+\mathbf{g}+\delta\mathbf{g}) \end{matrix} v˙=Raβ+gat=Rt(aβ+δaβ+g+δg)
    于是可得:
    v t ˙ = v ˙ + δ v ˙ = R a β + g + δ v ˙ v t ˙ = R ( I + [ δ θ ] × ) ( a β + δ a β ) + g + δ g = R a β + R δ a β + R [ δ θ ] × a β + R [ δ θ ] × δ a β + g + δ g \begin{matrix} \dot{\mathbf{v}_t}=\dot{\mathbf{v}}+\dot{\delta\mathbf{v}}=\mathbf{Ra}_{\beta}+\mathbf{g}+ \dot{\delta\mathbf{v}}\\ \dot{\mathbf{v}_t}=\mathbf{R}(\mathbf{I}+[\delta\boldsymbol{\theta}]_{\times})(\mathbf{a}_{\beta}+\delta\mathbf{a}_{\beta})+\mathbf{g}+\delta\mathbf{g}=\mathbf{Ra}_{\beta}+\mathbf{R}\delta\mathbf{a}_{\beta}+\mathbf{R}[\delta\boldsymbol{\theta}]_{\times}\mathbf{a}_{\beta}+\mathbf{R}[\delta\boldsymbol{\theta}]_{\times}\delta\mathbf{a}_{\beta}+\mathbf{g}+\delta\mathbf{g} \end{matrix} vt˙=v˙+δv˙=Raβ+g+δv˙vt˙=R(I+[δθ]×)(aβ+δaβ)+g+δg=Raβ+Rδaβ+R[δθ]×aβ+R[δθ]×δaβ+g+δg
    合并上述两个等式消去 v t ˙ \dot{\mathbf{v}_{t}} vt˙,并且消去二阶误差项可得:
    δ v ˙ = R ( δ a β − [ a β ] × ) + δ g \dot{\delta\mathbf{v}}=\mathbf{R}(\delta\mathbf{a}_{\beta}-[\mathbf{a}_{\beta}]_{\times})+\delta\mathbf{g} δv˙=R(δaβ[aβ]×)+δg
    再将 a β , δ a β \mathbf{a}_{\beta},\delta\mathbf{a}_{\beta} aβ,δaβ替换回去,可得:
    δ v ˙ = − R [ a m − a b ] × δ θ − R δ g − R a n \dot{\delta\mathbf{v}}=-\mathbf{R}[\mathbf{a}_{m}-\mathbf{a}_{b}]_{\times}\delta\boldsymbol{\theta}-\mathbf{R}\delta\mathbf{g}-\mathbf{Ra}_{n} δv˙=R[amab]×δθRδgRan
    因为 a n \mathbf{a}_{n} an为IMU测量噪声向量,是一个高斯分布,因此 R a n \mathbf{Ra}_{n} Ran也为高斯分布,只用重新定义 a n → R a n \mathbf{a}_{n}\rightarrow \mathbf{Ra}_{n} anRan为噪声向量即可得:
    δ v ˙ = − R [ a m − a b ] × δ θ − R δ g − a n \dot{\delta\mathbf{v}}=-\mathbf{R}[\mathbf{a}_{m}-\mathbf{a}_{b}]_{\times}\delta\boldsymbol{\theta}-\mathbf{R}\delta\mathbf{g}-\mathbf{a}_{n} δv˙=R[amab]×δθRδgan

    角度误差状态:
    ω = ω m − ω b \boldsymbol{\omega}=\boldsymbol{\omega}_{m}-\boldsymbol{\omega}_{b} ω=ωmωb角速率大信好部分, δ ω = − δ ω b − ω n \delta\boldsymbol{\omega}=-\delta\boldsymbol{\omega}_{b}-\boldsymbol{\omega}_{n} δω=δωbωn为角速率小信号部分,所以有 ω t = ω + δ ω \boldsymbol{\omega}_{t}=\boldsymbol{\omega}+\delta\boldsymbol{\omega} ωt=ω+δω.
    下面以两种不同的方式计算 q t ˙ \dot{\boldsymbol{q}_t} qt˙:
    q t ˙ = 1 2 q t ⊗ ω t q t ˙ = ( q ⊗ δ q ) ˙ = q ˙ ⊗ δ q + q ⊗ δ q ˙ = 1 2 q ⊗ ω ⊗ δ q + q ⊗ δ q ˙ \begin {matrix} \dot{\mathbf{q}_{t}}=\frac{1}{2}\mathbf{q}_{t}\otimes \boldsymbol{\omega}_{t}\\ \dot{\mathbf{q}_{t}}=\dot{(\boldsymbol{q}\otimes \delta\boldsymbol{q})}=\dot{\mathbf{q}}\otimes\delta\mathbf{q}+\mathbf{q}\otimes\dot{\delta\mathbf{q}}=\frac{1}{2}\mathbf{q}\otimes\boldsymbol{\omega}\otimes\delta\mathbf{q}+\mathbf{q}\otimes\dot{\delta\mathbf{q}} \end {matrix} qt˙=21qtωtqt˙=(qδq)˙=q˙δq+qδq˙=21qωδq+qδq˙
    合并上述两个等式消去 q t ˙ \dot{\mathbf{q}_{t}} qt˙,可得:
    2 δ q ˙ = δ q ⊗ ω t − ω ⊗ δ q = Q − ( ω t ) δ q − Q + ( ω ) δ q = [ 0 − ( ω t − ω ) T ( ω t − ω ) − [ ω t + ω ] × ] [ 1 δ θ / 2 ] + O ( ∥ δ θ ∥ 2 ) = [ 0 − δ ω T δ ω − [ 2 ω + δ ω ] × ] [ 1 δ θ / 2 + O ( ∥ δ θ ∥ 2 ) ] \begin {matrix} 2\dot{\delta{\mathbf{q}}}=\delta\mathbf{q}\otimes\boldsymbol{\omega}_{t}-\boldsymbol{\omega}\otimes\delta\boldsymbol{q}\\ =\mathbf{Q}^{-}(\boldsymbol{\omega}_{t})\delta\mathbf{q}-\mathbf{Q}^{+}(\boldsymbol{\omega})\delta\mathbf{q}\\ = \begin {bmatrix} 0 & -(\boldsymbol{\omega}_{t}-\boldsymbol{\omega})^{T}\\ (\boldsymbol{\omega}_{t}-\boldsymbol{\omega}) & -[\boldsymbol{\omega}_{t}+\boldsymbol{\omega}]_{\times} \end{bmatrix}\begin{bmatrix} 1\\ \delta\boldsymbol{\theta}/2 \end{bmatrix}+O(\left \| \delta\boldsymbol{\theta} \right \|^{2})\\ = \begin {bmatrix} 0 & -\delta\boldsymbol{\omega}^{T}\\ \delta\boldsymbol{\omega} & -[2\boldsymbol{\omega}+\delta\boldsymbol{\omega}]_{\times} \end{bmatrix} \begin {bmatrix} 1\\ \delta\boldsymbol{\theta}/2 +O(\left \| \delta\boldsymbol{\theta} \right \|^{2}) \end{bmatrix} \end{matrix} 2δq˙=δqωtωδq=Q(ωt)δqQ+(ω)δq=[0(ωtω)(ωtω)T[ωt+ω]×][1δθ/2]+O(δθ2)=[0δωδωT[2ω+δω]×][1δθ/2+O(δθ2)]
    又根据扰动公式 δ q ≈ [ 1 δ θ / 2 ] \delta\mathbf{q}\approx\begin {bmatrix}1\\\delta\boldsymbol{\theta}/2\end {bmatrix} δq[1δθ/2], 可知 2 δ q ˙ = [ 0 δ θ ˙ ] 2\dot{\delta\boldsymbol{q}}=\begin{bmatrix} 0\\\dot{\delta\boldsymbol{\theta}} \end{bmatrix} 2δq˙=[0δθ˙],所以有:
    0 = δ ω T δ θ + O ( ∣ δ θ ∣ 2 ) δ θ ˙ = δ ω − [ ω ] × δ θ − 1 2 [ δ ω ] × δ θ + O ( ∥ δ θ ∥ 2 ) \begin{matrix} 0=\delta\boldsymbol{\omega}^{T}\delta\boldsymbol{\theta}+O(\left | \delta\boldsymbol{\theta} \right |^{2})\\ \dot{\delta{\boldsymbol{\theta}}}=\delta\boldsymbol{\omega}-[\boldsymbol{\omega}]_{\times}\delta\boldsymbol{\theta}-\frac{1}{2}[\delta\boldsymbol{\omega}]_{\times}\delta\boldsymbol{\theta}+O(\left \| \delta\boldsymbol{\theta} \right \|^{2}) \end{matrix} 0=δωTδθ+O(δθ2)δθ˙=δω[ω]×δθ21[δω]×δθ+O(δθ2)
    忽略上面第二个等式中的二阶误差项并将 ω , δ ω \boldsymbol{\omega},\delta\boldsymbol{\omega} ω,δω带回该等式,得:
    δ θ ˙ = − [ ω m − ω b ] × δ θ − δ ω b − ω n \dot{\delta\boldsymbol{\theta}}=-[\boldsymbol{\omega}_{m}-\boldsymbol{\omega}_{b}]_{\times}\delta\boldsymbol{\theta}-\delta\boldsymbol{\omega}_{b}-\boldsymbol{\omega}_{n} δθ˙=[ωmωb]×δθδωbωn

3. 离散时间内系统的运动方程

  • 名义状态
    p ← p + v Δ t + 1 2 ( R ( a m − a b ) + g ) Δ t 2 v ← v + ( R ( a m − a b ) + g ) Δ t q ← q ⊗ q { ( ω m − ω b ) Δ t } a b ← a b ω b ← ω b g ← g \begin{matrix} \boldsymbol{p}\leftarrow \boldsymbol{p}+\boldsymbol{v}\Delta{t}+\frac{1}{2}(\mathbf{R}(\mathbf{a}_{m}-\mathbf{a}_{b})+g)\Delta{t^{2}}\\ \mathbf{v}\leftarrow\mathbf{v}+(\mathbf{R}(\mathbf{a}_{m}-\mathbf{a}_{b})+g)\Delta{t}\\ \mathbf{q}\leftarrow\mathbf{q}\otimes\mathbf{q}\left \{ (\boldsymbol{\omega}_{m}-\boldsymbol{\omega}_{b})\Delta{t} \right \}\\ \mathbf{a}_{b}\leftarrow\mathbf{a}_{b}\\ \boldsymbol{\omega}_{b}\leftarrow\boldsymbol{\omega}_{b}\\ \mathbf{g}\leftarrow\mathbf{g} \end{matrix} pp+vΔt+21(R(amab)+g)Δt2vv+(R(amab)+g)Δtqqq{(ωmωb)Δt}ababωbωbgg
  • 误差状态
    根据导数的定义有: x k + 1 − x k = x ˙ Δ t x_{k+1}-x_{k}=\dot{x}\Delta_{t} xk+1xk=x˙Δt,依据此定义对上一节连续误差状态方程进行离散化,结果如下:
    δ p ← δ p + δ v Δ t δ v ← δ v + ( − R [ a m − a b ] × δ θ − R δ a b + δ g ) Δ t + v i δ θ ← R T { ( ω m − ω b ) Δ t } δ θ − δ ω b Δ t + θ i δ a b ← δ a b + a i δ ω b ← δ ω b + ω i δ g ← δ g \begin{matrix} \delta\boldsymbol{p}\leftarrow\delta{\mathbf{p}}+\delta{\mathbf{v}}\Delta{t}\\ \delta\mathbf{v}\leftarrow\delta\mathbf{v}+(-\mathbf{R}[\mathbf{a}_{m}-\mathbf{a}_{b}]_{\times}\delta\boldsymbol{\theta}-\mathbf{R}\delta\mathbf{a}_{b}+\delta\mathbf{g})\Delta{t}+\mathbf{v}_{i}\\ \delta\boldsymbol{\theta}\leftarrow\mathbf{R}^{T}\left \{ (\boldsymbol{\omega}_{m}-\boldsymbol{\omega}_{b})\Delta{t} \right.\left.\right\}\delta\boldsymbol{\theta}-\delta\boldsymbol{\omega}_{b}\Delta{t}+\boldsymbol{\theta}_{i}\\ \delta\mathbf{a}_{b}\leftarrow\delta\mathbf{a}_{b}+\mathbf{a}_{i}\\ \delta\boldsymbol{\omega}_{b}\leftarrow\delta\boldsymbol{\omega}_{b}+\boldsymbol{\omega}_{i}\\ \delta\boldsymbol{g}\leftarrow\delta\boldsymbol{g} \end{matrix} δpδp+δvΔtδvδv+(R[amab]×δθRδab+δg)Δt+viδθRT{(ωmωb)Δt}δθδωbΔt+θiδabδab+aiδωbδωb+ωiδgδg
    其中
    v i ∼ N ( 0 , V i = σ a n 2 Δ t 2 I [ m 2 / s 2 ] ) θ i ∼ N ( 0 , Θ i = σ ω n 2 Δ t 2 I [ r a d 2 ] ) a i ∼ N ( 0 , A i = σ a ω 2 Δ t I [ m 2 / s 4 ] ) Ω i ∼ N ( 0 , σ ω ω 2 Δ t I [ r a d 2 / s 2 ] ) \begin{matrix} \mathbf{v_{i}}\sim N(0,\mathbf{V_{i}}=\sigma_{a_{n}}^{2}\Delta{t^{2}}\mathbf{I}[m^2/s^2])\\ \boldsymbol{\theta}_{\mathbf{i}}\sim N(0,\boldsymbol{\Theta}_{\mathbf{i}}=\sigma_{\omega_{n}}^{2}\Delta{t^{2}}\mathbf{I}[rad^2])\\ \mathbf{a_{i}}\sim N(0,\mathbf{A_{i}}=\sigma_{a_{\omega}}^2\Delta{t}\mathbf{I}[m^2/s^4])\\ \boldsymbol{\Omega}_{\mathbf{i}}\sim N(0,\sigma_{\omega_{\omega}}^2\Delta{t}\mathbf{I}[rad^2/s^2]) \end{matrix} viN(0,Vi=σan2Δt2I[m2/s2])θiN(0,Θi=σωn2Δt2I[rad2])aiN(0,Ai=σaω2ΔtI[m2/s4])ΩiN(0,σωω2ΔtI[rad2/s2])
    其中 σ a n , σ ω n , σ a ω , σ ω ω \sigma_{a_{n}},\sigma_{\omega_{n}},\sigma_{a_{\omega}},\sigma_{\omega_{\omega}} σan,σωn,σaω,σωω是通过Allan_variance统计方法获取的方差值.已经有专门的开源库来统计该方差值,地址https://github.com/gaowenliang/imu_utils.

4. ESKF预测

  • 状态变量定义
     名义状态: X = [ p v q a b ω b g ] T \mathbf{X}=\begin{bmatrix}\mathbf{p} & \mathbf{v} & \mathbf{q} & \mathbf{a}_{b} &\boldsymbol{\omega}_{b} & \mathbf{g}\end{bmatrix}^{T} X=[pvqabωbg]T
     误差状态: δ X = [ δ p δ v δ q δ a b δ ω b δ g ] T \delta\mathbf{X}=\begin{bmatrix}\delta\mathbf{p} & \delta\mathbf{v} & \delta\mathbf{q} &\delta \mathbf{a}_{b} & \delta\boldsymbol{\omega}_{b} & \delta\mathbf{g}\end{bmatrix}^{T} δX=[δpδvδqδabδωbδg]T
     测量值: u m = [ a m ω m ] T \mathbf{u}_{m}=\begin{bmatrix}\mathbf{a}_{m}&\boldsymbol{\omega}_{m}\end{bmatrix}^{T} um=[amωm]T
     误差值: i = [ v i θ i a i ω i ] T \mathbf{i}=\begin{bmatrix}\mathbf{v_{i}}&\boldsymbol{\theta}_{\mathbf{i}}&\mathbf{a_{i}}&\boldsymbol{\omega}_{\mathbf{i}}\end{bmatrix}^{T} i=[viθiaiωi]T
  • 误差状态预测方程
    δ x ← f ( X , δ x , u m , i ) = F x ( X , u m ) . δ x + F i . i ( 泰 勒 展 开 ) \delta\mathbf{x}\leftarrow f(\mathbf{X},\delta\mathbf{x},\mathbf{u}_{m}, \mathbf{i})=\mathbf{F}_{\mathbf{x}}(\mathbf{X},\mathbf{u}_{m}).\delta\mathbf{x}+\mathbf{F}_{\mathbf{i}}.\mathbf{i}(泰勒展开) δxf(X,δx,um,i)=Fx(X,um).δx+Fi.i
    其中 f ( ∗ ) f(*) f()为第3节的离散误差状态方程,泰勒展开后结果如下
    F x = ∂ f ∂ δ x ∣ x , u m = [ I I Δ t 0 0 0 0 0 I − R [ a m − a b ] × Δ t − R Δ t 0 I Δ t 0 0 R T { ( ω m − ω b ) Δ t } 0 − I Δ t 0 0 0 0 I 0 0 0 0 0 0 I 0 0 0 0 0 0 I ] \mathbf{F_{x}}=\frac{\partial f}{\partial \delta\mathbf{x}}|_{\mathbf{x},\mathbf{u}_{m}}= \begin{bmatrix} \mathbf{I} & \mathbf{I}\Delta{t} & 0 & 0 & 0 & 0\\ 0 & \mathbf{I} & -\mathbf{R}[\mathbf{a}_{m}-\mathbf{a}_{b}]_{\times}\Delta{t} & -\mathbf{R}\Delta{t} & 0 & \mathbf{I}\Delta{t}\\ 0 & 0 & \mathbf{R}^{T}\left \{ (\boldsymbol{\omega}_{m}-\boldsymbol{\omega}_{b})\Delta{t} \right \} & 0 & -\mathbf{I}\Delta{t} & 0\\ 0 & 0 & 0 & \mathbf{I} & 0 & 0\\ 0 & 0 & 0 & 0 & \mathbf{I} & 0\\ 0 & 0 & 0 & 0 & 0 & \mathbf{I} \end{bmatrix} Fx=δxfx,um=I00000IΔtI00000R[amab]×ΔtRT{(ωmωb)Δt}0000RΔt0I0000IΔt0I00IΔt000I
    F i = ∂ f ∂ i ∣ X , u m = [ 0 0 0 0 I 0 0 0 0 I 0 0 0 0 I 0 0 0 0 I 0 0 0 0 ] , Q i = [ V i 0 0 0 0 Θ i 0 0 0 0 A i 0 0 0 0 Ω i ] \mathbf{F_{i}}=\frac{\partial f}{\partial \mathbf{i}}|_{\mathbf{X},\mathbf{u}_{m}}= \begin {bmatrix} 0 & 0 & 0 & 0\\ \mathbf{I} & 0 & 0 & 0\\ 0 & \mathbf{I} & 0 & 0\\ 0 & 0 & \mathbf{I} & 0\\ 0 & 0 & 0 & \mathbf{I}\\ 0 & 0 & 0 & 0 \end{bmatrix}, \mathbf{Q_{i}}= \begin {bmatrix} \mathbf{V_{i}} & 0 & 0 & 0\\ 0 & \boldsymbol{\Theta}_{\mathbf{i}} & 0 & 0\\ 0 & 0 & \mathbf{A_{i}} & 0\\ 0 & 0 & 0 & \boldsymbol{\Omega}_{\mathbf{i}} \end{bmatrix} Fi=ifX,um=0I000000I000000I000000I0,Qi=Vi0000Θi0000Ai0000Ωi
    上式中的状态变量都是通过离散化的名义状态方程获取的名义状态
  • 预测
    δ x ^ ← F x ( x , u m ) δ x ^ P ← F x P F x T + F i Q i F i T \begin{matrix} \hat{\delta{\mathbf{x}}}\leftarrow\mathbf{F_{x}}(\mathbf{x},\mathbf{u}_{m})\hat{\delta\mathbf{x}}\\ \mathbf{P}\leftarrow\mathbf{F_{x}}\mathbf{P}\mathbf{F_{x}}^{T}+\mathbf{F_{i}Q_{i}F_{i}}^{T} \end{matrix} δx^Fx(x,um)δx^PFxPFxT+FiQiFiT
  • 15
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
四元数运动学是错误状态卡尔曼滤波器中的一种重要方法。在四元数运动学中,我们使用四元数表示刚体的旋转姿态。错误状态卡尔曼滤波器是一种滤波算法,用于估计系统的状态,特别是旋转姿态的状态,并根据输入信号对估计的状态进行修正。 在错误状态卡尔曼滤波器中,我们通过使用四元数来表示旋转姿态的状态,并定义一个误差状态来描述实际姿态与估计姿态之间的差异。然后,我们使用卡尔曼滤波器的观测方程和状态方程,更新估计的状态,以减小误差状态。 四元数运动学提供了一种方便的方法来表示旋转姿态,它具有良好的数学特性和计算效率。通过使用四元数运动学,我们可以使用简洁的数学公式来描述旋转操作,避免了矩阵和欧拉角等其他旋转表示方法的复杂性。 在错误状态卡尔曼滤波器中,我们使用四元数运动学来更新估计的旋转姿态状态。通过将观测值与估计值之间的差异与卡尔曼增益相乘,我们可以得到一个修正项,用于更新估计的姿态状态。这种方式可以有效地融合观测数据和先验信息,提高对旋转姿态的估计精度。 总之,四元数运动学是错误状态卡尔曼滤波器中用于估计旋转姿态的一种重要方法。通过使用四元数来表示姿态状态,并结合卡尔曼滤波算法进行状态估计,我们可以实现更精确的姿态估计,并应用于各种导航和控制系统中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值