☰
改进秃鹰搜索算法MBESP的AGV栅格地图路径规划与避障
2026/10/20 14:01:57 网站建设 项目流程

如果你做过AGV调度,或者碰过移动机器人的路径规划仿真,那对“栅格地图路径规划”这几个字肯定不陌生。一张20×20的地图,几十个黑色障碍栅格,从起点到终点找一条走得过去、走得快、还不蹭墙的路——这句话说起来轻巧,真在Matlab里跑起来,一堆细节能把人磨到怀疑人生。这次想分享一个可以直接跑通、也适合拿来扩展成论文项目的完整案例:基于改进的秃鹰搜索算法MBESP的AGV路径规划与避障,配套Matlab代码和论文。本文会把算法原理、改进思路、栅格建模、代码结构和调试技巧全部拆开讲,适合正在做毕设、准备竞赛,或者想快速上手智能优化路径规划的读者。

1. AGV路径规划与栅格地图:这个问题到底难在哪

1.1 AGV路径规划的基本需求

先想清楚一个问题:AGV要的路径,和地图软件导出的驾车路线有什么不同?最大的区别在于,AGV是有物理尺寸、有转弯约束、有安全距离要求的移动体,不是地图上的一个点。所以AGV路径规划本质上要同时满足三个约束:路径长度尽可能短,路径不能碰撞障碍物,路径要尽可能平滑——转弯太急,AGV的差速驱动或者舵轮驱动根本执行不了,哪怕算法算出来的路径再短也没用。

很多人第一次做栅格路径规划,以为就是用A搜一条最短路径就完事了。但实际项目里,A搜出来的路径贴障碍物贴得很近,甚至会在狭窄通道里走直线穿缝,这对真实AGV来说风险极高。所以后来大家更倾向于用智能优化算法,把“长度、平滑度、安全距离”揉进一个目标函数里,让算法自己去权衡,出来的路径往往更贴近工程可执行的标准。

1.2 栅格地图为什么是首选建模方式

栅格地图就是把环境均匀切成一格一格的正方形,每个格子要么是自由空间(0),要么被障碍物占据(1)。它最大的优点就是直观:不需要复杂的几何计算,一个二维矩阵就能完整表达环境。在Matlab里,用imagesc或者pcolor画出来,黑色障碍、白色自由空间一目了然,调试起来非常方便。

但栅格地图有两个细节要提前想好。第一是栅格粒度,格子太小,地图矩阵变大,算法每次计算适应度都要遍历大量点,计算量直线上升;格子太大,路径粗糙,通道信息丢失。我一般用20×20到30×30之间的地图做算法验证,原因很简单:能体现算法的搜索能力,又不会让普通电脑跑一分钟以上。第二是要做障碍物膨胀。AGV不是质点,它有车体宽度,所以实际规划之前要把障碍物栅格向外扩一圈,相当于给AGV留出安全半径。这一步不做,后面算法跑出来的路径再美都没用,实车一上去就是事故。

1.3 经典方法够用,为什么还要上智能优化算法

A*、Dijkstra这类经典算法在静态地图上确实高效,而且能保证找到最短路径。但它们的短板也很明显:第一,A的路径节点受栅格约束,要么走直线要么斜线,转折非常生硬,后续要做平滑也得花功夫;第二,在大地图或者有多个AGV需要动态重规划的场景下,反复调A的计算开销很扎心;第三,如果任务里加入“远离障碍物”“转弯少”这类额外目标,A*的代价函数写起来会很别扭,改来改去都绕。

智能优化算法这时候就派上用场了。遗传算法GA、粒子群PSO、蚁群ACO都被人用来做过路径规划,各有各的毛病:GA容易早熟,PSO后期收敛慢,ACO在大地图上收敛速度太慢。秃鹰搜索算法BES是2020年前后提出来的一种群智能算法,模仿秃鹰捕食时的搜索、盘旋、俯冲三个行为,在有界搜索能力和收敛速度之间有一个不错的平衡。但这算法不是拿来就能直接用在路径规划上——直接跑,十次有七八次会陷入局部最优,所以才是这个项目里的主角:改进的秃鹰搜索算法MBESP。

2. 秃鹰搜索算法BES的原理,以及MBESP改进了什么

2.1 BES算法里的三个捕食阶段

