无人机与PX4基础:多旋翼无人机组成、PX4飞控架构、主要模块与工作原理

在开始学习PX4与AI边缘识别之前,必须先建立对无人机硬件平台和飞控软件架构的整体认知。多旋翼无人机是一个典型的嵌入式实时系统,它由机械结构、动力系统、传感器、计算单元和通信链路共同构成。PX4作为当前最成熟的开源飞控固件,其架构设计直接决定了我们后续编写AI识别程序、接入MAVLink消息、控制飞行行为的可行路径。本章将拆解多旋翼无人机的物理组成,梳理PX4的内部模块与数据流,并说明各模块如何协同完成从“感知”到“执行”的闭环。

PX4飞控系统架构与多旋翼硬件组成 硬件层(多旋翼平台) 传感器组 IMU(加速度计+陀螺仪) 磁力计 / 气压计 GPS / 光流 / 测距 AI相机(边缘识别) 飞控硬件(FMU) STM32 / ARM Cortex-M IO协处理器 SD卡 / 调试接口 PWM / DShot输出 动力系统 电调(ESC) 无刷电机 螺旋桨 电池(电压/电流监测) 通信链路 数传(UART/MAVLink) 遥控接收机(SBUS) WiFi / 4G(可选) 机载计算机(串口/网口) PX4固件层(NuttX RTOS + 模块化应用) 传感器驱动 imu / mag / baro gps / optical_flow 距离传感器 状态估计 EKF2(扩展卡尔曼滤波) 姿态 / 位置 / 速度 本地/全局坐标系 控制核心 mc_att_control mc_pos_control 飞行模式管理 MAVLink通信 mavlink模块 消息路由 / 打包 QGC / 机载电脑 执行器输出 actuator_controls 混控器 PWM / DShot 应用层(AI边缘识别 + 任务规划) 机载计算机(树莓派 / Jetson) AI推理(TensorRT / ONNX) MAVLink SDK(pymavlink / MAVSDK) 数据流:传感器→估计→控制→执行

上图展示了从硬件到应用层的完整链路。PX4飞控固件运行在FMU(Flight Management Unit)上,通过传感器驱动获取原始数据,经过状态估计模块融合出姿态和位置信息,再由控制模块计算电机指令,最终通过混控器输出到电调。机载计算机作为AI边缘识别的主要载体,通过MAVLink协议与PX4进行双向通信——既接收飞控的状态数据,也能发送任务指令或位置设定点。

2.1 多旋翼无人机的硬件组成与关键部件

多旋翼无人机(以四旋翼为例)的硬件系统可以划分为五个子系统:机架与动力、传感器、飞控计算单元、通信链路、电源管理。每个子系统都有明确的工程约束,理解这些约束是后续进行AI集成和飞控调参的基础。

子系统 核心部件 关键参数/接口 对AI任务的影响
动力系统 电机、电调、螺旋桨、电池 KV值、最大推力、PWM频率(400Hz)、电压范围 载重限制AI计算硬件重量;电池续航决定任务窗口
传感器 IMU、磁力计、气压计、GPS IMU更新率≥500Hz,GPS精度1-2m 视觉识别结果需要与IMU数据融合才能实现稳定悬停跟随
飞控硬件 STM32F7/H7、IO协处理器 UART×6+、SPI、I2C、CAN、PWM输出 串口资源决定AI计算机连接方式;计算资源有限,AI推理需在机载电脑完成
通信链路 数传(915MHz/2.4GHz)、接收机 MAVLink波特率57600-921600 高带宽需求(如图传)需单独链路,避免挤占飞控通信
电源管理 PMU(电源管理单元)、BEC 5V/3A稳定输出,电压检测精度±0.1V AI计算机(如Jetson)功耗高,需独立稳压模块

在实际项目中,一个常见的误区是只关注飞控本身而忽略动力系统的冗余设计。例如,当AI识别到目标并需要快速加速跟踪时,如果电机推力余量不足,飞控输出的控制指令会迅速饱和,导致跟踪失败甚至姿态失稳。因此,在选型阶段就要根据无人机总重量(含AI设备)估算悬停油门百分比,通常建议悬停油门在40%-60%之间。

