前言
在看vins-mono, okvis, msckf等基于imu的vslam论文时,发现这些主流的slam前端vio都需要计算imu的预积分及其协方差,而计算方法类似,都是参考Quaternion kinematics for the error-state KF或Indirect 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]p⊗q=⎣⎢⎢⎡pwqw−pxqx−pyqy−pzqzpwqx+pxqw+pyqz−pzqypwqy−pxqz+pyqw+pzqxpwqz+pxqy−pyqx+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} q1⊗q2=Q1+q2→Q1+=qwI+[0qv−qvT[qv]×]q1⊗q2=Q2−q1→Q2−=qwI+[0qv−qvT−[qv]×][qv]×=⎣⎡0qz−qy−qz0qxqy−qx0⎦⎤ - 共轭四元素:
q ∗ = [ q w − q v ] \mathbf{q}^{*}=\begin{bmatrix} q_{w}\\ \mathbf{-q}_{v} \end{bmatrix} q∗=[qw−qv] - 单位或归一化四元素性质:
q − 1 = q ∗ \begin{matrix} \mathbf{q}^{-1}=\mathbf{q}^{*}\\ \end{matrix} q−1=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×]+(1−cosθ)[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+qx2−qy2−qz22(qxqy+qwqz)2(qxqz−qwqy)2(qxqy−qwqz)qw2−qx2+qy2−qz22(qyqz+qwqx)2(qxqz+qwqy)2(qyqz−qwqx)qw2−qx2−qy2+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(∥ΔθL∥2),ΔRL=I+[Δθ]×+O(∥ΔθL∥2) - 时间微分:
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˙=Δt→0limΔtq(t+Δt)−q(t)=Δt→0limΔtq⊗ΔqL−q=Δt→0limΔtq⊗([1ΔθL/2]−[10])=Δt→0limΔ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}} (q1⊗q2)˙=q1˙⊗q2+q1⊗q2˙
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=qn⊗q{ω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=qn⊗q{ω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+1≈qn⊗q{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˙=0⎦⎥⎥⎥⎥⎥⎥⎤am=RtT(at−gt)+abt+anωm=ωt+ωbt+ωn⎣⎢⎢⎢⎢⎢⎢⎡pt˙=vtvt˙=Rt(am−abt−an+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(am−ab)+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[am−ab]×δθ−Rδab+δg−Ranδθ˙=−[ω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˙=vt−v=δ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β=am−ab为加速度的大信号部分, δ a β = − δ a b − a n \delta\mathbf{a}_{\beta}=-\delta\mathbf{a}_{b}-\mathbf{a}_{n} δaβ=−δab−an为加速度的小信号部分,则有:
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[am−ab]×δθ−Rδg−Ran
因为 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} an→Ran为噪声向量即可得:
δ 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[am−ab]×δθ−Rδg−an
角度误差状态:
令 ω = ω 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)δq−Q+(ω)δ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} p←p+vΔt+21(R(am−ab)+g)Δt2v←v+(R(am−ab)+g)Δtq←q⊗q{(ωm−ωb)Δt}ab←abωb←ωbg←g - 误差状态
根据导数的定义有: x k + 1 − x k = x ˙ Δ t x_{k+1}-x_{k}=\dot{x}\Delta_{t} xk+1−xk=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[am−ab]×δθ−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} vi∼N(0,Vi=σan2Δt2I[m2/s2])θi∼N(0,Θi=σωn2Δt2I[rad2])ai∼N(0,Ai=σaω2ΔtI[m2/s4])Ωi∼N(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}(泰勒展开) δx←f(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=∂δx∂f∣x,um=⎣⎢⎢⎢⎢⎢⎢⎡I00000IΔtI00000−R[am−ab]×ΔtRT{(ωm−ωb)Δt}0000−RΔt0I0000−IΔ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=∂i∂f∣X,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^P←FxPFxT+FiQiFiT