无人机垂直通道卡尔曼滤波器:从状态空间模型到六传感器融合的数值实例

摘要

本文以某无人机飞控(FCS)惯性导航状态估计器中的垂直通道(高度)滤波器为对象,系统阐述其卡尔曼滤波(EKF)的数学原理与具体实现。文章从连续时间运动方程出发,经前向欧拉离散化得到系统矩阵 AAA 与输入矩阵 BBB;随后给出预测(Predict)与修正(Correct)两步的完整方程,并以一组 6 路传感器(GNSS 速度/高度、声呐、气压计、VIO 速度/位置)的真实结构为例,代入具体数值逐步计算出新息、新息协方差、卡尔曼增益与修正后的状态与协方差,最后讨论了信任权重、偏置可观测性与协方差收缩等工程要点。


1 背景与系统架构

在典型 INS/GNSS 组合导航中,位置估计按"东–北–高"三轴组织。该模型的实现并非三个独立滤波器,而是:

  • 水平滤波器(Horizontal Filter):将东、北两轴合并为一个 6 状态 EKF,状态为 [Epos,Npos,Evel,Nvel,Ebias,Nbias]⊤[E_{pos},N_{pos},E_{vel},N_{vel},E_{bias},N_{bias}]^\top[Epos,Npos,Evel,Nvel,Ebias,Nbias]
  • 垂直滤波器(Vertical Filter):单独处理"高"轴,为一个 3 状态 EKF。

本文聚焦垂直滤波器,其状态定义为

x=[zvb] x = \begin{bmatrix} z \\ v \\ b \end{bmatrix} x= zvb

其中 zzz 为高度,vvv 为垂直速度,bbb 为垂直加速度计偏置。垂直通道之所以独立成滤波器,是因为其观测源(气压计、声呐、GNSS 高度、VIO 位置)与水平通道不同,且需单独处理重力与垂向偏置。


2 垂直通道连续状态空间模型

由垂直方向运动学及 IMU 偏置建模,连续时间方程为

z˙=vv˙=u−bb˙=0 \begin{aligned} \dot z &= v \\ \dot v &= u - b \\ \dot b &= 0 \end{aligned} z˙v˙b˙=v=ub=0

其中 uuu 为加速度计提供的垂向比力(特定力)读数。写成标准连续状态空间形式 x˙=Fx+Gu\dot x = Fx + Gux˙=Fx+Gu

F=[01000−1000],G=[010] F = \begin{bmatrix} 0 & 1 & 0 \\ 0 & 0 & -1 \\ 0 & 0 & 0 \end{bmatrix}, \qquad G = \begin{bmatrix} 0 \\ 1 \\ 0 \end{bmatrix} F= 000100010 ,G= 010

物理含义:F(1,2)=1F(1,2)=1F(1,2)=1 表示高度由速度驱动;F(2,3)=−1F(2,3)=-1F(2,3)=1 表示速度变化率受偏置负向影响(偏置从加速度中扣除);F(3,3)=0F(3,3)=0F(3,3)=0 表示偏置作为"随机常数"本身不漂移;G(2,1)=1G(2,1)=1G(2,1)=1 表示控制输入 uuu 直接进入速度通道。


3 离散化与系统矩阵 AAABBB

该模型采用**前向欧拉(Forward Euler)**离散化,采样周期 dt=0.0025 sdt = 0.0025\,\text{s}dt=0.0025s(400 Hz,由模型中常量块直接给出):

A=I+dt⋅F=[1dt001−dt001],B=dt⋅G=[0dt0] A = I + dt\cdot F = \begin{bmatrix} 1 & dt & 0 \\ 0 & 1 & -dt \\ 0 & 0 & 1 \end{bmatrix}, \qquad B = dt\cdot G = \begin{bmatrix} 0 \\ dt \\ 0 \end{bmatrix} A=I+dtF= 100dt100dt1 ,B=dtG= 0dt0

代入 dt=0.0025dt=0.0025dt=0.0025

A=[10.0025001−0.0025001],B=[00.00250] A = \begin{bmatrix} 1 & 0.0025 & 0 \\ 0 & 1 & -0.0025 \\ 0 & 0 & 1 \end{bmatrix}, \qquad B = \begin{bmatrix} 0 \\ 0.0025 \\ 0 \end{bmatrix} A= 1000.00251000.00251 ,B= 00.00250

说明:此处使用前向欧拉,故不含 12dt2\tfrac{1}{2}dt^221dt2 项。这意味着加速度对高度的贡献是间接的(仅通过 z+=dt⋅vz\mathrel{+}=dt\cdot vz+=dtv),而非直接二次积分。这是该模型的一个刻意简化。


4 卡尔曼滤波:预测与修正

4.1 预测步(时间更新)

xpred=A x+B uPpred=A P A⊤+Q \begin{aligned} x_{pred} &= A\,x + B\,u \\ P_{pred} &= A\,P\,A^\top + Q \end{aligned} xpredPpred=Ax+Bu=APA+Q