2.2 PX4飞控架构:从NuttX到应用层

PX4基于NuttX实时操作系统(RTOS)构建,采用模块化设计。每个功能模块(如传感器驱动、EKF2、多旋翼控制器)都是一个独立的POSIX进程,模块之间通过uORB(Micro Object Request Broker)消息总线进行异步通信。这种架构带来了两个关键优势:一是模块崩溃可以单独重启而不影响整个系统;二是新增自定义模块(如AI识别结果注入)非常方便,只需订阅或发布对应的uORB主题即可。

核心原理:uORB消息总线

uORB是PX4内部的数据中枢。例如,IMU驱动发布 sensor_imu 主题,EKF2订阅该主题并发布 vehicle_attitude 和 vehicle_local_position,多旋翼位置控制器订阅位置主题,输出 actuator_controls_0 给混控器。这种发布/订阅模式解耦了模块间的依赖关系。当我们在机载计算机上运行AI识别时,可以通过MAVLink将识别结果(如目标相对位置)发送给PX4,PX4内部将其转换为 vehicle_setpoint 消息,从而改变飞行行为。

PX4的主要模块及其职责如下:

  • 传感器驱动层:负责读取IMU、磁力计、气压计、GPS等原始数据,进行滤波和校准,并以固定频率发布到uORB。该层直接与硬件寄存器打交道,对实时性要求最高。
  • 状态估计模块(EKF2):使用扩展卡尔曼滤波器融合多传感器数据,输出飞行器在本地坐标系(NED)和全局坐标系(经纬度)下的姿态、位置、速度。EKF2是PX4最复杂的模块之一,其参数调优直接影响飞行品质。
  • 控制模块:包括角度控制器(mc_att_control)和位置控制器(mc_pos_control)。位置控制器输出期望姿态角,角度控制器输出期望角速度,最终转换为期望推力向量。
  • 混控器(Mixer):将控制模块输出的期望推力、滚转、俯仰、偏航力矩映射到每个电机的PWM/DShot指令。对于四旋翼,混控器根据机架类型(X型或+型)进行矩阵运算。
  • MAVLink模块:负责与地面站(QGroundControl)、机载计算机或其他MAVLink设备通信。它维护通信链路状态,处理消息的打包、发送、接收和路由。
  • Commander模块:管理飞行模式(手动、定高、位置、任务、Offboard等),并处理安全逻辑(如遥控失联、低电量保护)。

理解PX4的模块划分对于AI开发者至关重要。例如,当我们要实现“AI识别到目标后自动跟踪”功能时,通常有两种路径:一是通过Offboard模式,由机载计算机直接发送速度或位置设定点;二是通过修改或扩展PX4内部模块,将AI输出作为新的控制输入源。前者更简单、更安全,是课程后续章节的重点。

2.3 工作原理:从传感器数据到电机指令的完整链路

以一次典型的姿态稳定飞行为例,PX4的工作流程可以分解为以下步骤:

  1. 数据采集:IMU以500Hz-1000Hz的频率读取加速度和角速度,GPS以5Hz-10Hz更新位置,气压计以50Hz更新高度。
  2. 状态估计:EKF2将上述数据与磁力计数据融合,输出频率约250Hz的车辆姿态(四元数)和位置(NED坐标系)。
  3. 控制计算:位置控制器(10Hz-50Hz)比较期望位置与实际位置,输出期望姿态角;姿态控制器(250Hz)比较期望姿态与实际姿态,输出期望角速度;角速度控制器(500Hz)输出期望扭矩。
  4. 混控输出:混控器将期望推力与扭矩转换为4个电机的PWM占空比,通过IO协处理器输出到电调。
  5. 执行反馈:电机转速变化导致机体运动,IMU再次感知运动变化,形成闭环。

整个链路的延迟通常在10ms-20ms之间。对于AI边缘识别应用,这意味着从“AI检测到目标”到“无人机开始响应”至少需要增加一个MAVLink传输周期(通常10ms-50ms)加上飞控内部处理时间。因此,在实时性要求高的场景(如高速目标跟踪)中,应尽量将AI推理结果直接注入PX4内部(通过自定义uORB消息),而不是通过地面站中转。

