3. 地形约束建模方法

航迹规划的本质,是在一个被各种地形条件限制的三维空间中寻找可行且较优的路径。要让规划算法“理解”地形,就必须把连续起伏的真实地表和人为划定的限制区域,转化为算法可计算的数学约束。本节围绕坡度、坡向、粗糙度、起伏度、障碍物高度、禁飞区/禁行区六类典型地形约束,说明它们的数学描述方式,并进一步区分硬约束与软约束,最后给出约束代价函数的设计思路。

一、从高程栅格到约束场

地形约束建模的起点通常是数字高程模型(DEM)。设某区域被离散为 M×N 的栅格,栅格 (i,j) 的中心高程为 h(i,j),栅格分辨率为 Δ(单位:米)。无人系统的位置可表示为 (x, y, z),其中 z 为离地高度或海拔高度,具体取决于坐标系约定。本节统一约定:h 为海拔高程,z 为飞行器海拔高度,离地高度 AGL = z − h。所有约束最终都作用在栅格或栅格间的连边上,形成一张“约束代价场”。

二、六类地形约束的数学描述

坡度(Slope)。坡度描述地表倾斜程度,是影响地面车辆通行和飞行器贴地飞行的关键因素。对栅格 (i,j),用中心差分近似梯度:

gx = (h(i+1,j) − h(i−1,j)) / (2Δ)
gy = (h(i,j+1) − h(i,j−1)) / (2Δ)
slope = arctan( sqrt(gx² + gy²) )

结果以度或弧度表示。坡度越大,地面车辆越难通行,飞行器贴地飞行时也越容易触发地形碰撞风险。

坡向(Aspect)。坡向是坡度方向在水平面上的投影方位角,定义为:

aspect = atan2(gy, gx)

通常以正北为 0°、顺时针为正。坡向本身不直接决定可行性,但会影响光照、风场和爬升方向选择。例如,逆坡爬升比顺坡下降更耗能,因此在代价函数中可作为方向性惩罚项。

粗糙度(Roughness)。粗糙度衡量局部地表的起伏剧烈程度。常用做法是计算窗口内高程的标准差或最大最小差:

roughness(i,j) = max(h) − min(h)   (窗口内)

粗糙度大意味着地表破碎、障碍密集,适合作为软约束,提高该区域的通行代价。

起伏度(Relief)。起伏度描述一定范围内的高程变化幅度,常以窗口内最高与最低高程之差表示。它与粗糙度的区别在于:粗糙度关注局部微地形,起伏度关注更大尺度的地形落差。起伏度可用于评估航段是否需要大幅爬升或下降。

障碍物高度。障碍物包括建筑物、塔杆、树木等。对每个障碍物,记录其平面位置 (xo, yo)、底面高程 hb 和顶部高程 ht。飞行器在位置 (x, y, z) 处与障碍物的安全关系可写为:

若 (x−xo)² + (y−yo)² ≤ (R + ds)² 且 z ≤ ht + dv
则判定为障碍冲突

其中 R 为障碍物等效半径,ds 为水平安全间隔,dv 为垂直安全间隔。

禁飞区/禁行区。禁飞区通常用多边形或圆柱体描述。对多边形禁飞区 P,点 (x,y) 是否在区内可用射线法或符号面积法判断;若在区内且高度低于限制高度 zmax,则视为侵入。禁行区同理,只是针对地面车辆。

地形约束建模:从高程栅格到约束代价场 DEM 高程栅格 h(i,j),分辨率 Δ 约束特征提取 坡度 slope = arctan(|∇h|) 坡向 aspect = atan2(gy, gx) 粗糙度 = max(h) − min(h) 起伏度 = 窗口高程差 障碍物高度 ht、hb 禁飞区多边形 P 硬约束 / 软约束 硬约束(不可违反) 禁飞区、障碍物、最大坡度 软约束(可权衡) 粗糙度、起伏度、坡向代价 约束代价函数设计 硬约束惩罚 J_hard = Σ M · I(违反) 软约束代价 J_soft = Σ w_k · f_k 总代价 J = J_hard + J_soft M 为极大惩罚值,w_k 为软约束权重,f_k 为归一化代价项 规划器在满足 J_hard = 0 的前提下最小化 J_soft

三、硬约束与软约束的区分

硬约束是“不可违反”的条件,一旦违反,路径直接判定为不可行。典型硬约束包括:禁飞区侵入、障碍物碰撞、坡度超过车辆最大爬坡能力、离地高度低于最小安全高度等。在数学上,硬约束通常写成可行域形式:

g_k(x, y, z) ≤ 0,  k = 1, 2, ..., K

软约束则是“可以违反但需付出代价”的条件,例如粗糙度、起伏度、坡向不利、偏离期望航线等。软约束不直接排除路径,而是通过代价函数影响优化结果。区分二者的关键在于:违反后是否还存在物理上可执行的路径。若不存在,就是硬约束;若存在但代价更高,就是软约束。

四、约束代价函数设计

实际规划中,常把硬约束转化为大惩罚项,与软约束代价合并为总代价:

J = Σ M · I(g_k > 0) + Σ w_k · f_k

其中 M 是远大于软约束代价的惩罚值,I(·) 为指示函数,w_k 为软约束权重,f_k 为归一化后的代价项。例如,坡度代价可写为 f_slope = max(0, slope − slope_max) / slope_max,粗糙度代价可写为 f_rough = roughness / roughness_ref。权重 w_k 的选取需要根据任务偏好调整:更看重安全性时,提高障碍物和禁飞区相关权重;更看重能耗时,提高坡度和起伏度权重。

建模提示:硬约束的惩罚值 M 不宜过大到导致数值溢出,也不宜过小到被软约束“淹没”。工程上常取软约束总代价的 10~100 倍,并配合归一化处理。

五、一个可复用的约束建模流程

  1. 读取 DEM 与障碍物/禁飞区矢量数据,统一到同一坐标系与分辨率。
  2. 逐栅格计算坡度、坡向、粗糙度、起伏度,生成四张特征栅格。
  3. 对障碍物和禁飞区做膨胀处理,膨胀量等于安全间隔 ds 与 dv。
  4. 按硬约束/软约束分类,分别写入可行域判断函数与代价函数。
  5. 在规划器中对每条候选路径计算 J,先检查硬约束是否全部满足,再比较软约束代价。