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 烧录验证

烧录固件有两种方式:

  1. 通过Mission Planner:连接飞控,在初始设置页面选择固件文件
  2. 通过命令行:使用upload命令

我个人更喜欢命令行方式,效率高:

./waf --upload copter

连接飞控前,记得先安装驱动:

sudo apt install modemmanager -y
sudo systemctl disable ModemManager  # 避免串口被占用

重要提醒:烧录前一定要确认飞控板型号和编译目标一致。我见过有人把Copter固件烧到固定翼飞控上,结果电机疯狂反转...还好没炸机。

烧录完成后,用串口工具连接飞控,波特率115200。如果看到ArduPilot的启动信息,恭喜你——环境搭建成功了!

2.6 本章知识体系

下面这张图帮你理清整个流程的逻辑关系:

ArduPilot环境搭建知识体系 Ubuntu环境配置 源码下载 工具链安装 首次编译 SITL仿真编译 → 硬件目标编译 烧录验证 Mission Planner烧录 | 命令行烧录 ✅ 开发环境就绪

这张图展示了从环境准备到最终验证的完整链路。每一步都环环相扣,缺一不可。我在实际项目中,经常需要反复调试某个环节——比如换了新电脑,或者升级了Ubuntu版本。但只要掌握了这个流程,重新搭建也就是半小时的事。

本章小结:

  • Ubuntu 20.04 LTS是最稳妥的选择
  • 源码下载注意分支选择,稳定版优先
  • 工具链安装要验证版本,避免兼容性问题
  • 首次编译建议从SITL开始,确认环境无误后再编译硬件目标
  • 烧录前务必确认板型匹配

专注资料整理