1. PX4 概述与生态:从历史到选型,我带你捋一遍

做无人机开发这些年,我接触过不少飞控系统。但要说哪个开源项目最让我觉得「靠谱」,那还得是 PX4。今天咱们就从它的历史、协议、硬件、架构,再到和 ArduPilot 的对比,把 PX4 的底细彻底聊透。

1.1 PX4 的历史沿革:一个瑞士实验室的意外走红

PX4 最早是苏黎世联邦理工学院(ETH Zurich)的一个计算机视觉项目。2011 年,几位博士生为了做视觉导航研究,顺手写了一套飞控固件。没想到,这套代码后来成了无人机开源界的顶梁柱。

我记得 2014 年第一次接触 PX4 时,它还是个「学生作品」——文档少、接口乱、动不动就炸机。但到了 2016 年,PX4 被 Linux 基金会旗下的 Dronecode 项目接管,开始走正规军路线。从那以后,代码质量、社区规范、硬件支持都上了好几个台阶。

几个关键时间点:

  • 2011 年:ETH Zurich 启动 PX4 项目,最初用于视觉惯性里程计研究。
  • 2014 年:Pixhawk 1 硬件发布,PX4 成为其默认固件。
  • 2016 年:PX4 加入 Dronecode 基金会,开始标准化治理。
  • 2019 年:PX4 v1.10 发布,引入 uXRCE-DDS 中间件,正式拥抱 ROS 2。
  • 2023 年:PX4 v1.14 发布,支持多旋翼、固定翼、VTOL、无人船、无人车全平台。

核心观点:PX4 不是一夜爆红的。它从学术项目走到工业级飞控,靠的是持续迭代和社区共建。如果你现在入坑,选 v1.14 或更新的稳定版,别碰那些「古董版本」。

1.2 开源协议:BSD 3-Clause,给你最大的自由度

PX4 采用 BSD 3-Clause 协议。说白了,就是你可以随便用、随便改、甚至闭源商用,只要保留版权声明就行。

我见过不少团队担心「开源协议会不会有坑」。这里我直接说结论:BSD 3-Clause 是商业友好的。你不需要把修改后的代码开源,也不需要向社区付费。相比之下,GPL 协议(比如 ArduPilot 早期版本)就有「传染性」——你用了 GPL 代码,整个项目都得开源。

协议 商用限制 修改后必须开源 保留版权声明
BSD 3-Clause 无 否 是
GPL v3 有(传染性) 是 是
Apache 2.0 无 否 是

避坑指南:我曾经见过一个团队,把 PX4 改了一通后直接卖产品,结果被「假律师」吓唬说侵权。其实只要你在产品文档里保留 BSD 版权声明,就完全合规。别自己吓自己。

1.3 硬件支持列表:Pixhawk 系列是主力,但不是唯一

PX4 官方支持的硬件列表很长,但核心就是 Pixhawk 系列。从最早的 Pixhawk 1,到现在的 Pixhawk 6X、Pixhawk 6C,性能翻了十几倍。

我个人习惯把硬件分成三档:

  • 入门级:Pixhawk 4 Mini、Pixhawk 6C。适合学习、小型无人机、预算有限的项目。
  • 进阶级:Pixhawk 6X、Pixhawk 5X。带双 IMU、双气压计、冗余电源,适合工业应用。
  • 旗舰级:CUAV V5+、Holybro Pixhawk 6X Pro。支持多路串口、CAN 总线、RTK GPS,适合复杂系统。

你想想看,为什么 Pixhawk 系列能成为事实标准?因为它的硬件设计是开源的——原理图、PCB、BOM 全公开。这意味着任何厂商都可以生产兼容板,价格自然就下来了。

硬件型号 处理器 IMU 接口数量 推荐场景
Pixhawk 4 Mini STM32F427 单 IMU 5 路 UART 学习、小型四轴
Pixhawk 6C STM32H743 双 IMU 8 路 UART 中型无人机
Pixhawk 6X STM32H753 双 IMU + 双气压计 10 路 UART 工业、科研

