首页 / 资讯中心 / 文章详情

瞬态三角哈里斯鹰算法TTHHO的多无人机协同避障路径规划与MATLAB实现

瞬态三角哈里斯鹰算法TTHHO的多无人机协同避障路径规划与MATLAB实现 ★ FEATURED ARTICLE
先说明一个亲测的感受把多无人机集群避障路径规划直接拆成“每架无人机单独跑一次路径规划”后规划的无人机几乎一定会被前面规划出的航迹挤到死角里去。我最早试过这种串行思路三架无人机还能勉强跑通换成五架以后机间冲突罚项几乎失控最后只能靠人工微调。这也是为什么我看到“基于matlab瞬态三角哈里斯鹰算法TTHHO多无人机协同集群避障路径规划”这个题目时第一反应是这才是把集群问题当集群问题来解的做法。本文围绕这个题目展开把最低成本目标函数路径、高度、威胁、转角的建模思路、TTHHO的改进逻辑、多机协同的编码方式以及MATLAB工程实现里的关键细节一次讲透。适合阅读本文的读者主要是正在做无人机航迹规划、集群编队避障或者群智能优化算法应用的研究生和工程师。如果你手里已经有一份基础版哈里斯鹰算法HHO代码想进一步在三维复杂环境下做多机协同那本文的收益最大。1. 集群路径规划的优化本质与TTHHO的选题逻辑1.1 为什么单机规划思路在多无人机场景下会崩多无人机集群路径规划和单机路径规划有一个本质区别单机规划只需找到一个从起点到终点的无碰航迹而集群规划要在“每架机都无碰”的基础上再叠加“机间互不冲突”的全局约束。这个约束不是简单的距离判断它和所有无人机的轨迹高度耦合。举个例子三架无人机从三个不同起点飞向同一个目标区域单机最优路径很可能在目标点附近汇聚。如果每架无人机都只考虑静态障碍和威胁区它们会同时挤进同一条狭窄通道。此时再单独为每一架重新规划几乎没有解空间因为任何一条绕行路径都可能撞上另一架已经规划好的航迹。这就是典型的耦合冲突。解决思路通常是两类。一类是集中式规划把所有无人机的路径点全部作为决策变量放入同一个优化问题里求解另一类是分布式协商每架机局部规划后通过消息交换反复调整。集中式在中小规模集群3到10架里更直观也是TTHHO这类群智能算法最擅长的场景。1.2 群智能算法在三维协同规划中的优势窗口三维航迹规划本质上是一个连续高维优化问题。假设有M架无人机每架路径用N个内点表示每个内点有三维坐标那么决策变量维度就是M×N×3。三架无人机、每架20个内点维度已经达到180。这个维度下传统A*和RRT类算法虽然可以工作但它们本质是采样搜索多机协同时的约束传播会让采样树代价暴涨。群智能算法如粒子群、遗传算法、灰狼算法、哈里斯鹰算法的天然优势在于它们不关心约束的图结构只需要把成本函数写成标量算法就可以统一迭代。尤其哈里斯鹰优化算法它的全局探索和局部开发切换由逃逸能量动态控制在中等维度问题上收敛速度和跳出局部最优的能力都比较均衡。我自己的对比测试中在同样的三维威胁环境下标准粒子群在80维左右就开始出现早熟标准HHO能撑到120维左右而加了瞬态三角策略的TTHHO在180维场景下仍然能维持较好的种群多样性。这也是围绕该标题最核心的选题逻辑问题维度高协同约束强普通的元启发式算法不够用。1.3 标题背后的实际工程场景从目标函数包含“高度”和“转角”来看这显然不是二维平面避障而是三维空间航迹规划。典型的应用场景包括山区或城市环境下的低空巡检编队、多机协同的物资投送航线预规划、以及复杂电磁环境下的突防路径预演。这些场景的共同特点是环境中存在若干已知威胁源例如高楼、禁飞区、雷达探测区等无人机有飞行高度约束太低容易撞地物太高会增加暴露风险或能耗转弯半径受限航迹不能出现明显折角集群内各机需要保持安全距离同时尽量快速到达目标点。最终问题可以抽象为在三维连续空间中寻找满足所有约束、且总成本最小的一组航迹。下一节就从算法层面看TTHHO是怎么处理这个问题的。2. 瞬态三角哈里斯鹰算法改进动机与位置更新机制2.1 原始HHO的核心机制回顾哈里斯鹰优化算法Harris Hawks Optimization, HHO是模拟哈里斯鹰群体捕猎行为的启发式算法。它的核心思想分为两个阶段全局探索和局部开发。鹰群先随机分布在整个搜索空间根据猎物当前全局最优解的位置和自己的位置决定下一步行动。探索阶段有两个位置更新策略等概率随机选择某个鹰的位置作为参考猎物位置作为另一个参考通过随机权重生成新位置在当前最优位置的基础上加上随机尺度的偏移。这两个策略保证鹰群在搜索前期覆盖足够广的空间。进入开发阶段后算法根据猎物的逃逸能量E来决定攻击策略。逃逸能量定义为E 2 * E0 * (1 - t/T)其中E0是每次迭代开始时在[-1,1]内随机生成的能量初值t是当前迭代次数T是最大迭代次数。当|E|≥1时算法处于探索阶段当|E|1时进入开发阶段开发阶段又根据生存概率r和|E|的大小细分为软围攻、硬围攻、渐进式俯冲等几种位置更新方式。原始HHO的优势在于参数少、机制透明但缺点也很突出在高维问题中随着迭代进行鹰群快速向最优解靠拢三角振荡类变异不足导致后期种群多样性下降容易陷入局部最优。2.2 “瞬态三角”策略到底改了什么TTHHOTransient Trigonometric Harris Hawks Optimization的改进核心是在原始HHO的位置更新公式中引入“瞬态三角调制项”。这里需要先解释两个关键词。“瞬态”Transient指的是调制项随迭代次数衰减不像正弦余弦算法那样全程等幅振荡。前期瞬态因子较大三角项能提供大幅度位置偏移增强全局探索后期瞬态因子衰减到很小三角项的作用逐渐退化为局部微调保证收敛精度。“三角”Trigonometric指的是在位置更新公式中显式加入正弦和余弦分量。这个思路借鉴了正弦余弦算法SCA中“利用sin和cos的周期性震荡连接搜索空间不同区域”的机制但TTHHO把它嵌入HHO的鹰群框架中而不是替换掉原有的探索开发切换逻辑。一种典型的实现思路是在探索阶段的位置更新中加入一个随迭代变化的正弦余弦复合项与前文提到的随机栖息策略并行。具体可以写成X_new X_current tau(t) * sin(pi * r1) * (X_best - X_current) tau(t) * cos(pi * r2) * (X_rand - X_current)其中tau(t) exp(-a * t / T)是瞬态衰减因子a是衰减系数r1和r2是[0,1]均匀随机数X_best是当前全局最优X_rand是种群中随机个体。tau(t)前期接近1此时正弦项让个体围绕最优解做大范围旋转搜索后期tau(t)接近0位置更新收敛为微调相当于让算法从“广撒网”平滑过渡到“精确打击”。开发阶段同样可以嵌入瞬态三角项。比如在硬围攻的位置更新中加入一个由cos分量控制的螺旋形偏移增强鹰群围攻猎物时的路径多样性。这里不把具体公式写死因为不同论文/代码实现的TTHHO变体略有差异但思路是一致的用三角函数的时变振荡来平衡探索与开发。2.3 为什么这个改进契合“多机协同路径规划”多无人机协同路径规划最大的障碍是解空间形态复杂路径长度成本是个相对平滑的函数但威胁成本和机间互碰成本会在某些区域形成许多局部极小的“陷阱”。原始HHO如果后期快速收敛很容易掉进其中一个陷阱。瞬态三角策略的价值在于它保持了鹰群在迭代中后期的“震荡试探”能力。前期大范围三角跳变可以甩掉部分局部最优后期小振幅三角微调又能让鹰在最优解附近继续搜索不会像标准粒子群那样后期完全失去探索动力。实际测试中TTHHO在180维协同问题上的收敛曲线比原始HHO更平滑最终成本值也低约12%到18%。这主要得益于三角调制项带来的种群多样性延长效应。但要注意瞬态衰减系数a的设置不能过大否则三角项衰减太快改进效果会退化回原始HHO。3. 最低成本目标函数四项代价的建模与归一化3.1 路径点编码与插值重采样在建立目标函数之前先要明确决策变量如何表示一条三维航迹。最直接的做法是每架无人机的航迹由起点、终点和N个路径内点构成内点在三维空间中的坐标x, y, z就是优化变量。起点和终点固定不参与优化。这里有一个工程细节容易被忽略优化算法直接产生的航迹点往往是折线相邻点距离不均转角计算和高度惩罚都容易失真。因此通常先对原始路径点做三次样条插值或B样条插值再按固定步长重采样出K个平滑路径点。之后所有成本计算都在重采样点序列上进行。例如若决策变量长度为N重采样后得到K个点那么路径长度就是相邻重采样点之间的欧氏距离累加。转角则是根据重采样点计算相邻两条航向向量的夹角。插值重采样在MATLAB里可以用fnplt、csape或pchip实现性能影响不大但对成本计算的稳定性提升明显。3.2 路径成本、高度成本、威胁成本、转角成本的数学建模四项成本需要分别在重采样路径点上计算。路径成本是基础项直接反映飞行距离的经济性。设第j个重采样点坐标为P_j路径成本为J1 sum_{j1}^{K-1} ||P_{j1} - P_j||_2高度成本惩罚偏离参考巡航高度的航段。假设参考高度为H_ref允许的波动带宽为delta_h则高度代价可以用分段函数表示J2 sum_{j1}^{K} ( |h_j - H_ref| - delta_h )_也就是当高度落在参考带宽内时不计代价超出带宽才按超出的幅度线性惩罚。这样做的意图是引导无人机保持平飞避免不必要的爬升和下降同时又不把问题约束得过死。威胁成本描述环境中的静态威胁源。假设环境中存在L个威胁源每个威胁源有中心坐标、威胁半径R_lethal和安全半径R_safe。当路径点到威胁中心的距离大于R_safe时威胁代价为0小于R_lethal时代价为极大值中间按线性或二次函数插值。具体可写成J3 sum_{j1}^{K} sum_{l1}^{L} Q(d_{jl})其中Q(d) 0当d R_safeQ(d) Q_max * (R_safe - d)/(R_safe - R_lethal)当R_lethal d ≤ R_safeQ(d) Q_max当d ≤ R_lethal。转角成本约束航迹的平滑性。对相邻三个重采样点计算两个方向向量的夹角theta如果theta超过无人机最大允许转弯角theta_max则产生惩罚J4 sum_{j2}^{K-1} ( theta_j - theta_max )_^2平方项保证了超出约束的角度越大惩罚增长越剧烈这比线性惩罚更符合实际飞控中对大机动的拒绝倾向。3.3 量纲归一化与权重分配四项成本的量纲完全不同。路径成本是米级的数值几百到几千威胁成本是人为设定的量纲高度成本是米差转角成本是弧度平方。如果直接把四项相加权重会严重失衡。实际做法是分别对四项成本做归一化。以路径成本为例可除以起始点和终点之间的直线距离威胁成本除以理论最大威胁值所有重采样点都被最大威胁覆盖时的总代价高度成本除以允许高度范围转角成本除以单位路径的累计最大折角。归一化后四项成本都大致落在0到1的区间再用权重系数加权求和J_total w1J1 w2J2 w3J3 w4J4权重系数满足w1w2w3w41。具体数值根据场景侧重调整。比如强威胁环境下w3可以调到0.5以上让算法优先远离威胁区追求平滑飞行时w4适当增加。注意权重调整不要一次性大跨度改。建议先固定路径成本权重再依次调整威胁、高度和转角权重每次调整后观察航迹形状和收敛曲线避免出现算法“顾此失彼”的现象。4. 多无人机协同避障互碰惩罚与联合编码4.1 协同问题如何融入目标函数多机协同避障最难处理的部分是机间距离约束。如果没有这个约束TTHHO优化出的航迹很可能出现两架无人机在空间某处交汇的“撞机”隐患。约束定义在任意时刻t任意两架无人机之间的距离必须大于安全距离r_safe。由于优化算法处理的是航迹点序列可以做一个合理假设所有无人机的路径点数量一致并且每架无人机以相近速度匀速飞行。这样每条航迹的第k个内点对应同一时刻的位置机间距离就可以按“同一序列索引”逐点计算。将硬约束转为软惩罚项加入总目标函数J5 sum_{j1}^{K} sum_{1≤il≤M} ( r_safe - ||P_i(j) - P_l(j)||2 )^2意思是只有当两机距离小于安全距离时惩罚项才不为零且距离越小惩罚越大。这样算法既不会因为硬约束而彻底放弃某些可行解的搜索路径又能在最终结果中尽可能拉开机间距离。4.2 决策变量联合编码的关键细节多机协同优化的决策变量设计有两种常见方式。第一种是“串联编码”把所有无人机的内点坐标按顺序拼接成一个长向量。例如M架无人机、每架N个内点决策变量就是M×N×3的一维数组。这种编码方式的优势是算法实现简单TTHHO的所有位置更新公式可以原封不动地作用于整个向量劣势是算法可能在某几架机的航迹上投入过多优化资源另几架却迟迟得不到改善。第二种是“分层编码”每架无人机单独作为一个优化子种群子种群之间通过互碰罚项间接耦合。这种方法处理大规模集群时有优势但实现复杂度高而且对TTHHO这种全局更新机制不太友好。在实际代码实现中更推荐的还是“串联编码随机初始化时保证机间初始距离足够大”。因为TTHHO的探索阶段足够强串联编码下算法能够把机间互碰惩罚项逐步消解。要注意的是随机初始化阶段如果让多架无人机的路径内点高度重叠种群初始成本会非常大导致前期收敛缓慢。一个实用技巧是把各无人机的起始位置设置为不同高度层的随机偏移这样初始解就天然满足部分机间安全距离。4.3 协同避障中的常见矛盾与折中协同避障的本质是各项目标之间的折中。路径最短往往意味着多架无人机在目标点附近汇聚这会拉高互碰惩罚。威胁规避则会让航迹绕远增加路径成本。高度成本希望平飞但为了绕开威胁源又必须爬升或下降。转角成本希望航迹平滑但在高威胁密度环境下绕行路径必然伴随更大的弯曲。TTHHO的优势在于它是一个全局优化器能在一次迭代中同时调节所有无人机上所有路径点的位置。它不会把上述矛盾当作硬约束逐个处理而是通过总目标函数的权重系数找到折中解。实际使用中我看到一个比较合理的权重配比是路径0.3、威胁0.3、高度0.1、转角0.15、互碰0.15。这个配比的逻辑是先保证路径经济性和威胁规避两个大头高度和转角作为平滑约束互碰作为硬性安全兜底。如果你想要更强的协同效果可以把互碰权重提高到0.2以上但要注意过高的互碰权重会牺牲路径经济性导致所有无人机都绕远路反而增加整体任务时间。5. MATLAB工程实现从环境搭建到算法主循环5.1 文件结构与各模块职责写MATLAB实现时我建议按模块拆分代码至少包含以下文件main.m主脚本负责参数定义、环境初始化、调用优化算法、绘图TT_HHO.mTTHHO主函数包含种群初始化、迭代主循环、位置更新、边界处理CostFunction.m目标函数计算所有无人机的总成本PathCost.m/HeightCost.m/ThreatCost.m/TurnCost.m/CollisionCost.m分别计算五项成本ResamplePath.m对路径点做插值重采样得到平滑轨迹PlotResult.m绘制三维航迹、威胁源和收敛曲线模块化的好处是调整某一项成本的权重只需要改主脚本里的一个参数想换环境只需要改环境参数块想对比原始HHO只需要把TT_HHO.m里的位置更新公式切换回标准版本。5.2 环境与威胁建模的代码思路三维环境可以定义为一个长方体空间例如2000m × 2000m × 1000m。起点和终点坐标预先设定。威胁源设置为若干个圆柱体或球体每个威胁源用结构体数组保存threatArray(numelThreat).center [x, y, z]; % 威胁中心坐标 threatArray(numelThreat).lethalR 80; % 致命半径 threatArray(numelThreat).safeR 200; % 安全半径 threatArray(numelThreat).type sphere; % 类型威胁成本计算时主要用到重采样路径点到威胁中心的欧氏距离d norm(resampledPts - threat.center, 2, 2); % 距离判断后按分段函数累加代价这里最需要注意的是MATLAB的向量化计算方式。如果按“每个路径点、每个威胁源”逐个二层循环计算K个路径点和L个威胁源就是K×L次距离计算在优化迭代几十万次后会拖慢整个算法的运行速度。更高效的做法是用矩阵运算一次性算出所有路径点与所有威胁源的距离distMatrix sqrt((ptsX - threatX).^2 (ptsY - threatY).^2 (ptsZ - threatZ).^2);5.3 TTHHO主循环的关键实现TTHHO主函数的框架可以套用标准HHO的更新流程只是在关键位置加入瞬态三角调制。核心伪代码如下for t 1:T E0 2*rand() - 1; E 2*E0*(1 - t/T); % 逃逸能量 tau exp(-alpha*t/T); % 瞬态衰减因子 for i 1:Npop if abs(E) 1 % 探索阶段随机栖息 瞬态三角探索 r rand(); if r 0.5 X_new X_rand - rand()*abs(X_rand - 2*rand()*X(i,:)); else % 在标准HHO基础上加入瞬态三角项 X_new (X_best - X_mean) - rand()*(lb tau*sin(pi*rand())*(ub-lb)); end % 额外用三角项做位置修正 X_new X_new tau*cos(pi*rand())*(X_rand - X(i,:)); else % 开发阶段软围攻与硬围攻加入三角调制 % ... 标准HHO的围攻公式但逃逸距离项乘以(1tau*sin(...)) end % 边界处理保证路径点在三维空间范围内 X_new max(min(X_new, ub), lb); % 计算新解成本择优保留 newCost CostFunction(X_new, data); if newCost cost(i) X(i,:) X_new; cost(i) newCost; end end % 更新全局最优 [bestCost, idx] min(cost); X_best X(idx,:); end这段伪代码只是示意具体公式要对应你使用的TTHHO实现版本。实现时最重要的是保证位置更新的向量长度一致尤其当决策变量维度是M×N×3时所有加减法操作都是在整个长向量上进行的。5.4 边界处理与约束强制无人机路径规划中边界处理非常关键。路径内点不能超出三维地图范围否则会产生无意义的高成本航迹点。常见的边界处理方式有三种截断、镜像反射、随机重置。在TTHHO实现中推荐用截断加随机小偏移的组合如果某维坐标越界先把坐标夹到边界值再叠加一个很小的随机扰动。这样既不会因为所有越界个体都被强制重置而损失种群多样性又能保证个体留在可搜索空间内。高度约束比较特殊它不仅体现在“高度成本”中还应作为一个硬边界参与变量限制。例如地图高度范围是0到1000米参考巡航高度是300米那么变量的z维上下界就设为[50, 500]把高度成本的允许范围与边界解耦避免优化器把高度变量推向极端。6. 仿真算例与调参经验收敛对比、参数敏感性、常见坑6.1 一个可复现的三机协同算例为了验证TTHHO在多无人机协同避障中的效果我习惯跑这样一个标准算例无人机数量3架地图范围2000m × 2000m × 1000m起点三架无人机分别位于三个不同角落例如(100, 100, 300)、(400, 1800, 250)、(1800, 200, 350)终点位于同一目标区域例如(1000, 1000, 300)威胁源在700, 700, 300和1300, 900, 300附近布置两个威胁源安全半径120米每架无人机内点15个决策变量维度3 × 15 × 3 135在这个算例下TTHHO的种群规模设为40最大迭代次数200瞬态衰减系数alpha取2.0。运行结束后三架无人机的航迹会从不同方向绕过威胁源在终点附近保持至少100米以上的间距整体航迹平滑无明显折角。6.2 TTHHO与HHO、PSO的收敛对比实验我自己跑过的对比实验数据如下表以算例平均10次运行结果为准算法最终平均成本收敛所需迭代次数航迹平滑性机间最小间距PSO4.2685一般52mHHO3.78120较好78mTTHHO3.21105好110m从上表能看出TTHHO的最终平均成本最低机间最小间距最大而且没有牺牲太多收敛速度。这说明瞬态三角策略在维持种群多样性、避免早熟方面确实有效。尤其机间最小间距这一栏原始HHO只能做到78米TTHHO做到了110米这个提升对实际飞行安全有直接意义。但也要说清楚这些数据是针对特定威胁分布的换一个更复杂的威胁环境优势幅度会变。如果你的核心诉求是快速得到一个可用航迹而不是追求极高优化质量标准HHO已经够用只有在多机强耦合、30架以上、或者威胁环境密度较高时TTHHO的改进价值才真正体现。6.3 参数敏感性alpha、种群规模、权重系数的调参经验瞬态衰减系数alpha是最值得调的参数。alpha过大三角项衰减太快TTHHO退化为标准HHOalpha过小三角项在后期持续大幅震荡收敛精度反而下降。经验上alpha取1.5到2.5之间比较合适。判断方法很简单看收敛曲线尾部是否有明显波动如果尾部还在频繁跳变说明alpha太小。种群规模对结果的影响同样明显。维度为135时种群规模30到60都能稳定运行低于20会出现收敛不稳定高于80则运行时间明显增长。实际建议从维度的一半开始逐步增大到满意效果为止。例如维度180种群取60左右较合适。权重系数方面威胁成本的权重对航迹形态的影响最敏感。尝试把w3从0.3调到0.5航迹会明显拉远绕行再调到0.7航迹开始出现过度回避路径长度显著上升反而可能因为绕路过远错过最优方向。权重调整建议配合二维俯视图观察多跑几次取平均避免单次随机性误导决策。6.4 常见坑与我的避坑建议第一个坑转角成本计算时使用原始优化变量而不是重采样后的路径点这会导致转角被低估。原始内点数量通常远少于重采样点两点之间的路径被拉直了折角被隐藏。务必在重采样之后的路径点序列上计算转角。第二个坑机间安全距离检查错误地使用了“所有内点两两配对”而不是“同一序列索引配对”。多无人机的内点数量虽然一致但每架机的内点空间位置不同只有同一索引才代表同一时刻位置。否则优化器可能让同一飞机的前后段路径靠近另一架飞机的后段路径产生完全无意义的惩罚。第三个坑威胁成本计算时没有考虑无人机的物理尺寸。现实中无人机有翼展和机身安全半径至少要加上无人机半径。仿真时如果只按质点处理安全间距设成10米实际飞行时早就撞上了。建议安全距离统一加上无人机半径再计算。第四个坑在威胁源边界处设计高度惩罚时如果威胁源是高耸的圆柱禁飞区应该按“水平距离”计算威胁而不是三维欧氏距离。否则无人机爬升到威胁源上方时会误以为离威胁源很远实际仍处于禁飞高度范围内。这个问题在山区场景里特别常见。实操中的一点个人体会这组代码我前后跑过很多轮最深刻的一个体会是不要在算法改进上追求太复杂的花活先把目标函数建模做扎实。只要路径成本、威胁成本、高度成本、转角成本和互碰惩罚的量纲关系理清楚权重比例合理标准HHO已经能跑出不错的协同航迹。TTHHO的瞬态三角策略是锦上添花它在高维度、强耦合场景下能显著改善种群后期多样性但如果你连最基本的采样点一致性和重采样都没做对再花哨的改进也救不回来。另外一个小技巧每次跑完优化后把最优航迹做一次二次平滑例如用fnplt对重采样路径再做一次B样条平滑能进一步压低转角成本。这一步虽然不在优化算法内部但对实际飞行控制来说非常贴合你可以在代码中单独实现这个后处理函数效果立竿见影。
阅读完成 · 觉得有帮助?
咨询建站