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仿真 |
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时会报奇奇怪怪的错误。
我曾经因为编译器版本不对,折腾了一整天。编译报错说某个头文件找不到,换了三个版本才搞定。后来学乖了,直接固定用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米高度。
~/ardupilot/Tools/autotest/models/ 目录下。
我记得第一次跑SITL时,看到虚拟无人机在地图上飞起来,那种感觉真的很奇妙。你可以在PC上测试各种飞行模式、参数调优,甚至模拟GPS丢失、电池耗尽等故障。
2.5 知识体系总览:一张图看懂开发环境
下面这张图展示了整个开发环境的层次关系。从底层系统到上层仿真,每一层都有它的作用。
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,然后注销重新登录。
好了,环境搭建就这些。你跟着步骤走,应该半小时内能跑起来。如果卡住了,回头看看是不是哪个依赖没装全。记住,环境搭建是基础,基础打牢了,后面学起来才顺。