1. 课程导入
在 PX4 飞控中,EKF2(Extended Kalman Filter 2)是姿态、位置、速度与航向估计的核心模块。它把 IMU、磁力计、气压计、GNSS、光流、视觉、测距等多源传感器数据融合为一份连续、平滑、可用的状态估计,供姿态控制器、位置控制器、导航与任务执行模块消费。可以说,没有稳定的 EKF2 输出,就没有可靠的定点、返航、自动航线与避障飞行。
很多飞控调试问题表面看是“姿态抖动”“定点漂移”“高度跳变”,根因却常常在 EKF2 的传感器融合、观测更新或创新门限上。本课程的目标不是让你背公式,而是建立一条从原理理解 → 参数配置 → 日志分析 → 故障定位 → 回归验证的完整调试链路。
一、EKF2 在 PX4 中的定位
PX4 的估计系统采用分层结构:底层是传感器驱动与校准,中间是 EKF2 状态估计,上层是控制器与导航。EKF2 内部以 24 维状态向量描述机体运动,包括四元数姿态、速度、位置、陀螺零偏、加速度零偏、磁偏角、风估计等。滤波器通过预测(IMU 积分)与更新(外部观测修正)两个步骤循环运行。
理解 EKF2 的定位,要抓住三个关键词:融合、观测、一致性。融合决定用哪些传感器;观测决定何时修正;一致性决定估计是否可信。调试的本质,就是让这三者保持平衡。
二、学习目标与知识框架
完成本课程后,你应当能够独立完成以下任务:
- 说清 EKF2 的状态向量、预测步与更新步的基本作用;
- 根据机型与使用场景选择 EKF2 观测源与融合模式;
- 使用 QGroundControl 与 Flight Review 检查 EKF2 健康状态;
- 从 ulog 中提取创新量、传感器状态与估计方差,定位异常来源;
- 针对磁干扰、GNSS 跳变、气压异常、光流失效等典型场景给出调参或硬件整改方案。
整体知识框架可分为四层:基础层(坐标系、四元数、卡尔曼滤波直觉)、配置层(EKF2 参数、观测源选择、传感器校准)、分析层(日志字段、创新量、方差、状态标志)、实战层(典型故障树与回归验证)。四层之间不是线性关系,而是反复迭代:配置后要分析,分析后要回到配置。
三、调试工具链与典型工作流
PX4 生态提供了从参数配置到日志回放的一整套工具。下表列出常用工具及其在 EKF2 调试中的职责。
| 工具 | 主要用途 | EKF2 调试关注点 |
|---|---|---|
| QGroundControl | 参数配置、传感器校准、飞行前检查 | EKF2_AID_MASK、EKF2_HGT_MODE、磁罗盘校准状态 |
| Flight Review | 在线日志可视化与健康评估 | EKF2 创新量、姿态/位置跟踪、传感器一致性 |
| ulog + pyulog | 离线提取日志字段 | ekf2_innovations、estimator_status、sensor_combined |
| ekf2 replay | 用同一份传感器日志重放滤波器 | 验证参数改动对估计结果的影响 |
| MAVLink Console | 运行时查看状态与参数 | listener estimator_status、param show EKF2_* |
典型工作流可以概括为:先在地面完成传感器校准与参数检查,再起飞采集日志,随后在 Flight Review 中观察创新量与状态标志,最后用 ulog 提取具体字段做定量分析。若需要验证参数改动,使用 ekf2 replay 重放同一份日志,避免重复飞行。
# 查看 EKF2 相关参数
param show EKF2_*
# 实时监听估计器状态
listener estimator_status
# 提取日志中的创新量字段
ulog_extract.py -f ekf2_innovations -o innovations.csv log.ulg
四、案例场景与常见误区
以一个典型场景为例:四旋翼在定点模式下出现缓慢漂移,姿态本身稳定。检查 Flight Review 发现 GNSS 位置创新量在漂移期间明显增大,而磁力计创新量正常。进一步查看 estimator_status,发现 GNSS 观测被频繁拒绝。最终定位为 GNSS 天线受电源线干扰,导致位置观测噪声增大,触发创新门限。整改方式是重新布置天线并适当调整 EKF2 的 GNSS 噪声参数。
常见误区包括:
- 只调参数不看日志:盲目放宽创新门限会掩盖真实传感器故障;
- 把 EKF2 当黑盒:不理解观测源选择,导致多源冲突;
- 忽略时间同步:GNSS 与 IMU 时间戳偏差会直接表现为创新量异常;
- 地面校准不充分:磁罗盘与加速度计校准误差会在飞行中被放大。