乐于分享
好东西不私藏

第1章(上):无人机软件架构深度解析——PX4与ROS 2如何分工协作?

第1章(上):无人机软件架构深度解析——PX4与ROS 2如何分工协作?

💡 为什么需要同时学习ROS 2和PX4?

如果你刚刚进入可编程无人机领域,可能会存在这样的疑问:

❓ 我已经会ROS 2了,还需要PX4吗?

❓ PX4不是已经能飞了吗?为什么还要ROS?

❓ 能不能只用ROS写飞控?

这些问题的根源只有一个:没有从系统架构的角度理解无人机软件栈。一句流行的说法是:PX4负责飞得稳,ROS 2负责飞得聪明。这句话方向是对的,但并不够精确。要真正理解两者的关系,我们需要把它们拆开来看。

🔧 PX4是什么?无人机的实时神经系统

PX4的本质定位

PX4是一个运行在飞控硬件上的实时无人机操作系统(Flight Stack)。它并不是一个应用程序,而是一套为无人机飞行安全与实时控制而设计的嵌入式软件系统。

PX4的整体设计遵循三个核心原则:✅强实时性:关键控制与估计算法必须在严格的时间约束下运行✅闭环控制:所有飞行行为均基于传感器反馈形成闭环✅安全优先:任何异常都优先保证飞行器可控或安全降级

从算法层面看,PX4的飞控端主要由三大核心模块构成:

1️⃣ 状态估计算法(Estimator)

状态估计算法的职责是回答一个最基本、也最关键的问题:无人机当前处于什么状态?它需要持续估计无人机的位置、速度、姿态、角速度等信息,为后续所有控制算法提供对世界的认知。

在实际飞行中,无人机无法直接测量完整状态,只能获得来自各类传感器的、带噪声且不完整的观测数据,例如IMU、GPS、磁力计、气压计,或者来自视觉与外部定位系统的信息。

在PX4中,状态估计的核心功能主要由EKF2(扩展卡尔曼滤波器)完成。它输出的并不是原始传感器数据,而是已经融合、对齐坐标系、补偿偏置后的状态量,包括姿态(roll/pitch/yaw)、角速度、位置、线速度以及各类传感器偏置。

2️⃣ 控制算法(Controller)

控制算法负责让无人机朝目标状态运动。回答的问题是:我该如何调整姿态和推力,才能到达目标状态?

PX4采用多层级闭环控制结构,典型包括:

📍 位置控制器:输入期望位置,输出速度期望

🚀 速度控制器:输入期望速度,输出姿态调整量

🔄 姿态控制器:输入期望姿态,输出角速度指令

⚡ 角速度控制器:输入期望角速度,输出电机控制量

在PX4中,大量控制器采用PID(比例-积分-微分)控制结构,其特点是:计算量小、实时性强、工程成熟度高、易于调参。

3️⃣ 混控算法(Mixer)

在控制算法输出之后,系统还面临一个关键问题:如何把抽象的力和力矩指令,转换成具体的电机转速?这正是Mixer(混控器)的职责。

Mixer的输入通常是总推力、滚转力矩(Roll)、俯仰力矩(Pitch)、偏航力矩(Yaw),输出则是各个电机的控制指令(PWM/转速)。

🧠 ROS 2是什么?无人机的高层智能系统

ROS 2的本质定位

ROS 2是一个分布式机器人软件中间件(Middleware + Framework),其核心关键词是消息通信、模块解耦、分布式系统和高层决策。

如果说PX4更像是无人机的脊髓和反射系统,那么ROS 2更像是负责感知、思考和决策的大脑皮层。

ROS 2在无人机中通常做什么?

在ROS 2 + PX4架构中,ROS 2通常运行在机载计算机(x86/ARM),主要负责:

👁️ 视觉/激光感知:目标检测、SLAM、点云处理

🗺️ 路径规划:全局规划、局部规划、轨迹优化

🎯 任务决策:状态机、行为树、任务调度

🤝 多机协同:分布式通信、编队控制

🌐 外部系统通信:与地面站、云端服务交互

ROS 2运行的是可以稍微慢一点,但必须足够聪明的代码。

🔗 ROS 2 + PX4:不是竞争,而是分工

典型系统结构

在工程实践中,ROS 2与PX4并不是二选一的关系,而是严格分工、相互配合的协同架构。一个典型的系统可以被理解为三层结构:

🧠 上层:ROS 2负责感知(SLAM、目标检测)、路径规划、决策控制等高阶智能任务
🔗 中间层:XRCE-DDS协议实现高效、可靠的跨平台通信
⚙️ 下层:PX4实现飞行器的实时控制、传感器融合、硬件驱动与安全保护

二者如何通信?

在micro-ROS + XRCE-DDS架构中,PX4作为uXRCE-DDS Client运行于资源受限的飞控,而ROS 2系统运行uXRCE-DDS Agent,两者通过串口(UART)、UDP或TCP进行通信。

1️⃣ PX4内部数据准备:uORB框架管理传感器数据与控制指令

2️⃣ 序列化:CDR编码将uORB消息序列化为二进制字节流

3️⃣ 传输:通过UARTUDPTCP发送至外部设备

4️⃣ 接收端处理:Agent解码并发布到ROS 2 Topic

5️⃣ 双向通信:ROS 2节点发布控制指令,反向流程同样成立

这种分层设计充分利用了PX4在嵌入式实时性方面的优势,以及ROS 2在复杂算法与生态集成上的强大能力。

📝 本章小结

通过本章学习,你应该建立以下认知:

✅ PX4是实时飞控系统,负责状态估计、控制律计算与安全保护

✅ ROS 2是高层智能框架,负责感知、规划、决策等智能任务

✅ 二者通过XRCE-DDS协议高效通信,形成协同架构

✅ /fmu/out输出飞控状态,/fmu/in接收控制指令

🎯下一章预告:《第1章(下)从零搭建PX4+ROS 2开发环境——完整工具链指南》我们将详细介绍Ubuntu 22.04 + ROS 2 Humble + Gazebo的完整工具链搭建流程,让你快速拥有可用的开发环境!

联系我们: