2. 开发环境搭建:Windows/Linux下ArduPilot源码编译、QGC安装与配置、SITL仿真环境搭建

说实话,搞飞控开发,环境搭建是第一道坎。很多人兴致勃勃地下载了源码,结果编译报错一堆,直接劝退。我当年也在这上面折腾了两三天,后来摸清了门道,其实就那么几步。

这一章,我会带你走一遍完整的流程。无论你用 Windows 还是 Linux,都能跑起来。咱们的目标很简单:让 ArduPilot 在电脑里飞起来,QGC 能连上它。

核心逻辑:源码编译 → SITL 仿真 → QGC 地面站连接。这三步串起来,你就有了一个完整的开发闭环。

开发环境搭建流程 1. 获取源码 git clone 2. 配置工具链 Python / GCC / MAVProxy 3. 编译固件 ./waf configure / build 4. 启动 SITL sim_vehicle.py 5. QGC 连接 UDP :14550 6. 验证飞行 航点测试 💡 建议:先跑通 SITL 再折腾硬件,调试效率能提升 10 倍

2.1 在 Linux 下编译 ArduPilot

我个人强烈推荐用 Linux 做开发。Ubuntu 22.04 或 20.04 都行,我目前主力机就是 22.04。Windows 也能搞,但坑多一些,咱们后面再说。

2.1.1 安装依赖

先把基础工具装好。打开终端,一行一行来:

sudo apt update
sudo apt install git python3-pip python3-venv
sudo apt install gcc-arm-none-eabi
sudo apt install libtool automake autoconf libexpat1-dev

嗯,这里要注意。gcc-arm-none-eabi 这个包有时候版本比较老。如果你编译报错说编译器版本太低,可以去 ARM 官网下最新的。

我的习惯:装完依赖后,先跑一遍 arm-none-eabi-gcc --version 确认版本。低于 10.3 的建议升级。

2.1.2 获取源码

找个干净的目录,比如 ~/ardupilot:

cd ~
git clone https://github.com/ArduPilot/ardupilot.git
cd ardupilot
git submodule update --init --recursive

这一步会下载所有子模块,大概 1-2 个 G。网速慢的话,可以加个 --depth=1 只拉最新版本。

2.1.3 安装 Python 环境

ArduPilot 的构建系统依赖 Python。我建议用虚拟环境,避免污染系统 Python:

python3 -m venv ~/ardupilot_venv
source ~/ardupilot_venv/bin/activate
pip install --upgrade pip
pip install -r ~/ardupilot/Tools/requirements.txt

记得每次打开新终端都要 source 一下虚拟环境。或者直接写到 .bashrc 里:

echo "source ~/ardupilot_venv/bin/activate" >> ~/.bashrc

2.1.4 编译固件

终于到编译这一步了。以 Copter 为例:

cd ~/ardupilot
./waf configure --board sitl
./waf copter

第一次编译会比较慢,大概 10-20 分钟。我建议泡杯咖啡等着。编译成功后,你会看到 build/sitl/bin/arducopter 这个文件。

我曾经踩过的坑:如果编译中途报错 ModuleNotFoundError: No module named 'future',别慌。直接 pip install future 就行。这是 Python 依赖没装全的老问题了。

2.2 Windows 下的编译方案

Windows 下我试过两种方式:WSL2 和 MSYS2。说实话,WSL2 体验更好,跟 Linux 几乎一样。

2.2.1 方案一:WSL2(推荐)

先在 Windows 里装好 WSL2,然后开一个 Ubuntu 终端。后面的步骤跟 Linux 完全一样。唯一的区别是:

  • 源码放在 WSL 的文件系统里(比如 /home/yourname/ardupilot)
  • QGC 跑在 Windows 桌面端,通过 UDP 连接 WSL 里的 SITL

2.2.2 方案二:MSYS2(备选)

