AGV运输是否会被Agent或行人阻挡?AnyLogic仿真场景技术问询
AnyLogic自定义行人Agent的AGV障碍物识别实现方案
AnyLogic自带的Material Handling库AGV模块默认仅将路径上的其他转运设备、预设路径阻断器识别为障碍物,自定义的行人Agent不会被自动纳入检测范围,可通过以下三种方法实现需求:
方法1:周期距离检测实现主动避让
- 给自定义行人Agent设置碰撞半径参数(推荐值0.3m),AGV也同步配置自身碰撞半径和默认行驶速度参数
- 在AGV内部新增周期触发事件,触发间隔设置为0.1~0.5s(可根据仿真精度需求调整),事件内执行以下逻辑:
- 遍历场景内所有行人Agent,计算AGV与每个行人的直线距离
- 同时判断行人是否处于AGV行驶前方的扇形检测区域(推荐前后夹角120度),排除后方行人避免误触发
- 当距离小于「AGV碰撞半径+行人碰撞半径+安全冗余距离」阈值时,调用
setSpeed()方法降低行驶速度或直接停车,距离超出阈值后恢复正常行驶速度
- 参考代码示例:
// 假设行人种群存储在Main的pedestrians集合中 double safeThreshold = agvCollisionRadius + pedCollisionRadius + 0.2; for (PedAgent ped : main.pedestrians) { double dist = distanceTo(ped); double angleGap = Math.abs(angleTo(ped) - getRotation()); angleGap = angleGap > Math.PI ? 2*Math.PI - angleGap : angleGap; // 检测前方60度范围+安全距离 if (dist < safeThreshold && angleGap < Math.toRadians(60)) { setSpeed(0); return; } } setSpeed(defaultAgvSpeed);
方法2:绑定动态路径阻断器适配原生调度
- 预先在AGV行驶路径网络上部署足够数量的隐藏
PathStop元件,初始状态设置为未激活 - 给行人Agent添加位置检测逻辑,实时判断自身当前坐标是否落在任意AGV行驶路径范围内:
- 当行人进入路径范围时,激活距离最近的
PathStop,并将其绑定到行人所在的路径点位 - 当行人离开路径范围后,立即取消对应
PathStop的激活状态
- 当行人进入路径范围时,激活距离最近的
- 该方案无需修改AGV原生行驶逻辑,AGV会将激活的
PathStop识别为常规障碍物,自动执行停车、避让操作,适配平台自带的AGV调度规则。
方法3:启用原生自定义碰撞检测
适用于AnyLogic 8.7及以上版本:
- 选中AGV对应的Transporter元件,在属性面板找到「碰撞检测」配置项
- 勾选「自定义障碍物检测」,在判断表达式中添加自定义行人Agent的检测规则,表达式返回
true时系统即判定为障碍物 - 该方法直接调用平台原生碰撞检测管线,性能优于手动编写的周期事件,且无需额外配置其他元件。
内容的提问来源于stack exchange,提问作者Aron T.
相关产品推荐
相关产品推荐

