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分钟。

我的经验: 如果你在中国大陆,建议先配置好apt和pip的国内镜像源。否则下载依赖库时,你会等到怀疑人生。我曾经在客户现场演示时,因为网络问题,脚本跑了快一个小时,场面一度非常尴尬。

3.1.2 手动安装关键组件

有时候一键脚本会失败,尤其是依赖版本冲突。这时候你就得手动来。核心组件就这几个:

  • 交叉编译器: gcc-arm-none-eabi,用于编译STM32固件。
  • 仿真环境: JMAVSim(轻量级)或Gazebo(功能全)。
  • 构建系统: CMake + Ninja。

我建议你装完跑一下这个命令,验证环境是否OK:

make px4_fmu-v5_default

如果编译通过,没有报错,那你的环境就稳了。

避坑指南: 我曾经在Ubuntu 24.04上尝试搭建PX4环境,结果因为Python 3.12与某些旧版库不兼容,折腾了两天。所以,老老实实用LTS版本,别追新。

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里编译,不用双系统,也不用虚拟机。步骤很简单:

  1. 在Windows上安装WSL2,并启用虚拟化。
  2. 从Microsoft Store安装Ubuntu 22.04。
  3. 在WSL终端里,按原生Linux的步骤安装ArduPilot。

你想想看,这样你就能用Windows的IDE(比如VS Code)编辑代码,然后在WSL终端里一键编译。效率很高。

关键区别: PX4的WSL支持不如ArduPilot成熟。PX4的仿真(尤其是Gazebo)在WSL2下跑图形界面时,经常需要额外配置X Server。而ArduPilot的SITL仿真在WSL下几乎开箱即用。所以,如果你必须用Windows,选ArduPilot会更省心。

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 环境搭建流程图

下面这张图,帮你理清两个框架的环境搭建核心流程:

PX4 vs ArduPilot 环境搭建流程 选择飞控框架 PX4:Ubuntu 22.04 运行 ubuntu.sh 脚本 编译测试:make px4_fmu-v5 ArduPilot:WSL/原生 安装依赖 + 更新子模块 编译测试:./waf configure 环境验证通过 提示:PX4推荐原生Ubuntu,ArduPilot在WSL下体验更佳

3.5 我的最终建议

如果你问我怎么选,我的答案很简单:

  • 你主力用Linux,或者想搞深度仿真(Gazebo): 选PX4,原生Ubuntu体验最好。
  • 你主力用Windows,或者想快速上手SITL仿真: 选ArduPilot + WSL2,省心省力。

我个人现在的工作流是:Windows下用VS Code写代码,WSL2里跑ArduPilot的SITL仿真。调试效率很高。但如果你要搞PX4的硬件在环(HITL)测试,我还是建议你切到原生Linux,避免WSL的USB转发问题。

一个小技巧: 不管选哪个框架,装完环境后,第一时间跑一遍官方的仿真示例。这能帮你快速验证整个工具链是否通畅。我曾经见过有人编译通过了,但仿真死活跑不起来,最后发现是Python路径冲突。早验证,早安心。