1. ArduPilot 概述与生态
各位同学好,我是你们这门课的讲师。在无人机飞控这个圈子里摸爬滚打了十几年,ArduPilot 可以说是我最熟悉的伙伴了。今天咱们先不急着调参数,先把 ArduPilot 这个“大家伙”的来龙去脉搞清楚。你想想看,连它爹妈是谁、家里有几口人都不知道,后面怎么玩得转?
1.1 项目历史:从学生作品到行业标杆
ArduPilot 的故事,得从 2007 年说起。那时候有个叫 Jordi Muñoz 的墨西哥小伙子,跟一群发烧友在 DIY Drones 论坛上瞎折腾。他们用 Arduino 板子加传感器,搞出了最早的自动驾驶仪。说白了,就是想让航模自己飞。
我记得我第一次接触 ArduPilot 是 2012 年,那时候还是 APM 1.0 版本,一个 8 位单片机,算力弱得可怜。但就是这东西,让开源飞控真正走进了大众视野。后来项目发展太快,2013 年成立了 ArduPilot 基金会,代码库也迁移到了 GitHub 上。
关键时间节点:
- 2007年:项目萌芽,基于 Arduino 的早期原型
- 2010年:APM 1.0 发布,支持固定翼
- 2013年:ArduPilot 基金会成立,代码迁移至 GitHub
- 2016年:全面支持 Pixhawk 系列硬件
- 至今:全球最大的开源自动驾驶仪项目之一
为什么它能活下来,而且活得这么好?我个人觉得,核心原因有两个:一是社区够开放,二是代码质量确实过硬。很多商业飞控公司,说白了就是在 ArduPilot 基础上改的。
1.2 支持的硬件平台
ArduPilot 能跑在多少种硬件上?我数过,光官方支持的就有几十种。这里我挑几个最常见的跟大家说说。
| 硬件平台 | 处理器 | 典型应用 | 我的评价 |
|---|---|---|---|
| Pixhawk 1/2/4 | STM32F4/F7/H7 | 多旋翼、固定翼、车船 | 最通用的选择,资料最多 |
| Cube (Pixhawk 2/3/4) | STM32F4/H7 | 工业级、科研用途 | 可靠性高,我项目里用得最多 |
| Here+ / Here3 | STM32F4 | RTK 高精度定位 | 搭配 Cube 用,厘米级精度 |
| Pixracer | STM32F4 | 竞速、小型无人机 | 轻便,但接口少 |
| Navio2 (树莓派) | BCM2837 | Linux 环境、教学 | 适合折腾,但实时性一般 |
嗯,这里要注意一点:不是所有硬件都能跑所有固件。比如 Pixracer 跑 Copter 没问题,但跑 Plane 就有点吃力。我建议新手直接上 Pixhawk 4 或者 Cube Orange,省心。
避坑指南: 我曾经遇到过有人用山寨版 Pixhawk 刷最新固件,结果传感器校准死活过不去。后来发现是硬件克隆不完整,EEPROM 里缺参数。所以,买硬件尽量走官方渠道,或者至少买经过认证的兼容版。
1.3 软件架构概览
ArduPilot 的软件架构,说白了就是一套代码,适配不同机型。它通过编译时的宏定义,把通用框架和特定机型的逻辑分开。我画了张图,你们一看就明白。
你看,最上层是 APM:Copter、Plane、Rover、Sub 这四个“孩子”。它们共享底层的核心库和硬件抽象层。这样做的好处是:你学会调 Copter 的参数,换到 Plane 上,很多概念是相通的。
1.3.1 APM:Copter(多旋翼)
这是最火的机型,没有之一。从四轴到八轴,从 250 穿越机到农业植保机,都能跑。我个人的经验是,Copter 的调参最复杂,因为姿态控制要求高。后面咱们会花大量时间讲它。
1.3.2 APM:Plane(固定翼)
固定翼的飞控逻辑跟旋翼完全不同。它需要考虑空速、迎角、滑翔等。Plane 的代码里有很多气动模型,我当年为了搞懂它,啃了不少空气动力学的书。
1.3.3 APM:Rover(无人车/船)
这个相对简单,因为只有前后左右,没有俯仰和横滚。但别小看它,在复杂地形下,Rover 的路径规划算法也挺有意思。
1.3.4 APM:Sub(水下潜航器)
Sub 是最小众的,但技术含量不低。水下通信延迟大,GPS 用不了,全靠惯性导航和压力传感器。我做过一个水下项目,那真是...一言难尽,后面有机会再聊。
1.4 固件编译与烧录基础
说到编译,很多新手一听就头大。其实没那么玄乎。ArduPilot 的编译环境,说白了就是一套基于 Python 和 GCC 的工具链。
我的建议: 如果你只是调参,直接用官方编译好的固件就行,没必要自己编译。但如果你想改代码、加功能,那还是得学会编译。我一般用 WSL (Windows Subsystem for Linux) 来编译,比虚拟机快不少。
编译的基本流程是这样的:
- 准备环境:安装 Git、Python、ARM GCC 编译器
- 拉取代码:
git clone https://github.com/ArduPilot/ardupilot.git - 更新子模块:
git submodule update --init --recursive - 选择机型:比如编译 Copter,进入
ArduCopter目录 - 配置:
./waf configure --board Pixhawk4 - 编译:
./waf copter - 烧录:用 Mission Planner 或 QGroundControl 上传固件
这里我特别想强调一下 ./waf 这个工具。它是 ArduPilot 的构建系统,说白了就是帮你管理编译过程的。我第一次用的时候,忘了加 --board 参数,结果编译出来的是默认的 Pixhawk1 固件,刷到 Pixhawk4 上直接变砖。嗯,从那以后我再也不敢马虎了。
警告: 烧录固件前,一定要确认板子型号和固件版本匹配。特别是用 Mission Planner 自动下载固件时,它会根据你连接的飞控自动推荐,但偶尔也会翻车。我建议手动选择固件文件,确保万无一失。
烧录完成后,第一次上电,你会听到飞控发出“滴-滴-滴”的提示音。这时候别急着飞,先做传感器校准。这个咱们下一章会详细讲。
好了,第一章的内容就到这里。ArduPilot 的世界很大,咱们慢慢探索。记住,调参不是目的,让飞机安全、稳定地飞起来才是。后面我会带着大家一步步深入,把每个参数都吃透。