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的软件架构,我习惯把它分成三层来看:
- 实时操作系统层 (RTOS):基于NuttX,负责任务调度、中断管理、文件系统。
- 中间件层:uORB消息总线,所有模块之间通过uORB发布/订阅消息通信。
- 应用层:各种飞行模块——姿态估计、位置控制、导航、任务规划等。
下面这张图可以帮你快速建立整体印象:
你想想看,一架无人机在天上飞,姿态估计模块算出当前角度,通过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这个强大的地面站工具。这些东西就像工具箱里的各种工具,你不需要一开始就精通每一个,但得知道它们放在哪、干什么用。