后台经常有人私信问我Pixhawk 和 PX4 是不是一个东西APM 到底是硬件还是软件ArduPilot 和 APM 到底差在哪说实话我当年刚入坑飞控的时候也在这四个名字里绕晕过一阵子。淘宝上搜“PX4飞控”出来的是一块块硬件板子再搜“APM飞控”又看到一堆类似的板子打开视频教程一会说“Pixhawk刷固件”一会说“ArduPilot地面站”整个人直接懵掉。这四个词确实是飞控圈最容易让人混淆的概念组合。更麻烦的是很多网上的资料、卖家详情页、老教程把硬件和软件混着讲导致新手一上来就被带偏。这篇东西我打算一次性把这四者的身份、历史渊源、选型思路讲透顺带把标题里承诺的“一张图”落成文字和表格把关系彻底理清。无论你是打算买一块二手 Pixhawk 2.4.8 练手还是想在 Ubuntu 上搭 PX4 开发环境做二次开发这篇文章都能帮你少走弯路。1. 先把身份搞明白四个词里面谁是硬件谁是软件这一节是整个问题的核心。我们先不聊历史也不聊具体版本只做一件事把四个词按“硬件”和“软件”分好类。分清楚这个后面所有问题都能顺下来。1.1 用一个电脑类比秒懂四者定位想象一下你要组装一台电脑。电脑需要硬件平台比如主板、CPU、内存还需要操作系统和应用软件。飞行控制系统简称飞控其实也是一台专门的计算机只是它被用来控制飞机。Pixhawk 是硬件平台。它就像电脑主板是一块物理电路板上面有处理器MCU、传感器陀螺仪、加速度计、气压计、磁力计、电源管理模块、各种通信接口。PX4 和 ArduPilot 是软件栈。它们就像电脑操作系统是运行在 Pixhawk 这类硬件上的飞行控制程序。负责读取传感器数据、运行姿态解算算法、执行姿态和位置控制最终输出 PWM 信号驱动电机或舵机。APM 是什么呢这个问题最容易绕晕人因为它在历史上既当过硬件也代表了软件。在最早期APM 全称是 ArduPilot Mega是一块基于 Arduino 的硬件飞控板后来 ArduPilot 项目转型为纯软件项目很多人依然习惯用“APM”来简称 ArduPilot 软件栈。也就是说如果用电脑来类比Pixhawk 是“主板”PX4 和 ArduPilot 是“操作系统”。而 APM 这个单词早期是“主板”的名字后来被继续用来称呼一套“操作系统”。这样一说Pixhawk硬件和 PX4软件的区别就非常清楚了。很多淘宝卖家把 Pixhawk 板子标注成“PX4飞控”其实是借了 PX4 项目的名气来卖硬件。硬件板子本身可以叫 Pixhawk也可以叫其他名字比如 Holybro 的 Durandal、CUAV 的 V5只要它兼容对应软件栈即可。而“PX4飞控”这个说法严格来说应该指“运行 PX4 软件的飞控硬件”口语里怎么叫都行心理得知道这层关系。1.2 一句话版本四个词到底该怎么划分为了负责任地把四个词的定位说清楚我做了一个快速划分表格名称本质所属层面一句话理解Pixhawk开源飞控硬件标准/板卡硬件飞行控制计算机的“主板”PX4专业开源自动驾驶仪软件软件跑在 Pixhawk 等硬件上的飞行控制程序ArduPilot全能开源自动驾驶仪软件软件另一套同样跑在 Pixhawk 等硬件上的飞行控制程序APM早期硬件也做 ArduPilot 简称历史复杂早期叫硬件ArduPilot Mega现在多被当作 ArduPilot 的坊间简称这张表就是我向别人解释时一定会先给的框架。记住这个框架之后你再去看任何教程、代码、文档遇到模棱两可的说法第一反应先判断对方说的是硬件还是软件思路就清晰了。2. 从历史源头理清APM 怎么就变成了 ArduPilot 的简称搞清楚“身份”之后接下来有必要聊聊历史。因为这个领域最大的误区和这四个词的历史演进强相关。不了解这段历史就永远想不明白为什么 APM 一词既被用来指硬件又被人拿来指软件。2.1 远古时代的 APM 硬件板卡时间回到 2007 年左右无人机还远没有今天这么普及。当时有一群开源爱好者基于 Arduino 平台做自动驾驶仪。他们用 Arduino Mega 2560 单片机板子加上惯性测量单元IMU、气压计、GPS 模块拼出了一块能实现简单自动驾驶的硬件。这块板子被命名为 ArduPilot Mega简称 APM。后来 3DR Robotics 这家公司看中了这个项目把 APM 硬件板卡做成了产品推出了 APM 1.0、APM 2.0、APM 2.5、APM 2.6、APM 2.8 等一系列硬件。这些板子的核心处理器是 Atmel 的 8 位 AVR 单片机ATmega2560主频只有 16MHz算力非常有限。在今天看来那性能连个电子手表都算不上多强但在当时已经是开源飞控圈的顶流。很多老玩家口中的“APM飞控”指的就是这一系列基于 Arduino 的硬件板卡。至今在某二手平台上还能看到大量几十块钱一块的 APM 2.8 板子挂着。新手贪便宜入了一块多半会被折腾到怀疑人生。2.2 ArduPilot 软件栈的独立随着技术发展8 位单片机逐渐撑不住越来越复杂的算法了。与此同时ARM Cortex-M 系列处理器开始普及算力比 AVR 高出几个数量级。ArduPilot 项目组意识到如果继续把软件和特定的硬件板卡绑定项目迟早会被硬件性能限制死。于是ArduPilot 项目做了一次重大决定把软件和硬件解耦。软件栈被独立出来名称就叫 ArduPilot也有人叫 ArduPilot Mega 固件、ArduPilot 固件。它不再只运行在自家 APM 板卡上而是可以运行在多种硬件上包括后来大放异彩的 Pixhawk 系列板卡。这个决定非常关键直接让 ArduPilot 从一个“硬件项目的附属软件”升级成了“独立的开源自动驾驶仪项目”。但是大众和很多教程作者的用语习惯是滞后的。大家叫“APM”叫习惯了加上 ArduPilot 项目也确实是从 APM 硬件项目来的于是“APM”就成了 ArduPilot 的坊间简称。你在网上搜“APM飞控”搜出来的既有老硬件板卡也有刷了 ArduPilot 固件的 Pixhawk 板卡还有 ArduPilot 软件栈的文档乱成一锅粥。所以现在如果有人跟你说“APM”你需要通过上下文判断他到底指的是什么。如果他说“我这块 APM 板子怎么连不上地面站”那多半说的是老硬件板卡如果他说“APM 支持固定翼”那基本上是在说 ArduPilot 软件栈。2.3 这段历史对新手最大的坑是什么历史梳理完了对新手来说最大的坑在于第一买老硬件 APM 板卡练手性能太弱很多现代功能不支持还特别容易因为电源设计不良导致传感器数据跳变体验极差。第二看老教程学 ArduPilot教程里写“APM 固件”你拿一块 Pixhawk 板子去搜“APM 刷固件”会搜出一堆老硬件教程完全对不上号。第三在代码层面ArduPilot 的源码仓库里到处都是“APM_”前缀的变量和函数名不了解历史的人看代码会以为自己看到的还是老硬件时代的遗留物实际这些只是命名惯性。一句话总结这段历史APM 是爹ArduPilot 是儿子Pixhawk 是继父家的新房子。爹的名字被儿子继承了下来但儿子早就搬进了新房子。3. PX4 和 ArduPilot 的正面对决两套软件栈到底怎么选理清了 Pixhawk 和 APM 的历史接下来就该正面比较 PX4 和 ArduPilot 了。这是飞控圈讨论最多的话题之一。很多新手问“到底学 PX4 还是 ArduPilot”其实没有标准答案因为两个项目各有侧重选择完全取决于你的用途。3.1 架构哲学学院派和务实派的差异PX4 项目起源于苏黎世联邦理工ETH Zurich起初是计算机视觉与机器人实验室的一个研究项目。这决定了它的基因里自带浓厚的“学院派”色彩。PX4 的软件架构强调模块化、组件化。每个功能模块如姿态估计、位置控制、导航、通信都是独立的模块模块之间通过 uORB 消息总线通信。这种架构的最大好处是二次开发非常友好。你可以单独替换掉某个模块不影响其他部分。比如你想用自己的算法替换掉姿态控制器只需要实现同样的 uORB 消息接口即可。这也是为什么学术界、科研院所、做自主无人机研发的公司普遍更偏好 PX4。ArduPilot 的架构则更偏“整体主义”。它起源于 Arduino 生态强调开箱即用和功能丰富。ArduPilot 支持载具类型非常广多旋翼、固定翼、直升机、垂直起降、无人车、无人船、水下机器人全都在一个代码库里维护。这种设计让它在功能广度和成熟度上有巨大优势但模块化程度相对较低。想深度改代码、做高度定制化的算法验证ArduPilot 的上手门槛比 PX4 要高一些。用生活类比就是PX4 像一套模块化书架每层放什么你完全可以自己定制ArduPilot 像一个装修好的大平层功能齐全拎包入住但想拆墙改格局就麻烦一点。3.2 硬件支持与许可协议的区别在硬件支持层面Pixhawk 系列板卡包括 Pixhawk 2.4.8、Pixhawk 4、Holybro 的各种变体对两套软件栈都有官方支持。也就是说同一个 Pixhawk 硬件既可以刷 ArduPilot 固件也可以刷 PX4 固件全看你选择哪套软件。这进一步说明了硬件和软件完全解耦的关系。在许可协议上PX4 使用的是 BSD 3-Clause 许可相对宽松允许商用修改而不强制开源。ArduPilot 主体使用 GPLv3基于它做闭源商用需要谨慎处理但如果只是学习、研究、非商用完全不受影响。如果你的公司想基于飞控开发自己的商业产品而不想开源代码PX4 在许可上更有吸引力。这也是很多商业无人机公司选择 PX4 的另一个原因。另外ArduPilot 对老硬件的兼容性非常好。很多老掉牙的硬件板卡ArduPilot 依然提供支持这让它拥有了庞大的“老设备”生态。PX4 则更激进一点新版本经常直接抛弃老硬件。学术圈和 GSoC 项目里PX4 的存在感也明显更高。3.3 地面站Mission Planner 与 QGroundControl 的分水岭选择 PX4 还是 ArduPilot往往也决定了你用哪款地面站软件。ArduPilot 的官方地面站是 Mission Planner也是飞控圈资历最深的地面站软件。它功能极其庞杂参数面板里密密麻麻全是英文选项新手第一次打开很容易被吓到。但只要学会了Mission Planner 的效率非常高所有功能都摆在那里不用到处找。ArduPilot 也支持 QGroundControl但主推的是 Mission Planner。PX4 的官方地面站是 QGroundControl。它的界面比 Mission Planner 现代化很多交互逻辑更接近消费者级产品新手学习成本低。QGC 如今也是 ROS/无人机行业里使用最广泛的跨平台地面站之一Windows、macOS、Linux、手机端都支持得很好。这里有个非常典型的判断方法你在教程里看到“MP地面站”还是“QGC地面站”基本就能推测出对方用的是 ArduPilot 还是 PX4。顺便提一句我见过不少人一开始用 Mission Planner 被吓跑转投了 PX4也有不少老玩家用习惯了 Mission Planner 的 All Parameters 翻页键盘操作觉得 QGC 的参数搜索太不顺手。这纯粹是习惯问题没有高下之分。3.4 选型建议我自己会怎么选根据多年接触两个生态的经验我的选型建议非常直白如果你纯兴趣装机、折腾、飞固定翼或者玩航模选 ArduPilot。它的文档里旧教程多、社区讨论多、对老硬件兼容好随便买一块二手板子都能玩起来Mission Planner 也极其适合 DIY 玩家。如果你在高校做科研、想学无人机算法、要做 ROS/机载计算机协同开发选 PX4。它的模块化架构、官方仿真环境Gazebo、AirSim、WSL2 支持更成熟学术界资料也更集中。如果你要搞水下机器人ROV/AUVArduPilot 的子项目支持更成熟。热词里那个“水下机器人apm”搜出来的内容十有八九是 ArduPilot 的 ROV 固件。如果你未来想进无人机大厂或者机器人公司PX4 的学院派风格跟企业研发岗位更贴合EKF2 算法、uORB、飞行模式管理这些概念在岗位 JD 里出现频率很高。4. 把关系图落实成文字版四者完整的谱系关系标题说了要给大家一张图这里我用文字加表格把这个关系的谱系完整画出来。按“硬件层”和“软件层”两层来组织大家可以在脑子里直接构建出这个框架。4.1 硬件层Pixhawk 是一个不断进化的家族Pixhawk 并非单一的板子型号而是一套由 PX4 项目团队维护的开源硬件参考设计标准。任何硬件厂商都可以基于这个标准做自己的板卡。理论上只要遵循标准接口板子名字可以随便起。市面上常见的 Pixhawk 变体包括硬件板卡处理器主要特点当前状态APM 2.8ATmega25608位老古董传感器少内存极小基本被淘汰Pixhawk 1Pixhawk 2.4.8 俗称STM32F427经典板子开源硬件早期标杆仍有很多库存和学习资料Pixhawk 2.4.6 / 2.4.8STM32F427国内大量仿制版价格低新手练手主力Pixhawk 4STM32F765官方参考设计加强款内存更大较主流Holybro Durandal / CUAV V5更强 Cortex-M7 系列厂商定制性能和接口更好活跃特别注意一下Pixhawk 2.4.8 在国内知名度极高其实它是 Pixhawk 1 的“改良版”方案核心处理器是 STM32F427主频 168MHz。这个算力在 ArduPilot 和 PX4 的新版本固件里已经有些吃力了很多新特性不再支持。所以如果你手里有一块 Pixhawk 2.4.8用途更建议是学基础调参、入门刷固件而不是跑最新代码做二次开发。跑新版本 PX4官方推荐用 Pixhawk 4 以上或者硬件性能更强的板子。4.2 软件层PX4 和 ArduPilot 是两套独立的“操作系统”软件层是目前最活跃的层面。PX4 和 ArduPilot 都支持 Pixhawk 系列硬件也都支持自己专属的硬件平台。两者之间不是派系关系而是两条独立的技术路线。它们的共同点是都开源、都支持多种载具类型、都有活跃社区。如果一定要画一张关系图可以这样画最底层是硬件协议与板卡标准Pixhawk 参考设计、其他板卡厂商。中间层是各类硬件板卡Pixhawk 1/2.4.8、Pixhawk 4、其他。软件层是运行时那就两套PX4 和 ArduPilot。应用层是地面站和外部开发接口PX4 对应 QGroundControl MAVSDK ROSArduPilot 对应 Mission Planner MAVProxy MAVSDK。这四层中Pixhawk 和 APM老硬件属于同一层级但不同代际的硬件PX4 和 ArduPilot 属于同一层级但不同实现路线的软件。四个词各占一个位置彼此之间有交集Pixhawk 硬件可以跑两个软件但绝对不等于同一个东西。5. 新手入坑避坑实录从环境搭建到编译刷机的几个经典问题关系理清之后再回答几个和热搜词高度相关的高频实操问题。这些问题我几乎每周都会在各种技术交流群里看到一遍整理成速查表节省大家零散搜索的时间。5.1 PX4 源码仓库没有初始化子模块最经典的编译翻车现场搜“px4 源码仓库没有初始化子模块 怎么解决”的人特别多。这个问题十有八九发生在git clone https://github.com/PX4/PX4-Autopilot.git之后直接make px4_fmu-v6x_default编译时报出一堆头文件找不到的错误。原因很简单PX4 仓库依赖大量子模块比如 Firmware、mavlink、uavcan、eigen 等。如果 clone 的时候没有加--recursive或者子模块拉取失败源码就是不完整的。最直接的解决办法git clone --recursive https://github.com/PX4/PX4-Autopilot.git # 如果已经 clone 了在仓库根目录执行 git submodule update --init --recursive注意在国内网络环境下子模块拉取失败特别常见因为很多子模块托管在 GitHub 官方域名或者第三方仓库中间任何一个环节超时都会导致子模块缺失。遇到子模块拉取失败可以试试在git submodule update --init --recursive之前先设置代理或者切换 git 协议但我不推荐大家把时间耗在这个环节。有一个非常稳的办法直接在 PX4 官方 GitHub Release 页面下载完整源码包Full Source它是打包好的完整 tar.gz自带全部子模块省去递归拉取的痛苦。另外编译前还建议检查 Ubuntu 版本兼容性。Ubuntu 22.04 和 24.04 是当前 PX4 官方重点支持的版本用老版本 Ubuntu比如 18.04、20.04编译新版本 PX4容易在一堆依赖版本上卡住。我实际踩过的坑是Ubuntu 20.04 上装好的工具链能编译 PX4 1.12但编译 1.14 以上版本时 cmake 版本和 GCC 版本都不满足要求。与其费时去降级 GCC不如直接换成官方推荐的 Ubuntu 版本跑容器或虚拟机。5.2 WSL2 和 PX4 仿真开发环境搭建的另一种选择热搜词里出现了“通过wsl2在airsim下实现px4仿真”和“wsl安装px4”估计是很多人想在 Windows 环境下做 PX4 开发。WSL2 确实能干这事但理由和坑都很明显。WSL2 的好处是你不需要装双系统在 Windows 里开 WSL2 装 Ubuntu 22.04就能跑 PX4 编译和 Gazebo 仿真。坏处是WSL2 的图形界面支持不够原生跑 Gazebo 时界面会比较卡USB 设备透传比如用 QGC 连接 USB 飞控也需要额外配置 usbipd 工具。所以如果只是纯代码开发和 headless 仿真不带可视化界面WSL2 完全够用如果要做机载电脑和飞控的 USB 通信调试我更建议直接装真 Ubuntu。一个非常实用的连接问题排查点PX4 通过 USB 连不上 QGroundControl 时90% 的原因是串口权限问题。执行sudo usermod -a -G dialout $USER重新登录后再试。如果还是连不上检查一下 Pixhawk 板子上的 USB 线是不是纯充电线那种线没有数据通道物理上就连不通。5.3 ArduPilot 编译别再抱着 Ubuntu 14.04 的老教程了热搜里有个“ubuntu 14.04 ardupilot 编译”看到这个关键词我一瞬间有点恍惚。Ubuntu 14.04 是 2014 年发布的系统ArduPilot 新代码早就不支持这么老的环境了。如果你现在照着 2016 年甚至更早的教程去编译 ArduPilot大概率会在各种 Python 版本、GCC 版本上翻车。当前编译 ArduPilot 的正确姿势也很简单git clone --recurse-submodules https://github.com/ArduPilot/ardupilot.git cd ardupilot git submodule update --init --recursive Tools/environment_install/install-prereqs-ubuntu.sh -y装完依赖后编译指定硬件/载具组合。比如编译支持 Pixhawk 1即 FMUv2的四轴固件./waf configure --board Pixhawk1 ./waf copter编译产物在build/Pixhawk1/bin/arducopter.apj用 Mission Planner 加载这个固件文件就能刷入飞控。ArduPilot 的编译体系从早期make迁移到了waf这个转变也是老教程不再适用的原因之一。5.4 一张速查表新手最容易遇到的飞控问题现象常见原因解决方案PX4 clone 后编译报头文件缺失子模块未初始化git submodule update --init --recursiveUbuntu 旧版本编译 PX4 新版本报 cmake/GCC 版本错误工具链版本过老升级 Ubuntu 版本或用官方 Docker 镜像编译QGC 连接飞控时一直“Connect Failed”串口权限不足加 dialout 用户组重插 USBPixhawk 2.4.8 刷了新版固件后传感器异常硬件算力不足/驱动不兼容回退到旧版本固件如 ArduPilot 3.x 或 PX4 1.8 左右编译 ArduPilot 报 Python3 版本错误老教程环境与代码不匹配更新系统到 22.04重新安装依赖AirSim 仿真里无人机无响应仿真端口和 QGC 端口冲突统一设置仿真端口检查 UDP 通信这张表解决的不是全部问题但覆盖了至少一半新手起步阶段会踩的坑。6. 几个容易翻车但没人提前说的实操心得结构性的内容讲完了最后再补充几个属于那种“没人告诉你、等到自己撞上才知道”的实操注意点这几个经验很碎但对刚入坑的玩家价值极高。6.1 买二手 Pixhawk 2.4.8 前先确认传感器型号Pixhawk 2.4.8 是一个极其特殊的版本。它设计上用的是 MPU6000 加速度计/陀螺仪但国内很多仿制版用的是 MPU6500。这两颗传感器在电气引脚和驱动上不完全兼容。刷老版本固件时经常遇到“IMU 不健康”的报错。如果你打算买二手板子练手一定先问卖家传感器型号或者做好刷完固件后传感器报错的心理准备。不要问我为什么知道的我就是那个踩过坑的人。6.2 编译 PX4 时磁盘空间至少要准备 30GBPX4 编译过程会下载大量依赖、交叉编译器、工具链光PX4-Autopilot源码加上子模块就要 3 到 5 GB编译中间产物和工具链加起来轻松超过 10 GB。如果还要跑 Gazebo 仿真、下载仿真模型20 GB 起步很常见。我见过有人用一台只剩 8GB 磁盘的旧笔记本编译结果系统直接卡死。给虚拟机或者 WSL 分配磁盘时一定多留空间。6.3 用 AirSim 还是 Gazebo取决于你要做什么AirSim 的优势是图像渲染好、和虚幻引擎结合强适合做视觉算法验证Gazebo 则更轻量、和 ROS/PX4 生态集成更顺滑。如果你想跑 PX4 官方固件在环仿真Gazebo 是默认选择如果你要做视觉避障、深度学习的端到端控制AirSim 更合适。两者选一个深入即可不必求全。6.4 APM 老硬件的收藏价值大于实用价值如果你纯粹出于情怀想收藏一块 APM 2.8没问题。但如果想拿来装一台能飞的穿越机或自组多旋翼我强烈建议放弃。8 位 AVR 处理器连现代一点的 EKF 算法都跑得够呛传感器性能也远不如现代板载 IMU。飞这种板子姿态容易漂、电机响应迟缓飞行体验非常糟糕。还是那句话APM 是考古级文物Pixhawk 才是能打的现代硬件。6.5 深入学习飞控编译源码比刷成品固件收获大得多最后一条心得可能有点“劝退”但真的很重要。很多人买了一块 Pixhawk 板子刷好现成固件调好 PID能飞了就以为“会飞控”了。但实际上这只能算会“用”飞控。如果你想进入无人机研发或者深入学习飞控算法一定要动手编译源码。不求你改多复杂的代码至少把编译环境搭起来跑通一次构建改一两个飞行模式参数体会一下从源码到固件的完整链路。这个过程的收获比看十篇教程都大。我在实际编译 PX4 和 ArduPilot 时最深的体会是两者解决问题的思路完全不同只有亲手把环境搭建一遍、把代码跑通一遍你才会真正理解“PX4 偏学术、ArduPilot 偏工程”这句话的分量。无论你先学的哪一套都不妨碍后续接触另外一套因为底层的飞行控制理论是一致的传感器数据都要经过校准、滤波、姿态解算、控制率计算最终变成 PWM 信号。四者之间绕来绕去的名字本质上只是这个共同物理过程的两种开源表达而已。