3. 航点数据结构:定义、动作与属性

航点,说白了就是无人机在三维空间里的一个「打卡点」。你告诉它去哪、怎么去、到了干什么。我刚开始做航线规划时,总觉得航点不就是经纬度加高度嘛,后来踩了不少坑才明白——一个完整的航点数据结构,远比想象中复杂。

今天咱们就把航点拆开来看。它主要由三部分组成:航点定义(位置与速度)、航点动作(到了之后干什么)、航点属性(怎么飞过去)。

核心观点:航点不是孤立的位置点,而是一个「位置 + 行为 + 飞行策略」的复合数据包。理解这一点,你才能写出稳定可靠的航线任务。

航点数据结构总览 航点 (Waypoint) 航点定义 航点动作 航点属性 经纬度 高度 (相对/绝对) 速度 悬停 拍照 舵机/云台 转弯半径 航向模式 到达容忍度 三者缺一不可 共同定义航点行为

3.1 航点定义:位置与速度

航点定义是基础中的基础。说白了,就是告诉无人机「你要去哪个点」。我见过不少新手,只填了经纬度就飞,结果无人机在天上乱飘——高度和速度没设对。

3.1.1 经纬度

这个不用多说,WGS-84坐标系,单位是度。精度一般保留到小数点后6位,大约0.1米的误差。嗯,这里要注意:经纬度必须合法,纬度范围[-90, 90],经度范围[-180, 180]。我曾经遇到过有人把经度写成181度,飞控直接报错。

3.1.2 高度

高度是个容易出问题的地方。主要有两种模式:

  • 相对高度:相对于起飞点的高度。比如起飞点海拔50米,你设相对高度100米,无人机实际飞在海拔150米。我建议测绘类任务用相对高度,方便统一管理。
  • 绝对高度:基于海拔的高度。比如你直接设海拔200米,不管起飞点在哪。山区飞行时绝对高度更安全,能避免撞山。

注意:切换高度模式时一定要确认当前设置。我有个同事在高原地区用了相对高度,结果无人机贴着山脊飞,差点炸机。高度模式最好在航线文件头部统一声明,不要混用。

3.1.3 速度

速度定义的是无人机飞往这个航点时的巡航速度。单位一般是m/s。我个人习惯:

  • 转弯前减速到3-5 m/s
  • 直线段用8-12 m/s
  • 拍照航点用2-3 m/s

你想想看,如果拍照点还用10 m/s冲过去,照片肯定糊成一片。

3.2 航点动作:到了之后干什么

航点动作是航点的「灵魂」。没有动作的航点,就是个路过点。我早期做植保航线时,就靠动作来控制喷洒开关。

3.2.1 悬停

无人机到达航点后保持位置悬停,持续指定时间。单位是秒。悬停常用于:

  • 等待指令
  • 稳定姿态后再拍照
  • 多机协同时的同步点

我曾经在电力巡检中设了5秒悬停,就是为了让云台稳定下来再拍绝缘子。效果很好。

3.2.2 拍照

触发相机快门。这里有个细节:拍照动作通常和悬停配合使用。先悬停1-2秒,再拍照,能有效减少运动模糊。

拍照参数一般包括:

参数 说明 建议值
拍照模式 单拍 / 连拍 / 定时拍 测绘用定时拍
悬停时间 拍照前稳定时间 1-3秒
照片格式 JPEG / RAW / JPEG+RAW 测绘用RAW

3.2.3 舵机/云台控制

这个动作比较高级。你可以控制:

  • 云台俯仰:调整相机角度
  • 舵机角度:比如投掷器、喷洒阀门
  • 负载开关:打开或关闭挂载设备

经验之谈:舵机动作最好在悬停状态下执行。我曾经在飞行中直接触发舵机,结果无人机姿态突变,差点失控。先悬停,再动作,这是铁律。

3.3 航点属性:怎么飞过去

航点属性决定了无人机如何到达这个航点。很多人只关注位置和动作,忽略了属性,结果航线飞得又抖又费电。

3.3.1 转弯半径

无人机从一个航点飞向下一个航点时,不会走直角。它会提前转弯。转弯半径就是控制这个「提前量」的。

  • 半径越大:航线越平滑,速度损失小,但会偏离直线路径
  • 半径越小:航线越贴近规划路径,但速度会降低,姿态变化大

我一般这样设:

  • 测绘航线:半径3-5米,保证覆盖均匀
  • 巡检航线:半径1-2米,精确贴近目标
  • 高速航线:半径8-10米,减少能量损耗

3.3.2 航向模式

这个属性很多人搞混。它控制的是无人机机头朝向。常见模式:

模式 说明 适用场景
自动 机头始终指向下一个航点 通用飞行
锁定 机头保持固定朝向 侧方拍摄、线缆巡检
自定义 指定绝对或相对角度 精准云台对位

举个例子:你在巡检高压线时,如果航向模式用「自动」,无人机会一直对着下一个塔飞,云台得不停调整。换成「锁定」模式,机头始终朝北,云台只需微调俯仰,画面稳定多了。

3.3.3 到达容忍度

这个属性很多人不知道。它定义了「无人机离航点多近就算到达了」。默认一般是0.5米。但在某些场景下:

  • 大风天:容忍度可以放宽到1-2米,否则无人机永远到不了
  • 精准悬停:容忍度设到0.2米,但会消耗更多电量

避坑指南:我曾经在山区做航线测试,风很大,容忍度设了0.3米。结果无人机在每个航点都来回调整,飞了20分钟就没电了。后来改成1.5米,任务顺利完成。容忍度不是越小越好,要结合实际环境。

3.4 完整航点数据结构示例

说了这么多,咱们看一个实际的数据结构。以JSON格式为例:

{
  "waypoint": {
    "location": {
      "lat": 39.9042,
      "lon": 116.4074,
      "altitude": {
        "value": 100.0,
        "type": "relative"   // relative 或 absolute
      }
    },
    "speed": 8.0,            // m/s
    "action": {
      "type": "photo",       // hover / photo / servo
      "hover_time": 2.0,     // 悬停秒数
      "servo_angle": null,   // 舵机角度,非舵机动作时为null
      "photo_params": {
        "mode": "single",
        "format": "jpeg"
      }
    },
    "properties": {
      "turn_radius": 3.0,    // 转弯半径,米
      "heading_mode": "auto", // auto / lock / custom
      "heading_angle": null,  // 自定义航向角度
      "arrival_tolerance": 0.5 // 到达容忍度,米
    }
  }
}

你看,一个完整的航点,包含了位置、速度、动作、属性四大块。缺了任何一块,航线都可能出问题。

我的习惯:每次写航线文件前,先画一个航点属性矩阵。横轴是航点序号,纵轴是动作和属性。这样一眼就能看出哪些航点需要特殊处理,避免遗漏。

好了,航点数据结构就讲到这里。记住:定义是基础,动作是功能,属性是优化。三者配合好了,你的航线才能飞得稳、拍得清、跑得远。