文章目录
🚀 惯性/卫星组合导航有多种耦合模型,本文针对最简单的松组合模型进行讲解。该模型主要利用卫星端的数据对惯性端的数据进行更新,在更新中不断的消除累计误差。

本文先在基本微分方程理论
中简要介绍EKF(Extended Kalman Filter)拓展卡尔曼滤波中会使用到的一些微分方程,接下来在系统/观测体系构建
中讲解如何利用微分方程构建系统方程和观测方程,最后在具体EKF计算流程
中讲解卫星/惯性组合导航的解算过程。
01
🌔基本微分方程理论
这里微分方程是以 δ X e b n \delta X^{n}_{eb} δXebn为基准,即以变量 X X X的变化量 δ X \delta X δX为目标,求取载体坐标系 b b b相对于地心地固坐标系 e e e在当地地理坐标系 n n n下的投影表示。另外,由于涉及很多先验知识和复杂的理论推导,于是就直接给出结果,附带一点数学说明。
1.1 姿态误差微分方程
⭐️ ϕ \phi ϕ为x,y,z三个方向的姿态变化。
ϕ ˙ = ϕ ˙ b n = − w i n n × ϕ + δ w i n n + ( − C b n δ w i b b ) \dot{\phi}=\dot\phi^n_{b}=-w^n_{in}\times\phi+\delta w^n_{in}+(-C^n_b\delta w^b_{ib}) ϕ˙=ϕ˙bn=−winn×ϕ+δwinn+(−Cbnδwibb)
ϕ = [ δ α δ β δ γ ] \phi=\begin{bmatrix}\delta\alpha&\delta\beta&\delta\gamma\end{bmatrix} ϕ=[δαδβδγ]
{ w i n n = w i e n + w e n n = [ Ω cos L 0 − Ω sin L ] T + [ v E R E + h − v N R N + h − v E tan L R E + h ] T = [ Ω cos L + v E R E + h − v N R N + h − Ω sin L − v E tan L R E + h ] T δ w i n n = [ 0 1 R E + h 0 − 1 R N + h 0 0 0 − tan L R E + h 0 ] [ δ v N δ v E δ v D ] + [ − Ω sin L 0 − v E ( R E + h ) 2 0 0 v N ( R N + h ) 2 − Ω cos L − v E ( R E + h ) cos 2 L 0 v E tan L ( R E + h ) 2 ] [ δ L δ λ δ h ] \begin{cases}w^n_{in}=w^n_{ie}+w^n_{en}=\begin{bmatrix}\Omega\cos L&0&-\Omega\sin L\end{bmatrix}^T+\begin{bmatrix}\frac{v_E}{R_E+h}&-\frac{v_N}{R_N+h}&-\frac{v_E\tan L}{R_E+h}\end{bmatrix}^T\\=\begin{bmatrix}\Omega\cos L+\frac{v_E}{R_E+h}&-\frac{v_N}{R_N+h}&-\Omega\sin L-\frac{v_E\tan L}{R_E+h}\end{bmatrix}^T\\\delta w^n_{in}=\begin{bmatrix}0&\frac{1}{R_E+h}&0\\-\frac{1}{R_N+h}&0&0\\0&-\frac{\tan L}{R_E+h}&0\end{bmatrix}\begin{bmatrix}\delta v_N\\\delta v_E\\\delta v_D\end{bmatrix}+\begin{bmatrix}-\Omega\sin L&0&-\frac{v_E}{{(R_E+h)}^2}\\0&0&\frac{v_N}{{(R_N+h)}^2}\\-\Omega\cos L-\frac{v_E}{(R_E+h)\cos^2L}&0&\frac{v_E\tan L}{{(R_E+h)}^2}\end{bmatrix}\begin{bmatrix}\delta L\\\delta \lambda\\\delta h\end{bmatrix}\end{cases} ⎩ ⎨ ⎧winn=wien+wenn=[ΩcosL0−ΩsinL]T+[RE+hvE−RN+hvN−RE+hvEtanL]T=[ΩcosL+RE+hvE−RN+hvN−ΩsinL−RE+hvEtanL]Tδwinn= 0−RN+h10RE+h10−RE+htanL000 δvNδvEδvD + −ΩsinL0−ΩcosL−(RE+h)cos2LvE000−(RE+h)2vE(RN+h)2vN(RE+h)2vEtanL δLδλδh
1.2 速度误差微分方程
⭐️ δ v \delta v δv为北向N、东向E、地向D三个维度的速度变化。
δ v ˙ = δ v ˙ e b n = [ f n × ] ϕ − [ ( 2 w i e n + w e n n ) × ] δ v e b n − [ ( 2 δ w i e n + δ w e n n ) × ] v e b n + ( C b n δ f b + δ g n ) \delta \dot v=\delta \dot{v}^n_{eb}=[f^n\times]\phi-[(2w^n_{ie}+w^n_{en})\times]\delta v^n_{eb}-[(2\delta w^n_{ie}+\delta w^n_{en})\times]v^n_{eb}+(C^n_b\delta f^b + \delta g^n) δv˙=δv˙ebn=[fn×]ϕ−[(2wien+wenn)×]δvebn−[(2δwien+δwenn)×]vebn+(Cbnδfb+δgn)
[ ( 2 w i e n + w e n n ) × ] = [ [ 2 Ω cos L + v E R E + h − v N R N + h − 2 Ω sin L − v E tan L R E + h ] T × ] [(2w^n_{ie}+w^n_{en})\times]=[\begin{bmatrix}2\Omega\cos L+\frac{v_E}{R_E+h}&-\frac{v_N}{R_N+h}&-2\Omega\sin L-\frac{v_E\tan L}{R_E+h}\end{bmatrix}^T\times] [(2wien+wenn)×]=[[2ΩcosL+RE+hvE−RN+hvN−2ΩsinL−RE+hvEtanL]T×]
其中重力项 δ g n \delta g^n δgn常常忽略。
1.3 位置误差微分方程
⭐️ δ p \delta p δp为纬度、经度、高度三个维度的位置变化。
δ p ˙ = [ δ L ˙ δ λ ˙ δ h ˙ ] = [ 1 R N + h 0 0 0 1 ( R E + h ) cos L 0 0 0 − 1 ] [ δ v N δ v E δ v D ] + [ 0 0 − v N ( R N + h ) 2 v E sin L ( R E + h ) cos 2 L 0 − v E ( R E + h ) 2 cos L 0 0 0 ] [ δ L δ λ δ h ] \delta \dot p=\begin{bmatrix}\delta \dot{L}\\\delta \dot{\lambda}\\\delta \dot h\end{bmatrix}=\begin{bmatrix}\frac{1}{R_N+h}&0&0\\0&\frac{1}{(R_E+h)\cos L}&0\\0&0&-1\end{bmatrix}\begin{bmatrix}\delta v_N\\\delta v_E\\\delta v_D\end{bmatrix}+\begin{bmatrix}0&0&-\frac{v_N}{(R_N+h)^2}\\\frac{v_E\sin L}{(R_E+h)\cos^2 L}&0&-\frac{v_E}{(R_E+h)^2\cos L}\\0&0&0\end{bmatrix}\begin{bmatrix}\delta L\\\delta \lambda\\\delta h\end{bmatrix} δp˙= δL˙δλ˙δh˙ = RN+h1000(RE+h)cosL1000−1 δvNδvEδvD + 0(RE+h)cos2LvEsinL0000−(RN+h)2vN−(RE+h)2cosLvE0 δLδλδh
1.4 传感器误差微分方程
⭐️将陀螺仪(g)和加表(a)的系统误差模拟成随机游走过程:
{ δ w i b b = ϵ b + w g = ϵ + w g δ f b = ∇ b + w a = ∇ + w a \begin{cases}\delta w^b_{ib}=\epsilon^b+w_g=\epsilon+w_g\\\delta f^b=\nabla^b+w_a=\nabla+w_a\end{cases} {δwibb=ϵb+wg=ϵ+wgδfb=∇b+wa=∇+wa
且为了方便考虑,取 ϵ ˙ = 0 , ∇ ˙ = 0 \dot\epsilon=0,\;\dot\nabla=0 ϵ˙=0,∇˙=0。
02
🌔系统/观测体系构建
2.1 系统方程
⭐️以姿态误差/速度误差/姿态误差/传感器误差作为状态变量(INS-GNSS):
δ x = [ ϕ δ v δ p δ ϵ δ ∇ ] 15 × 1 \delta x=\begin{bmatrix}\phi\\\delta v\\\delta p\\\delta \epsilon\\\delta\nabla\end{bmatrix}_{15\times 1} δx= ϕδvδpδϵδ∇ 15×1
传感器噪声定义如下:
w = [ w g x w g y w g z w a x w a y w a z ] 6 × 1 T w=\begin{bmatrix}w_{gx}&w_{gy}&w_{gz}&w_{ax}&w_{ay}&w_{az}\end{bmatrix}^T_{6\times1} w=[wgxwgywgzwaxwaywaz]6×1T
结合上述微分方程的结果,可以推导出:
(所求量都是
b
b
b相对于
e
e
e在
n
n
n下的表示,
F
F
F为系统矩阵,
G
G
G为噪声转移矩阵)
δ x ˙ = F δ x + G w \delta\dot x=F\delta x+Gw δx˙=Fδx+Gw
F = [ F 11 F 12 F 13 − C b n 0 3 × 3 F 21 F 22 F 23 0 3 × 3 C b n F 31 F 32 F 33 0 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 ] 15 × 15 F=\begin{bmatrix}F_{11}&F_{12}&F_{13}&-C^n_b&0_{3\times3}\\F_{21}&F_{22}&F_{23}&0_{3\times3}&C^n_b\\F_{31}&F_{32}&F_{33}&0_{3\times3}&0_{3\times3}\\0_{3\times3}&0_{3\times3}&0_{3\times3}&0_{3\times3}&0_{3\times3}\\0_{3\times3}&0_{3\times3}&0_{3\times3}&0_{3\times3}&0_{3\times3}\end{bmatrix}_{15\times15} F= F11F21F3103×303×3F12F22F3203×303×3F13F23F3303×303×3−Cbn03×303×303×303×303×3Cbn03×303×303×3 15×15
G = [ − C b n 0 3 × 3 0 3 × 3 C b n 0 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 ] 15 × 6 G=\begin{bmatrix}-C^n_b&0_{3\times3}\\0_{3\times3}&C^n_b\\0_{3\times3}&0_{3\times3}\\0_{3\times3}&0_{3\times3}\\0_{3\times3}&0_{3\times3}\end{bmatrix}_{15\times6} G= −Cbn03×303×303×303×303×3Cbn03×303×303×3 15×6
F | F i 1 F_{i1} Fi1 | F i 2 F_{i2} Fi2 | F i 3 F_{i3} Fi3 |
---|---|---|---|
F 1 j F_{1j} F1j | [ 0 − Ω sin L − v E tan L R E + h v N R N + h Ω sin L + v E tan L R E + h 0 Ω cos L + v E R E + h − v N R N + h − Ω cos L − v E R E + h 0 ] \begin{bmatrix}0&-\Omega\sin L-\frac{v_E\tan L}{R_E+h}&\frac{v_N}{R_N+h}\\\Omega\sin L+\frac{v_E\tan L}{R_E+h}&0&\Omega\cos L+\frac{v_E}{R_E+h}\\-\frac{v_N}{R_N+h}&-\Omega\cos L-\frac{v_E}{R_E+h}&0\end{bmatrix} 0ΩsinL+RE+hvEtanL−RN+hvN−ΩsinL−RE+hvEtanL0−ΩcosL−RE+hvERN+hvNΩcosL+RE+hvE0 | [ 0 1 R E + h 0 − 1 R N + h 0 0 0 − tan L R E + h 0 ] \begin{bmatrix}0&\frac{1}{R_E+h}&0\\-\frac{1}{R_N+h}&0&0\\0&-\frac{\tan L}{R_E+h}&0\end{bmatrix} 0−RN+h10RE+h10−RE+htanL000 | [ − Ω sin L 0 − v E ( R E + h ) 2 0 0 v N ( R N + h ) 2 − Ω cos L − v E ( R E + h ) cos 2 L 0 v E tan L ( R E + h ) 2 ] \begin{bmatrix}-\Omega\sin L&0&-\frac{v_E}{{(R_E+h)}^2}\\0&0&\frac{v_N}{{(R_N+h)}^2}\\-\Omega\cos L-\frac{v_E}{(R_E+h)\cos^2L}&0&\frac{v_E\tan L}{{(R_E+h)}^2}\end{bmatrix} −ΩsinL0−ΩcosL−(RE+h)cos2LvE000−(RE+h)2vE(RN+h)2vN(RE+h)2vEtanL |
F 2 j F_{2j} F2j | [ 0 − f D n f E n f D n 0 − f N n − f E n f N n 0 ] \begin{bmatrix}0&-f^n_D&f^n_E\\f^n_D&0&-f^n_N\\-f^n_E&f^n_N&0\end{bmatrix} 0fDn−fEn−fDn0fNnfEn−fNn0 | [ v D R N + h − 2 v E tan L R E + h − 2 Ω sin L v N R N + h 2 Ω sin L + v E tan L R E + h v N tan L R E + h + v D R E + h 2 Ω cos L + v E R E + h − 2 v N R N + h − 2 v E R E + h − 2 Ω cos L 0 ] \begin{bmatrix}\frac{v_D}{R_N+h}&-\frac{2v_E\tan L}{R_E+h}-2\Omega\sin L& \frac{v_N}{R_N+h}\\2\Omega\sin L+\frac{v_E\tan L}{R_E+h}&\frac{v_N\tan L}{R_E+h}+\frac{v_D}{R_E+h}&2\Omega\cos L+\frac{v_E}{R_E+h}\\-\frac{2v_N}{R_N+h}&-\frac{2v_E}{R_E+h}-2\Omega\cos L&0\end{bmatrix} RN+hvD2ΩsinL+RE+hvEtanL−RN+h2vN−RE+h2vEtanL−2ΩsinLRE+hvNtanL+RE+hvD−RE+h2vE−2ΩcosLRN+hvN2ΩcosL+RE+hvE0 | [ − 2 v E Ω cos L − v E 2 ( R E + h ) cos 2 L 0 − v N v D ( R N + h ) 2 + v E 2 tan L ( R E + h ) 2 2 v N Ω cos L + v N v E ( R E + h ) cos 2 L − 2 v D Ω sin L 0 − v N v E tan L ( R E + h ) 2 − v D v E ( R E + h ) 2 2 Ω v E sin L 0 v N 2 ( R N + h ) 2 + v E 2 ( R E + h ) 2 ] \begin{bmatrix}-2v_E\Omega\cos L-\frac{v_E^2}{(R_E+h)\cos^2 L} & 0 & -\frac{v_Nv_D}{(R_N+h)^2}+\frac{v_E^2\tan L}{(R_E+h)^2}\\2v_N\Omega\cos L+\frac{v_Nv_E}{(R_E+h)\cos^2 L}-2v_D\Omega\sin L&0&-\frac{v_Nv_E\tan L}{(R_E+h)^2}-\frac{v_Dv_E}{(R_E+h)^2}\\2\Omega v_E\sin L&0&\frac{v_N^2}{(R_N+h)^2}+\frac{v_E^2}{(R_E+h)^2}\end{bmatrix} −2vEΩcosL−(RE+h)cos2LvE22vNΩcosL+(RE+h)cos2LvNvE−2vDΩsinL2ΩvEsinL000−(RN+h)2vNvD+(RE+h)2vE2tanL−(RE+h)2vNvEtanL−(RE+h)2vDvE(RN+h)2vN2+(RE+h)2vE2 |
F 3 j F_{3j} F3j | [ 0 0 0 0 0 0 0 0 0 ] \begin{bmatrix}0&0&0\\0&0&0\\0&0&0\end{bmatrix} 000000000 | [ 1 R N + h 0 0 0 1 ( R E + h ) cos L 0 0 0 − 1 ] \begin{bmatrix}\frac{1}{R_N+h}&0&0\\0&\frac{1}{(R_E+h)\cos L}&0\\0&0&-1\end{bmatrix} RN+h1000(RE+h)cosL1000−1 | [ 0 0 − v N R N + h v E sin L ( R E + h ) cos 2 L 0 − v E ( R E + h ) 2 cos L 0 0 0 ] \begin{bmatrix}0&0&-\frac{v_N}{R_N+h}\\\frac{v_E\sin L}{(R_E+h)\cos^2 L}&0&-\frac{v_E}{(R_E+h)^2\cos L}\\0&0&0\end{bmatrix} 0(RE+h)cos2LvEsinL0000−RN+hvN−(RE+h)2cosLvE0 |
2.2 观测方程
⭐️这里注意构造 δ x ′ \delta x' δx′时的相减顺序, 这与后续EKF推导的加减号有关。
δ z = H δ x ′ + υ = [ v I N S n − v G N S S n L I N S n − L G N S S n λ I N S n − λ G N S S n h I N S n − h G N S S n ] 6 × 1 + υ 6 × 1 \delta z=H\delta x'+\upsilon=\begin{bmatrix}v^n_{INS}-v^n_{GNSS}\\L^n_{INS}-L^n_{GNSS}\\\lambda^n_{INS}-\lambda^n_{GNSS}\\h^n_{INS}-h^n_{GNSS}\end{bmatrix}_{6\times1}+\upsilon_{6\times1} δz=Hδx′+υ= vINSn−vGNSSnLINSn−LGNSSnλINSn−λGNSSnhINSn−hGNSSn 6×1+υ6×1
H = [ 0 3 × 3 I 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 0 3 × 3 I 3 × 3 0 3 × 3 0 3 × 3 ] 6 × 15 H=\begin{bmatrix}0_{3\times3}&I_{3\times3}&0_{3\times3}&0_{3\times3}&0_{3\times3}\\0_{3\times3}&0_{3\times3}&I_{3\times3}&0_{3\times3}&0_{3\times3}\end{bmatrix}_{6\times15} H=[03×303×3I3×303×303×3I3×303×303×303×303×3]6×15
其中, H H H是观测矩阵, υ \upsilon υ是观测噪声。
如果考虑倒惯导与接收机天线之间的杆臂长,则还需要对GNSS处的值进行补偿修改。
03
🌔具体EKF计算流程
经典的KF卡尔曼滤波可以参考这篇How a Kalman filter works, in pictures,他讲的很好。(需要科学上网工具)
KF卡尔曼滤波以
x
x
x作为状态量,EKF拓展卡尔曼滤波以
δ
x
\delta x
δx作为状态量。
为了说明大意,简化基础微分方程理论
,而有以下设置:
状态向量(定义为INS-GNSS) | INS结果(除此外还有 C b n C_b^n Cbn) | GNSS结果 |
---|---|---|
δ x ^ = [ ϕ δ v δ p ] 9 × 1 \delta \hat{x}=\begin{bmatrix}\phi\\\delta v\\\delta p\end{bmatrix}_{9\times 1} δx^= ϕδvδp 9×1 | x ^ = [ p I N S v I N S ] 6 × 1 \hat x=\begin{bmatrix}p_{INS}\\v_{INS}\end{bmatrix}_{6\times1} x^=[pINSvINS]6×1 | z = [ p G N S S v G N S S ] 6 × 1 z=\begin{bmatrix}p_{GNSS}\\v_{GNSS}\end{bmatrix}_{6\times1} z=[pGNSSvGNSS]6×1 |
3.1 状态预测
获取状态初值9x1(认为经过组合导航补偿后,下一轮迭代偏差已修正为0):
δ x ^ k − 1 = 0 9 × 1 \delta \hat x_{k-1}=0_{9\times1} δx^k−1=09×1
根据微分方程,构造系统矩阵9x9:
F = [ F 11 F 12 F 13 F 21 F 22 F 23 F 31 F 32 F 33 ] 9 × 9 F=\begin{bmatrix}F_{11}&F_{12}&F_{13}\\F_{21}&F_{22}&F_{23}\\F_{31}&F_{32}&F_{33}\end{bmatrix}_{9\times9} F= F11F21F31F12F22F32F13F23F33 9×9
⭐获取状态预测值9x1(也为0,且驱动力 u k = 0 u_k=0 uk=0,驱动矩阵 B = 0 B=0 B=0):
δ x ^ k = F δ x ^ k − 1 + B u k \delta\hat x_k=F\delta \hat x_{k-1}+Bu_k δx^k=Fδx^k−1+Buk
3.2 状态协方差预测
由陀螺仪噪声向量 w g w_g wg和加表噪声向量 w a w_a wa,构造传感器噪声矩阵6x6:
W = d i a g ( [ w g w a ] ⊙ [ w g w a ] ) 6 × 6 W = diag([w_g\;w_a]\odot [w_g\;w_a])_{6\times6} W=diag([wgwa]⊙[wgwa])6×6
由姿态,速度,位置的微分方程,构造系统噪声转移矩阵9x6:
G = [ − C b n 0 3 × 3 0 3 × 3 C b n 0 3 × 3 0 3 × 3 ] 9 × 6 G=\begin{bmatrix}-C^n_b&0_{3\times3}\\0_{3\times3}&C^n_b\\0_{3\times3}&0_{3\times3}\end{bmatrix}_{9\times6} G= −Cbn03×303×303×3Cbn03×3 9×6
由传感器噪声和噪声转移矩阵,计算系统噪声9x9:
Q = ( G W G T ) 9 × 9 Q=(GWG^T)_{9\times9} Q=(GWGT)9×9
⭐根据上一步迭代的状态协方差(最初的 P 0 P_0 P0按情况设置就行),预测本次迭代的状态协方差9x9:
P k = F P k − 1 F T + Q P_k=FP_{k-1}F^T+Q Pk=FPk−1FT+Q
3.3 卡尔曼增益计算
由观测噪声向量 υ \upsilon υ,构造观测噪声矩阵6x6:
R = d i a g ( υ ⊙ υ ) 6 × 6 R=diag(\upsilon \odot \upsilon)_{6\times6} R=diag(υ⊙υ)6×6
由观测向量 z k z_k zk和状态向量 δ x \delta x δx的设置,构造观测矩阵6x9:
H = [ 0 3 × 3 0 3 × 3 I 3 × 3 0 3 × 3 I 3 × 3 0 3 × 3 ] 6 × 9 H=\begin{bmatrix}0_{3\times3}&0_{3\times3}&I_{3\times3}\\0_{3\times3}&I_{3\times3}&0_{3\times3}\end{bmatrix}_{6\times9} H=[03×303×303×3I3×3I3×303×3]6×9
⭐构造卡尔曼增益9x9:
K = P k H T ( H P k H T + R ) − 1 K=P_kH^T(HP_kH^T+R)^{-1} K=PkHT(HPkHT+R)−1
3.4 状态更新
利用惯性导航解算,计算得此时的INS结果6x1:
x ^ k = f ( x ^ k − 1 ) \hat x_k=f(\hat x_{k-1}) x^k=f(x^k−1)
⭐进行状态更新9x1(这里偏差计算的顺序与状态变量的定义有关):
δ x ^ k ′ = δ x ^ k + K ( x ^ k − z k ) \delta \hat x_{k}'=\delta\hat x_k+K(\hat x_k-z_k) δx^k′=δx^k+K(x^k−zk)
注意将更新后的状态置零后再送入下一步迭代。
3.5 状态协方差更新
标准的状态协方差更新方程9x9:
P k ′ = P k − K H P k P_k'=P_k-KHP_k Pk′=Pk−KHPk
⭐考虑到使用上式容易使得 P P P非对称,而为了保持数值稳定性,在程序不报错条件下,采用Joseph形式的方程更新状态协方差:
P k ′ = ( 1 − K H ) P k ( 1 − K H ) T + K R K T P_k'=(1-KH)P_k(1-KH)^T+KRK^T Pk′=(1−KH)Pk(1−KH)T+KRKT
注意将更新后的协方差送入下一步迭代。
3.6 补偿
⭐利用惯性导航结果和更新后的状态量,补偿得到组合导航结果(就此可以解释为何假设将送入下一轮的偏差设置为0)并送入下一次惯性解算(这里加减与状态定义有关):
x I N S + G N S S = x I N S − δ x ^ x_{INS+GNSS}=x_{INS}-\delta \hat x xINS+GNSS=xINS−δx^