4. 航线规划基础:航点属性、动作与任务管理

各位同学,欢迎来到航线规划的第一课。说实话,很多新手拿到 ArduPilot 第一件事就是在地图上点几个点,然后点“写入”。结果飞机上天后要么原地打转,要么直接往地里钻。嗯,这里面的门道,咱们今天得好好捋一捋。

航线规划,说白了就是告诉飞机:你要去哪、到了干什么、干完怎么走。我做了这么多年无人机,见过太多因为航点属性没设对而炸机的案例。所以这一章,咱们把基础打牢。

4.1 航点(Waypoint)的核心属性

一个航点,不只是地图上的一个点。它包含三个必须填的属性:经纬度、高度和停留时间。少一个,任务就可能出问题。

属性 单位 说明 常见坑
经纬度 度(小数) WGS84 坐标系,小数点后6位精度约0.1米 复制粘贴时少一位,飞机偏出去几十米
高度 米 相对起飞点高度(默认)或绝对海拔 忘了设高度,飞机按0米飞,直接撞地
停留时间 秒 到达后悬停等待的时间 设成0不代表不停,而是“不停留直接过”
⚠ 高度陷阱: 我曾经在山区做测绘,起飞点海拔1800米,目标点海拔2200米。我习惯用相对高度,设了50米。结果飞机飞到山脊时,离地面只有30米……差点撞树。后来我改用绝对海拔(AMS_ALT=1),才彻底解决这个问题。

4.2 航点动作(DO_CMD)

航点动作,就是让飞机在到达某个位置时,执行一个额外的操作。这些动作通过 DO_SET_* 系列指令实现。我个人的习惯是:把动作指令插在航点之前一行,而不是和航点写在一起。这样逻辑更清晰。

4.2.1 DO_SET_SERVO

控制舵机或继电器。比如投弹、开伞、触发相机快门。

# 示例:在航点3之前,设置舵机9输出2000μs(打开)
DO_SET_SERVO:舵机通道=9,脉宽=2000
WAYPOINT:经纬度=xxx,高度=50m,停留=0s
💡 小技巧: 我建议你在设置舵机动作后,加一个 DO_SET_SERVO 恢复默认值。比如投弹后,再发一个脉宽1000μs把舵机关闭。否则飞机返航时舵机还开着,容易误触。

4.2.2 DO_SET_ROI

设置兴趣点(Region of Interest)。飞机在飞行过程中,机头会始终指向这个点。非常适合巡检、拍摄任务。

# 示例:让飞机在航点4到航点7之间,始终盯着塔顶
DO_SET_ROI:经纬度=塔顶坐标,高度=塔顶高度
WAYPOINT 4
WAYPOINT 5
WAYPOINT 6
WAYPOINT 7
DO_SET_ROI:NONE  # 取消锁定

你想想看,如果没有 DO_SET_ROI,飞机飞过塔顶时,相机可能只拍到塔身侧面。有了它,相机全程对准目标,后期拼接效率高很多。

4.2.3 其他常用动作

  • DO_CHANGE_SPEED:中途调整巡航速度。比如接近目标点前减速,提高拍摄质量。
  • DO_SET_CAM_TRIGG_DIST:设置拍照间隔距离。航测时每5米拍一张,配合这个指令。
  • DO_JUMP:跳转到指定航点。实现循环飞行或条件分支。
  • DO_SET_HOME:动态重置返航点。适合船载起飞场景。

4.3 航线类型:AUTO / GUIDED / LOITER

很多同学分不清这三种模式的区别。我打个比方:

  • AUTO(自动):飞机按预定航线飞,像个按剧本演戏的演员。
  • GUIDED(引导):你临时告诉飞机去哪,它自己飞过去。像个听指令的士兵。
  • LOITER(悬停):飞机原地画圈或悬停。像个站岗的哨兵。
模式 适用场景 特点 我踩过的坑
AUTO 测绘、巡检、植保 完全自主,按航线执行 有一次我忘了上传航线就切AUTO,飞机直接悬停不动……
GUIDED 临时目标、精准降落 可随时改变目标点 GUIDED模式下不要设太多航点,容易超时
LOITER 等待指令、空中观察 自动保持位置和高度 大风天LOITER耗电很快,别指望它能悬停半小时
🔑 核心原则: 航线规划时,你是在为 AUTO 模式写剧本。GUIDED 和 LOITER 是应急和辅助手段。我建议所有关键任务都用 AUTO 执行,减少人为干预。

4.4 任务上传与下载

航线写好了,怎么给飞机?通过 Mission Planner 或 QGroundControl 的“任务”页面。

4.4.1 上传流程

  1. 连接数传或USB,确保心跳正常。
  2. 点击“读取”确认当前任务为空或备份旧任务。
  3. 在列表里编辑航点,或导入已有的 .waypoint 文件。
  4. 点击“写入”上传到飞控。
  5. 点击“读取”验证——这一步很多人跳过,结果上传失败都不知道。
⚠ 上传失败怎么办? 我遇到过好几次,写入到一半数传断了。飞控里可能只有半个任务。这时候千万别起飞!先重新连接,读取任务,如果航点数量不对,就清空重传。我曾经因为偷懒没检查,飞机起飞后只执行了前3个航点就悬停了……还好高度够高。

4.4.2 下载与备份

下载任务同样重要。尤其是你飞完一次,想复飞同样的航线时。我个人的习惯是:每次飞行前,先下载当前任务,另存为一个带日期的文件。这样万一飞丢了,还能知道它最后执行的是什么航线。

# .waypoint 文件格式示例(部分)
QGC WPL 110
0	0	0	16	0.000000	0.000000	0.000000	0.000000	-35.363261	149.165230	584.000000	1
1	0	3	22	0.000000	0.000000	0.000000	0.000000	-35.363261	149.165230	584.000000	1
2	0	0	16	0.000000	0.000000	0.000000	0.000000	-35.364000	149.166000	100.000000	1

这个文件里,每一行代表一个航点或动作。第4列是指令编号(16=航点,22=起飞,等等)。你如果熟悉这个格式,甚至可以手动编辑。

4.5 知识体系总览

下面这张图,把本章的核心逻辑串起来了。你可以把它当作航线规划的“心法口诀”。

航线规划知识体系 航点属性 航点动作 航线类型 经纬度 高度(相对/绝对) 停留时间 ⚠ 高度模式要选对 DO_SET_SERVO DO_SET_ROI DO_CHANGE_SPEED DO_JUMP / DO_SET_HOME AUTO(自动) GUIDED(引导) LOITER(悬停) ⚠ 模式切换要谨慎 任务上传与下载 先读取 → 再写入 验证航点数量 备份 .waypoint 文件 带日期命名 断线后清空重传 不要起飞验证

这张图从左到右、从上到下,就是航线规划的完整流程。你每次做任务,都可以拿它来对照:属性设对了没?动作插对了没?模式选对了没?上传验证了没?

💡 我的个人习惯: 每次上传任务后,我会在 Mission Planner 的“飞行数据”页面,切换到“任务”选项卡,逐条检查航点。尤其是高度列,我会用鼠标滚轮快速扫一遍。如果有哪个航点高度是0,一眼就能看出来。这个习惯救过我至少三次。

好了,这一章的内容就是这些。航点属性、动作指令、航线类型、任务上传下载,这四个东西是航线规划的四大支柱。你把这四个搞明白了,后面学航线优化、多机协同、动态重规划,才会顺手。