PX4 模式需求位图(mode_requirements)
一、功能定位
ModeUtil/mode_requirements.hpp/cpp 负责生成每个 nav_state 对应的模式需求位图,写入 failsafe_flags_s 的 mode_req_* 字段。
核心接口:
1 | void getModeRequirements(uint8_t vehicle_type, failsafe_flags_s &flags); |
- 输出:
flags.mode_req_angular_velocity、flags.mode_req_attitude、flags.mode_req_local_position等一组uint32_t位图 - 位图的位索引与
vehicle_status_s::NAVIGATION_STATE_*数值一致(0~30) vehicle_type参数预留接口,当前实现中未使用,保留以支持未来机型差异化
相关知识:控制模式生成逻辑、Commander 模块框架
二、核心抽象:位图 + 有效性标志
1 | graph LR |
两个字段配合使用:
mode_req_X:一个集合,表示哪些nav_state需要能力 XX_invalid:当前系统对能力 X 的健康判定
三、setRequirement() 最小实现
1 | // 将某个 nav_state 对某类需求的依赖写入对应的位图 |
四、各模式的需求配置
1 | graph TD |
主要模式的需求汇总(以多旋翼为例):
| 模式 | 需要的能力集合 |
|---|---|
MANUAL |
manual_control |
ALTCTL |
angular_velocity、attitude、local_alt、manual_control |
POSCTL |
ALTCTL + local_position_relaxed |
AUTO_LOITER |
local_position、attitude、angular_velocity |
AUTO_MISSION |
local_position、global_position、home_position(可选)、mission、attitude、angular_velocity |
AUTO_RTL |
global_position、home_position、attitude、angular_velocity |
关键点:每次调用 getModeRequirements() 都会生成一整套 mode_req_* 位图字段。每个模式只在它依赖的那几类位图里被置位,其余位图中该模式对应位为 0。
五、需求类别与传感器数据源的绑定
*_invalid 标志并非抽象概念,而是由 HealthAndArmingChecks 的具体检查项绑定到对应的 uORB 话题。
angular_velocity_invalid
由 vehicle_angular_velocity 话题驱动,时间戳超时或数值非有限即 invalid。
attitude_invalid
由 vehicle_attitude 话题驱动,超时或四元数归一化/数值检查失败即 invalid。
local_position_invalid / local_position_invalid_relaxed
local_position_invalid:严格检查,要求 EKF 位置估计高质量且置信度高。
local_position_invalid_relaxed:宽松检查,允许估计精度稍低,POSCTL 模式使用此项(POSCTL 加入 local_position_relaxed 而非 local_position)。
global_position_invalid
要求 vehicle_global_position 话题有效且 EKF GPS 融合处于健康状态。
home_position_invalid
要求 home_position.valid 为真,且 Home 点的精度满足 RTL 所需的精度门限。
其他标志
| 标志 | 说明 |
|---|---|
local_altitude_invalid |
本地高度无效(无气压计且无其他高度源) |
offboard_control_signal_lost |
Offboard 模式下控制信号超时 |
auto_mission_missing |
任务模式下没有任务可执行 |
manual_control_signal_lost |
RC/摇杆信号丢失 |
六、位图的消费路径
mode_req_* 位图与 *_invalid 标志共同存储在 failsafe_flags_s 话题中,被下游两个系统消费:
1 | graph LR |
上一篇:控制模式生成逻辑
下一篇:Commander 核心调度