其中 QQQ 为过程噪声协方差。关键项 A P A⊤A\,P\,A^\topAPA 表示"状态不确定性随运动方程传播",并在传播中自动生成状态间的相关性(如速度–偏置耦合)。

4.2 修正步(量测更新)

设有观测矩阵 HHH(本模型中高度类传感器行 [1,0,0][1,0,0][1,0,0],速度类行 [0,1,0][0,1,0][0,1,0],偏置列恒为 0)、观测向量 zzz 与观测噪声协方差 RRR,则:

y=z−H xpred(新息 / 残差)S=H Ppred H⊤+R(新息协方差)K=Ppred H⊤ S−1(卡尔曼增益)xnext=xpred+K y(修正后状态)Pnext=(I−K H) Ppred(修正后协方差) \begin{aligned} y &= z - H\,x_{pred} &&\text{(新息 / 残差)} \\ S &= H\,P_{pred}\,H^\top + R &&\text{(新息协方差)} \\ K &= P_{pred}\,H^\top\,S^{-1} &&\text{(卡尔曼增益)} \\ x_{next} &= x_{pred} + K\,y &&\text{(修正后状态)} \\ P_{next} &= (I - K\,H)\,P_{pred} &&\text{(修正后协方差)} \end{aligned} ySKxnextPnext=zHxpred=HPpredH+R=PpredHS1=xpred+Ky=(IKH)Ppred(新息 / 残差)(新息协方差)(卡尔曼增益)(修正后状态)(修正后协方差)

S=HPH⊤+RS = HPH^\top + RS=HPH+R 的含义HPH⊤HPH^\topHPH 是"预测测量值"的协方差(由状态不确定度经 HHH 投影到测量空间),RRR 是传感器自身噪声;二者之和即"残差应当有多大的不确定度"。SSS 在增益公式中充当分母——它越大(越不信任残差),增益越小,越偏向预测值。


5 六传感器融合数值算例

5.1 场景设定

状态 x=[z;v;b]x=[z;v;b]x=[z;v;b],预测步输出:

xpred=[10.0000.5000.020],Ppred=diag⁡(0.4,  0.25,  0.04) x_{pred} = \begin{bmatrix} 10.000 \\ 0.500 \\ 0.020 \end{bmatrix}, \qquad P_{pred} = \operatorname{diag}(0.4,\;0.25,\;0.04) xpred= 10.0000.5000.020 ,Ppred=diag(0.4,0.25,0.04)

6 路传感器(顺序与模型 Covariance Scheduling 一致):GNSS 速度、GNSS 高度、声呐高度、气压高度、VIO 速度、VIO 位置高度。其观测矩阵与实测值、噪声方差为:

H=[010100100100010100],z=[0.4510.029.9810.010.529.99],R=diag⁡(0.16,  0.0225,  0.0625,  0.09,  0.16,  1.96) H = \begin{bmatrix} 0&1&0\\ 1&0&0\\ 1&0&0\\ 1&0&0\\ 0&1&0\\ 1&0&0 \end{bmatrix}, \quad z = \begin{bmatrix} 0.45\\ 10.02\\ 9.98\\ 10.01\\ 0.52\\ 9.99 \end{bmatrix}, \quad R = \operatorname{diag}(0.16,\;0.0225,\;0.0625,\;0.09,\;0.16,\;1.96) H= 011101100010000000 ,z= 0.4510.029.9810.010.529.99 ,R=diag(0.16,0.0225,0.0625,0.09,0.16,1.96)

RRR 取值对应各传感器有效(valid)模式的典型噪声方差,其中 GNSS 高度 0.1520.15^20.152、VIO 速度 0.420.4^20.42、VIO 位置 1.421.4^21.42 直接取自模型的 Covariance Scheduling 常量。

5.2 逐步计算

(1)新息 y=z−H xpredy = z - H\,x_{pred}y=zHxpred

各高度传感器预测值为 10.010.010.0,各速度传感器预测值为 0.50.50.5,故

y=[−0.050.02−0.020.010.02−0.01] y = \begin{bmatrix} -0.05\\ 0.02\\ -0.02\\ 0.01\\ 0.02\\ -0.01 \end{bmatrix} y= 0.050.020.020.010.020.01

(2)新息协方差 S=H Ppred H⊤+RS = H\,P_{pred}\,H^\top + RS=HPpredH+R

高度类传感器预测测量方差 = Ppred(1,1)=0.4P_{pred}(1,1)=0.4Ppred(1,1)=0.4,速度类 = Ppred(2,2)=0.25P_{pred}(2,2)=0.25Ppred(2,2)=0.25;观测同一状态的传感器之间互相相关:

