2. 开发环境搭建:Windows/Linux下QGC源码编译、ArduPilot固件编译链安装、SITL软件在环仿真环境配置
说实话,很多初学者一上来就急着调参数、改代码,结果环境没搭好,编译报错一堆,半天都跑不起来。我见过太多人卡在这一步了。环境搭建这事儿,说白了就是打地基。地基不稳,后面全是坑。
这一章,我会把Windows和Linux两套环境都讲清楚。你根据自己的情况选一套就行。我个人更推荐Linux,尤其是Ubuntu 20.04或22.04,因为ArduPilot的官方支持最好,踩坑最少。但如果你只有Windows机器,也别慌,照样能跑起来。
核心要点:本章要搞定三件事——QGC地面站源码编译、ArduPilot固件编译链安装、SITL软件在环仿真。这三件事的顺序不要搞反。先装编译链,再编译QGC,最后配SITL。
2.1 环境概览:你需要什么?
先列个清单,看看你电脑上需要准备哪些东西。我建议你对照着检查一遍,缺什么补什么。
| 组件 | Windows | Linux (Ubuntu 20.04+) |
|---|---|---|
| 操作系统 | Windows 10/11 64位 | Ubuntu 20.04 / 22.04 LTS |
| Git | Git for Windows | sudo apt install git |
| Python | Python 3.8+ (推荐3.10) | Python 3.8+ (系统自带) |
| C++ 编译链 | Visual Studio 2022 + CMake | g++ / clang + CMake |
| ArduPilot 编译链 | WSL2 + Ubuntu + arm-none-eabi-gcc | arm-none-eabi-gcc (原生) |
| 磁盘空间 | 至少 30GB 空闲 | 至少 20GB 空闲 |
| 内存 | 16GB 以上 | 8GB 以上 |
我的建议:如果你用Windows,强烈建议装WSL2。我在项目里试过直接在Windows上编译ArduPilot,那叫一个折腾。WSL2下跑Ubuntu,体验跟原生Linux几乎一样,省心很多。
2.2 QGC源码编译:Windows篇
QGC(QGroundControl)是PX4和ArduPilot通用的地面站。编译它需要Qt环境和一些依赖库。我一步步说清楚。
2.2.1 安装Qt和依赖
- 下载Qt在线安装器,选择Qt 5.15.2版本。注意,Qt 6.x目前QGC支持还不完善,别踩这个坑。
- 安装时勾选:MSVC 2019 64-bit、Qt Charts、Qt WebEngine。
- 安装Visual Studio 2022 Community版,工作负载选「使用C++的桌面开发」。
- 安装CMake,并确保加入系统PATH。
我曾经踩过的坑:Qt安装时没选WebEngine,结果编译到一半报错找不到QtWebEngineWidgets。回头重装Qt又花了半小时。所以安装时一定仔细勾选,别偷懒。
2.2.2 拉取源码并编译
# 打开命令行,克隆QGC源码
git clone --recursive https://github.com/mavlink/qgroundcontrol.git
cd qgroundcontrol
# 创建构建目录
mkdir build
cd build
# 配置CMake(注意Qt路径要改成你自己的)
cmake .. -G "Visual Studio 17 2022" -A x64 ^
-DCMAKE_PREFIX_PATH=C:/Qt/5.15.2/msvc2019_64
# 编译(-j后面的数字是你的CPU核心数,别设太大)
cmake --build . --config Release --parallel 4
编译完成后,在 build/release 目录下就能找到 QGroundControl.exe。双击就能跑起来。
2.3 QGC源码编译:Linux篇
Linux下编译QGC其实更简单。Ubuntu的包管理器能帮你搞定大部分依赖。
# 安装依赖
sudo apt update
sudo apt install -y build-essential cmake git
sudo apt install -y qt5-default qt5-qmake qttools5-dev-tools
sudo apt install -y libqt5serialport5-dev libqt5svg5-dev
sudo apt install -y libqt5websockets5-dev libqt5opengl5-dev
sudo apt install -y qtwebengine5-dev libqt5webchannel5-dev
# 克隆源码
git clone --recursive https://github.com/mavlink/qgroundcontrol.git
cd qgroundcontrol
# 创建构建目录
mkdir build && cd build
# 配置并编译
cmake ..
make -j$(nproc)
编译完,在 build/release 下找到 QGroundControl 可执行文件。我习惯把它软链接到 /usr/local/bin,方便终端启动。
小技巧:如果你在Ubuntu 22.04上编译,可能会遇到Qt5包名变化的问题。用 apt search qt5 找一下实际包名,别硬套20.04的命令。
2.4 ArduPilot固件编译链安装
编译ArduPilot固件,核心是装好交叉编译工具链。因为我们要编译的是飞控板(比如Pixhawk)上跑的代码,不是PC上的程序。
2.4.1 Linux下安装
ArduPilot官方提供了一个一键安装脚本,但我更喜欢手动装,因为能清楚知道装了些什么。
# 下载ARM交叉编译链
wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/10.3-2021.10/gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2
# 解压到 /opt 目录
sudo tar xjf gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2 -C /opt/
# 添加环境变量
echo 'export PATH=$PATH:/opt/gcc-arm-none-eabi-10.3-2021.10/bin' >> ~/.bashrc
source ~/.bashrc
# 验证安装
arm-none-eabi-gcc --version
看到版本号输出,就说明装好了。我用的版本是10.3,太老的版本可能不支持新固件,太新的版本可能有兼容性问题。
2.4.2 Windows下安装(通过WSL2)
Windows用户我建议走WSL2路线。在WSL2的Ubuntu里,步骤跟上面Linux完全一样。装好后,你可以在Windows的VSCode里连接WSL2写代码,编译也在WSL2里执行。
注意:别尝试在Windows原生环境下装arm-none-eabi-gcc。我试过用MinGW和Cygwin,各种路径问题、链接错误,折腾了两天没搞定。WSL2是正解。
2.5 SITL软件在环仿真环境配置
SITL(Software In The Loop)是ArduPilot最强大的调试工具之一。它让你在没有硬件飞控板的情况下,在PC上直接运行飞控固件,配合QGC进行调参和测试。
2.5.1 安装SITL依赖
SITL需要Python和一些库。ArduPilot的代码库里自带了一个安装脚本。
# 克隆ArduPilot源码
git clone https://github.com/ArduPilot/ardupilot.git
cd ardupilot
# 更新子模块
git submodule update --init --recursive
# 安装Python依赖
pip install -r requirements.txt
# 运行安装脚本(会自动装MAVProxy等工具)
python Tools/environment_install/install-prereqs-ubuntu.sh -y
# 重新加载环境
source ~/.bashrc
装完后,验证一下MAVProxy是否可用:
mavproxy.py --version
2.5.2 启动SITL仿真
启动SITL其实就一条命令。我以Copter为例:
cd ardupilot
sim_vehicle.py -v ArduCopter --map --console
这条命令会做三件事:
- 编译ArduCopter固件(第一次会慢一些,后面有缓存就快了)
- 启动SITL仿真器,默认在UDP 14550端口监听
- 打开MAVProxy控制台和地图界面
这时候你打开QGC,在通信设置里添加UDP连接,端口填14550,就能看到仿真飞机了。
实战经验:我第一次跑SITL时,QGC一直连不上。后来发现是防火墙把UDP端口拦了。把14550和14551两个端口放行,问题就解决了。如果你连不上,先查防火墙。
2.6 本章知识体系
下面这张图把本章的核心逻辑串起来了。你对照着看,心里就有谱了。
2.7 常见问题与避坑
环境搭建过程中,有几个问题几乎每个人都会遇到。我列出来,你遇到了直接对照解决。
| 问题 | 原因 | 解决方法 |
|---|---|---|
| QGC编译报错找不到Qt模块 | Qt安装时没勾选WebEngine或Charts | 重新运行Qt安装器,补装缺失模块 |
| arm-none-eabi-gcc: command not found | 环境变量没加或路径不对 | 检查 ~/.bashrc 中的PATH设置,重新 source |
| SITL启动后QGC连不上 | 防火墙拦截UDP端口 | 放行UDP 14550和14551端口 |
| git submodule更新失败 | 网络问题或子模块仓库地址变更 | 使用代理,或手动逐个克隆子模块 |
| Windows下编译QGC速度极慢 | 杀毒软件实时扫描编译文件 | 将build目录加入杀毒软件排除列表 |
重要提醒:如果你在Windows上用WSL2,记得把ArduPilot源码放在WSL2的文件系统里(比如 /home/yourname/),不要放在 /mnt/c/ 下。跨文件系统操作会导致编译速度慢一个数量级,我亲测过。
好了,环境搭建这部分就这些内容。你按照上面的步骤走,应该不会出大问题。如果卡住了,回头看看表格里的常见问题,大部分都能解决。接下来,你就可以打开QGC,连上SITL,开始真正的调参之旅了。