2. 开发环境搭建:Windows/Linux下ArduPilot源码编译、QGC安装与配置、SITL仿真环境搭建
说实话,搞飞控开发,环境搭建是第一道坎。很多人兴致勃勃地下载了源码,结果编译报错一堆,直接劝退。我当年也在这上面折腾了两三天,后来摸清了门道,其实就那么几步。
这一章,我会带你走一遍完整的流程。无论你用 Windows 还是 Linux,都能跑起来。咱们的目标很简单:让 ArduPilot 在电脑里飞起来,QGC 能连上它。
核心逻辑:源码编译 → SITL 仿真 → QGC 地面站连接。这三步串起来,你就有了一个完整的开发闭环。
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 也能编译。但我不太推荐,因为环境配置比较繁琐。简单说下步骤:
- 安装 MSYS2,打开 MSYS2 MinGW 64-bit 终端
pacman -S git mingw-w64-x86_64-gcc python3- 后面的 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 会自动连接。
但如果你发现连不上,可以手动添加一个连接:
- 打开 QGC,点击左上角「Q」图标
- 选择「应用设置」→「通信连接」
- 点击「添加」,类型选「UDP」,端口填 14550
- 点击「连接」
一个小技巧:如果你用 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 避坑指南
这些年帮不少人搭过环境,总结几个高频问题:
- 编译报错找不到 Python 模块:多半是虚拟环境没激活,或者
requirements.txt没装全。重新pip install -r一遍。 - SITL 启动后 QGC 连不上:先
ping localhost确认网络通。再检查 QGC 的通信设置,UDP 端口是不是 14550。 - Windows 下 WSL2 网络不通:试试
socat转发,或者把 QGC 装到 WSL2 的 Ubuntu 里(用--no-sandbox参数启动)。 - 编译特别慢:第一次编译是慢。后面改代码后,用
./waf build --target=arducopter只编译改动的部分,会快很多。