4、航点任务基础:任务规划器界面、航点类型、任务上传与下载、任务执行逻辑
航点任务,说白了就是让飞机按照你画好的路线自己飞。很多新手一上来就想着写复杂的任务脚本,结果飞机在天上乱窜。我个人习惯是,先把任务规划器界面摸透,把基础航点类型搞明白,再谈别的。
这一章我们不讲虚的,直接上手看界面、认航点、学上传下载、理解执行逻辑。你跟着我走一遍,后面写任务就不会懵。
4.1 任务规划器界面:你的指挥中心
打开 Mission Planner,连上飞控,你会看到默认的飞行数据页面。别急着点别的,先找到任务规划页面——就是那个带地图和航点列表的界面。
我刚开始用的时候,总觉得这个界面按钮太多。其实核心就三个区域:
- 地图区:显示飞机位置、航点位置、飞行轨迹。右键可以添加航点,拖拽可以调整位置。
- 航点列表区:左侧或底部的表格,显示每个航点的序号、指令类型、参数、经纬度、高度。双击可以编辑。
- 工具栏:读取、写入、保存、加载、清除任务。还有高度模式、航点动作等设置。
我的小习惯:每次打开任务规划器,先点一下「读取」按钮,把飞控里现有的任务拉下来看看。万一上次飞完没清任务,你直接写新的上去,两个任务叠在一起,飞机起飞后就会乱窜。我曾经吃过这个亏,后来养成了先读后写的习惯。
4.2 航点类型:不只是经纬度
很多人以为航点就是经纬度加高度。其实 ArduPilot 里的航点类型有十几种,常用的也就那么几个。我列个表,你一看就明白:
| 指令编号 | 名称 | 作用 | 常用场景 |
|---|---|---|---|
| 16 | WAYPOINT | 飞到一个指定经纬度+高度 | 常规路径点 |
| 17 | SPLINE_WAYPOINT | 曲线路径,飞机走平滑弧线 | 转弯半径受限的场景 |
| 21 | LAND | 降落指令,触发降落流程 | 任务结束自动降落 |
| 22 | TAKEOFF | 起飞指令,爬升到指定高度 | 任务开始自动起飞 |
| 28 | SET_SERVO | 设置舵机/继电器输出 | 抛投、拍照、开关负载 |
| 115 | DO_SET_ROI | 设置兴趣点,云台锁定目标 | 航拍、巡检 |
| 177 | DO_CHANGE_SPEED | 改变飞行速度 | 不同航段不同速度 |
你看,真正用来导航的其实就 WAYPOINT 和 SPLINE_WAYPOINT。其他都是辅助指令。我见过有人把 LAND 当普通航点用,结果飞机飞到那个点直接往下掉——嗯,这就是没搞懂指令类型。
注意:TAKEOFF 指令必须放在任务列表的第一个位置(序号0),否则飞控不会执行自动起飞。LAND 指令之后不能再跟其他航点,任务会在降落完成后自动结束。
4.3 任务上传与下载:别搞反了
这个环节看着简单,但翻车的人最多。说白了就是两个按钮:
- 读取(Read):从飞控下载任务到地面站。你在地面站看到的航点列表,会变成飞控里存的那一份。
- 写入(Write):把地面站编辑好的任务上传到飞控。飞控会覆盖掉原来的任务。
我遇到过最典型的翻车场景:在地面站编辑了半天,点了「读取」,结果辛辛苦苦画的航点全没了——因为读取操作会把飞控里的空任务覆盖掉地面站的编辑内容。你想想看,是不是很崩溃?
正确的流程应该是:
- 先点「读取」,看看飞控里有没有旧任务。有的话先保存到电脑。
- 在地面站编辑航点,或者从文件加载。
- 确认无误后,点「写入」。
- 再点一次「读取」,验证写入的内容是否正确。
我的避坑指南:写入完成后,一定要再读取一次验证。我曾经有一次写入时 USB 线松了,飞控只收到了前三个航点,后面的全丢了。飞机起飞后飞到第三个点就悬停不动了……从那以后,我每次写入必验证。
4.4 任务执行逻辑:飞控是怎么跑任务的
飞控执行任务,不是简单地从航点1飞到航点2。它有一套完整的逻辑,我画个图你就明白了:
飞控执行任务的逻辑其实很简单:从索引0开始,一条一条往下执行。但这里有个关键点——指令类型决定了执行方式。
- 导航指令(如 WAYPOINT、SPLINE_WAYPOINT):飞机会飞向目标点,到达后才执行下一条。这是阻塞的。
- DO 指令(如 SET_SERVO、DO_CHANGE_SPEED):飞控立即执行,不等待,直接跳到下一条。这是非阻塞的。
- 条件指令(如 CONDITION_DELAY):飞机会等待条件满足(比如等待5秒),然后继续。
为什么会这样设计?你想想看,如果你在航点中间插一个 SET_SERVO 指令,飞控总不能停下来等舵机动作完再飞吧?所以 DO 指令是瞬间执行的,飞机继续飞它的。
实战经验:我写巡检任务时,经常在航点之间插入 DO_SET_ROI 指令,让云台提前锁定下一个目标点。这样飞机还没到,相机已经对准了,效率高很多。但要注意,DO_SET_ROI 只生效一次,如果你想让云台一直锁定某个点,需要在每个航点前都加一条。
4.5 任务执行中的常见坑
最后聊几个我踩过的坑,你遇到了能少走弯路:
- 航点高度冲突:如果你在任务中用了 TAKEOFF 指令,起飞高度以 TAKEOFF 为准。后面的航点如果高度低于起飞高度,飞控不会下降,而是保持起飞高度飞行。我曾经设了起飞高度50米,后面航点高度30米,结果飞机一直在50米飞——嗯,这就是没搞懂高度优先级。
- 航点半径设置:每个航点有个「到达半径」参数,默认是2米。飞机进入这个半径就算到达,然后执行下一条。如果你设的半径太大(比如10米),飞机可能还没到目标点就拐弯了。我一般设1-3米,视飞行速度而定。
- 任务循环:如果你想让飞机重复执行任务,可以在任务最后加一个 DO_JUMP 指令,跳回索引0。但要注意,DO_JUMP 也有次数限制,设成-1就是无限循环。我试过忘记设次数,飞机在天上绕了20多圈才想起来——还好电池够用。
重要提醒:任务上传后,一定要在飞控的「任务」页面检查航点总数和每个航点的参数。有时候地面站显示正常,但飞控收到的数据有误。我习惯用 Mission Planner 的「任务检查」功能,它会自动校验航点合法性。