ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

PX4、Pixhawk、ArduPilot、APM:开源飞控四概念彻底讲清

PX4、Pixhawk、ArduPilot、APM:开源飞控四概念彻底讲清 刚接触无人机开发的朋友基本都在这四个词面前懵过PX4、Pixhawk、ArduPilot、APM。群里最常出现的对话是“我买了一块Pixhawk 2.4.8是不是就能直接跑PX4了”或者“APM和ArduPilot不是一个东西吗”。每次看到这种问题我都想说如果把这四个词当成四个并列概念那从一开始就输了。它们本质上是两代硬件和两套固件互相缠绕出来的结果。这篇文章不打算堆术语而是把每个词拆开讲清楚画出它们之间的关系再补上源码编译、地面站连接、硬件选型里常见的坑。看完你至少能分清哪些是硬件哪些是软件什么场景该选哪套组合。1. 先拆概念APM、ArduPilot、Pixhawk、PX4分别是什么1.1 为什么四个词容易混名字撞车加历史遗留这四个词能混到今天首先是因为名字本身就存在大量重叠。APM是ArduPilot Mega的缩写最早是一块实体硬件板卡但很多人又把“APM”当作整个开源飞控项目的简称。ArduPilot这个名字既是项目名也是固件项目的总称早期又被拿来指代运行在APM板上的那套代码。Pixhawk最初是PX4项目下的硬件子项目后来独立成了一系列硬件标准而它又是具体某块板子的名字比如Pixhawk 1。PX4则是整个软件项目的代号同时也特指运行时的那套飞行控制固件。这就导致了“硬件叫软件名”“项目名和固件名混用”的尴尬局面。你搜“APM”出来一堆十年前的刷机教程你搜“PX4”出来的既有固件代码也有讲硬件的文章。信息越搜越乱不是你的问题是历史命名留下的坑。1.2 用电脑作类比先把框架立起来如果非要给这四个词找一个生活化的类比我的建议是把它想成一台电脑APM像最早的一台品牌整机配置固定、性能有限但它让很多人第一次跑起了“开源飞控”这套系统。ArduPilot像是可以在多台机器上安装的操作系统。它出身于APM那台“品牌整机”后来被移植到各种硬件上。PX4是另一套操作系统设计理念和ArduPilot不同更强调模块化。Pixhawk则像后来大家共同采用的主板标准一套约定好的硬件规范。不同的“操作系统”都能装在这块主板上运行。这个类比虽然粗糙但能快速帮你建立判断APM是早期硬件Pixhawk是现代硬件ArduPilot和PX4都是跑在硬件上的固件/软件栈。1.3 逐个定义四个词在今天的官方含义为了让后续讨论不生歧义我按现在的官方语境来定义一下名称本质今天主要指什么APM硬件板卡/旧项目名ArduPilot Mega板基于Arduino Mega 2560如今基本被淘汰ArduPilot开源自动驾驶仪固件项目一套支持多旋翼、固定翼、直升机、无人车、潜水器的完整固件Pixhawk硬件参考设计与标准由PX4项目早期定义并衍生出的飞控硬件系列如Pixhawk 6C、6XPX4开源飞行控制软件栈一套运行于Pixhawk等硬件上的现代固件含完整飞控内核与生态注意PX4和Pixhawk的关系最容易让人误解Pixhawk是PX4项目的“亲儿子”硬件但今天Pixhawk硬件也能跑ArduPilot固件PX4软件也能跑到别的硬件上。这是“软硬件解耦”的结果也是整篇文章最核心的一层关系。2. 一张图看懂两代硬件与两套固件的“交叉矩阵”标题说了“一张图给你讲明白”那我先给出一张文字版关系图。你从阅读上可以这么理解纵坐标看硬件更替横坐标看软件生态。┌────────────────────────────────────────────┐ │ 开源飞控概念关系图 │ └────────────────────────────────────────────┘ 硬件层 APM 板卡ArduPilot Mega Pixhawk 系列 │ │ 支持 │ 早期专用 │ 支持 ▼ ▼ 软件层 ArduPilot 固件 ◀─────────────── (ArduPilot on Pixhawk) │ ▼ PX4 固件PX4 Project │ 最初定义/推动 ▼ Pixhawk 硬件标准后来独立成系列 适用载具 多旋翼 / 固定翼 / 直升机 / 无人车 / 潜艇ROV / 天线追踪用一句话概括APM是祖先硬件ArduPilot是它的“灵魂”PX4是接过硬件主导权的“新派固件”Pixhawk是它们如今共用的躯壳。当然这个概括不完全严谨但比你死记四段定义要好记得多。2.1 硬件与固件的支持矩阵为了把交叉关系说得更落地我把它整理成一张支持矩阵硬件能跑ArduPilot能跑PX4备注APM Mega2560早期版本可以现代版本不行不支持芯片性能和内存太弱Pixhawk 1 / 2.4.8FMUv2支持新版可能需老固件支持固件需要老版本或升级bootloader逐渐被新固件放弃Pixhawk 4 / 6C / 6XFMUv5/v6完整支持完整支持当前主流选择树莓派等Linux单板机支持Linux/BeagleBone版本支持度有限多作伴机使用一般不是飞控主力这张矩阵可以看出一个关键结论如果你买的是Pixhawk系列硬件ArduPilot和PX4两条路线都可以走选择权在你。这就是为什么网上很多教程会同时讲两套固件——硬件底座已经统一了。2.2 交叉是怎么发生的很多人好奇ArduPilot明明是APM的后续固件为什么后来跑到了Pixhawk上这事得从2012年前后说起。当时PX4项目推出了Pixhawk这套新的硬件参考设计性能比老的APM板高了一大截。ArduPilot社区看到新硬件的潜力很快把它移植了过去。反过来PX4团队也没有把所有资源砸在一块独家板卡上而是一边推进Pixhawk标准一边维护PX4固件对多款硬件的适配。于是生态从“一板一固件”变成了“多固件跑同一类板卡”。对用户来说最直观的感受就是你装好一块Pixhawk 6C之后可以刷PX4玩也可以刷ArduPilot玩甚至刷来刷去来回对比。硬件不再锁定软件这才是现代开源飞控生态最值得称赞的地方。3. 从APM到ArduPilot这段改名史决定了今天的格局3.1 一切从DIY Drones和一块Arduino扩展板开始时间回到2010年前后民用无人机还没有今天这么普及。当时Chris Anderson创立的DIY Drones社区聚集了大量航模爱好者大家在讨论一个大胆的事能不能用现成的Arduino开发板做一整套飞控答案就是ArduPilot Mega也就是APM。它本质上是一块基于Arduino Mega 2560的扩展板加上传感器、接口和电源管理再烧录社区写的开源代码。那时候的“飞控”远没有今天这么高大上更多是极客玩具但正是这个项目把“开源飞控”这个概念推广了出去。当时软件和硬件是绑定的APM板就配ArduPilot固件几乎没得选。也因此“APM”这个名字逐渐变成了整套系统的代称有人喊“APM飞控”有人喊“刷APM固件”指的都是同一摊事。3.2 APM板卡淡出ArduPilot固件活了下来老APM板有一个天然瓶颈Arduino Mega 2560的主频是16MHz内存也只有8KB跑现代飞控算法非常吃力。随着多旋翼、定点悬停、航迹规划这些功能越来越复杂APM硬件先撑不住了。但ArduPilot这套固件没有跟着硬件一起死。它的代码被不断重写、优化并成功移植到性能更强的Pixhawk硬件上。从那时起APM这个词正式从“硬件”变成了“历史名词”而ArduPilot则演变为一个纯软件的固件项目。很多新手查资料时会看到2015年以前的教程通篇在讲“APM”然后拿这些步骤往Pixhawk上套自然就乱套了。我的建议是看到“APM”时先判断作者说的是旧硬件还是泛指ArduPilot项目带版本号“APM 2.8”“APM 2.6”的一般是真硬件不带版本号的多半是软件或泛指。3.3 今天的ArduPilot不只是四旋翼Sub潜水器、固定翼、直升机ArduPilot现在分为Copter、Plane、Rover、Sub、Tracker等多个载具类型。很多人知道它适合做四旋翼实际上固定翼、直升机、无人车、甚至水下机器人ROV/潜艇都在它的支持范围内。这里特别提一下水下机器人的场景。这几年“水下机器人 apm”的搜索热度一直不低因为ArduPilot的Sub分支很适合ROV开发支持深度计、声纳、机械臂控制能和Pixhawk类硬件搭配放进防水舱里就能跑。如果你想做水下无人设备ArduPilot几乎是目前最现实的开源选择——PX4在这块地儿一直没有对应的官方方案。这也是ArduPilot至今仍然充满生命力的原因它不把视野局限在“多旋翼”而是把一套成熟的自动驾驶逻辑铺到了天上、地上、水里。4. PX4与ArduPilot同为开源固件走的其实是两条路弄清了历史下一步就是选型。PX4和ArduPilot都跑在Pixhawk硬件上但气质、架构、适用人群完全不同。4.1 出身决定气质苏黎世学术派与社区老牌稳定派PX4来自苏黎世联邦理工的学术团队早期带有很强的研究属性。它的架构从一开始就为模块化、可扩展、自动化测试设计代码层面大量使用uORB消息机制、工作队列和事件驱动模型。这种设计对二次开发非常友好想加一个新模块、改一个控制环节思路清晰。ArduPilot则完全是社区驱动、航模基因浓厚的项目。它的设计哲学是“在极限环境下也能稳”代码里保留了大量的调参逻辑和兼容性处理。很多老玩家评价ArduPilot“皮实”是因为它在各种固定翼、直升机上有十几年的实战积累无数航模老炮帮它踩过坑。打个比方PX4像一个学术型工程师写的系统优雅、分层清楚ArduPilot像一个手艺人一点一点修出来的系统功能扎实、不追求教科书式的结构。如果你更关心“源码能看懂、逻辑能扩展”PX4可能更舒服如果你更关心“能稳定起飞、参数可调”ArduPilot可能更省心。4.2 载具支持对比载具类型PX4ArduPilot多旋翼强常年优化强成熟固定翼支持发展快极强历史最悠久VOTL垂直起降支持方案完善支持方向不同直升机支持但社区规模小极强传统优势项目无人车支持支持水下ROV/潜艇官方不支持Sub分支专门支持天线追踪无Tracker支持从表里能看出一个明显特点PX4主攻空中平台ArduPilot覆盖面更宽。如果你的目标很明确是做四旋翼或垂直起降无人机PX4和ArduPilot都能胜任差别主要在调参手感和二次开发方式如果你要做固定翼、直升机或者水下机器人ArduPilot更稳妥。4.3 地面站、仿真与调参QGC vs Mission Planner选固件还等于选一套配套生态。PX4官方地面站是QGroundControlQGC界面现代、跨平台支持好仿真上原生支持Gazebo也能接AirSim、Simulink、MATLAB。ArduPilot则和Mission Planner绑定最深Mission Planner功能繁多功能强大从参数设置、固件刷写到地图规划全都能干仿真上则用SITLSoftware In The Loop搭配MAVProxy或Gazebo使用。在位置估计这块PX4大量宣传其基于**扩展卡尔曼滤波EKF2**的姿态和位置估计器网上搜“PX4卡尔曼滤波推导”能找到一堆论文级资料ArduPilot也有自己的EKF实现EKF2/EKF3但在资料深度和社区讨论热度上略逊一筹。如果你立志深入研究算法PX4的学术资料更多推导过程更透明。4.4 二次开发PX4动架构ArduPilot动参数我见过不少新手一上来就想“二开”结果被项目结构劝退。这里提前打个预防针PX4的二次开发通常涉及写新的uORB模块、修改控制律、接自定义传感器驱动代码门槛较高编译过程也比较重。ArduPilot的二次开发则更侧重“参数级定制”和“逻辑裁剪”很多应用不需要改C代码通过Mission Planner的MAVLink消息或Lua脚本就能完成。所以我的选型建议很实际如果是毕业设计、科研预研、算法验证选PX4如果是要交付一个能飞、能下水、能跑现场的项目ArduPilot更稳。5. Pixhawk硬件家族的选型逻辑从FMUv2到FMUv6无论选哪套固件你都需要一块靠谱的Pixhawk硬件。这里面的版本坑比四个概念的坑更深。5.1 FMU版本线一张表看懂硬件代际Pixhawk系列硬件以FMUFlight Management Unit版本区分代际类似手机芯片上的型号数字。FMU版本代表板卡处理器状态FMUv2Pixhawk 1、Pixhawk 2.4.8STM32F427老新固件陆续放弃FMUv3Pixhawk 2老版STM32F427改进过渡FMUv4Pixracer等STM32F405小众FMUv5Pixhawk 4、4 ProSTM32F765主流入门FMUv6Pixhawk 6C、6XSTM32H743当前推荐同样的Pixhawk系列FMUv5以上的处理器性能有了明显提升内存更大新固件才跑得舒服。我的第一个建议是无论选PX4还是ArduPilot硬件起步直接买FMUv5或FMUv6别为了省钱碰FMUv2老古董。5.2 被热捧的“Pixhawk 2.4.8”为什么我不推荐搜索热词里“pixhawk 2.4.8”频繁出现但我得说实话这个板子被大量讨论一部分原因是它曾是“兼容板之最”。市面上很多Pixhawk 2.4.8其实是老版本Pixhawk 1设计的灰产克隆没有正规质量体系。更关键的是随着PX4和ArduPilot版本迭代它们都在陆续移除对FMUv2老硬件的新固件支持。你拿一块2.4.8去刷最新固件要么刷不上要么刷上后某些传感器识别不全、SD卡日志异常。老硬件本身没问题但拿它跑新软件等于让一台旧电脑装最新系统体验肯定打折扣。所以如果你在二手平台看到便宜的Pixhawk 2.4.8先想想自己买它到底为了什么。如果是纯粹学习MAVLink通信、练练地面站操作可以玩如果是正经项目或实验数据采集我给的建议是别省这几百块上6C或6X。5.3 按场景选板学习、固定翼、水下ROV不同场景的板卡选择我这里给一套比较接地气的组合方案纯学习/入门/毕业设计Pixhawk 6C加一个GPS模块再配QGC或Mission Planner性价比高官方资料多社区案例也多。固定翼/较长航时项目可以考虑Pixhawk 6X接口更丰富双IMU冗余适合对可靠性有要求的场景。水下机器人ROV选ArduPilot Sub分支配支持Sub的Pixhawk类板如Pixhawk 6C系列再加深度计、电子调速器、无刷电机所有部件放进防水舱里。只想在电脑上跑仿真不去买硬件直接搭PX4或ArduPilot的SITL环境用QGC或MAVProxy虚拟连接即可。6. 编译与连接的实战避坑子模块、QGC、电机设置讲到实操环节这部分才是劝退重灾区。很多人的开发板买回来后第一步不是起飞而是被环境问题卡住三天。6.1 PX4源码仓库提示“子模块未初始化”怎么办搜索热词里有一条非常典型“px4 源码仓库没有初始化子模块 怎么解决”。场景大概是这样的你执行了git clone https://github.com/PX4/PX4-Autopilot.git接着去跑make px4_sitl gazebo结果报出一堆找不到头文件、缺少第三方库的错误。有时候不报错但编译到一半卡死。原因很简单PX4源码仓库使用了很多子模块默认clone并不拉取全部内容。正确做法是git clone https://github.com/PX4/PX4-Autopilot.git cd PX4-Autopilot git submodule update --init --recursive如果子模块特别多或者网络不稳定可以分几次执行git submodule sync git submodule update --init --recursive --jobs 8这里有一个很多人忽略的细节当你切换分支或拉取新代码后子模块版本可能又变了需要再次更新。所以我的习惯是每次开工前先补一句git submodule update --init --recursive能省很多莫名其妙的编译报错。注意如果网络问题导致子模块经常下载失败建议换个时间段、换一个更稳定的网络环境或者用国内已有的镜像仓库不要硬刚一个源的反复下载。6.2 Ubuntu/WSL下搭建PX4环境的三条血泪教训很多热词显示大家爱在Windows上用WSL装PX4做AirSim仿真比如“wsl安装px4”“ubuntu22.04安装px4”。我在WSL环境下踩过的坑主要有三个第一WSL1和WSL2差异巨大。PX4官方推荐WSL2因为WSL1对USB设备支持和实时性都差一点。如果你在WSL1下面跑仿真经常出现端口连不上、图像界面起不来的问题。第二图形界面要靠WSLg或VcXsrv。在WSL2里启动Gazebo时默认需要显示环境变量。如果make px4_sitl gazebo启动后看不到仿真画面多半是DISPLAY没配对。第三OpenGL/渲染库缺失。在纯命令行环境里装Ubuntu再装PX4工具链很容易漏掉xterm、mesa-utils这些依赖。跑Gazebo时黑屏或者崩溃先别怀疑代码先补图形依赖再说。6.3 QGC连接不上飞控按顺序排查“px4链接不上qgc”也是高频问题。飞控明明通了电、连了USBQGC却一直显示“No Heartbeat”。我的排查顺序是安全开关/解锁拨片。很多Pixhawk类板卡有安全开关没有按住或拨到正确位置飞控不会进入可连接状态。串口权限。Linux下常见没有给用户串口权限时QGC能看到串口但打不开。执行sudo usermod -a -G dialout $USER sudo chmod 666 /dev/ttyACM0再重新插拔USB。线材和驱动。数据线不是充电线USB转串口芯片驱动要装好。换线、换口测试是成本最低的排查手段。QGC里手动指定连接端口。如果自动识别失败可以手动选择“添加Link”把URL改为类似/dev/ttyACM0 -b 115200或udp://:14550。这个排查链路适用于PX4也部分适用于ArduPilot搭配Mission Planner的场景不同点在于MP对COM口的自动扫描有时比QGC更激进。6.4 ArduPilot的编译要点和电机设置ArduPilot的源码编译和PX4不完全一样。它是用waf构建系统简单流程是git clone https://github.com/ArduPilot/ardupilot.git cd ardupilot git submodule update --init --recursive ./waf configure --board Pixhawk1 ./waf copter编译完成后刷写固件、连接地面站下一步就是电机设置。热词里的“ardupilot电机设置”其实是很多新手第一道坎。在Mission Planner里主要做两件事一是ESC校准。把所有电机电调信号线接到飞控对应输出口在MP里进入“初始设置”找到“ESC校准”按提示操作确保每个电机的油门范围一致。二是电机方向与测试。在MP的电机测试界面可以单独给某个电机输出油门百分比从而确认电机转向是否正确。四旋翼的电机转向和螺旋桨安装方向必须在起飞前全部确认一遍。我的经验是电机设置这里的坑不在于操作多难而在于很多人刷完固件后急着解锁起飞跳过了方向测试。结果油门一推飞机原地翻车。无论你跑的是APM固件还是PX4固件管道工序都不能省。6.5 版本选型建议稳定比新功能值钱开发中版本选择的一个心得不要追主分支不要追“最新”。PX4方面如果你需要稳定开发建议选带版本的发布包比如v1.12.3或v1.14.3。很多教程直接让你git clone主分支结果今天能过编译、明天社区改个PR就过不了。正确的做法是git clone -b v1.14.3 --recursive https://github.com/PX4/PX4-Autopilot.gitArduPilot同理Copter 4.x系列的稳定版比master分支靠谱得多。特别是正式项目锁定一个版本并把工具链版本记录下来比频繁更新刷存在感重要得多。最后说点实在的我个人的体会是把这四个名字的关系搞清楚比记任何参数都值钱。很多人花几千块买飞控、花几周搭环境最后发现卡住自己的不是技术而是“我到底在用什么体系”。如果你现在准备入手我的建议是硬件买Pixhawk 6C级别的板卡固件先选一套主攻——想学算法和仿真就PX4想快速出项目和花样载具就ArduPilot然后把对应官方文档读一遍再动手编译。四个名字的关系其实不复杂搞清楚之后你会发现后面所有学习路径都顺了。
返回列表