2. 航点任务概念:任务规划器、航点属性、任务状态机、MAV_CMD命令集
各位同学,今天我们来聊聊航点任务的核心概念。说实话,我刚入行那会儿,以为航点任务就是「飞过去、拍个照、再飞回来」这么简单。直到第一次在野外调试,无人机飞到第三个航点突然悬停不动了——我盯着地面站日志看了两个小时,才发现是任务状态机卡在了某个分支里。
嗯,从那以后我就明白了:航点任务看似简单,但背后的状态机、命令集、属性配置,任何一个环节出问题,飞机都可能跟你「闹脾气」。今天这一章,咱们就把这些概念彻底理清楚。
2.1 任务规划器:你的「空中导演」
任务规划器是什么?说白了,它就是地面站上那个让你画航线、设参数的工具。我个人习惯用 Mission Planner 和 QGroundControl,两者各有千秋。
规划器干的事其实就三件:
- 画航线:在地图上点几个点,连成一条路径
- 设属性:每个点的高度、速度、动作(比如拍照、投掷)
- 生成指令链:把图形化的航线翻译成 MAVLink 指令序列
你想想看,规划器就像导演,航点就是剧本里的场景,而无人机就是演员。导演把剧本写好,演员照着演——只不过这个演员不会跟你讨价还价,你写错了它真摔。
2.2 航点属性:每个点都有自己的「脾气」
每个航点不是简单的一个经纬度坐标。它身上挂着一堆属性,就像一个人的身份证信息一样。我整理了一张表,方便你对照:
| 属性 | 说明 | 典型值 |
|---|---|---|
| 经纬度 | 航点的地理位置 | 39.9042°N, 116.4074°E |
| 高度 | 相对起飞点或海平面的高度 | 50 m (相对) |
| 到达半径 | 无人机进入该范围即认为「到达」 | 1-5 m |
| 航向 | 到达该点时机头指向 | -1 (默认不改变) |
| 停留时间 | 在该点悬停等待的秒数 | 0-10 s |
| 动作命令 | 到达后执行的 MAV_CMD | MAV_CMD_NAV_WAYPOINT |
这里有个坑,我踩过:高度属性。有些飞控用相对高度(相对于起飞点),有些用绝对高度(海平面)。如果你混着用,无人机可能会一头扎进地里。我曾经在山区测试,起飞点海拔 2000 米,航点设了绝对高度 1500 米——结果飞机直接往山下俯冲,吓得我赶紧切了返航。
2.3 任务状态机:无人机的「大脑流程」
任务状态机,这是整个航点任务的核心。无人机不是傻乎乎地从一个点飞到另一个点,它内部有一套严谨的状态切换逻辑。我画了一张图,帮你理解这个过程:
这张图我建议你保存下来。每次调试任务时,对照着看日志里的状态切换,能快速定位问题。比如,如果无人机一直卡在 UPLOADING 状态,那多半是数传链路不稳定,任务没传完。
状态机的核心逻辑其实就一句话:每个状态只做一件事,做完就切到下一个。但实际开发中,我遇到过最头疼的问题是「暂停恢复」——无人机在 PAUSED 状态下被风吹偏了,恢复执行时是直接飞回原航点,还是从当前位置继续?不同飞控的处理方式不一样,这个后面我们会详细讲。
2.4 MAV_CMD 命令集:无人机的「动作词典」
MAV_CMD 是什么?它是 MAVLink 协议里定义的一套标准命令,告诉无人机「到了这个点该干什么」。我把它分成几大类:
| 类别 | 命令示例 | 作用 |
|---|---|---|
| 导航类 | MAV_CMD_NAV_WAYPOINT | 飞到指定航点 |
| MAV_CMD_NAV_LOITER_UNLIM | 在指定点无限盘旋 | |
| MAV_CMD_NAV_RETURN_TO_LAUNCH | 返航 | |
| 动作类 | MAV_CMD_DO_SET_SERVO | 控制舵机(如投掷器) |
| MAV_CMD_DO_SET_CAM_TRIGG_DIST | 设置相机触发距离 | |
| 条件类 | MAV_CMD_CONDITION_DELAY | 等待指定时间 |
| MAV_CMD_CONDITION_DISTANCE | 飞到距目标一定距离时触发 |
这里有个关键点:命令的执行顺序。导航类命令是「必须到达」的,而动作类和条件类命令是「到达后执行」的。我见过有人把拍照命令放在导航命令前面,结果无人机还没起飞就开始拍照——拍了一堆黑照片。
核心原则: 一个完整的航点任务,指令链的顺序应该是:
- 导航命令(飞到哪)
- 条件命令(什么时候做)
- 动作命令(做什么)
这个顺序不能乱,乱了就出幺蛾子。
2.5 一个完整的任务示例
说了这么多理论,咱们看个实际例子。假设你要让无人机从 A 点起飞,飞到 B 点拍照,然后返航。对应的 MAVLink 指令链是这样的:
# 任务开始
MAV_CMD_NAV_TAKEOFF # 起飞到安全高度
MAV_CMD_NAV_WAYPOINT # 飞到 B 点(经纬度、高度)
MAV_CMD_CONDITION_DELAY # 悬停 2 秒
MAV_CMD_DO_SET_CAM_TRIGG_DIST # 触发相机拍照
MAV_CMD_NAV_RETURN_TO_LAUNCH # 返航
MAV_CMD_NAV_LAND # 降落
# 任务结束
你看,每个命令都有明确的分工。我刚开始写指令链时,总喜欢把条件命令和动作命令混在一起写,结果无人机经常「跳步」。后来养成了习惯:先写导航骨架,再往里填条件和动作,这样逻辑清晰多了。
好了,这一章的内容就到这里。航点任务的概念其实不复杂,但细节很多。你只要记住:规划器是工具,航点是坐标,状态机是流程,MAV_CMD 是动作——把这四样东西串起来,你就能写出稳定可靠的任务指令链。