1. ArduPilot 生态全景:从历史到实战工具链

各位同学,欢迎来到《基于ArduPilot的自主任务规划实战》的第一章。

在正式开始写代码、调参数之前,我觉得有必要先带大家看看ArduPilot的全貌。说白了,你得知道自己手里拿的是一把什么样的工具,它从哪来,能干什么,以及怎么把它装好。

我接触ArduPilot大概有七八年了。记得第一次在淘宝上买了一块Pixhawk,连上Mission Planner,看着那个3D地图上飞机模型在动,说实话,挺震撼的。但后来踩的坑也不少——比如选错了固件版本,或者地面站版本不兼容导致参数写不进去。所以这一章,我希望能帮你把基础打牢。

本章核心目标:搞懂ArduPilot的来龙去脉,选对硬件,装好地面站。别急着飞,先把枪擦亮。

1.1 ArduPilot 的历史与社区

ArduPilot最早可以追溯到2007年。那时候还没有Pixhawk,大家用的是Arduino Mega加一堆传感器自己焊。创始人Chris Anderson和Jordi Muñoz最初只是想做一个能自动飞行的固定翼,结果做着做着,就变成了一个开源自动驾驶仪项目。

2010年,APM(ArduPilot Mega)固件正式发布。2012年,PX4团队和3DR联合推出了Pixhawk硬件,ArduPilot开始移植到更强大的STM32平台上。2015年之后,ArduPilot和PX4分家,各自独立发展。到今天,ArduPilot已经支持超过20种载具类型,从多旋翼、固定翼、直升机,到无人车、无人船、水下潜航器,甚至潜艇。

社区方面,ArduPilot的开发者遍布全球。核心维护团队大概有20多人,但贡献者超过500人。我个人的经验是,遇到问题先去 discuss.ardupilot.org 搜一搜,90%的问题都能找到答案。剩下的10%,你可以去GitHub提issue,但记得先看CONTRIBUTING文档。

一个小建议:加入ArduPilot的Slack频道或者Discord群。很多实时问题,群里的大佬几分钟就能给你指条明路。我曾经在凌晨两点调一个EKF报错,就是在Slack上被一个澳洲老哥远程指导搞定的。

1.2 支持的硬件平台

ArduPilot支持的硬件非常多,但咱们课程里主要用三类:Pixhawk系列、Cube系列,以及Here+ RTK GPS。下面这张表帮你快速区分:

硬件平台 处理器 传感器冗余 推荐场景 我的评价
Pixhawk 1 (FMUv2) STM32F427 双IMU+双磁力计 入门学习、小型无人机 经典款,但内存小,别装太多功能
Pixhawk 4 (FMUv5) STM32F765 双IMU+双气压计 中型无人机、科研项目 性价比高,我目前的主力板
Cube Orange (FMUv5) STM32F765 三冗余IMU+双气压计 工业级、高可靠性场景 贵,但稳。做测绘项目我必用它
Here+ RTK u-blox F9P 双天线RTK 厘米级定位、精准着陆 配合Cube Orange,定位精度能到2cm

嗯,这里要注意一点:不是所有硬件都支持最新的ArduPilot固件。比如Pixhawk 1(FMUv2)因为Flash只有1MB,从Copter 4.0之后就不再支持新功能了。我建议新手直接买Pixhawk 4或者Cube Orange,省心。

避坑指南:我曾经帮一个学生调试,他买了一块“Pixhawk 2.4.8”,结果刷固件时死活刷不进去。后来发现那是山寨版,用的不是原装STM32芯片。记住,买硬件认准Holybro或CubePilot官方渠道,别贪便宜。

1.3 软件架构概览

ArduPilot的软件架构,说白了就是三层:应用层、中间层、硬件抽象层。我画了一张图,帮你理清关系:

ArduPilot 软件架构概览 ArduPilot 软件架构分层图 应用层 (Application Layer) Copter / Plane / Rover / Sub / AntennaTracker 任务规划、姿态控制、导航、遥测 中间层 (Middleware) APM 库 / 调度器 / 参数系统 / MAVLink 通信 EKF 融合、地理围栏、RTL 逻辑 硬件抽象层 (HAL) ChibiOS / NuttX / Linux / 裸机驱动 GPIO、I2C、SPI、UART、PWM、ADC 实时操作系统:ChibiOS 是默认 RTOS,NuttX 用于 Pixhawk 1 旧版,Linux 用于树莓派等平台 APM 库提供数学工具、滤波器、控制器等基础模块

你想想看,最底层的HAL把硬件差异都封装好了。所以你在写应用代码时,根本不用管底层是STM32还是树莓派。这就是ArduPilot能跨平台的原因。

关于实时操作系统,ArduPilot目前主推ChibiOS。它比老版的NuttX更轻量,中断响应更快。我记得从Copter 3.6开始,官方就建议新项目用ChibiOS了。如果你还在用NuttX,我建议尽快迁移。

一个调试技巧:在ChibiOS下,你可以通过MAVLink的SYSTEM_TIME消息查看系统Tick。如果发现Tick抖动超过1ms,说明你的任务循环里有阻塞操作。我曾经遇到过因为I2C读取超时导致整个调度器卡住的情况,后来加了超时重试就解决了。

1.4 地面站选择与安装

地面站就是你的指挥中心。ArduPilot主要有两个选择:Mission Planner和QGroundControl。我两个都用过,说说我的感受。

特性 Mission Planner QGroundControl
开发语言 C# (Windows Only) C++ (跨平台)
主要用户 ArduPilot老用户、测绘行业 PX4用户、跨平台开发者
地图源 Google/Bing/OpenStreetMap Google/Bing/自定义
任务规划 功能最全,支持航点、Spline、Survey 基础功能完善,但高级功能少
实时调参 图表、HUD、3D视图一应俱全 简洁,适合快速调试
我的推荐 首选,尤其是做测绘和复杂任务 适合Mac/Linux用户,或轻量级任务

我个人习惯用Mission Planner。原因很简单:它的Survey (Grid) 模式在做测绘航线规划时太方便了。你只需要框选区域,设置重叠率,它自动生成航线。QGC虽然也有这个功能,但参数没MP细。

安装步骤其实很简单:

  1. 去 ardupilot.org/downloads 下载最新版Mission Planner。
  2. Windows下直接双击安装包,一路Next就行。
  3. 安装完成后,打开MP,它会自动检查固件更新。
  4. 用USB线连接飞控,选择正确的COM口和波特率(一般是115200)。
  5. 点击Connect,如果看到姿态数据在动,就说明连上了。

注意:第一次连接时,Windows可能会自动安装驱动。如果失败,去设备管理器里手动更新驱动,选择ArduPilot Mega那个驱动。我曾经遇到过因为驱动没装好,MP一直报“No Heartbeat”的错误,折腾了半小时才发现是驱动问题。

QGroundControl的安装更简单:去官网下载对应系统的AppImage(Linux)或dmg(Mac)或exe(Windows),解压就能用。它不需要安装,这点比MP方便。

嗯,最后说一句:地面站版本要和固件版本匹配。比如你用Copter 4.2的固件,MP最好也用1.3.70以上的版本。否则有些新参数可能显示不出来。

本章小结:ArduPilot是一个成熟的开源自动驾驶仪生态。硬件选Pixhawk 4或Cube Orange,地面站首选Mission Planner,固件用ChibiOS版本。把这些基础打好,后面学任务规划就顺了。