PX4
PX4飞控架构详解
PX4(Pixhawk Autopilot)是一款开源的无人机飞控系统,广泛应用于多旋翼、固定翼、垂直起降(VTOL)等无人机平台。其架构设计遵循模块化、实时性和可扩展性原则,支持从消费级到工业级的多种应用场景。以下从架构分层、核心组件、数据流程等方面详细解析:
一、整体架构概述
PX4 采用分层架构设计,将系统功能划分为不同层次,各层通过标准化接口交互,确保模块解耦和可复用性。核心架构分为:
- 硬件抽象层(HAL)
- 中间件层(Middleware)
- 应用层(Applications)
- 外围工具与接口
二、核心架构组件解析
1. 硬件抽象层(Hardware Abstraction Layer, HAL)
- 功能:屏蔽底层硬件差异,为上层提供统一接口,支持不同硬件平台(如 Pixhawk 系列、Holybro Kakute 等)。
- 关键模块:
- 传感器驱动:支持陀螺仪、加速度计、磁力计、气压计等惯性测量单元(IMU),以及 GPS、视觉传感器等。
- 执行器驱动:控制电机、舵机、电调(ESC)等输出设备,支持 PWM、DShot 等通信协议。
- 通信接口:UART、I2C、SPI、CAN 等硬件通信协议的抽象接口。
- 电源管理:电池电压监测、电源状态管理。
2. 中间件层(Middleware)
中间件层是 PX4 架构的核心,负责实时任务调度、数据处理和模块间通信,包含以下关键组件:
(1)实时操作系统(RTOS)
- 基于NuttX RTOS(或 Zephyr RTOS),提供任务调度、内存管理、中断处理等实时性支持。
- 支持多线程并行处理(如传感器读取、控制算法、通信任务分离),确保高优先级任务(如姿态控制)的实时响应。
(2)数据分发与通信(uORB)
- uORB(微对象请求代理):PX4 自研的轻量级消息总线,用于模块间数据共享。
- 特点:
- 发布 / 订阅模式:模块可发布数据(如传感器读数)或订阅数据(如控制指令),解耦模块间依赖。
- 实时性保障:消息队列优先级管理,确保关键数据(如姿态信息)优先传输。
- 典型消息示例:
sensor_combined(传感器融合数据)、vehicle_attitude(飞行器姿态)、actuator_controls(执行器控制指令)。
(3)控制算法核心
- 姿态控制模块(Attitude Control):
- 基于 PID、互补滤波等算法,处理 IMU 数据,计算飞行器姿态(滚转、俯仰、偏航),并输出电机 / 舵机控制量。
- 位置与导航控制(Position & Navigation):
- 融合 GPS、视觉定位(如光流)、气压计数据,实现定点悬停、轨迹跟踪等功能。
- 路径规划与任务管理(Mission & Path Planning):
- 支持通过 MAVLink 协议接收任务指令(如航点飞行),或本地执行预设任务脚本(.mission 文件)。
(4)硬件接口与驱动中间件
- 封装底层硬件驱动,向上层提供标准化接口(如
device drivers模块管理传感器设备)。
3. 应用层(Applications)
应用层包含用户可直接调用的功能模块和命令行工具,实现具体飞行模式和任务:
- 飞行模式:
- 手动模式(Manual)、稳定模式(Stabilized)、定点模式(Position)、自动模式(Auto,航点飞行)、返航模式(Return to Launch, RTL)等。
- 实用工具:
commander:接收并执行飞行指令(如起飞、降落)。mavlink:处理 MAVLink 通信协议,与地面站(如 QGroundControl)交互。px4ctl:系统配置与控制命令(如参数调整、日志管理)。
- 扩展应用:
- 支持自定义应用开发(如视觉避障、农业喷洒控制),通过 CMake 编译集成到系统中。
4. 外围工具与接口
- 地面站接口:通过 MAVLink 协议与 QGroundControl、Mission Planner 等地面站软件通信,实现参数配置、实时监控和任务规划。
- 开发工具链:
- 基于 GCC 的交叉编译工具,支持在 Linux、Windows、macOS 上开发。
- 仿真环境:通过 Gazebo、JSBSim 等工具实现软件在环(SIL)和硬件在环(HIL)仿真测试。
- 通信协议:支持 MAVLink、ROS/ROS 2、UDP/TCP 等协议,便于与其他系统集成(如机器人操作系统、云平台)。
三、数据流程与控制环路
1. 传感器数据处理流程
- 数据采集:HAL 层驱动读取传感器原始数据(如 IMU 的角速度、加速度)。
- 预处理:通过滤波算法(如互补滤波、卡尔曼滤波)去除噪声,校准传感器偏差。
- 数据发布:通过 uORB 发布到消息总线,供姿态控制模块订阅。