1. ArduPilot 概述与环境搭建
各位同学好,我是你们的讲师。今天咱们聊聊 ArduPilot 的来龙去脉,以及怎么把开发环境搭起来。
ArduPilot 这个项目,说白了就是一套开源的自动驾驶软件。它能飞、能跑、能游。我最早接触它是在 2015 年,那时候还在用 APM 2.8 飞控板,代码量跟现在比简直是小巫见大巫。
1.1 ArduPilot 发展史
ArduPilot 的故事要从 2007 年讲起。当时有个叫 Jordi Muñoz 的墨西哥小伙,跟 Chris Anderson 一起搞出了最初的 Arduino 飞控。嗯,你没听错,ArduPilot 这个名字里的 "Ardu" 就来自 Arduino。
- 2007-2009:ArduPilot 诞生,基于 8 位 Arduino 板,功能极其简陋
- 2010-2012:APM 1.0/2.0 发布,开始支持多旋翼
- 2013-2015:APM 2.8 成为经典,Pixhawk 硬件出现,代码迁移到 PX4 生态
- 2016-2018:ArduPilot 与 PX4 分家,独立发展,支持 ChibiOS 实时系统
- 2019-至今:支持更多硬件(Cube、Pixhawk 系列、SITL),代码量突破百万行
核心转折点:2016 年 ArduPilot 与 PX4 分家,很多人觉得 ArduPilot 要凉了。结果呢?社区反而更活跃了。我个人觉得,这次分家让 ArduPilot 走出了自己的路——更注重稳定性,更贴近实际工程需求。
1.2 核心架构
ArduPilot 的架构,我习惯把它分成三层:
我刚开始看 ArduPilot 代码时,最头疼的就是 HAL 层。为什么?因为同样的代码,在 Pixhawk 上跑得好好的,换到 Linux 板子上就报错。后来才明白,HAL 层就是干这个的——把硬件差异全部封装起来。
1.3 支持硬件平台
ArduPilot 支持的硬件,我列个表给你看:
| 硬件平台 | 处理器 | 典型型号 | 适用场景 |
|---|---|---|---|
| Pixhawk 系列 | STM32F4/F7/H7 | Pixhawk 1/4/Cube Orange | 多旋翼、固定翼 |
| Linux 板卡 | ARM Cortex-A | Raspberry Pi、BeagleBone | 无人车、无人船 |
| ESP32 | Xtensa LX6 | ESP32 DevKit | 教育、原型验证 |
| SITL | PC 模拟 | Ubuntu/Windows/Mac | 开发调试、算法验证 |
我的建议:初学者别急着买硬件。先用 SITL(Software In The Loop)在电脑上跑起来。我见过太多人,板子买回来发现编译环境都没搭好,结果吃灰三个月。
1.4 Ubuntu 环境搭建
我个人习惯用 Ubuntu 20.04 LTS。为什么?稳定。Ubuntu 22.04 我也试过,有些依赖包版本太新,反而会出问题。
环境搭建分三步走:
- 安装基础依赖:gcc、g++、make、cmake
- 安装 Python 工具链:MAVProxy、pymavlink
- 配置 Git 并拉取代码
具体命令如下:
# 更新系统
sudo apt update
sudo apt upgrade -y
# 安装基础编译工具
sudo apt install -y git build-essential cmake g++-arm-linux-gnueabihf
# 安装 Python 依赖
sudo apt install -y python3 python3-pip python3-dev
pip3 install mavproxy pymavlink
# 拉取 ArduPilot 源码
git clone https://github.com/ArduPilot/ardupilot.git
cd ardupilot
git submodule update --init --recursive
注意:git submodule update --init --recursive 这一步千万别省。我曾经有一次偷懒没执行,结果编译到一半报错找不到头文件,排查了整整两个小时才发现是子模块没拉全。
1.5 编译工具链安装
ArduPilot 的编译工具链,说白了就是交叉编译器。你在 PC 上写代码,编译出来的二进制文件要能在飞控板上跑。
常用的工具链有:
- arm-none-eabi-gcc:用于 Pixhawk 系列(STM32)
- arm-linux-gnueabihf-gcc:用于 Linux 板卡
- gcc:用于 SITL(本地编译)
安装命令:
# 安装 ARM 交叉编译器(Pixhawk 用)
sudo apt install -y gcc-arm-none-eabi
# 验证安装
arm-none-eabi-gcc --version
# 安装 Linux ARM 编译器(树莓派用)
sudo apt install -y g++-arm-linux-gnueabihf
# 验证安装
arm-linux-gnueabihf-gcc --version
装完之后,试试编译一个最简单的目标:
cd ardupilot
./waf configure --board Pixhawk1
./waf copter
第一次编译会比较慢,大概 10-15 分钟。趁这个时间,你可以去泡杯咖啡。
避坑指南:我曾经在 Ubuntu 22.04 上遇到 gcc-arm-none-eabi 版本过新导致编译报错。解决方案是手动安装 9.x 版本:
sudo apt install -y gcc-arm-none-eabi=15:9-2019-q4-0ubuntu1
嗯,版本号就是这么长。别问为什么,问就是兼容性玄学。
1.6 验证环境
编译成功后,你会看到类似这样的输出:
Waf: Leaving directory `/home/user/ardupilot/build/Pixhawk1'
Build commands: 1234
'build' finished successfully (12m34s)
这时候,在 build/Pixhawk1/bin 目录下会生成 arducopter.hex 文件。这就是你要烧录到飞控板上的固件。
如果你想用 SITL 测试:
cd ardupilot
./waf configure --board sitl
./waf copter
cd ArduCopter
../Tools/autotest/sim_vehicle.py -v ArduCopter --map --console
看到 MAVProxy 的终端界面和地图窗口弹出来,恭喜你,环境搭建成功了。
小技巧:SITL 启动后,可以用 mode guided 命令切换到引导模式,然后用 arm throttle 解锁,再用 takeoff 10 让飞机起飞到 10 米高度。试试看,很有意思。
好了,这一章的内容就到这里。环境搭好了,后面的事情就好办了。