秃鹰搜索算法的灵感来源是秃鹰的捕食过程。一只秃鹰在广阔水域上空找鱼,不会闷头乱飞,而是有一套很清晰的策略:先飞到可能有鱼的区域,再在选定区域上空盘旋锁定目标,最后俯冲入水抓到鱼再飞走。BES算法把整个过程拆成三个阶段,每个阶段对应一种位置更新规则。

第一阶段叫“选择搜索空间”。秃鹰先在当前最优位置附近随机选择一个区域作为捕食候选区,数学上可以简化成:

P_new = P_best + alpha * rand * (P_mean - P_i)

这里的P_best是当前最优解,P_mean是种群平均位置,alpha是控制随机搜索范围的系数。这个公式的意义很直白:以最优位置为参考基准,又保留平均位置的牵制,避免种群一上来就挤成一团。

第二阶段叫“空间搜索”,对应秃鹰在选定区域上空盘旋搜索的过程,核心是极坐标下的螺旋扫描。位置更新会用到角度和半径的组合:

theta = a * pi * rand r = theta + R * rand xr = r * sin(theta) yr = r * cos(theta) P_new = P_i + xr * (P_i - P_mean) + yr * (P_i - P_best)

这段的直观理解是:每个个体绕着当前最优解做“螺旋扫掠”,在逐步缩小的半径里精细搜索猎物位置。这也是BES算法最有辨识度的阶段。

第三阶段是“俯冲捕获”,相当于把螺旋收敛到猎物坐标上,做最后的精确抓捕。这一阶段的位置更新在数学表达上更激进,直接向最优解加速逼近。整个BES算法的思路很接近“全局粗搜 + 局部精搜再接再厉”的设计哲学,阶段切换自然,参数也不算多,所以适合拿来做路径规划的寻优引擎。

2.2 基本BES在栅格路径规划里的三个短板

我拿原始BES在20×20栅格地图上跑过很多次,问题很集中。第一个短板是初始种群质量参差。原始BES的种群是随机生成的,如果初始个体扎堆在地图一侧,算法大概率要从一个很偏的起点开始搜,前面几十次迭代全浪费在“跑到位”上,路径和收敛速度都不好看。第二个短板是控制参数固定,前期探索和后期开发缺乏自适应切换。第二阶段里的角度系数a、半径系数R在所有迭代里都是一个定值,导致迭代前期搜索步子不够大,后期又不够精细。第三个短板是局部最优逃逸能力弱。路径规划问题的适应度面非常不平滑,障碍物随机分布会形成大量局部“陷阱”,原始BES一旦陷入某个角落,靠它基础的位置更新规则很难自己跳出来。

2.3 MBESP的多策略改进:初始化、参数自适应、Levy扰动

针对上面三个问题,MBESP的改进思路是从“三个位置”下手:初始位置、搜索步伐、跳出陷阱的方式。

第一处改进是引入Tent混沌映射初始化种群。简单说,不用纯随机数生成初始路径点,而是用混沌序列来生成。混沌序列的特点是看起来随机,实际有一定遍历性,能更均匀地覆盖整个地图的可行区域。我在项目里把混沌值映射到栅格坐标范围再取整,初始种群会明显比随机初始化的分布好得多,算法前期的基准线一下就抬上去了。

第二处改进是自适应非线性控制参数。原来的固定参数alpha和a,在MBESP里改成随迭代次数衰减的非线性形式。算法前期需要大幅度探索,控制参数保持较大;后期需要精细收敛,控制参数逐步减小。这个思路在PSO里很常见,但用到BES里效果提升特别明显。

第三处改进是引入Levy飞行扰动。Levy飞行本质上是“短距离搜索为主,偶尔长距离跳跃”的运动模式,很多智能算法用它来增强跳出局部最优的能力。MBESP在第二阶段螺旋搜索结束后,以一定概率对部分个体施加一次Levy扰动,让它们能跳到搜索空间里更远的位置重新搜索。放在路径规划的语境里就是:这条路径卡死在某个凹形障碍区里跳不出来的时候,一个Levy跳跃可能会直接把它弹到地图的另一侧,找到一条绕过障碍的新路径。

2.4 为什么这三个改进组合起来是有效的

三处改进不是简单堆叠,它们各管一段流程:混沌初始化解决“起跑线”问题,自适应参数解决“跑动节奏”问题,Levy扰动解决“卡死”问题。起跑线好了,算法一开始就有一个不错的适应度基线;节奏对了,前中期的搜索能力和后期的收敛精度都兼顾;跳出能力强了,就算中途卡住也有救援机制。

