4、任务规划核心概念:航点、动作、条件、任务列表与上传下载
各位同学,今天我们来聊聊任务规划里最核心的几个概念。说实话,很多新手一上来就急着画航线、点航点,结果飞机飞出去不是乱转就是提前返航。我当年也干过这种事——第一次带学生做测绘任务,航点顺序搞反了,飞机直接往反方向飞了五公里才拉回来。嗯,从那以后,我养成了一个习惯:先把这几个概念吃透,再碰地面站。
任务规划说白了就是告诉无人机:你要去哪里、做什么、什么时候做、做完怎么办。这四件事分别对应四个核心概念:航点、动作、条件、任务列表。我们一个一个来拆。
一句话总结:航点是位置,动作是行为,条件是触发,任务列表是剧本。四者缺一不可。
4.1 航点(Waypoint)—— 无人机的“打卡点”
航点是最基础的元素。它就是一个三维坐标点:经度、纬度、海拔高度。无人机飞到航点上方,就算“打卡成功”。
我个人习惯把航点分成三类:
- 普通航点:只包含位置信息,飞机飞过去就完事。
- 动作航点:到达后执行某个动作,比如拍照、悬停、改变高度。
- 条件航点:到达后检查某个条件是否满足,再决定下一步。
你想想看,如果只设普通航点,飞机就像个没脑子的快递员——到了门口放下包裹就走,不管门有没有开。所以实际任务中,我们几乎不会只用纯航点。
我的小技巧:在Mission Planner里,每个航点都有一个“延迟”参数。我习惯在关键航点设个1-2秒的延迟,让飞机稳定后再执行动作。尤其是拍照任务,这个延迟能避免照片糊掉。
4.2 动作(Action)—— 无人机该干什么
动作就是无人机到达航点后要执行的具体行为。ArduPilot支持的动作很多,我挑几个最常用的:
| 动作类型 | MAVLink指令 | 说明 |
|---|---|---|
| 悬停 | MAV_CMD_NAV_LOITER_TIME | 在航点上方悬停指定时间 |
| 拍照 | MAV_CMD_IMAGE_START_CAPTURE | 触发相机快门 |
| 改变高度 | MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT | 调整飞行高度 |
| 设置舵机 | MAV_CMD_DO_SET_SERVO | 控制云台或投掷器 |
| 跳转 | MAV_CMD_DO_JUMP | 跳转到任务列表的指定序号 |
我曾经在项目中遇到过一个问题:用DO_SET_SERVO控制投掷器,结果舵机角度设反了,包裹直接砸到机身上。后来我学乖了——每次设舵机动作前,先在地面站里手动测试一遍角度范围。
注意:动作指令的执行顺序很重要。有些动作是“到达时执行”,有些是“到达后立即执行”。比如拍照动作,如果放在航点之前,飞机还没到位置就拍了,照片就废了。
4.3 条件(Condition)—— 什么时候做
条件就是触发下一步的逻辑判断。ArduPilot里最常用的条件有:
- 距离条件:距离上一个航点多少米后触发
- 时间条件:悬停或等待指定时间后触发
- 高度条件:达到指定高度后触发
- 速度条件:达到指定速度后触发
说白了,条件就是给任务加了个“大脑”。没有条件,任务就是死板的流水线;有了条件,任务才能自适应环境变化。
举个例子:我做过一个电力巡检任务,要求飞机在距离铁塔50米时开始减速,20米时悬停拍照。如果没有距离条件,飞机要么冲过头,要么提前减速浪费时间。
核心原则:条件要设得“宽进严出”。比如距离条件,我习惯设±5米的容差,避免因为GPS漂移导致条件反复触发。
4.4 任务列表(Mission List)—— 完整的飞行剧本
任务列表就是把航点、动作、条件按顺序排好,形成一个完整的飞行计划。ArduPilot的任务列表是一个线性列表,从第0项开始依次执行。
我习惯把任务列表分成三段:
- 起飞段:解锁、起飞、爬升到安全高度
- 作业段:按航线飞行、执行动作、检查条件
- 返航段:返回起飞点、降落、锁定
你想想看,如果起飞段和返航段没规划好,飞机可能刚起飞就撞树,或者返航时电量不够。我见过最离谱的一次,有人把返航航点设在了湖中央——飞机直接在水面上降落。
任务列表的格式很简单,每个条目包含:序号、指令类型、参数1-7。在Mission Planner里,你可以直接拖拽调整顺序,也可以导出为.waypoints文件手动编辑。
# 一个简单的任务列表示例
QGC WPL 110
0 0 3 16 0 0 0 0 0 0 0 0 # 起飞
1 0 3 178 0 0 0 0 0 0 0 0 # 改变高度到50米
2 0 3 16 0 0 0 0 0 0 0 0 # 飞往航点1
3 0 3 16 0 0 0 0 0 0 0 0 # 飞往航点2
4 0 3 16 0 0 0 0 0 0 0 0 # 飞往航点3
5 0 3 21 0 0 0 0 0 0 0 0 # 返航
6 0 3 20 0 0 0 0 0 0 0 0 # 降落
我的习惯:每次编辑任务列表后,我都会用“验证任务”功能检查一遍。尤其是跳转指令(DO_JUMP),很容易造成死循环。我曾经因为跳转序号写错,飞机在三个航点之间来回飞了20分钟才被手动切回。
4.5 任务上传与下载—— 让飞机记住剧本
任务规划好了,怎么让飞机知道?答案是通过数传链路上传。ArduPilot支持两种方式:
- 在线上传:通过Mission Planner、QGroundControl等地面站,连接数传后直接上传
- 离线导入:把任务文件(.waypoints或.mission)拷贝到SD卡,插入飞控后加载
我个人更推荐在线上传,因为可以实时看到上传进度和校验结果。上传完成后,一定要做一次“下载校验”——把任务从飞控下载回来,对比是否一致。
避坑指南:我曾经遇到过数传干扰导致上传数据出错的情况。飞机起飞后,第三个航点直接跳到了返航点。后来我养成了两个习惯:1)上传后立即下载校验;2)起飞前在地面站里模拟跑一遍任务。
下载任务同样重要。有时候你需要从一架飞得好的飞机上把任务导出来,复制到另一架飞机上。或者,飞机飞完一次任务后,你想看看它实际执行了哪些航点——下载任务列表就能看到。
4.6 知识体系总览
下面这张图把本章的核心概念串起来了。你可以看到,航点是骨架,动作是血肉,条件是神经,任务列表是完整的生命体。上传下载则是让这个生命体“活起来”的关键一步。
4.7 实战建议
最后,我给大家三个实战建议:
- 先画草图,再上地面站。我习惯在纸上画出航点顺序和动作,确认逻辑没问题再录入。这能避免80%的规划错误。
- 每个任务都要做“干跑”。不上电池,在地面站里模拟执行一遍,看任务列表是否按预期跳转。
- 备份任务文件。每次上传前,先把任务导出到本地。万一飞控出问题,你还能快速恢复。
嗯,核心概念就这些。记住:航点、动作、条件、任务列表、上传下载,这五个词就是任务规划的基石。下次你打开Mission Planner,脑子里先过一遍这五个词,再动手操作。