如果你不想用 WSL,MSYS2 也能编译。但我不太推荐,因为环境配置比较繁琐。简单说下步骤:

  1. 安装 MSYS2,打开 MSYS2 MinGW 64-bit 终端
  2. pacman -S git mingw-w64-x86_64-gcc python3
  3. 后面的 git clone 和编译命令跟 Linux 一样

不过 MSYS2 下的 SITL 网络配置有点麻烦,我建议还是用 WSL2。

2.3 QGC 安装与配置

QGroundControl 是咱们的主力地面站。下载安装很简单,但有几个配置点需要注意。

2.3.1 下载安装

去 QGC 官网下载对应系统的安装包:

系统 安装方式 备注
Windows 下载 .exe 安装包,双击安装 建议装到 C 盘默认路径
Linux 下载 AppImage,chmod +x 后运行 需要安装 libfuse2
macOS 下载 .dmg 安装包 注意系统版本兼容性

2.3.2 配置通信连接

QGC 默认监听 UDP 14550 端口。咱们的 SITL 仿真也是默认往这个端口发数据。所以理论上,启动 SITL 后,QGC 会自动连接。

但如果你发现连不上,可以手动添加一个连接:

  1. 打开 QGC,点击左上角「Q」图标
  2. 选择「应用设置」→「通信连接」
  3. 点击「添加」,类型选「UDP」,端口填 14550
  4. 点击「连接」

一个小技巧:如果你用 WSL2,QGC 在 Windows 里,SITL 在 WSL 里。这时候需要把 WSL 的 UDP 端口转发出来。在 WSL 终端里执行:socat UDP-LISTEN:14550,fork UDP:localhost:14550。或者直接用 --instance 0 参数启动 SITL。

2.4 SITL 仿真环境搭建

SITL(Software In The Loop)是咱们调试的核心工具。它让 ArduPilot 在电脑里模拟一架无人机,不需要任何硬件。

2.4.1 启动 SITL

编译完成后,启动仿真只需要一行命令:

cd ~/ardupilot
sim_vehicle.py -v ArduCopter --map --console

参数说明:

  • -v ArduCopter:指定机型,也可以换成 ArduPlane 或 ArduSub
  • --map:打开地图窗口,能看到飞机位置
  • --console:打开控制台,显示实时日志

启动后,你会看到一堆初始化信息。等几秒钟,终端出现 Ready to fly 就说明成功了。

2.4.2 常用仿真参数

我平时调试会用这几个参数组合:

参数 作用 使用场景
--speedup 10 仿真速度加速 10 倍 长时间航点测试
--wind 5 90 模拟 5m/s 东风 抗风性能测试
--gimbal 启用云台仿真 云台控制调试
--instance 0 指定实例编号 多机仿真

2.4.3 验证连接

SITL 启动后,打开 QGC。正常情况下,QGC 会自动弹出连接提示。你会看到:

  • 地图上出现一架蓝色飞机图标
  • 左上角显示「已连接」
  • 姿态仪表开始实时更新

如果没连上,检查一下防火墙。我遇到过好几次 Windows 防火墙把 UDP 端口拦了。

注意:SITL 默认使用 UDP 14550 端口。如果你同时开了多个实例,记得用 --instance 参数区分端口,比如 --instance 1 会使用 14551 端口。

2.5 避坑指南

这些年帮不少人搭过环境,总结几个高频问题:

  1. 编译报错找不到 Python 模块:多半是虚拟环境没激活,或者 requirements.txt 没装全。重新 pip install -r 一遍。
  2. SITL 启动后 QGC 连不上:先 ping localhost 确认网络通。再检查 QGC 的通信设置,UDP 端口是不是 14550。
  3. Windows 下 WSL2 网络不通:试试 socat 转发,或者把 QGC 装到 WSL2 的 Ubuntu 里(用 --no-sandbox 参数启动)。
  4. 编译特别慢:第一次编译是慢。后面改代码后,用 ./waf build --target=arducopter 只编译改动的部分,会快很多。