3、任务规划基础:航点、动作与文件格式
任务规划,说白了就是告诉无人机:去哪儿、干什么、怎么回来。很多新手一上来就盯着QGroundControl的航线界面乱点,结果飞出去才发现高度不对、动作没触发、返航路径乱成一团。我刚开始带项目时也吃过这个亏——有一次在农田测绘,航点顺序搞反了,飞机直接往反方向飞,差点撞树。从那以后,我要求团队每个人必须先搞懂任务规划的底层逻辑。
3.1 任务规划的核心概念
一个完整的PX4任务,由三个层次组成:
- 任务(Mission):整趟飞行的完整描述,包含起飞、航线、动作、降落。
- 航段(Segment):两个航点之间的飞行路径,包含速度、高度、转弯半径。
- 航点(Waypoint):空间中的一个三维坐标点(经纬度+高度),附带动作指令。
你想想看,这就像写一个导航程序。航点是“到哪”,动作是“干啥”,任务就是整个脚本。我个人习惯把任务规划分成三步:画路径 → 配动作 → 检查逻辑。缺一步,后面就容易出幺蛾子。
核心原则:任务规划不是画线,而是定义状态机。每个航点都是一个状态,飞机从一个状态飞到下一个状态,执行完动作再切换。
3.2 航点(Waypoint)与动作(Action)
航点不只是坐标。每个航点背后有一堆参数,我列个表给你看:
| 参数 | 说明 | 典型值 |
|---|---|---|
| 纬度/经度 | WGS84坐标系,小数点后6位 | 39.904200, 116.407400 |
| 相对高度 | 相对于起飞点或海平面 | 50 m |
| 航点类型 | 普通航点、起飞、降落、悬停等 | NAV_WAYPOINT |
| 停留时间 | 到达后悬停等待的秒数 | 5 s |
| 接受半径 | 到达目标点多少米内算“到达” | 1 m |
| 偏航角 | 机头朝向(-180° ~ 180°) | 0°(正北) |
动作(Action)是附着在航点上的指令。PX4支持的动作类型不少,常用的有:
- DO_SET_SERVO:控制舵机,比如放下投放器。
- DO_SET_CAM_TRIGG_DIST:设置相机触发距离,航测必备。
- DO_CHANGE_SPEED:改变飞行速度,适合转弯前减速。
- DO_LAND_START:标记降落起始点,用于精准降落。
- DO_JUMP:跳转到指定航点,实现循环飞行。
我的经验:DO_JUMP这个动作很容易被忽略。有一次做巡检任务,需要绕塔飞三圈,我直接用DO_JUMP跳回起点,配合计数器,省了三分之二的航点数量。但注意——跳转次数别设成无限,否则飞机永远回不来。
3.3 任务文件格式:.plan 与 .mission
QGroundControl(QGC)使用两种文件格式保存任务。很多人搞混,我直接说区别:
| 格式 | 扩展名 | 包含内容 | 适用场景 |
|---|---|---|---|
| 任务文件 | .mission | 纯航线数据(航点+动作) | 机载端上传、跨地面站交换 |
| 计划文件 | .plan | 航线 + 地理围栏 + 参数 + 起飞点 | 完整任务存档、团队共享 |
.plan文件本质上是JSON格式,结构清晰。我拆开给你看:
{
"fileType": "Plan",
"geoFence": {
"polygons": [...],
"circles": [...]
},
"mission": {
"items": [
{
"type": "SimpleItem",
"command": 22, // MAV_CMD_NAV_WAYPOINT
"params": [0, 0, 0, 0, 39.9042, 116.4074, 50.0]
},
{
"type": "SimpleItem",
"command": 183, // MAV_CMD_DO_SET_CAM_TRIGG_DIST
"params": [10, 0, 0, 0, 0, 0, 0]
}
],
"plannedHomePosition": [39.9040, 116.4070, 0.0]
},
"rallyPoints": {
"points": [...]
},
"version": 2
}
注意看,每个航点通过command字段指定MAVLink指令编号。22是普通航点,183是相机触发。我建议你手写任务文件时,先对照MAVLink指令表,别凭记忆写编号——我曾经把21(起飞)和22(航点)搞混,结果飞机在第一个点就执行了起飞动作,悬停在那不动了。
避坑指南:.plan文件里的plannedHomePosition只是参考位置,不是真正的起飞点。真正的起飞点由飞控在解锁时记录。如果你在室内编辑任务,记得把起飞点改成实际场地坐标,否则飞机可能以为自己在千里之外。
3.4 上传与下载任务
任务规划好之后,怎么塞进飞控?流程很简单,但细节决定成败。
3.4.1 上传任务(Upload)
- 在QGC中打开.plan文件,检查航点列表。
- 点击“上传”按钮,QGC通过MAVLink的
MISSION_COUNT协议逐条发送。 - 飞控收到后,会回复
MISSION_ACK确认。 - 上传完成后,QGC会发送
MISSION_CURRENT设置当前航点。
这里有个坑:上传过程中不要断开数传。我遇到过好几次,信号不好导致航点丢失,飞控只收到一半的任务。结果飞机起飞后直接往错误方向飞。嗯,从那以后我养成了习惯——上传完立刻下载回来校验一遍。
3.4.2 下载任务(Download)
下载用于备份或分析。操作更简单:
- 点击QGC的“下载”按钮,飞控会把整个任务列表发回。
- 下载完成后,QGC自动保存为.plan文件。
- 你可以对比下载的任务和原始文件,检查是否一致。
小技巧:我每次外场飞行前,都会先下载飞控里已有的任务,确认不是上次遗留的旧航线。有一次队友忘了清空任务,结果飞机上天后直接执行了三天前的测绘航线,飞到了隔壁工地。从那以后,“下载校验”成了我的肌肉记忆。
3.5 任务规划知识体系总览
下面这张图把本章的核心逻辑串起来了。你可以把它当作任务规划的“脑图”:
这张图把本章内容串起来了。从任务规划出发,分三条线:航点(位置参数)、动作(行为指令)、文件格式(存储交换)。最后汇到上传下载——这是你与飞控交互的必经之路。
3.6 本章小结
任务规划不是画几条线那么简单。你得理解:
- 航点是三维坐标 + 行为参数的组合体。
- 动作是附着在航点上的指令,控制飞机“做什么”。
- .plan文件是完整任务包,.mission是纯航线数据。
- 上传后一定要下载校验,这是保命操作。
我个人习惯在每次外场飞行前,花5分钟手动检查一遍任务文件里的航点高度和动作顺序。别嫌麻烦——地面多花5分钟,天上少花5000块维修费。