EKF核心概念:状态向量、协方差矩阵、预测与更新步骤的通俗理解
说实话,很多飞控开发者一听到「卡尔曼滤波」就头大。我当年刚接触ArduPilot时也是这样,看着EKF源码里一堆矩阵运算,心里直打鼓。后来调了几年实机,踩了不少坑,才慢慢摸清门道。
这一章,咱们就把EKF的四个核心概念掰开揉碎讲清楚。不堆公式,不讲天书,用你能听懂的大白话。
2.1 状态向量:飞控在猜什么?
EKF本质上是个「猜谜游戏」。飞控不知道自己的真实状态,只能靠传感器数据去猜。那它猜的是什么呢?
状态向量,就是飞控当前猜测的所有变量。在ArduPilot的EKF2/EKF3里,典型的状态向量包含这些:
| 状态类别 | 具体变量 | 通俗理解 |
|---|---|---|
| 位置 | 北、东、地 (NED) | 飞机在三维空间中的坐标 |
| 速度 | 北向、东向、地向速度 | 飞机往哪个方向飞、多快 |
| 姿态 | 四元数 (q0,q1,q2,q3) | 飞机当前是正着飞还是歪着飞 |
| 陀螺零偏 | 三轴陀螺仪偏差 | 陀螺仪「偷懒」了多少 |
| 加速度计零偏 | 三轴加速度计偏差 | 加速度计「撒谎」了多少 |
| 地磁 | 磁场矢量或偏角 | 地球磁场在飞机坐标系下的投影 |
关键点:状态向量的大小决定了EKF的计算量。EKF2默认用23维状态,EKF3可以扩展到更多。我个人习惯在调参时先确认状态维度,否则后面排查问题会一头雾水。
2.2 协方差矩阵:飞控有多自信?
光有猜测值还不够,飞控还得知道自己猜得准不准。这就是协方差矩阵的作用。
你可以把协方差矩阵想象成一张「不确定度地图」。矩阵对角线上的数字,表示每个状态变量的方差——数字越大,说明飞控对这个变量的猜测越没底。
举个例子:
- 如果GPS信号很好,位置协方差会很小,飞控很自信
- 如果GPS丢了,位置协方差会迅速增大,飞控开始「心虚」
- 如果飞机剧烈震动,加速度计协方差也会变大
非对角线元素呢?它们表示不同状态之间的相关性。比如位置和速度肯定是相关的——位置变化快,速度就大。EKF利用这些相关性来「交叉验证」各个状态。
调参小技巧:在Mission Planner里查看EKF的协方差值,如果某个状态协方差突然跳变,说明对应的传感器可能出问题了。我曾经遇到过一架飞机,协方差一直偏大,排查了半天发现是GPS天线松了。
2.3 预测步骤:飞控的「直觉」
预测步骤,说白了就是飞控凭「直觉」猜下一秒的状态。它用当前的状态和IMU数据,推算下一时刻的状态。
这个过程分两步:
- 状态预测:用加速度计和陀螺仪的数据,结合运动方程,算出下一时刻的位置、速度、姿态
- 协方差预测:同时更新不确定度——因为IMU有噪声,预测后的协方差会变大
为什么会变大?你想想看,IMU数据本身就有误差,用有误差的数据去推算,结果肯定越来越不准。就像你闭着眼睛走路,走一步还行,走十步就偏到姥姥家去了。
注意:预测步骤完全依赖IMU。如果IMU有严重的零偏或噪声,预测出来的状态会迅速发散。这就是为什么EKF需要不断用其他传感器(GPS、磁力计、气压计)来「纠偏」。
2.4 更新步骤:飞控的「纠偏」
预测完了,飞控会问自己一句:「我猜得对吗?」
更新步骤就是拿实际传感器数据来验证猜测。如果GPS说位置在A点,但EKF预测在B点,那就要修正。
具体流程:
- 计算残差:实际观测值减去预测值,差值就是「偏差」
- 计算卡尔曼增益:这是个权重系数,决定「信传感器多一点,还是信预测多一点」
- 更新状态:用残差乘以增益,加到预测状态上
- 更新协方差:修正后的不确定度会变小
卡尔曼增益是关键。如果传感器很准(协方差小),增益就大,飞控更相信传感器。如果传感器噪声大(协方差大),增益就小,飞控更相信自己的预测。
核心逻辑:预测让不确定度变大,更新让不确定度变小。EKF就在这两个步骤之间来回切换,不断收敛到真实状态。
2.5 一张图看懂EKF流程
下面这张SVG图,把整个EKF的预测-更新循环画清楚了。建议你多看几遍,理解这个循环,后面调参就顺了。
2.6 调参时你需要关注什么?
理解了核心概念,调参就有方向了。我个人总结了几条经验:
- 关注协方差收敛速度:如果EKF启动后协方差迟迟不收敛,说明传感器噪声参数设置不合理
- 注意残差大小:残差过大说明预测和观测打架了,可能是传感器故障或参数错误
- 检查状态向量维度:确认EKF2还是EKF3,以及启用了哪些状态
避坑指南:我曾经遇到过一架飞机,EKF协方差一直不收敛,排查了三天。最后发现是磁力计校准没做,导致地磁状态一直在漂。所以,调参前一定要确保传感器校准到位。
嗯,这一章的内容就到这儿。核心概念搞懂了,后面讲具体参数怎么调,你就能理解每个参数在改什么了。