3. 开发环境搭建:PX4的Ubuntu+PX4 Toolchain vs ArduPilot的WSL/原生Linux
说实话,很多初学者在选飞控框架时,第一步就被开发环境劝退了。我见过不少人,下载了源码,折腾了两天环境还没跑起来,直接放弃了。
这一章,我就带你走一遍这两个框架的环境搭建流程。我会把我在项目中踩过的坑、总结的经验都抖出来。你跟着走,基本不会卡住。
3.1 PX4:Ubuntu + PX4 Toolchain
PX4官方推荐的环境是Ubuntu 20.04或22.04 LTS。为什么?因为它的工具链依赖库在Debian系上最稳定。我个人习惯用22.04,但如果你用20.04,也完全没问题。
3.1.1 一键安装脚本
PX4提供了一个自动化脚本,能省掉你80%的配置时间。你打开终端,直接跑:
git clone https://github.com/PX4/PX4-Autopilot.git --recursive
cd PX4-Autopilot
bash ./Tools/setup/ubuntu.sh
这个脚本会帮你装好gcc-arm-none-eabi编译器、Java(用于JMAVSim仿真)、Python依赖等等。嗯,这里要注意:脚本执行时间取决于你的网速,大概10到30分钟。
3.1.2 手动安装关键组件
有时候一键脚本会失败,尤其是依赖版本冲突。这时候你就得手动来。核心组件就这几个:
- 交叉编译器:
gcc-arm-none-eabi,用于编译STM32固件。 - 仿真环境: JMAVSim(轻量级)或Gazebo(功能全)。
- 构建系统: CMake + Ninja。
我建议你装完跑一下这个命令,验证环境是否OK:
make px4_fmu-v5_default
如果编译通过,没有报错,那你的环境就稳了。
3.2 ArduPilot:WSL / 原生Linux
ArduPilot的搭建方式更灵活。你可以在原生Linux上搞,也可以用Windows的WSL(Windows Subsystem for Linux)。我个人更推荐WSL,尤其是你主力机是Windows的时候。
3.2.1 原生Linux安装
如果你有Ubuntu系统,那直接装依赖就行。ArduPilot官方也提供了安装脚本:
git clone https://github.com/ArduPilot/ardupilot.git
cd ardupilot
git submodule update --init --recursive
./Tools/environment_install/install-prereqs-ubuntu.sh -y
这个脚本会装好g++-arm-linux-gnueabihf等交叉编译工具。注意,ArduPilot的依赖比PX4稍微少一些,但它的子模块(submodule)特别多,下载时一定要确保网络稳定。
3.2.2 WSL2搭建(我的主力方案)
为什么我推荐WSL2?说白了,就是方便。你可以在Windows下写代码,在WSL里编译,不用双系统,也不用虚拟机。步骤很简单:
- 在Windows上安装WSL2,并启用虚拟化。
- 从Microsoft Store安装Ubuntu 22.04。
- 在WSL终端里,按原生Linux的步骤安装ArduPilot。
你想想看,这样你就能用Windows的IDE(比如VS Code)编辑代码,然后在WSL终端里一键编译。效率很高。
3.3 核心差异对比
我把两个框架的环境搭建关键点整理成了表格,方便你对比:
| 对比维度 | PX4 | ArduPilot |
|---|---|---|
| 推荐OS | Ubuntu 20.04 / 22.04 LTS | Ubuntu 20.04+ / WSL2 |
| 安装复杂度 | 中等(一键脚本,但依赖多) | 较低(脚本简洁,子模块多) |
| 仿真环境 | JMAVSim / Gazebo | SITL(内置) |
| Windows支持 | 差(WSL下Gazebo需额外配置) | 好(WSL下SITL开箱即用) |
| 编译速度 | 较快(Ninja并行编译) | 中等(Makefile,可配置并行) |
| 典型坑点 | Python版本冲突、子模块下载失败 | git子模块递归更新失败 |
3.4 环境搭建流程图
下面这张图,帮你理清两个框架的环境搭建核心流程:
3.5 我的最终建议
如果你问我怎么选,我的答案很简单:
- 你主力用Linux,或者想搞深度仿真(Gazebo): 选PX4,原生Ubuntu体验最好。
- 你主力用Windows,或者想快速上手SITL仿真: 选ArduPilot + WSL2,省心省力。
我个人现在的工作流是:Windows下用VS Code写代码,WSL2里跑ArduPilot的SITL仿真。调试效率很高。但如果你要搞PX4的硬件在环(HITL)测试,我还是建议你切到原生Linux,避免WSL的USB转发问题。