2. ArduPilot源码编译与环境搭建
说实话,很多初学者一上来就急着写代码,结果卡在环境搭建这一步好几天。我当年也踩过这个坑——Ubuntu装了三遍,编译工具链版本不对,折腾了一周才跑通第一个例程。这节课,咱们就把这些坑一个个填平。
本章核心目标:在Ubuntu系统上完整搭建ArduPilot开发环境,完成首次编译并烧录验证。
2.1 Ubuntu环境配置
我个人习惯用Ubuntu 20.04 LTS,这个版本对ArduPilot的支持最稳定。你问为什么不用最新的22.04?嗯,我在项目里试过,有些依赖包还没完全适配,折腾起来挺费劲的。
基础环境要求:
- 操作系统:Ubuntu 20.04 LTS(推荐)或 22.04 LTS
- 磁盘空间:至少20GB空闲
- 内存:建议8GB以上
- 网络:稳定的互联网连接
我的小技巧:装系统时直接选"中文"语言,省得后面配中文输入法。但终端里建议保持英文环境,避免路径乱码问题。
装完系统第一件事,更新软件源:
sudo apt update
sudo apt upgrade -y
然后安装基础开发工具。这里有个顺序问题——先装git,再装编译工具链。为什么?因为git是下载源码的敲门砖。
sudo apt install git -y
sudo apt install build-essential -y
2.2 ArduPilot源码下载
源码下载看似简单,但选对分支很重要。我在做无人船项目时,一开始用了master分支,结果发现有些导航模块的API还没合并进去,白忙活了两天。
推荐的分支策略:
| 用途 | 分支 | 说明 |
|---|---|---|
| 学习开发 | master | 最新特性,但可能不稳定 |
| 项目应用 | Copter-4.5.x | 稳定版本,经过充分测试 |
| 无人船定制 | master + 自定义补丁 | 基于master做二次开发 |
下载源码:
cd ~
git clone https://github.com/ArduPilot/ardupilot.git
cd ardupilot
git checkout Copter-4.5.7 # 切换到稳定版本
注意:国内网络访问GitHub可能较慢。我曾经试过用代理,但有时会引发SSL证书问题。建议用git的浅克隆(--depth=1)来减少下载量。
2.3 编译工具链安装
ArduPilot支持多种编译工具链,咱们主要用两种:
- 原生编译:直接在Ubuntu上编译,用于SITL仿真测试
- 交叉编译:编译成嵌入式目标代码,用于实际硬件
先装原生编译工具链。ArduPilot官方提供了一个自动化脚本,但我建议手动装——这样你能清楚每个包是干什么的。
# 安装Python依赖
sudo apt install python3-pip python3-dev -y
pip3 install --user empy pyserial
# 安装编译工具
sudo apt install gcc-arm-none-eabi -y # ARM交叉编译器
sudo apt install g++-arm-linux-gnueabihf -y # Linux交叉编译器
验证安装是否成功:
arm-none-eabi-gcc --version
arm-linux-gnueabihf-gcc --version
看到版本号输出,说明装好了。如果提示"command not found",别慌——检查一下环境变量,或者重新安装。
避坑指南:我曾经在Ubuntu 22.04上装arm-none-eabi-gcc,默认源里的版本太旧,编译时总报错。后来从ARM官网下载了最新版手动安装才解决。建议用sudo apt list --upgradable检查一下版本。
2.4 首次编译与烧录验证
终于到了最激动人心的环节。咱们先编译一个最简单的目标——SITL仿真固件。这样即使没有硬件也能验证环境是否正常。
编译SITL固件:
cd ~/ardupilot
./waf configure --board sitl
./waf copter
第一次编译会比较慢,大概10-20分钟。这时候可以去泡杯咖啡。编译过程中如果报错,多半是缺少某个依赖包。看错误信息,缺什么装什么。
编译成功后,你会看到类似这样的输出:
Waf: Leaving directory `/home/user/ardupilot/build/sitl'
'build' finished successfully (12m34s)
接下来,咱们编译一个真实的硬件目标。以Pixhawk为例:
./waf configure --board Pixhawk1
./waf copter
编译完成后,固件文件在build/Pixhawk1/bin/目录下,文件名是arducopter.apj。
2.5 烧录验证
烧录固件有两种方式:
- 通过Mission Planner:连接飞控,在初始设置页面选择固件文件
- 通过命令行:使用
upload命令
我个人更喜欢命令行方式,效率高:
./waf --upload copter
连接飞控前,记得先安装驱动:
sudo apt install modemmanager -y
sudo systemctl disable ModemManager # 避免串口被占用
重要提醒:烧录前一定要确认飞控板型号和编译目标一致。我见过有人把Copter固件烧到固定翼飞控上,结果电机疯狂反转...还好没炸机。
烧录完成后,用串口工具连接飞控,波特率115200。如果看到ArduPilot的启动信息,恭喜你——环境搭建成功了!
2.6 本章知识体系
下面这张图帮你理清整个流程的逻辑关系:
这张图展示了从环境准备到最终验证的完整链路。每一步都环环相扣,缺一不可。我在实际项目中,经常需要反复调试某个环节——比如换了新电脑,或者升级了Ubuntu版本。但只要掌握了这个流程,重新搭建也就是半小时的事。
本章小结:
- Ubuntu 20.04 LTS是最稳妥的选择
- 源码下载注意分支选择,稳定版优先
- 工具链安装要验证版本,避免兼容性问题
- 首次编译建议从SITL开始,确认环境无误后再编译硬件目标
- 烧录前务必确认板型匹配