要特别提醒一句:改进不是越复杂越好。我在早期版本里试过加入多种群协同、反向学习之类的一堆高级策略,结果代码体积翻倍,运行时间暴涨,路径结果和简化版差不了多少。MBESP最终只保留了三处“性价比最高”的改进,能明显提升效果,又不会把代码搞到别人看不懂。这也是做算法改进项目的一个核心原则:每加一个策略,都要能回答清楚“它到底解决了哪个具体问题”。

3. 从地图到数学模型:栅格编码、路径表示与适应度函数

3.1 栅格编号与坐标转换

栅格地图在Matlab里就是一个二维矩阵,比如Map(row, col) = 1表示该栅格是障碍物。但秃鹰搜索算法搜索的是连续空间,不能直接在矩阵索引上做位置更新,所以必须定义一套“栅格编号 ↔ 二维坐标”的映射规则,这是整个代码的地基。

我自己习惯的做法是:把每个栅格编成从1到总数的一个整数编号,再和行列坐标互相转换。假设地图大小是Nx行、Ny列,编号Num转行列的公式为:

% 编号转行列坐标 i = floor((Num - 1) / Ny) + 1; % 行号 j = mod(Num - 1, Ny) + 1; % 列号

栅格中心坐标用于算法路径点的表示,代码里可以这样写:

x = j - 0.5; % 栅格中心的X坐标 y = Nx - i + 0.5; % 栅格中心的Y坐标,注意Y轴方向朝上

为什么用栅格中心坐标而不是直接用行列索引?因为算法里的Levy扰动、螺旋搜索这些操作都需要在连续坐标系里做加减乘除,如果用整数索引,每次更新完都要取整,不仅误差大,还会导致大量点偏离栅格中心,路径显示起来歪歪扭扭。

3.2 路径编码与碰撞判定

路径本质上是一串从起点到终点的点序列。直接用“路径经过的栅格编号序列”做编码,会有一个问题:不同长度路径的编码维度不一致,而秃鹰搜索算法要求每个种群的个体维度必须相同。

我的做法是固定维度编码:起点和终点由用户设定,算法只优化中间的N个路径点坐标。这样做的好处是每个个体就是一个N×2的坐标矩阵,维度完全统一,算法甚至不用关心起点终点是哪个栅格。我做实验时常用N=8,也就是优化16个连续变量,对20×20地图来说足够描述一条复杂路径,又不会让搜索维度爆炸。

碰撞判定是实现避障的核心环节。要判断一条路径是否合法,不能只看路径点有没有落在障碍栅格里,还得看相邻路径点连成的线段有没有穿过障碍栅格。我写了一个逐点插值检查函数:在相邻两个路径点之间,按步长0.1插值出一串中间点,逐个检查这些点所在的栅格是否被占据。只要有一个点在障碍栅格里,这条路径就判定为不可行。这个函数是适应度计算里调用最频繁的部分,也是整个程序主要的性能瓶颈,所以插值步长不能太小,0.1是精度和速度之间比较舒服的折中。

3.3 适应度函数:不能只盯着路径长度

适应度函数是路径规划项目的“灵魂”。算法所有个体的搜索方向,都由这个函数来牵引。如果只把路径总长度塞进去,跑出来的路径大概率贴着障碍物走,因为贴着走才是几何上最短的。

MBESP项目的适应度函数分三个部分加权求和:

fitness = w1 * L + w2 * S + w3 * D

L是路径总长度,相邻路径点欧氏距离累加。S是平滑度代价,算法会计算每个拐角的角度变化量,把所有转角累计起来作为惩罚。角度越大,AGV转弯越困难。D是安全距离代价,计算每个路径点与最近障碍物的距离,如果路径点离障碍物太近,就施加一个较大的惩罚值。

三个权重我常用的取值是w1 = 1.0、w2 = 0.5、w3 = 0.8。这个比例的经验是:长度权重最高,保证路径不会绕远路;安全权重高于平滑度,因为安全是底线,平滑是体验。不同场景可以改,比如如果你做的是多叉车协同仓储场景,安全权重还要继续提高。

这里有个非常容易踩的坑:安全距离代价如果设计成“碰到障碍物就罚死”,那算法学到的其实是“无效路径直接淘汰”,而不是“尽可能远离障碍物”。这样虽然也能避障,但收敛过程会非常僵硬。正确的做法是让代价随距离连续变化:距离安全阈值越远,代价值越小;进入阈值范围后,代价显著上升。这样算法搜索梯度是连续的,个体能真正“感知”到压力并逐步调整路径位置。

4. 基于MBESP的路径规划完整实现流程

4.1 算法主流程七步走

整个MBESP路径规划程序的流程可以归纳为七个步骤:

  1. 初始化栅格地图,设置起点、终点和各项参数;
  2. 用Tent混沌映射生成初始种群,每个个体对应一条路径;
  3. 对每个个体计算适应度,记录全局最优路径;
  4. 执行第一阶段:选择搜索空间,更新个体位置;
  5. 执行第二阶段:螺旋搜索,叠加Levy飞行扰动;
  6. 执行第三阶段:俯冲捕获,更新全局最优;
  7. 判断是否达到最大迭代次数,若是则输出最优路径和收敛曲线。

要注意,第三步到第六步是一个完整的迭代周期,每算完一遍,所有个体的位置都会改变一次,相当于是把整个种群的所有路径点都重新刷了一遍。计算量不小,但这也正是智能优化算法能同时在多个区域搜索、不容易漏掉最优解的原因。

4.2 地图生成与障碍物膨胀

地图生成看起来简单,其实有两个隐藏问题。

第一个是随机障碍物的“连通性”。完全随机生成30%的障碍物,很可能把起点或者终点堵死,更麻烦的是可能出现“孤立可行岛”,路径点明明在地图内、也没有撞墙,但怎么都连不到终点。项目代码里我加了一个检查函数:生成地图后从起点做广度优先搜索,看看终点是否能被访问到,如果不可达就直接重新生成地图,直到连通为止。这个检查在代码里只有20行,但能省掉后面所有的“路径规划失败”排查时间。

第二个是障碍物膨胀。膨胀范围取决于AGV的几何尺寸和栅格边长。我定的规则是:如果AGV车体宽度大约是栅格边长的0.8倍,那么把障碍物向外膨胀1个栅格比较合适。实现方式也简单,遍历每个障碍栅格,把它周围一圈栅格也标记为障碍,注意别破坏边界的起始点。这个操作相当于直接把障碍物“增肥”,规划出来路径自然离真实障碍物有一段安全距离。

4.3 参数配置速查表

参数设置直接决定算法跑出来的结果质量,参考配置如下:

参数取值说明
地图尺寸20×20验证算法效率的黄金尺寸
障碍物比例0.3推荐不超过0.4,否则可行路径太少
种群规模30地图更大时建议加到50
最大迭代次数100收敛后提前停止也行
中间路径点数N820×20地图的常用选择
探索系数alpha初始值1.5随迭代非线性递减
螺旋角度系数a10控制螺旋密度
螺旋半径系数R1.5控制搜索范围
Levy概率门限0.3约30%个体接收扰动
权重w1, w2, w31.0, 0.5, 0.8长度、平滑、安全三项加权

这里重点说一下种群规模和迭代次数的关系。种群越大,每一代的全局搜索能力越强,但每一代的耗时也越长;迭代次数决定了找最优解的上限。如果发现路径结果不稳定,优先加种群规模而不是迭代次数。迭代次数加到200以上,20×20地图上的收敛收益会明显下降,纯属浪费算力。

4.4 Matlab代码结构解读

配套Matlab代码的文件结构大致是这样的:

  • main_AGV_MBESP.m:主程序入口,负责配置参数、调用算法、输出结果;
  • CreateMap.m:生成栅格地图并进行障碍物膨胀;
  • MBESP.m:秃鹰搜索算法主体函数;
  • CalculateFitness.m:适应度计算,包含路径长度、平滑度、安全距离和碰撞检测;
  • PlotResult.m:绘制地图、路径和收敛曲线。

这里截取主程序的核心调用逻辑作为示例:

% 初始化 map = CreateMap(20, 20, 0.3); [start, goal] = deal([1, 1], [20, 20]); % 种群初始化:混沌映射 pop = TentInit(Np, pathDim, map, start, goal); % 迭代优化 for iter = 1 : maxIter % 三个阶段的位置更新 pop = SelectPhase(pop, best, map, alpha(iter)); pop = SearchPhase(pop, best, map, a, R, levyFlag); pop = SwopPhase(pop, best, map); % 计算适应度并更新最优解 [best, bestFitness] = UpdateBest(pop, map, start, goal); end % 绘图展示 PlotResult(map, best, converCurve);

这段代码是对真实逻辑的简化示意,但整体框架和完整代码是一致的。建议读者先跑通这个流程,再看论文里的伪代码,两者对不上就说明自己改过参数或地图规模,需要仔细核对。

论文和代码配套使用时,我有个习惯:先看论文里的“算法流程图”,理解每一个阶段的数据流转,再回到MBESP.m找到对应的代码段。很多同学拿到代码就直接跑,结果改地图尺寸时就懵了,因为地图大小、路径点维度、编号转换这些参数在代码里存在耦合关系,牵一发而动全身。建议花半小时把CreateMap.m和CalculateFitness.m逐行读懂,后面调参就非常顺手。

5. 仿真实验设计与结果分析

5.1 对比实验设置

做算法改进项目,实验对比是必须的,否则论文没法写,也无法证明改进有效。MBESP的对比对象我选了三个:原始BES、粒子群PSO和遗传算法GA。这三个算法在路径规划里都非常常见,而且写法成熟,做出来有说服力。

为了公平,所有算法用同样的地图、同样的起点终点、同样的迭代次数和种群规模。地图用固定的随机种子生成,保证每个算法面对的环境完全一样。否则每一轮地图不同,路径长度差个百分之十都是正常波动,对比结果毫无意义。

每轮实验跑20次独立运行,记录最优值、平均值、标准差。最优值反映算法的极限能力,平均值反映稳定性,标准差反映“这次运气好、下次可能崩”的波动程度。这三个指标放一起,才能完整评价一个智能算法的工程可用性。

5.2 结果指标怎么读

路径长度是大家最关注的,但不是唯一的指标。我在这类项目里还会关注“平均收敛代数”,也就是适应度停止明显下降时所处的迭代轮次。这个指标直接反映算法的收敛速度。MBESP的预期表现是收敛代数明显更早,同时最优路径长度更短,这说明改进不仅跳出了局部最优,而且在解的质量上也有实打实的提升。

对AGV来说,路径长度短和路径平滑度往往是矛盾的。有些算法搜出来一条总长度最短、但转了一堆大角度的路径,拿到实车上根本没法用,因为AGV在急转弯时必须大幅减速,实际运行时间和能耗反而不如走一条稍微长一点但更顺滑的路径。所以论文结果表里我会同时列出“平均转角”指标,并把这部分写进分析,而不是只比谁的数字更小。

5.3 一次典型实验的结果参考

在一次固定地图、固定随机种子下的对比实验里,我得到的典型结果如下(只做一个参考,换成别的地图数字会有波动):

算法最优路径长度平均收敛代数平均转角(度)成功率
GA28.76232085%
PSO27.95429590%
BES26.44127095%
MBESP23.831210100%

从结果本身看,MBESP的三个指标都优于原始BES:路径缩短了约10%,收敛代数提前了四分之一,平均转角更是明显下降。成功率提升到100%,意味着20次实验里每次都能规划出一条可行路径,这对实际工程调度是非常关键的指标。

需要说明,这是单组地图的结果,换个复杂地图结果会变化。但改进算法相对原始BES的优势方向是一致的,不会因为换地图就从优势变成劣势。

5.4 避障效果的直观验证

避障效果不能只看数据,还得看可视化结果。Matlab绘图时,黑色栅格代表障碍物,白色栅格是自由空间,蓝色实线是规划出来的路径,红色标记是起点和终点。我拿到结果后会重点检查三个位置:起点附近的出口通道、地图中间的狭窄缝隙、终点前的最后一段路。这几个地方是最容易“擦墙”的位置。

MBESP跑出来的路径在这三个位置的共同特征是:路径线始终与障碍栅格保持一臂距离,转弯角度圆滑,没有任何路径线段“蹭着”障碍边界走。这种效果主要归功于适应度函数里的安全距离惩罚项,以及障碍物膨胀的预处理,双重保障下AGV才算真正“能上路”。

