3. PX4 导航与传感器体系

PX4 的 EKF2 并不是“直接读取传感器”的滤波器,而是一个多源融合估计器。它通过 uORB 订阅各传感器驱动发布的主题,把不同频率、不同噪声特性、不同参考系的观测统一到同一套状态向量中。理解每个传感器在 EKF2 中扮演的角色,是调试位置漂移、高度跳变、偏航抖动等问题的前提。

一、核心原理:EKF2 的状态与观测分工

EKF2 维护的核心状态包括:姿态四元数、速度、位置、陀螺零偏、加速度计零偏、磁力计偏置、风估计等。不同传感器并不都直接观测全部状态,而是各自约束其中一部分:

  • IMU(陀螺+加速度计):预测(prediction)的主力。陀螺积分姿态,加速度计在重力对齐后积分速度与位置。它是唯一持续高频推动状态演化的传感器。
  • 磁力计:观测偏航(yaw)与磁偏置,修正陀螺积分带来的航向漂移。
  • 气压计:观测高度(z 轴位置),抑制加速度计二次积分导致的高度发散。
  • GPS:观测水平位置与速度,并提供全局参考;RTK 还可提供高精度位置。
  • 视觉/光流/测距:在无 GPS 或室内环境下提供位置、速度或高度观测,属于外部视觉观测源。
关键认知:IMU 负责“推演”,其余传感器负责“纠偏”。EKF2 的鲁棒性来自多源观测的冗余与一致性检查,而不是单一传感器的精度。

二、数据流:从驱动到 EKF2 的完整链路

各传感器驱动通过 uORB 发布标准主题,EKF2 内部按固定顺序处理:先做 IMU 预测,再依次进行各观测更新。下图展示了这一数据流与各传感器在 EKF2 中的角色分工。

PX4 传感器 → EKF2 数据流与角色分工 传感器 / 驱动 uORB 主题 EKF2 中的作用 IMU 陀螺 + 加速度计 高频 250~1000Hz sensor_combined vehicle_imu 预测:姿态/速度/位置推演 唯一持续高频状态演化源 磁力计 低频 10~100Hz sensor_mag vehicle_magnetometer 观测:偏航 + 磁偏置 修正航向漂移 气压计 低频 10~50Hz sensor_baro vehicle_air_data 观测:高度 z 抑制高度二次积分发散 GPS / RTK 5~20Hz sensor_gps vehicle_gps_position 观测:水平位置 + 速度 提供全局参考与航向辅助 视觉 / 光流 / 测距 10~60Hz vehicle_optical_flow distance_sensor 观测:位置/速度/高度 无 GPS 或室内环境主源 EKF2 融合核心:预测 + 多源观测更新 + 一致性检查 输出:vehicle_attitude / vehicle_local_position / vehicle_global_position

三、方法流程:EKF2 的更新顺序与参数控制

EKF2 在每个 IMU 周期执行预测,然后按优先级进行观测更新。理解顺序有助于判断“为什么某个传感器没起作用”。典型流程如下:

  1. IMU 预测:用陀螺和加速度计推进状态与协方差。
  2. 磁力计更新:若磁力计健康且融合使能,修正偏航。
  3. 气压计更新:修正高度与垂直速度。
  4. GPS 更新:修正水平位置、速度,并辅助航向。
  5. 视觉/光流更新:按配置修正位置或速度。
  6. 一致性检查:创新(innovation)超限时触发拒绝或传感器降级。

关键参数决定了各传感器是否参与融合:

EKF2_AID_MASK      # 位掩码:GPS、光流、视觉、磁力计等使能
EKF2_HGT_MODE      # 高度源:气压计 / 测距 / GPS / 视觉
EKF2_MAG_TYPE      # 磁力计模式:自动 / 仅偏航 / 禁用
EKF2_GPS_CTRL      # GPS 使用方式:位置、速度、航向
EKF2_OF_CTRL       # 光流使能与高度源选择
EKF2_EV_CTRL       # 视觉位姿使能
EKF2_BARO_CTRL     # 气压计使能
调试建议:先用 listener sensor_combined 确认 IMU 数据正常,再逐个检查 sensor_mag、sensor_baro、vehicle_gps_position 是否发布,最后核对 EKF2 参数是否使能对应观测。

四、案例场景:室内光流悬停的高度漂移排查

某四旋翼在室内使用光流悬停,出现缓慢上升后突然掉高。排查步骤:

  • 检查 EKF2_HGT_MODE:若设为气压计,室内气流扰动会导致高度漂移;应改为测距或光流高度。
  • 检查 distance_sensor 是否发布且量程覆盖飞行高度。
  • 查看 ekf2_timestamps 与创新日志,确认高度观测是否被拒绝。
  • 确认光流质量与地面纹理,光流速度观测异常会间接影响高度估计。

最终将高度源切换为测距后,漂移消失。这说明传感器角色与参数配置必须匹配场景,而非默认值通吃。

五、常见误区与复盘

误区 现象 正确做法
认为 GPS 能修正高度 GPS 高度噪声大,直接融合导致高度抖动 高度优先用气压计或测距,GPS 高度仅作参考
磁力计受干扰仍强制融合 偏航缓慢旋转或跳变 检查磁力计校准与 EKF2_MAG_TYPE,必要时禁用
忽略 IMU 零偏与振动 位置缓慢漂移、创新持续偏大 做加速度计/陀螺校准,检查减振与 IMU_GYRO_CUTOFF
光流与测距不同步 室内悬停高度与速度估计矛盾 统一时间戳,核对 EKF2_OF_CTRL 与测距量程
EKF2 的观测拒绝机制会静默丢弃异常传感器数据。若发现某传感器“明明有数据却不生效”,优先查看创新门限与传感器健康状态,而不是反复重启飞控。

总结来看,IMU 是 EKF2 的推演引擎,磁力计、气压计、GPS、视觉与光流是不同维度的纠偏观测。只有理解每个传感器约束的状态分量、数据流路径与使能参数,才能在调试中快速定位问题根源,让状态估计在各类场景下保持稳定可靠。