2. PX4飞控基础

要在PX4上运行机载神经网络控制器,第一步不是写网络,而是理解PX4“怎么组织软件、怎么传递数据、怎么切换控制权、怎么与外部计算单元对话”。本节围绕这五个关键词展开:PX4架构、uORB消息机制、飞行模式、MAVLink协议与机载控制接口。它们共同决定了神经网络控制器的接入点、数据来源、输出通道与安全边界。

一、PX4架构:分层与模块化

PX4采用“中间件+模块”的分层架构。最底层是NuttX实时操作系统与硬件驱动,负责传感器采集、PWM/CAN/UART等外设访问;中间层是uORB发布/订阅总线,所有模块通过它交换数据;上层是飞行控制栈,包括传感器融合(EKF2)、位置/姿态控制器(mc_pos_control、mc_att_control)、导航与任务管理(navigator)、以及commander状态机。模块之间不直接调用,而是通过uORB解耦,这使得替换或新增一个控制模块成为可能。

对神经网络控制而言,关键认识是:PX4的控制链路是“估计—控制—混控—输出”。神经网络通常替换或增强其中的姿态/位置控制环节,而不是直接写执行器。因此必须清楚自己接入的是哪一层,输入是什么估计量,输出是什么期望量。

二、uORB消息机制:数据总线

uORB是PX4的发布/订阅消息系统。每个话题(topic)有固定数据结构,发布者写、订阅者读,支持多对多、带时间戳、可设置更新频率。常用话题包括:sensor_combined、vehicle_attitude、vehicle_local_position、vehicle_status、manual_control_setpoint、actuator_controls_0等。神经网络控制器一般订阅状态类话题,发布控制类话题。

# 在PX4终端查看话题
uorb top
listener vehicle_attitude
listener vehicle_local_position

# 自定义模块中订阅与发布(伪代码)
orb_subscribe(ORB_ID(vehicle_attitude));
orb_advertise(ORB_ID(vehicle_attitude_setpoint));
uORB消息带时间戳,神经网络控制器必须检查数据新鲜度。若订阅话题超时,应回退到PX4原生控制器,而不是继续输出旧数据。

三、飞行模式与控制权

PX4飞行模式决定“谁在控制、控制什么”。常见模式有:Manual/Stabilized(手动姿态)、Altitude(定高)、Position(定点)、Offboard(外部控制)、Auto Mission(自动任务)、Return(返航)等。神经网络控制器通常运行在Offboard模式或作为自定义模块嵌入Position/Attitude链路。

Offboard模式的核心是:外部通过MAVLink或机载模块以一定频率发送setpoint,PX4检查超时与有效性后执行。若超时,PX4会触发失效保护。因此神经网络控制器的输出频率、超时策略、失效回退必须与commander状态机一致。

四、MAVLink协议与机载控制接口

MAVLink是PX4与地面站、伴飞计算机通信的轻量协议。常用消息包括:HEARTBEAT、ATTITUDE、LOCAL_POSITION_NED、SET_POSITION_TARGET_LOCAL_NED、SET_ATTITUDE_TARGET、COMMAND_LONG等。机载控制接口主要有三条路径:

  • MAVLink Offboard:伴飞计算机通过串口/UDP发送setpoint,适合快速验证。
  • uORB自定义模块:在PX4内部新增模块,直接订阅/发布话题,延迟最低,适合神经网络实时控制。
  • ROS 2 + microRTPS/XRCE-DDS:通过DDS桥接uORB与ROS 2,适合复杂感知与学习系统。
接口方式典型延迟适用场景安全回退
MAVLink Offboard中(10–50 ms)快速原型、地面站联调超时自动退出Offboard
uORB自定义模块低(1–5 ms)机载神经网络实时控制模块内检测状态并切回原生控制
ROS 2 + XRCE-DDS中低感知+学习+控制闭环桥接超时与模式管理

五、案例:神经网络姿态控制器的接入流程

假设要在PX4上接入一个神经网络姿态控制器,推荐流程如下:

  1. 确认输入:订阅vehicle_attitude与vehicle_angular_velocity,获取姿态四元数与角速度。
  2. 确认输出:发布vehicle_attitude_setpoint或vehicle_rates_setpoint,由PX4混控输出。
  3. 模式管理:通过vehicle_status判断当前飞行模式,仅在Offboard或自定义模式下接管。
  4. 安全监控:设置看门狗,若输入超时或输出越界,立即停止发布并请求回退。
  5. 日志记录:使用logger记录输入、输出与网络推理耗时,便于复盘。
常见误区:直接把神经网络输出写到actuator_controls。这会绕过PX4的姿态/位置控制与失效保护,极易导致失控。正确做法是输出“期望姿态/期望角速度/期望推力”,让PX4完成混控与安全约束。

六、复盘与检查清单

  • 是否明确神经网络接入的是位置环、姿态环还是角速度环?
  • 订阅话题的时间戳是否检查?超时阈值是否小于PX4失效保护时间?
  • 输出是否经过限幅与变化率限制?
  • 是否能在vehicle_status变化时正确让出控制权?
  • 是否用uorb top确认话题频率与CPU占用?
  • 是否在SITL中先验证,再上真机?
PX4机载神经网络控制接入架构 传感器与估计 IMU / 磁力计 / GPS EKF2 状态估计 uORB 消息总线 vehicle_attitude vehicle_local_position 神经网络控制器 输入:姿态/角速度 输出:期望姿态/推力 看门狗 + 限幅 PX4控制栈 姿态/位置控制器 混控与执行器 飞行模式管理 Offboard / Position 失效保护与回退 MAVLink / XRCE-DDS 地面站 / 伴飞计算机 setpoint 与遥测 日志与监控:logger / uorb top / 推理耗时 输入新鲜度 · 输出限幅 · 模式切换 · 回退记录 安全边界 超时 · 越界 · 回退 传感器/估计 uORB总线 神经网络控制器 PX4控制栈 模式与安全 MAVLink/DDS