注意:别只看芯片型号。Pixhawk 6X 的 H753 比 6C 的 H743 多了硬件加密和更多内存,但价格也翻倍。选型时先问自己:我真的需要双 IMU 冗余吗?如果只是飞着玩,6C 完全够用。

1.4 软件架构全景图:从底层驱动到上层应用

PX4 的软件架构,说白了就是一套 模块化实时系统。它跑在 NuttX RTOS 上,所有功能都是独立的模块,通过 uORB 消息总线通信。

我画了一张架构图,你一看就明白:

PX4 软件架构全景图 应用层(Application Layer) Commander | Navigator | Position Controller | Attitude Controller 中间件层(Middleware Layer) uORB 消息总线 | uXRCE-DDS | MAVLink 通信 驱动层(Driver Layer) GPS | IMU | 气压计 | 磁力计 | PWM | RC 输入 硬件抽象层(HAL + NuttX RTOS) 模块间通过 uORB 发布/订阅机制解耦,支持动态加载和卸载

嗯,这里要注意:uORB 是 PX4 的灵魂。每个模块(比如 GPS 驱动、姿态控制器)都通过 uORB 发布自己的数据,其他模块订阅需要的数据。这种设计让系统非常灵活——你想换一个姿态控制算法?写个新模块,订阅 IMU 数据,发布控制指令就行,不用动其他代码。

我刚开始学 PX4 时,最头疼的就是理解 uORB 的发布/订阅模型。后来我做了个小实验:写一个自定义模块,订阅 GPS 数据,然后通过 MAVLink 发到地面站。前后只用了 30 行代码。那一刻我才真正明白,模块化架构有多香。

1.5 与 ArduPilot 的对比:选哪个?看场景

这个问题我几乎每次培训都会被问到。我的回答是:没有绝对的好坏,只有适不适合。

ArduPilot 的历史比 PX4 更久,2007 年就开始了。它走的是「全功能」路线——固定翼、多旋翼、无人车、无人船、潜水器,全平台覆盖。而 PX4 更偏向「现代架构」——代码更干净、模块化更好、对 ROS 2 的支持更原生。

对比维度 PX4 ArduPilot
操作系统 NuttX RTOS ChibiOS / Linux
编程语言 C++(现代风格) C++(传统风格)
消息机制 uORB 发布/订阅 全局变量 + 库函数
ROS 2 支持 原生(uXRCE-DDS) 通过 MAVROS 桥接
硬件支持 Pixhawk 系列为主 更广泛(包括 Arduino)
学习曲线 中等(需要理解 uORB) 较平缓(参数配置为主)
商业应用 较多(工业、科研) 较多(农业、测绘)

我个人习惯这样选:

  • 如果你要做 科研、算法验证、ROS 2 集成,选 PX4。它的模块化架构和 DDS 支持让你少写很多胶水代码。
  • 如果你要做 传统测绘、农业植保、固定翼长航时,选 ArduPilot。它的参数体系更成熟,社区案例更多。
  • 如果你是 初学者,我建议从 PX4 开始。因为它的代码结构更清晰,学完 PX4 再看 ArduPilot 会容易很多。

我的经验:我曾经在两个项目里分别用了 PX4 和 ArduPilot。PX4 的项目是「视觉避障 + ROS 2 控制」,从开发到调试只用了 3 个月。ArduPilot 的项目是「固定翼测绘」,参数调了 2 周才稳定。不是说 ArduPilot 不好,而是不同场景有不同最优解。

1.6 小结:PX4 生态的核心优势

聊了这么多,总结一下 PX4 生态的几大优势:

  • BSD 协议:商用无压力,闭源不担心。
  • Pixhawk 硬件:开源设计、厂商众多、价格透明。
  • uORB 架构:模块化、可扩展、易调试。
  • ROS 2 原生支持:科研和工业的标配。
  • 社区活跃:GitHub 上 7 万+ Star,问题响应快。

嗯,第一章的内容就到这。记住一句话:PX4 不是万能的,但它是目前开源飞控里最「现代」的选择。后面的章节,我会带你深入每个模块的源码和原理。准备好了吗?