1. 课程导入

在 PX4 飞控中,EKF2(Extended Kalman Filter 2)是姿态、位置、速度与航向估计的核心模块。它把 IMU、磁力计、气压计、GNSS、光流、视觉、测距等多源传感器数据融合为一份连续、平滑、可用的状态估计,供姿态控制器、位置控制器、导航与任务执行模块消费。可以说,没有稳定的 EKF2 输出,就没有可靠的定点、返航、自动航线与避障飞行。

很多飞控调试问题表面看是“姿态抖动”“定点漂移”“高度跳变”,根因却常常在 EKF2 的传感器融合、观测更新或创新门限上。本课程的目标不是让你背公式,而是建立一条从原理理解 → 参数配置 → 日志分析 → 故障定位 → 回归验证的完整调试链路。

本课程的核心问题:当飞机出现姿态、位置、高度或航向异常时,如何判断问题是否来自 EKF2,并借助日志与工具快速定位到具体传感器、观测源或参数。

一、EKF2 在 PX4 中的定位

PX4 的估计系统采用分层结构:底层是传感器驱动与校准,中间是 EKF2 状态估计,上层是控制器与导航。EKF2 内部以 24 维状态向量描述机体运动,包括四元数姿态、速度、位置、陀螺零偏、加速度零偏、磁偏角、风估计等。滤波器通过预测(IMU 积分)与更新(外部观测修正)两个步骤循环运行。

理解 EKF2 的定位,要抓住三个关键词:融合、观测、一致性。融合决定用哪些传感器;观测决定何时修正;一致性决定估计是否可信。调试的本质,就是让这三者保持平衡。

PX4 EKF2 数据流与调试工具链概览 传感器输入层 IMU 陀螺 / 加速度计 磁力计 MAG 气压计 BARO GNSS 位置 / 速度 光流 / 视觉 / 测距 外部视觉位姿 校准 · 时间同步 · 健康检查 EKF2 状态估计核心 预测步:IMU 积分 姿态 / 速度 / 位置递推 更新步:观测修正 GNSS / BARO / MAG / 光流 创新门限与一致性检验 拒绝异常观测,防止发散 状态输出 姿态 / 位置 / 速度 / 航向 估计输出消费方 姿态控制器 位置 / 速度控制器 导航与任务执行 调试工具链 QGroundControl 参数 Flight Review 日志 ulog / ekf2 replay 调参反馈 调试主线:传感器健康 → 观测更新 → 创新门限 → 状态输出 → 日志验证

二、学习目标与知识框架

完成本课程后,你应当能够独立完成以下任务:

  • 说清 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 时,先看“谁被拒绝”,再看“为什么被拒绝”。创新量增大通常意味着观测与预测不一致,可能来自传感器故障、校准偏差、时间同步问题或参数过紧。

常见误区包括:

  • 只调参数不看日志:盲目放宽创新门限会掩盖真实传感器故障;
  • 把 EKF2 当黑盒:不理解观测源选择,导致多源冲突;
  • 忽略时间同步:GNSS 与 IMU 时间戳偏差会直接表现为创新量异常;
  • 地面校准不充分:磁罗盘与加速度计校准误差会在飞行中被放大。
不要在没有日志证据的情况下修改 EKF2 核心参数。每一次参数改动都应记录改动前后同一场景下的日志对比,否则无法判断改动是否有效。