ArduPilot航点任务规划与自主飞行执行 - 第1节
1.1 ArduPilot 的前世今生
说起 ArduPilot,我得先聊聊它的起源。2007 年,一个叫 Jordi Muñoz 的墨西哥小伙,跟 Chris Anderson 在 DIY Drones 社区里捣鼓出了最初的版本。那时候的飞控板,说白了就是一块 Arduino 加一堆传感器,简陋得很。
我刚开始接触 ArduPilot 是在 2014 年,当时还在用 APM 2.6 板子。说实话,那会儿的代码远没有现在这么成熟,但它的开源精神已经深深吸引了我。你想想看,一个社区项目,能发展到今天支持无人机、无人车、无人船、固定翼甚至直升机,这本身就说明了很多问题。
关键里程碑:
- 2007年 — ArduPilot 项目在 DIY Drones 社区诞生
- 2010年 — APM 1.0 硬件发布,支持多旋翼
- 2013年 — 3DR 公司成立,Pixhawk 硬件标准确立
- 2016年 — ArduPilot 成为独立的开源基金会项目
- 2020年至今 — 支持 ChibiOS、Cube 系列硬件,生态持续扩展
这里有个有意思的事。很多人以为 ArduPilot 跟 PX4 是同一个东西,其实不是。它们虽然都源自同一个社区,但 ArduPilot 更强调稳定性和功能完整性,而 PX4 更偏向学术和模块化设计。我个人习惯用 ArduPilot,因为它的航点任务系统实在太成熟了。
1.2 它能干什么?应用场景一览
ArduPilot 的应用范围,说实话,比大多数人想象的要广得多。我这些年接触过的项目,从农业植保到电力巡检,从测绘建模到物流配送,几乎都能看到它的身影。
1.2.1 多旋翼无人机
这是最常见的应用。航拍、巡检、植保、编队表演,ArduPilot 的 Copter 固件都能搞定。我在做农业项目时,最常用的是自动航线规划和变量喷洒功能。
1.2.2 固定翼无人机
固定翼的 Plane 固件支持 VTOL(垂直起降),这对长航时任务特别有用。我记得有一次做边境巡检,用固定翼飞了将近 3 个小时,覆盖了 200 多公里的线路。
1.2.3 无人车与无人船
Rover 和 Boat 固件让 ArduPilot 能跑在地面和海面上。我帮朋友做过一个水质采样项目,无人船按预设航点自动巡航,每到采样点就停下来取水样,全程不需要人干预。
1.2.4 水下机器人
Sub 固件虽然小众,但功能一点不含糊。ROV 的深度保持、航向锁定、自动返航,这些在海洋勘探中非常实用。
| 固件名称 | 适用平台 | 典型应用 |
|---|---|---|
| Copter | 多旋翼 | 航拍、植保、巡检 |
| Plane | 固定翼、VTOL | 长航时测绘、物流 |
| Rover | 无人车 | 农业车辆、巡检机器人 |
| Boat | 无人船 | 水文监测、水质采样 |
| Sub | 水下机器人 | 海洋勘探、管道检测 |
我的建议:如果你是初学者,先从 Copter 固件入手。多旋翼的调试相对简单,而且社区资源最丰富。等你把航点任务玩熟了,再考虑其他平台。
1.3 开发环境搭建:从零开始
嗯,这里要重点说说环境搭建。很多新手在这一步就卡住了,其实没那么复杂。我当年第一次搭环境,折腾了整整两天,现在回想起来,主要是没搞清楚几个关键点。
1.3.1 操作系统选择
我个人强烈推荐 Ubuntu 20.04 LTS 或 22.04 LTS。Windows 虽然也能用 WSL,但编译过程中偶尔会出一些莫名其妙的问题。Mac 用户可以用,但要注意 M1/M2 芯片的兼容性。
1.3.2 安装依赖
打开终端,执行以下命令:
sudo apt update
sudo apt install git python3 python3-pip python3-dev
sudo apt install gcc-arm-none-eabi
sudo apt install libxml2-dev libxslt1-dev
pip3 install pymavlink mavproxy
避坑指南:我曾经在 Ubuntu 22.04 上遇到过 Python 版本冲突的问题。建议使用 Python 3.8 到 3.10 之间的版本,太新或太旧都可能出问题。
1.3.3 克隆源码
ArduPilot 的代码托管在 GitHub 上。我习惯把源码放在 ~/ardupilot 目录下:
cd ~
git clone https://github.com/ArduPilot/ardupilot.git
cd ardupilot
git submodule update --init --recursive
这里要注意,git submodule update 这一步会下载很多依赖库,网络不好的话可能会超时。我建议用代理或者换个时间段再试。
1.3.4 编译第一个固件
以 Pixhawk 1 为例,编译 Copter 固件:
cd ~/ardupilot
./waf configure --board Pixhawk1
./waf copter
第一次编译大概需要 10-20 分钟,取决于你的电脑配置。编译成功后,你会在 build/Pixhawk1/bin 目录下看到 arducopter.apj 文件。
1.3.5 使用 SITL 仿真
没有硬件也能玩!SITL(Software In The Loop)仿真可以让你在电脑上直接运行飞控:
cd ~/ardupilot
sim_vehicle.py -v ArduCopter --map --console
这条命令会启动一个虚拟的无人机,同时打开地图和控制台界面。你可以在上面测试航点任务,效果跟真机几乎一样。
我的习惯:每次修改代码后,先用 SITL 跑一遍,确认没问题再刷到真机上。这能省下不少炸机的钱。
1.4 知识体系总览
为了让你对整个课程有个清晰的认识,我画了一张图。这张图展示了 ArduPilot 航点任务的核心知识结构。
这张图把航点任务分成了三个核心模块:规划、执行、监控。说白了,就是「去哪、怎么去、去了没」。后面的课程会逐一深入每个模块。
1.5 本章小结
这一章我们聊了 ArduPilot 的发展历程、它能做什么,以及怎么搭开发环境。说实话,环境搭建是很多人放弃的第一个坎。但只要你按步骤来,遇到问题多查社区,基本都能搞定。
我个人觉得,ArduPilot 最吸引人的地方,不是它功能多强大,而是它的社区氛围。你遇到任何问题,几乎都能在论坛或 GitHub 上找到答案。这也是为什么我坚持用它的原因。