4. 航点数据结构与任务文件

航点任务规划的本质,是把一条飞行意图翻译成飞控能逐条执行的“结构化指令序列”。一个航点远不止“经度、纬度、高度”三个数,它通常还包含速度、航向、悬停时间以及到达该点后要执行的动作。理解航点数据结构和任务文件格式,是保证规划结果能被地面站、飞控和仿真工具正确解析的前提。

一、单个航点的字段构成

在主流开源飞控(如 PX4、ArduPilot)的任务协议中,一个航点通常由若干字段组成,可归纳为“位置—运动—时间—动作”四类:

  • 位置字段:纬度(lat)、经度(lon)、相对高度或海拔高度(alt)。经纬度一般用十进制度表示,高度需明确是相对起飞点(relative)还是绝对海拔(AMSL),二者混用是常见错误来源。
  • 运动字段:期望速度(如 5 m/s)、航向(yaw,单位度,正北为 0,顺时针为正)、航向模式(自动/固定/朝向下一航点)。
  • 时间字段:悬停时间(hold/loiter time,单位秒),表示到达该点后原地停留的时长。
  • 动作字段:到达该点后触发的指令,如拍照、投放、开灯、切换飞行模式、开始测绘等。

需要特别说明坐标系约定:本文及后续图示中,航向角以正北为 0°,顺时针为正,取值范围 0°~360°;高度默认相对起飞点。若任务文件使用绝对高度,必须在字段或文件头中显式标注,全文保持一致。

二、航点序列与任务文件

多个航点按顺序排列,就构成一条航线。任务文件则是把这条航线连同起飞、返航、降落等指令一起序列化保存的载体。常见格式有三类:

格式典型扩展名特点
QGC WPL 110.plan / .waypoints文本行,每行一个航点,字段以制表符分隔,兼容 QGroundControl
MAVLink 任务项二进制/JSON飞控通信层协议,字段与 WPL 对应,用于上传下载
KML / GPX.kml / .gpx地理信息通用格式,便于在 GIS 软件中查看,但动作字段支持有限

以 QGC WPL 110 为例,一行典型记录如下:

0  1  0  16  0  0  0  0  47.397742  8.545594  50.0  1
1  0  0  16  5  0  0  0  47.398000  8.546000  60.0  1
2  0  0  20  3  0  0  0  47.398500  8.546500  60.0  1
3  0  0  20  0  0  0  0  47.399000  8.547000  0.0   1

各列含义依次为:序号、当前航点、坐标系、命令编号、参数1~4、纬度、经度、高度、是否自动继续。其中命令编号 16 表示“航点”,20 表示“返航”,参数1 常被用作悬停时间或速度。理解列序,才能手工检查或批量生成任务文件。

三、从规划到执行的字段流转

规划软件中填写的每个字段,最终都要经过“任务文件—飞控解析—航点执行”的链路。下图展示了一个航点从数据结构到实际飞行动作的对应关系,重点标出位置、速度、悬停与动作四类字段在链路中的落点。

航点字段到飞行执行的流转关系 规划层(地面站) 纬度 / 经度 / 高度 速度 / 航向 悬停时间 动作指令 字段填写与校验 序列化 任务文件层 QGC WPL 110 行记录 命令编号 + 参数1~4 经纬度 / 高度列 自动继续标志 文本/二进制存储 上传解析 飞控执行层 导航到目标点 速度/航向控制 悬停计时 触发动作 逐点执行 位置→导航目标;速度/航向→运动控制;悬停时间→计时器;动作指令→任务项触发

四、字段填写中的常见陷阱

实际规划时,最容易出问题的不是“不会填”,而是“填了但含义不一致”。以下三点值得反复检查:

  1. 高度基准混用:同一任务中,若部分航点用相对高度、部分用绝对高度,飞控会按各自基准执行,导致航线在垂直方向出现跳变。建议在任务文件头或规划软件中统一设置为相对起飞点高度。
  2. 航向与航段方向混淆:航向字段是“到达该点后的机头朝向”,不是“从上一个点飞来的方向”。若希望机头始终对准下一航点,应选择“朝向下一航点”模式,而不是手工填写固定角度。
  3. 悬停时间与动作顺序:悬停时间通常从到达该点开始计时,动作指令在到达瞬间触发。若动作需要稳定后再执行(如拍照),应把悬停时间设为大于稳定时间,或使用“悬停后执行”类命令。
手工编辑任务文件时,建议先用地面站生成一条包含 3~5 个航点的样例,再对照列序逐列修改。这样比从零手写更不容易漏列或错位。

五、一个可参考的航点任务片段

下面给出一段用于教学演示的航点任务片段(示例参数,非实测结果)。任务为:起飞后依次经过两个航点,第一点悬停 5 秒拍照,第二点悬停 3 秒后返航。高度统一为相对起飞点 50 米,速度 5 m/s,航向朝向下一航点。

QGC WPL 110
0   1   0   16  0   0   0   0   47.397742  8.545594  0.0    1
1   0   0   16  5   0   0   0   47.398000  8.546000  50.0   1
2   0   0   16  3   0   0   0   47.398500  8.546500  50.0   1
3   0   0   20  0   0   0   0   47.397742  8.545594  0.0    1

其中第 0 行为起飞点,第 1、2 行为航点,第 3 行为返航命令(命令编号 20)。参数1 分别填入 5 和 3,对应悬停秒数。检查时重点看:高度列是否统一为 50.0、经纬度是否落在任务区域内、最后一列是否均为 1(自动继续)。

任务文件中的经纬度顺序在不同格式中可能不同:QGC WPL 110 是“纬度在前、经度在后”,而部分 KML 或自定义 CSV 可能相反。导入前务必确认列序,否则航点会飞到错误位置。

掌握航点数据结构和任务文件格式后,后续的航线校验、批量生成和飞控上传才有可靠基础。建议在每次规划完成后,至少做一次“字段级检查”:高度基准是否统一、航向模式是否正确、悬停时间与动作是否匹配、文件列序是否与目标飞控一致。