1. 课程导入
各位同学,欢迎来到《基于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的软件架构,说白了就是三层:应用层、中间层、硬件抽象层。我画了一张图,帮你理清关系:
你想想看,最底层的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细。
安装步骤其实很简单:
- 去 ardupilot.org/downloads 下载最新版Mission Planner。
- Windows下直接双击安装包,一路Next就行。
- 安装完成后,打开MP,它会自动检查固件更新。
- 用USB线连接飞控,选择正确的COM口和波特率(一般是115200)。
- 点击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版本。把这些基础打好,后面学任务规划就顺了。