2. 开发环境搭建:从零开始,让ArduPilot跑起来

说实话,搭建开发环境这件事,看着简单,但坑不少。我见过太多人卡在这一步,源码下载了编译不过,或者仿真跑不起来。别急,咱们一步步来。

我个人习惯用Ubuntu 20.04 LTS,稳定,社区支持也好。你问为什么不用22.04?嗯,ArduPilot对20.04的兼容性验证最充分,我踩过22.04的坑,后面会讲。

2.1 Ubuntu系统安装:选对版本,省一半时间

我建议直接用双系统或者虚拟机。WSL2也能用,但USB设备透传麻烦,调试真机时你会哭的。

方案 优点 缺点 我的建议
双系统 性能最好,硬件直通 切换系统麻烦 主力开发机首选
虚拟机(VMware/VirtualBox) 快照方便,随便折腾 性能损失10-15% 学习阶段够用
WSL2 与Windows集成好 USB/串口支持差 仅限SITL仿真
我的经验: 如果你只是学SITL仿真,虚拟机完全够。我当年用VirtualBox跑了两年,直到开始调实际飞控硬件才换双系统。

2.2 交叉编译工具链配置:ARM GCC的安装

ArduPilot要编译成飞控能跑的二进制,得用交叉编译器。说白了,就是在PC上编译出ARM芯片能执行的代码。

安装命令很简单,但版本要选对:

# 安装ARM GCC编译器
sudo apt-get update
sudo apt-get install gcc-arm-none-eabi

# 验证安装
arm-none-eabi-gcc --version

输出应该类似 arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors) 9.2.1。如果版本太新或太旧,编译ArduPilot时会报奇奇怪怪的错误。

注意: 不要用Ubuntu源里自带的gcc-arm-none-eabi,版本通常太老。我建议去ARM官网下载最新版,或者用PPA源。

我曾经因为编译器版本不对,折腾了一整天。编译报错说某个头文件找不到,换了三个版本才搞定。后来学乖了,直接固定用9.2.1。

2.3 ArduPilot源码下载与编译

源码托管在GitHub上,用git克隆就行。但要注意,ArduPilot仓库很大,包含所有飞控型号和工具链,第一次下载会慢一些。

# 克隆主仓库
git clone https://github.com/ArduPilot/ardupilot.git
cd ardupilot

# 更新子模块(这一步必须做)
git submodule update --init --recursive

子模块更新是很多人忽略的坑。ArduPilot依赖很多第三方库,比如MAVLink协议库、DroneKit等。不更新子模块,编译到一半会报错。

编译Copter固件:

# 以Pixhawk1为例
./waf configure --board Pixhawk1
./waf copter

第一次编译大概要10-20分钟,取决于你的电脑配置。编译成功后,会在 build/Pixhawk1/bin/ 下生成 arducopter.apj 文件。

关键点: ./waf 是ArduPilot的构建系统,类似CMake。它负责管理编译选项、依赖关系和输出文件。记住,每次切换飞控板型号,都要重新执行 ./waf configure。

2.4 SITL仿真环境搭建:在PC上飞无人机

SITL(Software In The Loop)是ArduPilot最强大的功能之一。它让你在没有硬件的情况下,在PC上完整运行飞控代码。说白了,就是软件模拟整个飞控。

安装依赖:

# 安装SITL所需工具
sudo apt-get install python3-pip python3-dev
pip3 install --user pymavlink mavproxy

# 安装图形界面支持(可选)
sudo apt-get install libsdl2-dev

启动SITL仿真:

# 进入ArduPilot目录
cd ardupilot

# 启动Copter SITL
sim_vehicle.py -v ArduCopter --map --console

你会看到一个3D地图窗口和MAVProxy控制台。输入 arm throttle 解锁,然后 takeoff 10,无人机就会起飞到10米高度。

小技巧: 第一次启动SITL时,会自动下载Gazebo或JSBSim仿真模型。如果下载慢,可以手动下载放到 ~/ardupilot/Tools/autotest/models/ 目录下。

我记得第一次跑SITL时,看到虚拟无人机在地图上飞起来,那种感觉真的很奇妙。你可以在PC上测试各种飞行模式、参数调优,甚至模拟GPS丢失、电池耗尽等故障。

2.5 知识体系总览:一张图看懂开发环境

下面这张图展示了整个开发环境的层次关系。从底层系统到上层仿真,每一层都有它的作用。

ArduPilot开发环境架构图 ArduPilot开发环境架构 Ubuntu 20.04 LTS 操作系统 交叉编译工具链 (gcc-arm-none-eabi 9.2.1) ArduPilot 源码 (Git + 子模块) 编译 (./waf) → 固件 .apj SITL 仿真环境 飞控硬件 (Pixhawk/Cube) MAVProxy + 3D视图 左侧路径:编译固件 → 烧录到飞控硬件;右侧路径:SITL仿真 → 在PC上调试

2.6 常见问题与避坑指南

搭建环境时,这几个问题我几乎每次培训都会遇到:

  • git子模块更新失败: 网络问题导致。用 git submodule update --init --recursive --depth 1 只拉取最新版本,减少数据量。
  • 编译报错"Python.h not found": 缺少Python开发头文件。执行 sudo apt-get install python3-dev 解决。
  • SITL启动后地图空白: 一般是网络问题,地图瓦片加载失败。可以离线使用本地地图缓存,或者检查代理设置。
  • 权限问题: 串口设备需要用户权限。把用户加入dialout组:sudo usermod -a -G dialout $USER,然后注销重新登录。
我曾经踩过的坑: 有一次编译Pixhawk1固件,总是报链接错误。查了两天,最后发现是硬盘空间不足,编译过程中临时文件写不进去。所以,确保至少有20GB空闲空间。

好了,环境搭建就这些。你跟着步骤走,应该半小时内能跑起来。如果卡住了,回头看看是不是哪个依赖没装全。记住,环境搭建是基础,基础打牢了,后面学起来才顺。