4. EKF状态估计器调优:EKF3核心算法、协方差矩阵管理、GPS/IMU/磁力计融合策略、动态噪声调节、常见发散问题排查

EKF3,说白了就是ArduPilot的“大脑”。它把GPS、IMU、磁力计这些传感器的数据揉在一起,算出一个最靠谱的姿态和位置。我刚开始接触EKF3时,觉得它就是个黑盒子。后来调多了才发现,里面的门道其实挺多的。

这一章,咱们就把它拆开看看。我会把核心算法、协方差管理、传感器融合这些硬骨头,用我实际踩过的坑串起来讲。你跟着走一遍,以后遇到EKF发散就不会慌了。

核心观点:EKF3调优不是玄学。你理解了协方差矩阵怎么变、噪声参数怎么调,发散问题就能定位到具体环节。

4.1 EKF3核心算法:状态预测与观测更新

EKF3的本质,就是两步走:先预测,再修正。

  • 预测步:用IMU的加速度和角速度,推算下一时刻的状态。这一步会引入不确定性,协方差矩阵会变大。
  • 更新步:用GPS、磁力计、空速计等外部观测,修正预测结果。协方差矩阵会变小。

我见过不少开发者,一上来就调噪声参数。其实你首先得搞清楚,发散是发生在预测步还是更新步。怎么判断?看log里的EKF3.innov和EKF3.var字段。

我的习惯:调EKF3之前,先飞一组简单的悬停和直线航线。把log拉下来,看EKF3.innov的均值。如果某个轴的innovation长期偏离零,那对应的传感器大概率有问题。

4.2 协方差矩阵管理:EKF3的“信心指数”

协方差矩阵,你可以把它理解成EKF3对当前状态估计的“信心指数”。矩阵里的值越大,说明EKF3越不确定;值越小,说明它越自信。

EKF3里,协方差矩阵是动态调整的。它受两个因素影响:

  • 过程噪声(Q矩阵):IMU的噪声水平。你设的EKF3_IMU_NOISE参数,直接影响Q矩阵。
  • 观测噪声(R矩阵):GPS、磁力计等传感器的噪声水平。比如EKF3_GPS_NOISE。

我在项目里遇到过一个问题:飞机悬停时高度漂移。查log发现EKF3.var(3)(高度方差)一直在涨。后来发现是气压计噪声参数设得太小了,EKF3过于相信气压计,结果被风扰动带偏了。

避坑指南:协方差矩阵不是越小越好。你把它压得太小,EKF3就“听不进”新观测了。这叫滤波器“锁死”。我曾经在一条船上试过,GPS信号短暂丢失后,EKF3死活不重新收敛,就是因为协方差矩阵被压得太死。

4.3 GPS/IMU/磁力计融合策略

EKF3的融合策略,说白了就是“谁靠谱听谁的”。但不同传感器的靠谱程度,在不同场景下是变的。

传感器 强项 弱项 EKF3融合策略
IMU 短时精度高,更新快 长期漂移 预测步主力,更新步辅助
GPS 绝对位置无漂移 更新慢,易受遮挡 水平位置主力,速度辅助
磁力计 提供绝对航向 易受干扰,需要校准 航向观测,融合时自动降权

EKF3里有个关键参数:EKF3_MAG_CAL。它控制磁力计融合的时机。我建议你设成2(自动学习),让EKF3自己判断磁力计是否可信。

为什么会这样?因为磁力计在电机大电流时,干扰特别大。你硬让它融合,航向反而会跳。EKF3的自动学习机制,会实时估计磁力计的噪声水平,干扰大时自动降低融合权重。

4.4 动态噪声调节:EKF3的“自适应”能力

EKF3有个很实用的功能:动态噪声调节。它可以根据当前飞行状态,自动调整过程噪声和观测噪声。

比如,飞机在急转弯时,IMU的加速度噪声会变大。EKF3检测到加速度计方差升高,会自动增大过程噪声,让滤波器更依赖GPS观测。反过来,GPS信号差时,它会增大GPS观测噪声,让滤波器更依赖IMU。