S=[0.410000.25000.42250.40.400.400.40.46250.400.400.40.40.4900.40.250000.41000.40.40.402.36] S = \begin{bmatrix} 0.41 & 0 & 0 & 0 & 0.25 & 0 \\ 0 & 0.4225 & 0.4 & 0.4 & 0 & 0.4 \\ 0 & 0.4 & 0.4625 & 0.4 & 0 & 0.4 \\ 0 & 0.4 & 0.4 & 0.49 & 0 & 0.4 \\ 0.25 & 0 & 0 & 0 & 0.41 & 0 \\ 0 & 0.4 & 0.4 & 0.4 & 0 & 2.36 \end{bmatrix} S= 0.410000.25000.42250.40.400.400.40.46250.400.400.40.40.4900.40.250000.41000.40.40.402.36

(3)卡尔曼增益 K=Ppred H⊤ S−1K = P_{pred}\,H^\top\,S^{-1}K=PpredHS1

K=[00.5960.21460.14900.00680.37880000.37880000000] K = \begin{bmatrix} 0 & 0.596 & 0.2146 & 0.149 & 0 & 0.0068 \\ 0.3788 & 0 & 0 & 0 & 0.3788 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \end{bmatrix} K= 00.378800.596000.2146000.1490000.378800.006800

读取:高度状态主要由 GNSS 高度拉动(权重 0.596),VIO 位置因噪声大(1.96)几乎不被信任(0.0068);速度状态由两路速度传感器平分(各 0.3788);偏置行全 0——因无传感器直接观测偏置,且此处 PpredP_{pred}Ppred 为对角阵。

(4)修正状态 xnext=xpred+K yx_{next} = x_{pred} + K\,yxnext=xpred+Ky

K y=[0.00905−0.011360],xnext=[10.00910.48860.020] K\,y = \begin{bmatrix} 0.00905 \\ -0.01136 \\ 0 \end{bmatrix}, \quad x_{next} = \begin{bmatrix} 10.0091 \\ 0.4886 \\ 0.020 \end{bmatrix} Ky= 0.009050.011360 ,xnext= 10.00910.48860.020

(5)修正协方差 Pnext=(I−KH) PpredP_{next} = (I-KH)\,P_{pred}Pnext=(IKH)Ppred

Pnext=diag⁡(0.0134,  0.0606,  0.0400) P_{next} = \operatorname{diag}(0.0134,\;0.0606,\;0.0400) Pnext=diag(0.0134,0.0606,0.0400)

5.3 结果汇总

修正前 修正后
高度 zzz (m) 10.000 10.0091
速度 vvv (m/s) 0.500 0.4886
偏置 bbb (m/s²) 0.020 0.020
高度方差 0.400 0.0134
速度方差 0.250 0.0606
偏置方差 0.040 0.040

6 讨论

信任权重的体现。 标量情形 K=P/(P+R)K=P/(P+R)K=P/(P+R) 在此放大为矩阵形式:高度通道中 GNSS 高度权重 0.596、VIO 位置仅 0.0068,正对应二者噪声 0.02250.02250.02251.961.961.96 的差距——噪声越小越被信任。

多传感器使协方差显著收缩。 4 路高度传感器将高度方差从 0.4 压到 0.0134,2 路速度传感器将速度方差从 0.25 压到 0.0606,体现了融合对不确定度的抑制。

偏置的可观测性。 本算例中因 PpredP_{pred}Ppred 取对角阵,偏置增益为 0,偏置一步不变。但在真实环路中,Predict 步产生的"速度–偏置"交叉项会使偏置通过速度传感器获得极微弱修正(验证显示每拍仅约 2×10−52\times10^{-5}2×105)。这说明该结构中偏置主要依赖间接、弱耦合方式估计,是设计上值得注意的特性。


7 结论

垂直通道 EKF 以 [z,v,b]⊤[z,v,b]^\top[z,v,b] 为状态,经前向欧拉离散得到 AAABBB,通过"预测–修正"两步融合 6 路传感器。本文给出的完整数值算例表明:滤波器最终输出高度估计 10.0091 m10.0091\,\text{m}10.0091m、速度 0.4886 m/s0.4886\,\text{m/s}0.4886m/s,并将高度不确定度降低约 30 倍。该算例与 Simulink 模型中 system modelPredictCorrectmeasurement modelCovariance Scheduling 的实现完全一致,可作为理解与验证该滤波器的参考范例。


附录:与 Simulink 模型实现的对应关系

文章符号 模型位置
A,BA, BA,B vertical filter / system model ,由常量 dt=0.0025dt=0.0025dt=0.0025(Constant 27630)生成
HHH measurement model 各子模型输出 CCC;高度类 [1,0,0][1,0,0][1,0,0],速度类 [0,1,0][0,1,0][0,1,0](已核对常量块)
RRR covariance matrix generation / Covariance Scheduling(有效模式噪声方差)
预测/修正 navigationLibrary / Kalman Filter 库内 PredictCorrect 子系统
融合高度输出 `
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