PX4分层架构解析
·
PX4软件架构是一个分层的模块化系统,旨在为无人机提供可靠、实时的飞行控制。其核心内容包括操作系统、硬件驱动、中间件、飞行控制栈以及应用程序模块。
1. 核心分层架构
PX4软件架构通常被划分为以下几个关键层次:
| 架构层次 | 主要功能与组件 | 说明 |
|---|---|---|
| 操作系统 (OS)层 | NuttX RTOS, Linux, macOS | 提供实时任务调度、硬件抽象和基础服务。在嵌入式飞控硬件(如Pixhawk系列)上主要运行NuttX,而在机载计算机(如Raspberry Pi)上可运行Linux。 |
| 硬件驱动层 | 传感器驱动(IMU、磁力计、气压计)、执行器驱动(PWM、CAN)、通信驱动(UART、SPI、I2C) | 负责与飞控板上的物理硬件进行直接交互,提供统一的设备接口。 |
| 中间件层 | uORB (Micro Object Request Broker)、参数系统、数据存储 | uORB是PX4架构的核心通信枢纽,是一种异步、轻量级的发布-订阅消息总线,实现了模块间高效、解耦的数据交换。参数系统用于存储和访问飞控配置。 |
| 飞行控制栈 (Flight Stack) | 姿态与位置控制器(如MC Attitude Control)、状态估计器(如EKF2)、导航模块、任务管理器 | 包含实现自主飞行的核心算法。例如,扩展卡尔曼滤波器(EKF2)融合多传感器数据以估计无人机状态。 |
| 应用程序与通信层 | 模块(Modules)、MAVLink通信、地面站接口 | 模块是独立的可执行单元,每个实现特定功能(如commander负责模式切换)。MAVLink协议用于与地面站(如QGroundControl)或其他MAVLink设备通信。 |
2. 关键组件详解
2.1 uORB 中间件
uORB是PX4模块化设计的基石。它允许任何模块发布消息(如传感器数据),同时允许其他模块订阅所需消息,实现了生产者和消费者的完全解耦。
// 示例:发布传感器数据的简化代码框架
#include <uORB/topics/sensor_combined.h> // 引入uORB消息定义// 1. 声明一个发布者(广告主题)
orb_advert_t sensor_pub = orb_advertise(ORB_ID(sensor_combined), &sensor_data);
// 2. 填充数据
sensor_combined_s sensor_data = {};
sensor_data.accelerometer_m_s2[0] = accel_x;
// ... 填充其他数据
// 3. 发布数据
orb_publish(ORB_ID(sensor_combined), sensor_pub, &sensor_data);
2.2 模块化设计
PX4的功能由众多独立的模块(位于src/modules/目录)实现。每个模块通常是一个独立的进程或线程,通过uORB进行通信。例如:
sensors: 读取传感器驱动数据并发布到uORB。ekf2: 多传感器融合与状态估计。mc_att_control: 多旋翼姿态控制器。commander: 管理飞行状态、安全检查和模式切换。
2.3 启动流程
PX4的启动由位于px4fmu_common/init.d/rcS的启动脚本控制。该脚本按顺序启动必要的驱动和模块,构建出完整的飞行控制系统。
3. 两种典型部署架构
根据硬件平台,PX4主要有两种运行架构:
| 架构类型 | 描述 | 适用场景 |
|---|---|---|
| 单飞控架构 | 所有PX4软件层(从驱动到应用)均运行在同一个微控制器(如STM32)上,通常使用NuttX RTOS。 | 传统的Pixhawk系列飞控,追求高实时性、低功耗和低成本。 |
| 飞控 + 机载计算机架构 | 分离式部署:飞控(FMU)仅运行实时性要求高的驱动、中间件和控制器;机载计算机(如Raspberry Pi)运行Linux,处理高级导航、计算机视觉等复杂应用,两者通过串口或以太网(MAVLink)通信。 | 需要执行SLAM、路径规划等复杂计算的无人机,如物流、巡检无人机。 |
4. 源码目录结构概览
理解PX4软件架构可通过其源码目录结构入手:
platforms/: 包含针对不同硬件平台(如px4_fmu-v5)的构建配置、驱动和启动脚本。src/: 核心源码目录。drivers/: 硬件驱动程序。modules/: 所有功能模块的实现。lib/: 公共库,如数学库、控制系统库。
msg/: 定义所有uORB消息的格式(.msg文件),是模块间数据接口的契约。ROMFS/: 包含启动脚本(init.d/rcS)和系统配置文件。
参考来源
- px4源码学习三--px4源码结构分析
- PX4软件架构
- 无人机:PX4 based drones_(4).PX4软件架构与开发环境
- 【无人机】无人机PX4飞控系统高级软件架构
- PX4实战(一):PX4简介及系列文档目录
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)