1. 课程导入

各位同学,欢迎来到《ArduPilot无人机系统部署与测试》的第一章。

今天咱们聊聊 ArduPilot 到底是什么。说白了,它就是一个开源的自动驾驶软件栈。你想想看,一个能让无人机、无人船、甚至地面车辆自己跑起来的系统,居然完全免费,代码随便看——这在十年前我刚开始玩飞控的时候,简直不敢想。

1.1 发展历史:一个学生项目如何成为行业标杆

ArduPilot 的故事要从 2007 年说起。那时候有个叫 Jordi Muñoz 的墨西哥小伙子,他把自己玩的玩具直升机拆了,装上一块 Arduino 开发板,写了几行代码,居然真的飞起来了。后来他和 Chris Anderson(《连线》杂志前主编)一起,把这个项目放到了 DIY Drones 社区。

我记得 2012 年我第一次接触 ArduPilot,那时候还叫 ArduPilot Mega(APM)。硬件是基于 Arduino Mega 2560,性能嘛……说实话挺弱的。但社区的热情让我印象深刻。大家白天上班,晚上熬夜改代码,就为了让自己的四轴飞得更稳一点。

后来 APM 团队和 3D Robotics 公司合作,推出了 Pixhawk 硬件。再后来,ArduPilot 从 APM 时代进化到了现在的 ChibiOS 和 HAL 架构。嗯,这里要注意,ArduPilot 和 PX4 其实是两个不同的项目,虽然它们共用过一些硬件,但代码库和社区是完全分开的。

关键里程碑:

  • 2007 — Jordi Muñoz 在 Arduino 上实现首个自动驾驶原型
  • 2010 — APM 1.0 发布,基于 Arduino Mega
  • 2013 — Pixhawk 硬件诞生,与 PX4 项目合作
  • 2016 — ArduPilot 从 APM 迁移到 ChibiOS 实时操作系统
  • 2020 — 支持 Cube 系列、Here+ RTK 等高端硬件
  • 至今 — 全球最大的开源自动驾驶项目之一,支持超过 20 种载具类型

1.2 核心架构:三层分离,各司其职

ArduPilot 的架构设计,我个人觉得非常优雅。它把整个系统分成了三层:

ArduPilot 核心架构分层图 应用层(Application Layer) ArduPlane · ArduCopter · ArduRover · ArduSub · ArduTracker 载具类型专用逻辑:姿态控制、导航、任务规划 中间层(Middleware Layer) MAVLink 通信协议 · EKF 状态估计 · 参数系统 传感器融合、数据链路、日志记录 硬件抽象层(HAL Layer) ChibiOS / Linux / 裸机驱动 · 外设接口抽象 💡 每一层只通过定义好的接口通信,换硬件不用改上层代码

最上层是应用层。这里跑的是具体的载具类型代码——ArduCopter(多旋翼)、ArduPlane(固定翼)、ArduRover(地面车)、ArduSub(水下机器人)等等。每个载具类型都有自己的控制逻辑,但底层复用了大量公共代码。

中间是中间层。这一层负责传感器融合、状态估计、通信协议。MAVLink 协议就是在这里处理的。我做过一个项目,客户要求把 ArduPilot 的数据通过 4G 网络传到云端,其实就是改中间层的 MAVLink 路由逻辑。

最下面是硬件抽象层(HAL)。这是 ArduPilot 能跑在那么多硬件上的秘密。HAL 把 I2C、SPI、UART、PWM 这些外设接口统一封装了。你换一块飞控板,只要 HAL 层适配好了,上面的代码基本不用动。

我的经验: 刚开始学 ArduPilot 的同学,我建议先从应用层入手。别一上来就啃 HAL 层的驱动代码。先学会怎么调参、怎么刷固件、怎么飞,等你有感觉了,再往下挖底层。我曾经带过一个实习生,上来就研究 ChibiOS 的线程调度,结果两周过去了连飞机都没飞起来……

1.3 支持的硬件平台:从 Pixhawk 到 Cube

ArduPilot 支持的硬件平台非常多。我按性能等级给大家分个类:

硬件平台 处理器 RAM Flash 典型应用
Pixhawk 1 STM32F427 256 KB 2 MB 入门级四轴、固定翼
Pixhawk 4 STM32F765 512 KB 2 MB 中型多旋翼、VTOL
Cube Orange+ STM32H743 1 MB 2 MB 工业级、测绘、物流
Cube Black STM32F427 256 KB 2 MB 科研、教学
Here+ RTK STM32F302 64 KB 512 KB 高精度定位(配合 Cube)
Linux 板卡 Raspberry Pi / Jetson 1-8 GB SD 卡 视觉导航、AI 识别

这里我想多说两句。Pixhawk 1 虽然老,但非常稳定。我手头还有一块 2015 年买的 Pixhawk 1,到现在还在飞。Cube Orange+ 是目前的主力,性能强,接口多,适合做复杂的任务。

另外,ArduPilot 也支持纯 Linux 平台。你可以在树莓派上跑 ArduPilot,配合摄像头做视觉避障。我去年帮一个农业团队做过植保无人机,就是用 Jetson Nano 跑 ArduPilot,加上 YOLO 做作物识别。

避坑指南: 选硬件的时候,别只看处理器主频。我曾经遇到过客户买了一块很贵的板子,结果发现它的 PWM 输出只有 8 路,根本带不动六轴。一定要先确认:你需要多少路 PWM?需要几个串口?要不要 RTK?这些比 CPU 频率重要得多。

1.4 应用场景:ArduPilot 能干什么

ArduPilot 的应用场景,说实话,比大多数人想象的要广。我列几个典型的:

  • 航拍测绘 — 这是最常见的。用 ArduCopter 飞航线,挂个相机或者多光谱传感器,回来拼图。我做过一个项目,用 Cube Orange + Here+ RTK,精度能做到 2 厘米以内。
  • 农业植保 — 喷洒农药、施肥。ArduPilot 支持地形跟随,能贴着山坡飞。这个功能在丘陵地带特别有用。
  • 物流配送 — 小包裹、医疗物资。ArduPilot 有精确降落功能,配合 RTK 可以降在 10 厘米的圈里。
  • 搜索救援 — 挂上热成像相机,自动搜索。我参与过几次山区的搜救演练,ArduPilot 的自主航线飞行能力帮了大忙。
  • 科研教育 — 很多大学用 ArduPilot 做无人机控制算法的研究。代码开源,随便改,随便测。
  • 水下机器人 — ArduSub 支持 ROV 和 AUV。我有个朋友用它做珊瑚礁调查。

你想想看,一个开源项目,从天上到水下,从城市到农田,都能用。这就是 ArduPilot 的魅力。

一句话总结: ArduPilot 不是一个飞控固件,它是一个完整的自动驾驶生态系统。你学会它,就等于掌握了一套能用在几乎所有无人平台上的核心技术。