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)和系统配置文件。

参考来源

 

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