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和依赖

  1. 下载Qt在线安装器,选择Qt 5.15.2版本。注意,Qt 6.x目前QGC支持还不完善,别踩这个坑。
  2. 安装时勾选:MSVC 2019 64-bit、Qt Charts、Qt WebEngine。
  3. 安装Visual Studio 2022 Community版,工作负载选「使用C++的桌面开发」。
  4. 安装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 本章知识体系

下面这张图把本章的核心逻辑串起来了。你对照着看,心里就有谱了。

开发环境搭建知识体系 开发环境搭建核心流程 QGC地面站编译 ArduPilot编译链 SITL仿真环境 Windows: Qt + VS2022 + CMake Linux: apt安装Qt5依赖 Linux: arm-none-eabi-gcc 10.3 Windows: 通过WSL2安装 安装Python + MAVProxy sim_vehicle.py启动仿真 QGC + SITL 联调测试 开始调参与部署实战 建议顺序:先装编译链 → 再编译QGC → 最后配SITL,避免依赖冲突

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,开始真正的调参之旅了。