实战经验:在PX4的Offboard模式下,机载计算机通过MAVLink发送 SET_POSITION_TARGET_LOCAL_NED 消息,消息频率建议在10Hz-30Hz之间。如果频率过低,飞控会因超时退出Offboard模式;如果频率过高,会占用大量串口带宽。推荐使用MAVSDK的 offboard 插件,它内部处理了消息频率和超时逻辑。

2.4 案例拆解:为AI视觉无人机配置PX4环境

假设我们要搭建一台用于“目标识别与跟随”的四旋翼无人机,机载计算机选用树莓派4B(功耗约7W),AI模型使用YOLOv5s。以下是硬件连接与PX4配置的完整过程。

背景与约束:无人机轴距450mm,总重量约1.8kg(含电池和树莓派),悬停油门约55%。飞控为Pixhawk 6C(STM32H743),树莓派通过USB转TTL连接飞控的TELEM2串口,波特率921600。树莓派同时连接一个USB摄像头,用于实时视频流输入。

初始现象:直接连接后,树莓派无法与飞控通信,QGroundControl显示“No MAVLink connection”。

分析过程:首先检查串口设备是否识别(ls /dev/ttyUSB*),然后确认飞控TELEM2端口是否已启用MAVLink。通过排查发现,Pixhawk 6C的TELEM2默认用于GPS,需要修改参数 SER_TEL2_BAUD 为921600,并将 MAV_1_CONFIG 设置为TELEM2。

操作步骤:

# 1. 在QGroundControl中连接飞控,进入参数设置
# 2. 修改参数:
#    SER_TEL2_BAUD = 921600
#    MAV_1_CONFIG = TELEM2
#    MAV_1_MODE = Onboard
# 3. 重启飞控
# 4. 在树莓派上测试连接:
python3 -c "import pymavlink.mavutil as mavutil; m = mavutil.mavlink_connection('/dev/ttyUSB0', baud=921600); m.wait_heartbeat(); print('connected')"

结果对比:修改参数后,树莓派成功接收到心跳包,MAVLink消息延迟约5ms。进一步测试,通过MAVSDK发送Offboard速度指令,无人机能够平滑响应。

风险与代价:TELEM2被占用后,如果需要外接GPS,必须改用其他串口(如TELEM1或UART4)。此外,921600波特率对线材质量敏感,建议使用屏蔽双绞线,长度不超过30cm。

复盘经验:PX4的串口配置是AI集成中最常见的故障点。建议在飞控组装完成后,先用QGroundControl验证所有外设通信正常,再连接机载计算机。同时,在树莓派上使用 mavlink-router 或 mavproxy 可以同时管理多个MAVLink连接,便于调试。

2.5 常见误区与总结

风险提示:不要将AI计算机直接连接到飞控的电源输出端。树莓派或Jetson的瞬时电流可能达到3A以上,而飞控的BEC通常只提供1A-2A电流,直接连接会导致电压跌落,引起飞控重启。正确做法是使用独立的5V/5A UBEC,并从电池主电源取电。

以下是初学者在PX4与AI集成中容易犯的错误:

  • 忽视传感器校准:加速度计、陀螺仪、磁力计的校准质量直接影响EKF2的估计精度。如果AI识别到的目标位置与飞控实际位置偏差大,往往不是AI算法的问题,而是传感器未校准。
  • 混淆Offboard与任务模式:Offboard模式要求外部持续发送设定点,而任务模式由飞控自主执行预先上传的航点。AI动态规划路径时应使用Offboard,固定航线巡检应使用任务模式。
  • 忽略MAVLink消息超时:PX4默认在500ms内未收到Offboard消息就会退出该模式。如果AI推理耗时较长(如超过200ms),需要设计心跳机制或降低推理频率。
  • 直接修改PX4源码而不做单元测试:虽然PX4支持自定义模块,但任何修改都应先在仿真环境(如Gazebo + PX4 SITL)中验证,再上真机。