这个功能由EKF3_NOISE_MASK参数控制。我个人的建议是:

  • 多旋翼:开启所有动态调节项(bitmask全1)。因为多旋翼机动性强,传感器噪声变化大。
  • 固定翼:可以关闭加速度计动态调节(bitmask去掉第0位)。因为固定翼飞行相对平稳,加速度计噪声变化不大。

我的经验:动态噪声调节不是万能的。它只能应对传感器噪声的缓慢变化。如果GPS突然完全丢失,或者磁力计被强磁干扰,动态调节也救不了。这时候要靠EKF3的“健康监测”机制,自动切换到无GPS模式。

4.5 常见发散问题排查

EKF3发散,是飞控调试里最让人头疼的问题之一。我总结了一个排查流程,你按这个顺序走,基本能定位到根因。

  1. 检查传感器原始数据:先看IMU、GPS、磁力计的原始log。如果原始数据就有问题,EKF3发散是必然的。
  2. 看innovation序列:如果某个轴的innovation长期不归零,说明对应的观测模型有问题。比如GPS innovation大,可能是GPS天线安装位置不对,或者杆臂效应没补偿。
  3. 检查协方差矩阵:如果某个状态的方差持续增大,说明EKF3对这个状态越来越没信心。常见原因是过程噪声设得太小,或者观测更新频率太低。
  4. 检查时间同步:EKF3要求所有传感器的时间戳对齐。如果GPS和IMU的时间戳偏差超过10ms,发散是迟早的事。

我曾经遇到一个案例:飞机在转弯时EKF3发散。查了三天log,最后发现是GPS的更新频率设成了5Hz,而IMU是200Hz。EKF3在两次GPS更新之间,全靠IMU积分,协方差矩阵涨得太快,一转弯就发散。把GPS更新频率提到10Hz后,问题解决。

注意:EKF3发散时,不要盲目调参数。先看log,定位到具体环节。调参数只是最后一步。

4.6 EKF3调优参数速查表

下面这张表,是我平时调EKF3最常用的参数。你把它存下来,调试时对照着看。

参数名 默认值 推荐范围 说明
EKF3_IMU_NOISE 0.01 0.005 - 0.02 IMU过程噪声。越大,EKF3越依赖外部观测
EKF3_GPS_NOISE 0.5 0.3 - 1.0 GPS位置观测噪声。越大,EKF3越不信任GPS
EKF3_MAG_NOISE 0.05 0.02 - 0.1 磁力计观测噪声。干扰大时适当调大
EKF3_NOISE_MASK 0 0 - 31 动态噪声调节掩码。多旋翼建议全开
EKF3_MAG_CAL 2 0 - 3 磁力计融合模式。建议设成2(自动学习)

4.7 EKF3核心流程框架图

下面这张图,把EKF3的预测-更新循环、协方差管理、传感器融合关系画清楚了。你对照着看,能更直观地理解整个流程。

EKF3核心流程框架图 EKF3 预测-更新循环与传感器融合框架 预测步(IMU驱动) 状态预测 + 协方差更新 协方差矩阵 P (不确定性量化) 观测更新步 GPS观测 磁力计观测 其他观测(空速等) 动态噪声调节 (自适应Q/R矩阵) 状态输出 反馈循环 发散检测与健康监测 说明: 1. 预测步由IMU驱动,协方差矩阵P在预测后增大。 2. 观测更新步融合GPS、磁力计等,协方差矩阵P减小。 3. 动态噪声调节根据飞行状态自适应调整Q/R矩阵。

这张图把EKF3的核心循环画得很清楚。你注意看协方差矩阵P的位置——它连接了预测步和观测更新步,是整个滤波器的“中枢神经”。

4.8 小结

EKF3调优,说白了就是管理好“信心”和“观测”之间的平衡。协方差矩阵是信心的量化,动态噪声调节是信心的自适应,传感器融合是信心的分配。你把这三点吃透了,发散问题就能迎刃而解。