本文介绍一篇 IMU 和 GPS
融合的惯性导航论文,重点是理解本文提出的:Dynamical constraints update
、Roll and pitch updates
和 Position and heading updates
。
论文链接为:https://www.sciencedirect.com/science/article/pii/S1665642314700963
文章目录
- 1. Method Description
- 1.1 Vector state and system specification
- 1.2 Architecture of the system
- 1.3 System prediction
- 1.4 System update
- 1.4.1 Dynamical constraints update
- 1.4.2 Roll and pitch updates
- 1.4.3 Position and heading updates
- 2. Experimental results
1. Method Description
1.1 Vector state and system specification
首先系统状态量 x^\hat{\mathrm{x}}x^(22维) :
x^=[qnbωbxgrnvnanxa]′\hat{\mathrm{x}}=\left[\begin{array}{lllllll} q^{n b} & \omega^{b} & \mathrm{x}_{g} & r^{n} & \mathrm{v}^{n} & a^{n} & \mathrm{x}_{a} \end{array}\right]^{\prime} x^=[qnbωbxgrnvnanxa]′
其中:
- qnb=[q1,q2,q3,q4]q^{n b}=\left[\mathrm{q}_{1}, \mathrm{q}_{2}, \mathrm{q}_{3}, \mathrm{q}_{4}\right]qnb=[q1,q2,q3,q4] 为单位四元数,表示导航坐标到载体坐标的坐标变换。
- ωb=[ωx,ωy,ωz]\omega^{b}=\left[\omega_{\mathrm{x}}, \omega_{\mathrm{y}}, \omega_{\mathrm{z}}\right]ωb=[ωx,ωy,ωz] 是偏差补偿后的载体旋转角速度。
- xg=[xg_x,g_y,xg_z]\mathrm{x}_{g}=\left[\mathrm{x}_{g\_\mathrm{x}}, \mathrm{}_{g\_\mathrm{y}},\mathrm{x}_{g\_\mathrm{z}}\right]xg=[xg_x,g_y,xg_z] 是角速度偏差。
- rn=[xv,yv,zv]r^{n}=\left[\mathrm{x}_{\mathrm{v}}, \mathrm{y}_{\mathrm{v}}, \mathrm{z}_{\mathrm{v}}\right]rn=[xv,yv,zv] 是载体坐标原点在导航坐标下的位置。
- vn=[vx,vy,vz]\mathrm{v}^{n}=\left[\mathrm{v}_{\mathrm{x}}, \mathrm{v}_{\mathrm{y}}, \mathrm{v}_{\mathrm{z}}\right]vn=[vx,vy,vz] 是载体在导航坐标下的速度。
- an=[ax,ay,az]{a}^{n}=\left[{a}_{\mathrm{x}}, {a}_{\mathrm{y}}, {a}_{\mathrm{z}}\right]an=[ax,ay,az] 是载体在导航坐标下偏差补偿后的加速度。
- xa=[xa_x,xa_y,xa_z]\mathrm{x}_{a}=\left[\mathrm{x}_{{a}\_\mathrm{x}}, \mathrm{x}_{{a}\_\mathrm{y}},\mathrm{x}_{{a}\_\mathrm{z}}\right]xa=[xa_x,xa_y,xa_z] 是加速度偏差。
下图说明了载体坐标与导航坐标之间的关系,这里导航坐标为NED
坐标。
在惯性导航系统中,需要考虑两种测量:
- 高频测量(IMU)。
角速度测量模型
为:yg=ωb+xg+νg\mathrm{y}_g=\omega^b+\mathrm{x}_g+\nu_gyg=ωb+xg+νg,其中 yg\mathrm{y}_gyg 为测量值,xg\mathrm{x}_gxg 为角速度偏差,νg\nu_gνg 为角速度高斯白噪声,ωb\omega^bωb 为角速度真值。加速度测量模型
为:ya=ab+gb+xa+νa\mathrm{y}_a=a^b+g^b+\mathrm{x}_a+\nu_aya=ab+gb+xa+νa,其中 gbg^bgb 为载体坐标下的重力向量,xa\mathrm{x}_axa 是加速度偏差,νa\nu_aνa 是加速度高斯白噪声。 - 低频测量(GPS)。其位置 zr\mathrm{z}_rzr 和 航向角 zθ\mathrm{z}_{\theta}zθ
测量模型
为:[zrnzθn]=[rn+νrθn+νθ]\left[\begin{array}{c} z_{r}^{n} \\ z_{\theta}^{n} \end{array}\right]=\left[\begin{array}{c} r^{n}+\nu_{r} \\ \theta^{n}+\nu_{\theta} \end{array}\right][zrnzθn]=[rn+νrθn+νθ]。其中 rnr^nrn 为导航位置,νr\nu_rνr 是位置高斯白噪声,θn\theta^nθn 是航向角,νθ\nu_{\theta}νθ 是航向角高斯白噪声。这里需要注意的是,处理时需要将GPS测量的WGS坐标转换成NED坐标
。
1.2 Architecture of the system
系统结构如下图所示,包含预测和更新两部份。使用IMU数据进行预测,更新由三个子系统组成。
1.3 System prediction
当IMU数据到来时,系统进行预测,预测方程为:
Attitude {q(k+1)nb=q(k)nb×q(Rbn[ω(k+1)bΔt]′)ω(k+1)b=−(yg(k)−xg(k))xg(k+1)=(1−λxgΔt)xg(k)Position {r(k+1)n=r(k)n+(v(k+1)nΔt)+(a(k+1)nΔt2/2)v(k+1)n=v(k)n+(a(k+1)nΔt)a(k+1)n=Rbn[ya(k)−xa(k)]+gxa(k+1)=(1−λxaΔt)xa(k)\begin{array}{l} \text { Attitude }\left\{\begin{array}{l} q_{(k+1)}^{n b}=q_{(k)}^{n b} \times q\left(R^{b n}\left[\omega_{(k+1)}^{b} \Delta t\right]^{\prime}\right) \\ \omega_{(k+1)}^{b}=-\left(y_{g(k)}-\mathrm{x}_{g(k)}\right) \\ \mathrm{x}_{\mathrm{g}(\mathrm{k}+1)}=\left(1-\lambda_{x g} \Delta t\right) \mathrm{x}_{\mathrm{g}(\mathrm{k})} \end{array}\right. \\ \text { Position }\left\{\begin{array}{l} r_{(k+1)}^{n}=r_{(k)}^{n}+\left(\mathrm{v}_{(k+1)}^{n} \Delta t\right)+\left(a_{(k+1)}^{n} \Delta t^{2} / 2\right) \\ \mathrm{v}_{(k+1)}^{n}=\mathrm{v}_{(k)}^{n}+\left(a_{(k+1)}^{n} \Delta t\right) \\ a_{(k+1)}^{n}=R^{b n}\left[y_{a(k)}-\mathrm{x}_{a(k)}\right]+g \\ \mathrm{x}_{a(k+1)}=\left(1-\lambda_{x a} \Delta t\right) \mathrm{x}_{a(\mathrm{k})} \end{array}\right. \end{array} Attitude ⎩⎪⎪⎨⎪⎪⎧q(k+1)nb=q(k)nb×q(Rbn[ω(k+1)bΔt]′)ω(k+1)b=−(yg(k)−xg(k))xg(k+1)=(1−λxgΔt)xg(k) Position ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧r(k+1)n=r(k)n+(v(k+1)nΔt)+(a(k+1)nΔt2/2)v(k+1)n=v(k)n+(a(k+1)nΔt)a(k+1)n=Rbn[ya(k)−xa(k)]+gxa(k+1)=(1−λxaΔt)xa(k)
其中,λxg,λxa\lambda_{\mathrm{xg}},\lambda_{\mathrm{xa}}λxg,λxa 是加速度和角速度随时间变化的衰减系数,Δt\Delta tΔt 是IMU采样时间,ggg 是重力向量。
状态协方差 PPP 更新方程为:
P(k+1)=∇FxP(k)∇Fx′+∇FuU∇Fu′P_{(k+1)}=\nabla F_{\mathrm{x}} P_{(k)} \nabla F_{\mathrm{x}}^{\prime}+\nabla F_{\mathrm{u}} U \nabla F_{\mathrm{u}}^{\prime} P(k+1)=∇FxP(k)∇Fx′+∇FuU∇Fu′
其中,矩阵 UUU 为状态转移过程协方差矩阵,包含加速度和角速度噪声与偏差噪声,即 U=diag[σg2I3×3σxg2I3×3σa2I3×3σxa2I3×3]U=\operatorname{diag}\left[\begin{array}{llll} \sigma_{g}{ }^{2} I_{3 \times 3} & \sigma_{x g}{ }^{2} I_{3 \times 3} & \sigma_{a}^{2} I_{3 \times 3} & \sigma_{x a}{ }^{2} I_{3 \times 3} \end{array}\right]U=diag[σg2I3×3σxg2I3×3σa2I3×3σxa2I3×3]
状态转移雅克比矩阵 ∇Fx\nabla F_{\mathrm{x}}∇Fx 和系统输入雅可比矩阵 ∇Fu\nabla F_{\mathrm{u}}∇Fu 为:
∇Fx=[∂fqnb∂qnb∂fqnb∂ωb0000000∂fωb∂xg000000∂fxg∂xg0000000∂frn∂rn∂frn∂vn∂frn∂an00000∂fvn∂vn∂fvn∂an0∂fan∂qnb00000∂fan∂xa000000∂fxa∂xa]\nabla F_{\mathrm{x}}=\left[\begin{array}{ccccccc} \frac{\partial fq^{nb}}{\partial q^{nb}} & \frac{\partial fq^{nb}}{\partial \omega^{b}} & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & \frac{\partial f\omega^{b}}{\partial \mathrm{x}_{g}} & 0 & 0 & 0 & 0 \\ 0 & 0 & \frac{\partial f\mathrm{x}_{g}}{\partial \mathrm{x}_{g}} & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & \frac{\partial fr^{n}}{\partial r^{n}} & \frac{\partial fr^{n}}{\partial \mathrm{v}^{n}} & \frac{\partial fr^{n}}{\partial a^{n}} & 0 \\ 0 & 0 & 0 & 0 & \frac{\partial f\mathrm{v}^{n}}{\partial \mathrm{v}^{n}} & \frac{\partial f\mathrm{v}^{n}}{\partial a^{n}} & 0 \\ \frac{\partial fa^{n}}{\partial q^{n b}} & 0 & 0 & 0 & 0 & 0 & \frac{\partial fa^{n}}{\partial \mathrm{x}_{a}} \\ 0 & 0 & 0 & 0 & 0 & 0 & \frac{\partial f\mathrm{x}_{a}}{\partial \mathrm{x}_{a}} \end{array}\right] ∇Fx=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡∂qnb∂fqnb0000∂qnb∂fan0∂ωb∂fqnb0000000∂xg∂fωb∂xg∂fxg0000000∂rn∂frn000000∂vn∂frn∂vn∂fvn00000∂an∂frn∂an∂fvn0000000∂xa∂fan∂xa∂fxa⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
∇Fu=[0000∂fωb∂yg0000∂fxg∂νxg000000000000∂fan∂ya0000∂fxa∂νxa]\nabla F_{\mathrm{u}}=\left[\begin{array}{ccccccc} 0&0&0&0 \\ \frac{\partial f\omega^{b}}{\partial \mathrm{y}_{g}} & 0 & 0 & 0 \\ 0&\frac{\partial f\mathrm{x}_g}{\partial \mathrm{\nu}_{\mathrm{xg}}}&0&0\\ 0&0&0&0 \\ 0&0&0&0 \\ 0 & 0 & \frac{\partial fa^n}{\partial \mathrm{y}_{a}} & 0 \\ 0 & 0 & 0 & \frac{\partial f\mathrm{x}_{a}}{\partial \nu_{\mathrm{xa}}} \end{array}\right] ∇Fu=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡0∂yg∂fωb0000000∂νxg∂fxg000000000∂ya∂fan0000000∂νxa∂fxa⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
1.4 System update
EKF更新方程如下(作者这里写的形式可能有误):
x^k=x^k+1+W(zi−hi)Pk=Pk+1−WSiW′\hat{\mathrm{x}}_{k}=\hat{\mathrm{x}}_{k+1}+W(\mathrm{z}_i-h_i)\\ P_{k}=P_{k+1}-WS_iW' x^k=x^k+1+W(zi−hi)Pk=Pk+1−WSiW′
其中,zi\mathrm{z}_izi 是当前时刻测量值,hi=h(x^)h_i=h(\hat{\mathrm{x}})hi=h(x^) 是预测测量,WWW 是卡尔曼增益,计算方程为: W=Pk+1∇Hi′Si−1W=P_{k+1}\nabla H_i^{'}S_i^{-1}W=Pk+1∇Hi′Si−1,SiS_iSi为:Si=∇HiPk+1∇Hi′+RiS_i=\nabla H_i P_{k+1}\nabla H_i^{'} + R_iSi=∇HiPk+1∇Hi′+Ri。其中,∇Hi\nabla H_i∇Hi 是预测测量 h(x^)h(\hat{\mathrm{x}})h(x^) 对系统状态量 x^\hat{\mathrm{x}}x^ 的测量雅可比矩阵,RiR_iRi 是测量噪声协方差矩阵。根据以上方程可以发现,只要知道测量值、预测测量、测量雅克比矩阵、噪声
即可进行状态更新。
1.4.1 Dynamical constraints update
首先是非完整性约束,如果 IMU的 x\mathrm{x}x 轴和陆地汽车的 x\mathrm{x}x 轴平行的话,则载体沿 y\mathrm{y}y 和 z\mathrm{z}z 轴的速度可以建模为:
[vybvzb]=[0+νv0+νv]\left[\begin{array}{c} \mathrm{v}_{\mathrm{y}}^{b} \\ \mathrm{v}_{\mathrm{z}}^{b} \end{array}\right]=\left[\begin{array}{c} 0+\nu_{\mathrm{v}} \\ 0+\nu_{\mathrm{v}} \end{array}\right] [vybvzb]=[0+νv0+νv]
载体速度和导航速度关系为:
[vxb,vyb,vzb]′=[Rnbvn]\left[\begin{array}{c} \mathrm{v}_{\mathrm{x}}^{b},\mathrm{v}_{\mathrm{y}}^{b}, \mathrm{v}_{\mathrm{z}}^{b} \end{array}\right]'=\left[\begin{array}{c} R^{nb}\mathrm{v}^n\end{array}\right] [vxb,vyb,vzb]′=[Rnbvn]
则现在已知测量值
zi=[0,0]′\mathrm{z}_i=[0,0]'zi=[0,0]′,预测测量
hi=[vyb,vzb]h_i=[\mathrm{v}_{\mathrm{y}}^b,\mathrm{v}_{\mathrm{z}}^b]hi=[vyb,vzb],噪声
R=I2×2σv2R=\mathbf{I}_{2\times2}\sigma_{\mathrm{v}}^2R=I2×2σv2,雅可比矩阵
为 ∇Hi=∂hi/∂x^\nabla H_i=\partial h_{i} / \partial \hat{\mathrm{x}}∇Hi=∂hi/∂x^,代入卡尔曼滤波,即可进行状态更新。
1.4.2 Roll and pitch updates
当载体加速度很小时(ab≈0a^b\approx0ab≈0),则加速度模型可以写成:ya≈gb+νa\mathrm{y}_a \approx g^b+\nu_aya≈gb+νa (忽略加速度偏差)。此时,加速度测量值为重力向量在载体坐标的分量,可以根据重力向量进行俯仰角修正。(不过在进行俯仰角修正时,需要使用零速检测算法进行静止判断)。
此时,重力向量测量值为:
hg=Rnb[0,0,gc]′h_g=R^{nb}[0,0,g_c]' hg=Rnb[0,0,gc]′
其中,gcg_cgc 为重力向量常数,现在已知测量值
zi=ya\mathrm{z}_i=\mathrm{y}_azi=ya,预测测量
hi=hgh_i=h_ghi=hg,噪声
R=I3×3σa2R=\mathbf{I}_{3\times3}\sigma_{a}^2R=I3×3σa2,雅可比矩阵
为 ∇Hi=∂hg/∂x^\nabla H_i=\partial h_{g} / \partial \hat{\mathrm{x}}∇Hi=∂hg/∂x^,代入卡尔曼滤波,即可进行状态更新。
1.4.3 Position and heading updates
位置更新
,测量值 zi=zrn\mathrm{z}_i=\mathrm{z}_r^nzi=zrn,预测测量 hi=hr=[03×10,I3×3,03×9]x^h_i=h_r=[0_{3\times10},\mathrm{I}_{3\times3},0_{3\times9}]\hat{\mathrm{x}}hi=hr=[03×10,I3×3,03×9]x^,噪声 R=I3×3σr2R=\mathbf{I}_{3\times3}\sigma_{r}^2R=I3×3σr2,雅可比矩阵
为 ∇Hi=[03×10,I3×3,03×9]\nabla H_i=[0_{3\times10},\mathrm{I}_{3\times3},0_{3\times9}]∇Hi=[03×10,I3×3,03×9],代入卡尔曼滤波,即可进行状态更新。
航向角更新
,测量值 zi=zθn\mathrm{z}_i=\mathrm{z}_\theta^nzi=zθn,预测测量 hi=hθ=atan2(2(q2q3−q1q4),1−2(q32+q42))h_i=h_{\theta}=\mathrm{atan2(2(q_2q_3-q_1q_4),1-2(q_3^2+q_4^2))}hi=hθ=atan2(2(q2q3−q1q4),1−2(q32+q42)),噪声 R=σθ2R=\sigma_{\theta}^2R=σθ2,雅可比矩阵
为∇Hi=∂hθ/∂x^\nabla H_i=\partial h_{\theta} / \partial \hat{\mathrm{x}}∇Hi=∂hθ/∂x^,代入卡尔曼滤波,即可进行状态更新。
2. Experimental results
下面是实验参数设置和结果: