在使用 G-MAPF 框架时,可以对地图中的区域设置不同的属性,以定制化一些特殊的需求。
参数名称 | 参数位置 | 默认值 | 支持版本 |
---|---|---|---|
MAPF | 场景/高级组 | MAPF | ~latest |
区域属性的定制化功能 |
目前一共提供了四种属性的设置,含义如下表:
参数名称 | 参数位置 | 默认值 | 支持版本 |
---|---|---|---|
delaySecond | MAPF | 0 | 0.1.8.230426 |
说明:机器人通过的时间延迟 | |||
extraRadius | MAPF | 0 | ~latest |
说明:机器人在 MAPF 区域内的额外最大旋转半径 | |||
indepVision | MAPF | 0 | ~latest |
说明:机器人在 MAPF 区域内的独立视野 | |||
maxRobotNum | MAPF | 2 | ~latest |
说明:MAPF 区域内允许同时存在的最大机器人数量(此功能在不开启 G-MAPF 时也起作用) | |||
minDistance | MAPF | 0 | ~latest |
说明:MAPF 区域内机器人间的最小距离,当多个互斥区叠加时,组内最小距离取最大值,详见 | |||
mutexExpand | MAPF | 0 | 0.1.8.230330v2 |
说明:机器人在 MAPF 区域内向外扩张互斥区点位的数量新加功能,不稳定,如需使用最好联系研发介入 |
这个属性配置只对区域内的点位起作用,虽然也可以把线路加进 MAPF 区域内,但实际上算法是不考虑路线的,上述参数配置演示图如下:
extraRadius (额外最大旋转半径)
机器人的最大旋转半径如下图所示,在 roboshop 上通过外接圆的形式展示,下图表示该车的最大旋转半径为 0.627m
下图展示了在两条平行线路上会车的情形,可以看到两车的最大旋转半径之间仍有 1m 的距离,故算法会认为两车在各自线路上行驶时不会碰撞,可以通过。
基于上述原理,我们可以通过设置 extraRadius 来增大机器人的最大旋转半径,在上图的两条平行线路,如果我们把机器人的最大旋转半径增大 1m,两车便会相交,算法认为会发生碰撞,便不能同时通过,只能一辆车去绕路
ertraRadius 效果演示示例如下:
- 第一张图为在没有为绿色 MAPF 区域设置属性时两车会车情况:因为两车在两条路线上行驶时,不会发生碰撞,故可以不受影响的行驶
- 第二张图设置绿色 MAPF 区域 extraRadius 为 1m,这相当于将两车的最大旋转模半径型膨胀了 1m,算法认为两车会碰撞,粉色车只能绕路行驶
indepVision (独立视野)
机器人的视野指的是机器人可以看见以自己为圆心,视野为半径的范围内所其他机器人,分为全局视野和独立视野两种。全局视野由参数 G-MAPF-Vision 设置,为开启 G-MAPF 下所有机器人的视野大小;独立视野由 MAPF 区域内的参数 indepVision 设置,为开启 G-MAPF 下在 MAPF 区域内的机器人视野大小。
indepVision 效果演示示例如下:
- 设置 G-MAPF-Vision 为 5m,不设置 indepVision,当两车在同一条路线上会车时,算法会让一辆车避障让另一辆车先通行,由于视野设置过小,当绿色车位于 LM71 时是看不见粉色车的,便不会进行避让,而是选择继续向下走,但是走到 AP357 后,粉色车就进入了绿色车视野范围内,他就会退回去避障粉色车,但是退回 LM71 后又看不见粉色车了,如此循环形成下第一图现象
- 要解决该问题有两种方法:一是增大全局视野,但是全局视野是对所有车生效的,有时我们只想改动局部而不想因此影响其他,这时可以采用第二种方法,即增大 indepVision,设置绿色 MAPF 区域的 indepVision 为 10m,这样两车都处在对方的视野内,效果见第二图
maxRobotNum (最大机器人数量)
最大机器人数量指的是在 MAPF 区域内允许同时存在的最大机器人数。
maxRobotNum 效果演示示例如下:
- 设置绿色 MAPF 区域的 maxRobotNum 为 2,下图中可以看到当上面两车进入 MAPF 区域后,下面的车只能在外面等着,等到 MAPF 区域内 1 辆车离开后才进入
minDistance (组内最小距离)
组内最小距离指的是在 MAPF 区域内的机器人之前需要保持的最小距离,例如设置此值为 2m,那么在这个 MAPF 区域内的车之间的距离最小只能为 2m,达到两米后便不能再继续靠近了。
minDistance 效果演示示例如下:
- 设置绿色 MAPF 区域的 minDistance 为 1.5m,通过下图可看到最后两车间距保持在 1.5m
叠加的互斥区的组内最小距离判定
当存在多个互斥区叠加时,互斥区内的点位需满足的组内最小距离取各个叠加的互斥区的最大值
示例说明见下图:
紫色区域为 MAPF 区域,设置 minDistance 为 1.5m,蓝色区域为 Mutex1,绿色区域为 Mutex2
sim_04 位于 LM58,LM58 同时处于 Mutex2 和 MAPF 区域中,当 sim_01 想向右行驶时,要判断 LM53 和 LM58 是否有冲突,在判断要满足的距离条件时,LM53 同时处于两个互斥区内,组内最小距离取最大值为 Mutex1 的无穷大,同理 LM58 组内最小距离也为无穷大,而 LM53 和 LM58 同时位于 MAPF 区域内,所以算法判定 LM53 和 LM58 存在冲突,sim_01 无法向右行驶们只能在互斥区外等待,直到 sim_04 离开互斥区。
mutexExpand(扩张互斥区)
此功能是为了解决库位与连接的主干道存在冲突(库位有车工作时,主干道无法通行)此问题而开发,故结合此问题来进行介绍
下图模拟的逻辑为:蓝车在库位取货,绿车需要经过主干道去右侧库位取货,蓝车取货结束后出去放货点
因下述几点原因,会发生死锁:
1. 蓝车在库位取货时,绿车无法从主干道通行
2. 库位是叶子结点,故算法认为绿车可以通行,最终停在主干道靠近蓝车的点位上
3. 绿车停在主干道导致蓝车无法出库进入主干道旋转
4. 由此形成死锁,见下图
- 机器人在库位执行动作时,只占用库位一个站点,不占用此前经过的主干道点位,其他车可以占用主干道
- mutexExpand 区域内的点位会沿线路向外扩张占用点位,扩张数量为此参数值,实现扩张互斥区的效果
- 由于库位上车占用的资源扩大了,其他车就只能停在扩张的互斥区外的点位上,从而实现预防死锁发生
下图演示场景配置方法:
- 新增绿色 MAPF 高级组,设置 mutexExpand 为 3,向外扩张三个点位
- 在下图中可以看到,绿车走到 LM22 停下来,因为 LM23 是蓝车扩张的点位
- 绿车等到蓝车取货结束离开后才开始行动