3. 航迹规划核心要素:起点/终点坐标、飞行高度层、航点序列、时间窗口、能量约束
各位同行,今天我们来聊聊航迹规划里最实在的东西。说白了,就是五个核心要素。我做了这么多年无人机系统,见过太多规划器跑出来的轨迹看着漂亮,一飞就出问题。为什么?就是这五个要素没吃透。
嗯,咱们一个一个来拆解。
3.1 起点/终点坐标:不只是经纬度
起点和终点,听起来简单对吧?不就是经纬度加海拔?我告诉你,没那么简单。
我在项目中遇到过一件事:某次城市物流配送测试,起点设在楼顶停机坪,终点在另一个写字楼的收货平台。规划员只给了经纬度,结果无人机起飞后一直找不到正确的起飞朝向——因为起点坐标里没包含航向角。
所以,一个完整的起点/终点坐标,应该包含:
- 经纬度(WGS84坐标系,精度到小数点后6位)
- 海拔高度(建议使用EGM96大地水准面,别用气压高度)
- 航向角(起飞/降落时的机头朝向,0°为正北)
- 安全半径(起点/终点周围的禁入区半径,通常5-10米)
核心经验:起点和终点的海拔高度,一定要用RTK实测值,别信地图API。城市里高楼反射严重,地图海拔误差能到5米以上——这个高度差足够让无人机撞上障碍物了。
3.2 飞行高度层:城市空域的「分层艺术」
城市低空空域怎么分?我个人的习惯是,按安全优先级来分层,而不是按高度均匀切分。
你想想看,城市里最危险的是什么?是地面的人和车,还有低矮的障碍物(电线杆、树木、路灯)。所以高度越低,风险越大,越需要严格管控。
我建议的分层方案是这样的:
| 高度层 | 高度范围 | 典型用途 | 风险等级 |
|---|---|---|---|
| 超低空层 | 0-30m | 起降、悬停、紧急降落 | 极高 |
| 低空作业层 | 30-80m | 物流配送、巡检、测绘 | 高 |
| 中空巡航层 | 80-150m | 长距离航线、城市间飞行 | 中 |
| 高空过渡层 | 150-300m | 跨区域飞行、应急通道 | 低 |
注意:每个高度层之间要留至少10米的缓冲带。我曾经见过一个案例,两架无人机在80米和90米高度飞行,结果一架因为气压计漂移,实际高度掉了12米,直接闯入了下层空域——差点撞上。
3.3 航点序列:路径的「骨架」
航点序列,说白了就是无人机要经过的「打卡点」。但这里有个坑:很多人把航点当成直线连接,忽略了转弯半径和动态约束。
我建议的航点设计原则:
- 航点间距:城市环境建议50-100米一个航点。太密了计算量大,太疏了容易撞楼。
- 转弯半径:每个航点处要预留转弯半径。固定翼至少30米,多旋翼可以小一些,但别小于5米。
- 高度渐变:相邻航点的高度变化不要超过10米/100米。突然爬升或下降,不仅费电,还容易触发飞控的保护逻辑。
一个小技巧:我习惯在航点序列里插入「虚拟航点」——就是那些无人机不会真正悬停,但用来控制飞行轨迹的点。比如在转弯处前后各加一个虚拟航点,能让轨迹更平滑,减少能量消耗。
3.4 时间窗口:不是你想飞就能飞
时间窗口,这个要素很多人会忽略。但城市空域管理里,时间窗口就是「通行证」。
为什么要有时间窗口?
- 空域共享:同一片空域可能有多架无人机同时飞行,时间窗口就是排班表。
- 噪声管控:很多城市规定晚上10点到早上6点禁止无人机飞行(尤其是物流无人机)。
- 气象窗口:风速超过8m/s、能见度低于2公里、有降水——这些时间段都不适合飞行。
我记得有一次帮客户做城市配送规划,他们要求早上8点到9点之间完成所有配送。结果一算,那个时间段正好是城市早高峰,地面人流密集,空域管控等级最高——根本批不下来。后来我们调整到上午10点到11点,才顺利通过审批。
时间窗口的黄金法则:预留至少30%的缓冲时间。比如任务需要20分钟,时间窗口至少要给26分钟。城市里突发情况太多——突然的侧风、临时的空域管制、GPS信号丢失——没有缓冲时间,任务大概率会失败。
3.5 能量约束:飞得回去才是硬道理
能量约束,说白了就是电池够不够用。但这里有个误区:很多人只看续航时间,忽略了能量消耗的动态变化。
我建议的能量约束模型包含三个维度:
- 基础能耗:平飞时的功率消耗,跟速度、重量、空气密度有关。
- 机动能耗:转弯、爬升、下降时的额外能耗。爬升100米消耗的能量,相当于平飞500米。
- 安全余量:至少保留20%的电量用于应急。我曾经遇到过无人机在返航途中遇到强逆风,电量从30%直接掉到12%——幸好预留了安全余量,不然就炸机了。
这里给一个简单的能量计算公式(我项目里常用的):
# 能量约束检查函数
def check_energy_constraint(route, battery_capacity_wh, reserve_ratio=0.2):
"""
route: 航点序列 [(lat, lon, alt, speed), ...]
battery_capacity_wh: 电池总能量 (瓦时)
reserve_ratio: 安全余量比例
"""
total_energy = 0
for i in range(len(route) - 1):
p1, p2 = route[i], route[i+1]
# 水平距离 (km)
dist_h = haversine(p1[0], p1[1], p2[0], p2[1])
# 垂直高度变化 (m)
delta_h = p2[2] - p1[2]
# 速度 (m/s)
speed = p2[3]
# 基础能耗 (Wh/km) - 经验公式
base_energy = 15 + 0.02 * speed**2
# 爬升能耗 (Wh/100m)
climb_energy = max(0, delta_h) * 0.8
# 下降可回收 (Wh/100m) - 仅部分回收
descend_energy = min(0, delta_h) * 0.3
segment_energy = dist_h * base_energy + climb_energy + descend_energy
total_energy += segment_energy
usable_energy = battery_capacity_wh * (1 - reserve_ratio)
return total_energy <= usable_energy, total_energy, usable_energy
警告:千万别信电池标称容量。实际可用容量通常只有标称的80%-90%(受温度、老化影响)。我一般会在规划时把电池容量打8折,这样飞起来心里踏实。
知识体系总览
这五个要素不是孤立的,它们互相影响。我画了一张图,帮你理清关系:
这五个要素,说白了就是航迹规划的「五根柱子」。少一根,整个规划就站不稳。我个人的习惯是,每次做规划前先列一个检查清单,把这五个要素逐个过一遍——坐标对不对?高度层选没选对?航点够不够平滑?时间窗口有没有冲突?电量够不够飞回来?
嗯,做到这五点,你的航迹规划至少不会出大问题。剩下的,就是经验积累了。