3. 返航路径规划基础
当无人系统判定必须返航时,它面对的第一个问题不是“怎么飞”,而是“环境怎么描述、路径怎么表达、什么算好路径”。返航路径规划的本质,是在一个离散或连续的环境模型上,寻找一条从当前位置回到返航点、满足安全约束且代价最小的可行路径。本节围绕四类主流表示方法——栅格、路图、采样与势场法——说明它们如何生成返航路径,并给出代价函数设计与静态环境下最短安全路径的求解思路。
一、环境表示决定路径形态
路径规划的第一步是把连续世界转成算法可处理的结构。不同表示方法直接决定了路径的形态、计算量和安全性。
栅格法把空间划分为等尺寸单元格,每个格子标记为自由、占用或未知。返航时通常把占用格膨胀一个安全半径,形成“配置空间”,使路径点与障碍保持距离。栅格法的优点是实现简单、便于用 A*、Dijkstra 等图搜索求最短路径;缺点是分辨率与内存、计算量成平方甚至立方关系。例如 100 m × 100 m 区域用 0.5 m 栅格,就是 200 × 200 = 40000 个格子,若用 0.1 m 栅格则膨胀到 100 万个格子,实时性会明显下降。
路图法不铺满空间,而是抽取“可走的骨架”,如可视图、Voronoi 图。可视图把起点、终点与障碍顶点相连,路径贴障碍顶点走,往往是最短路径但安全裕度小;Voronoi 图则让路径尽量远离障碍,安全性好但路程更长。返航场景中,若已知静态障碍多边形,可视图适合求最短安全路径,Voronoi 适合求保守路径。
采样法如 RRT、PRM,在连续空间中随机撒点并连接无碰撞的边。它不需要精细栅格,适合高维或大范围环境,但路径随机、非最优,通常需要事后剪枝和平滑。返航时若环境未知或地图粗糙,采样法能快速给出一条可行路径,再交给优化器缩短。
势场法把目标点设为引力场、障碍设为斥力场,路径沿合力方向下降。它计算快、适合局部避障,但容易陷入局部极小值,例如障碍在目标正前方时,引力与斥力抵消,无人机会停在原地。因此势场法通常作为局部修正,而不是全局返航规划的唯一手段。
二、代价函数设计:什么算“好路径”
最短路径不等于最优返航路径。返航任务往往同时关心距离、安全、能耗和可跟踪性,因此需要把多个目标写进代价函数。常用形式是加权求和:
J = w1 * Σ d(p_i, p_{i+1}) // 路径长度
+ w2 * Σ 1 / (d_obs(p_i) + ε) // 障碍风险
+ w3 * Σ (Δh_i + k * Δθ_i) // 能耗(爬升与转弯)
+ w4 * Σ (θ_i - θ_{i-1})² // 平滑度
其中 d_obs 是路径点到最近障碍的距离,ε 是防止除零的小量,Δh 是高度变化,Δθ 是航向变化。权重需要按任务调:电量紧张时提高 w3,环境密集时提高 w2,需要快速返航时提高 w1。注意风险项是“距离越近代价越大”的倒数形式,它会让路径主动远离障碍,而不是贴着障碍走。
一个常见的教学示例:在 100 m × 100 m、0.5 m 栅格的静态环境中,起点 (5, 5),返航点 (95, 95),障碍为两个矩形。取 w1 = 1.0、w2 = 8.0、w3 = 0.5、w4 = 0.2。若只考虑长度,A* 会给出贴障碍的折线路径,长度约 134 m;加入风险项后,路径会绕开障碍顶点,长度增加到约 142 m,但最小障碍距离从 0.3 m 提升到 2.1 m。这个“用 8 m 路程换 1.8 m 安全裕度”的取舍,正是代价函数设计的核心。
三、静态环境下最短安全路径的求解
在静态已知环境中,最常用的求解流程是:栅格化 → 膨胀障碍 → 图搜索 → 路径平滑。以 A* 为例,其评价函数为 f(n) = g(n) + h(n),g(n) 是从起点到当前节点的实际代价,h(n) 是到返航点的启发式估计。栅格四邻域移动时 h 可用曼哈顿距离,八邻域可用对角距离或欧氏距离。启发式必须满足“不高估真实代价”,否则 A* 不再保证最优。
求解时还要处理两个工程细节。第一,障碍膨胀半径应不小于无人机安全半径加定位误差,例如安全半径 0.8 m、定位误差 0.5 m,则膨胀 1.3 m,宁可保守也不贴边。第二,搜索完成后要做路径平滑,常用方法包括:删除共线冗余点、用梯度下降或样条拟合缩短折线、再做一次碰撞检查。平滑后的路径更短、更易跟踪,但必须重新验证与障碍的距离。
四、方法选择与验证要点
四类方法并非互斥。工程上常见的组合是:用栅格或路图做全局规划,用采样法处理未知区域,用势场法做局部避障修正。选择依据可以归纳为:环境是否已知、障碍是否规则、计算资源是否充足、是否要求最优、安全裕度要求多高。
验证一条返航路径是否合格,至少检查三项:路径是否与膨胀后的障碍无碰撞;最小障碍距离是否大于安全阈值;按当前电量估算,路径能耗是否小于剩余可返航能量。只有三项都通过,这条路径才可作为返航候选路径下发。若任一不通过,应调整权重或更换表示方法重新求解,而不是直接执行。