Px4&ros 踩坑

1. PX4 飞行模式优先级划分

在PX4飞控系统中,飞行模式的优先级和切换逻辑是确保飞行安全的核心机制。当定点数据(如GPS或视觉定位)不稳定时,系统会根据预设的优先级和状态机逻辑自动处理。以下是详细的分析:

PX4的飞行模式通常按优先级从高到低排列如下(具体实现可能因固件版本略有差异,但逻辑一致):

  1. 手动控制模式(Manual)

    • Stabilized (自稳):最高优先级。一旦检测到遥控器信号且处于该模式,飞控会立即响应,忽略自动导航指令。主要用于紧急接管。
    • Acro / Manual:完全手动控制,姿态角速度环控制。
  2. 辅助飞行模式(Assisted)

    • Altitude (定高):保持当前高度,但水平位置由遥控器控制。
    • Position (定点):保持当前高度和水平位置。如果GPS或定位源丢失,通常会自动降级为 Altitude 模式。
  3. 自动飞行模式(Auto)

    • Offboard:通过MAVLink接口(如MAVROS)接收外部控制指令(位置、速度、姿态)。这是你代码中主要使用的模式。
    • Mission (航点):执行预加载的航点任务。
    • RTL (返航):自动返回起飞点。
    • Land (降落):自动降落。

优先级逻辑
手动模式 > 辅助模式 > 自动模式。
这意味着,如果飞行器处于 OFFBOARD 模式,但飞控检测到遥控器切换到了 Position 模式,飞控会立即放弃 OFFBOARD 指令,转为定点悬停。

2. 当定点数据不稳定后,系统会如何

当定点数据(如GPS信号差、视觉定位丢失或EKF协方差过大)不稳定时,PX4的EKF(扩展卡尔曼滤波)状态估计器会首先做出反应,进而触发模式降级或保护机制。

A. EKF 状态检测与协方差

PX4内部维护着EKF的状态标志位(EST),如:

  • EST.attitude:姿态是否可靠。
  • EST.velocity:速度是否可靠。
  • EST.pos_horiz_rel:水平位置是否可靠。
  • EST.pos_vert:垂直位置是否可靠。

当定位数据质量下降,EKF的协方差矩阵(Covariance)会增大。如果超过阈值,相应的状态标志位会置为 0(不可靠)。

B. 模式降级逻辑

根据当前的飞行模式,系统会有不同的处理方式:

  1. 如果处于 Position (定点) 或 Loiter (悬停) 模式

    • 水平位置丢失:如果 EST.pos_horiz_rel 变为不可靠,飞控会自动降级为 Altitude (定高) 模式。此时无人机将保持当前高度,但不再锁定水平位置,可能会随风漂移,需飞行员立即接管。
    • 垂直位置丢失:如果 EST.pos_vert 变为不可靠,飞控将无法保持定高,可能触发 Land (降落) 模式或导致坠机风险。
  2. 如果处于 Offboard 模式

    • 数据不稳定:PX4会检查EKF状态。如果定位状态不满足Offboard模式的要求(例如水平位置不可靠),飞控会拒绝执行位置控制指令,或者自动切换到 Position 模式(如果该模式仍可用)。

总结

当定点数据不稳定时:

  1. 飞控底层:EKF状态标志位翻转,PX4会尝试自动将模式从 Position 降级为 AltitudeLand
优先级 模式 依赖
:large_blue_circle: 最高 Mission / Auto / RTL 位置(GPS + EKF)
:large_blue_circle: Position Mode(定点) 位置
:yellow_circle: Altitude Mode(定高) 高度
:orange_circle: Stabilized(自稳) 姿态
:red_circle: 最低 Acro(手动) 角速度