为了进一步验证避障的鲁棒性,我把同一张地图的障碍物比例从0.2调到0.35,分别测试。障碍物少时,所有算法都能轻松找到路;障碍物多时,基础BES已经开始出现路径发散,而MBESP依然能规划出绕过连续障碍群的完整路径。这就是改进算法在环境复杂度提升时体现出的实际价值。

6. 常见问题与排查技巧实录

6.1 算法老是早熟收敛怎么办

如果你发现路径结果稳定在一个明显不是最优的数值,跑多少次都差不多,那大概率是种群多样性丢失了,也就是所有个体都被拉到了同一个局部最优附近。解决方法有几个:把最大迭代次数降下来,改用“当最优适应度连续N代不下降就提前终止”的策略,省下的算力用来增大初始种群;检查Levy扰动的概率门限是否太低,我建议从0.2开始调,如果地图障碍物很密、局部陷阱多,直接调到0.4;还可以把混沌初始化的映射范围缩到自由栅格空间内部,避免初始个体有一半落在障碍栅格里被白白罚死。

6.2 规划出来的路径穿墙或擦墙

看见路径线段穿过黑色栅格,第一反应不要怪算法,先查碰撞检测函数。很多穿墙问题出在线段插值检查的步长上,步长取太大,细小的障碍缝隙会被“一步跨过去”,漏检了。步长取0.1一般能避免。另外要检查安全距离惩罚项,如果权重w3被设成0,那算法根本感受不到障碍压力,穿墙是必然的。最后还有一类隐性原因:地图膨胀处理没做,AGV自身宽度没有计入,路径虽然不穿墙但离墙只有半格距离,模拟里看着能过,实车上过不去。

6.3 路径点越界和编码错位

坐标越界是新手最容易碰到的问题。算法里的螺旋搜索和Levy扰动都会产生坐标超出地图范围的点。我处理的方式是:每次位置更新完成后,立即做一个边界修正,把越界坐标钳制到最近的边界栅格中心或自由栅格中心。千万别拖延到适应度计算时再处理,否则大量个体集中在边界上,搜索效率会被拖垮。还有一种编码错位的坑:编号转行列时列数用了行数,行列坐标转物理坐标时Y轴方向搞反,导致路径在地图里镜像乱飞,这种bug排查起来也很耗神,建议在图里把坐标轴和栅格编号逐个打印出来对照检查。

6.4 路径锯齿太多、AGV实际走不了

如果路径看起来像锯齿一样一折一折的,那是因为适应度里平滑度权重w2不够,算法只追求长度最短,完全不在乎转角。最直接的修法是把w2从0.5往上调,调到1.0左右,路径会明显变平缓。如果调参之后还是不够平滑,就要上后处理了。业界常用的平滑办法是B样条曲线或者贝塞尔曲线拟合,把算法输出的路径点作为控制点,重新生成一条光滑的路径。要注意,平滑后的路径依然要重新做碰撞检测,后处理阶段引入碰撞风险是常有的事。

我把收集到的典型问题整理成一份速查表,方便直接对照排查:

现象直接原因处理方案
所有结果都差不多的次优值种群多样性不足提升Levy概率或增加种群规模
路径穿墙插值步长过大或安全权重太低步长设为0.1,提高w3
路径点大量在边界堆叠越界点未及时修正位置更新后立即钳制边界
地图在代码里显示颠倒编号/坐标转换方向写反打印坐标与编号逐一核对
路径拐角密集平滑权重不足调高w2或用B样条后处理
起点终点不可达随机地图本身不连通生成时做BFS连通性检查
算法运行越来越慢插值检查步长过小在精度允许下增大步长

做这类项目,我个人的体感是:算法本身只占一半功夫,地图建模和适应度函数设计占另一半。很多同学拿个标准测试函数验证算法觉得效果飞起,一转到栅格路径规划就见光死,原因就是没有把“连续坐标搜索”和“离散栅格碰撞”之间的转换处理妥当。MBESP这个案例好就好在,它把改进算法和工程问题的边界条件耦合得比较清楚,每处代码改动都能对应到一个具体的障碍或陷阱。这篇项目的论文里还会讲得更细,拿到代码后建议自己跑几组不同障碍物密度和不同地图尺寸的实验,改一改权重系数,感受一下每个参数对路径形态的影响,比单纯把仿真结果截图放进报告里要有价值得多。后续你要是想继续扩展,可以往动态障碍物重规划、多AGV协同调度这两个方向走,MBESP的框架底子完全可以往那上面接。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询