1. PX4 生态全景:历史、社区、硬件与软件

各位同学,欢迎来到《PX4任务规划与航线设计》的第一章。

在正式开始动手之前,我觉得有必要先带大家看看整个PX4的版图。说白了,就是搞清楚我们用的这套东西到底从哪来、由谁管、能跑在什么硬件上、软件又是怎么搭起来的。我见过不少新手,一上来就急着刷固件、调参数,结果遇到问题连该去哪个论坛问、日志从哪里抓都不知道。嗯,磨刀不误砍柴工,咱们先把全景图刻在脑子里。

本章核心目标:建立PX4生态的整体认知,理解各组件之间的关系,为后续的航线设计与任务规划打下基础。

1.1 PX4 的历史与社区

PX4 项目最早可以追溯到 2009 年,由苏黎世联邦理工学院的 Lorenz Meier 发起。那时候无人机飞控还多是闭源的商业方案,开源社区里能打的也就 ArduPilot 一家。PX4 的出现,说白了就是想做一个更现代、更模块化、更适合学术研究和工业应用的飞控系统。

我记得 2014 年左右第一次接触 PX4 时,它还在用自家的 PX4FMU 板子,代码结构跟现在差别很大。后来项目经历了几个关键转折点:

  • 2015年:与高通骁龙Flight平台合作,引入了POSIX实时计算层,让飞控能跑在Linux上。
  • 2016年:加入Linux基金会旗下的Dronecode项目,社区规模开始爆发。
  • 2017年至今:逐步统一为NuttX实时操作系统,硬件平台聚焦Pixhawk标准。

现在的PX4由Auterion公司主导维护,但核心决策依然在GitHub上公开进行。社区贡献者超过500人,每周都有新的PR合并。我个人习惯每天早上刷一遍PX4的discuss论坛,很多坑其实别人已经踩过了。

避坑指南:我曾经在论坛上看到一个新手问“为什么我的电机不转”,结果是他刷了v1.11的固件但用了v1.8的参数文件。所以,版本对齐是第一个要养成的习惯。PX4主版本号、地面站版本号、参数文件版本号必须一致。

1.2 硬件平台:Pixhawk 系列

PX4能跑的硬件很多,但最主流、最稳定的还是Pixhawk系列。这里我给大家梳理一下目前常见的几个标准:

标准/型号 处理器 传感器 适用场景
Pixhawk 1 (FMUv2) STM32F427 (180MHz) MPU6000 + MS5611 + HMC5883 入门学习、小型无人机
Pixhawk 4 (FMUv5) STM32F765 (216MHz) ICM-20689 + MS5611 + IST8310 中型多旋翼、垂直起降固定翼
CUAV V5+ (FMUv5) STM32F765 (216MHz) ICM-20602 + BMI088 + MS5611 工业应用、高可靠性需求
Holybro Pixhawk 6X (FMUv6X) STM32H753 (480MHz) BMI088 + ICM-20649 + MS5611 高端科研、自动驾驶

你可能会问,为什么有这么多版本?其实核心差异就两点:算力和传感器冗余度。FMUv5开始支持双IMU热备份,FMUv6X更是支持三冗余。我在做农业植保机项目时,遇到过IMU突然飘移的情况,幸好有双备份自动切换,飞机才没炸。所以,预算允许的话,尽量选FMUv5以上的板子。

注意:不是所有Pixhawk板子都原生支持PX4。买之前一定要去PX4官网查一下“Supported Hardware”列表。有些山寨板子虽然便宜,但传感器型号不对,刷了固件也起不来。

1.3 软件架构概览

PX4的软件架构,我习惯把它分成三层来看:

  1. 实时操作系统层 (RTOS):基于NuttX,负责任务调度、中断管理、文件系统。
  2. 中间件层:uORB消息总线,所有模块之间通过uORB发布/订阅消息通信。
  3. 应用层:各种飞行模块——姿态估计、位置控制、导航、任务规划等。

下面这张图可以帮你快速建立整体印象:

PX4 软件架构全景图 应用层 (Application Layer) 姿态估计 (EKF2) 位置控制 (MC_POS) 任务规划 (Navigator) 通信 (MAVLink) 中间件层 (Middleware) uORB 消息总线 (发布/订阅) 操作系统层 (OS Layer) NuttX RTOS (任务调度/中断) 设备驱动 (SPI/I2C/UART) 硬件层 (Hardware: STM32 + 传感器) 用户可修改 核心通信枢纽

你想想看,一架无人机在天上飞,姿态估计模块算出当前角度,通过uORB发一条消息,位置控制模块收到后算出需要的推力,再通过uORB发给混控器,最后混控器输出PWM给电机。整个过程环环相扣,任何一个模块出问题,飞机都可能失控。

这里我特别想强调一下uORB。它本质上是一个内存中的消息总线,任何模块都可以往上面发消息,也可以订阅自己感兴趣的消息。比如,GPS模块发布vehicle_gps_position消息,EKF2订阅它来做融合定位。这种解耦设计让PX4非常灵活——你想换一个更好的GPS驱动?写个新模块,发布同样的消息就行,其他模块完全不用改。

小技巧:调试时可以用uorb top命令查看当前所有uORB消息的频率和延迟。我曾经靠这个命令抓到一个IMU消息频率不稳定的bug,最后发现是SPI时钟配置错了。

1.4 地面站:QGroundControl

QGroundControl(简称QGC)是PX4官方推荐的地面站软件。它跨平台(Windows/macOS/Linux/iOS/Android),功能覆盖了从飞控参数调参、固件刷写、实时监控到航线规划的全流程。

我个人觉得QGC最实用的几个功能:

  • 参数调整:所有PX4参数都可以在QGC里搜索、修改、保存。我习惯把常用的参数(比如MPC_XY_VEL_MAX最大水平速度)加到收藏夹,省得每次翻半天。
  • MAVLink控制台:可以直接在QGC里执行nsh命令,查看文件系统、启动脚本、传感器数据。调试利器,没有之一。
  • 航线规划:在地图上点几个航点,设置高度、速度、动作(比如拍照、投掷),就能生成一条完整的任务航线。这也是咱们这门课的核心内容。

QGC与飞控之间通过MAVLink协议通信。MAVLink是一种轻量级的无人机通信协议,定义了200多种消息类型。比如HEARTBEAT心跳包、ATTITUDE姿态数据、MISSION_ITEM航点信息等。QGC每隔1秒会发一个心跳包给飞控,如果飞控连续3秒没收到,就会触发遥控器失控保护——嗯,这个咱们后面讲安全机制时会细说。

注意:QGC的版本也要和PX4固件版本匹配。我曾经用QGC 4.0连接PX4 v1.12的飞控,结果参数界面一堆红色警告,因为新固件删除了几个旧参数。所以,升级固件后记得同步升级地面站。

1.5 本章小结

好了,这一章我们走马观花看了一遍PX4的生态。从2009年的学术项目,到如今全球最大的开源飞控生态;从Pixhawk 1到6X的硬件演进;从NuttX到uORB到应用模块的软件分层;再到QGC这个强大的地面站工具。这些东西就像工具箱里的各种工具,你不需要一开始就精通每一个,但得知道它们放在哪、干什么用。