You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使RegPed界面节点的设置在主Agent运行模型时生效?

问题原因分析

视野节点放在RegPed界面里确实是问题的核心原因:

  • RegPed作为子Agent,其界面内的多边形节点默认使用局部坐标系,当RegPed移动时,这个视野范围不会自动同步到全局场景的对应位置,导致检测范围和行人实际位置脱节,无法正确捕捉到进入视野的SpePed。
  • 退一步说,即使视野范围能跟随移动,在子Agent界面节点的事件中直接操作主流程里的goToExit块,也可能因为上下文权限问题,无法正确触发取消指令。
可行解决方案

方案1:将视野节点移到主Agent界面,绑定RegPed位置

  • 在Main Agent界面添加多边形视野节点,设置其位置属性绑定到对应RegPed的getX()和getY(),确保视野范围始终跟随RegPed移动。
  • 配置视野节点的「当Agent进入」事件,添加代码:
    // 匹配当前视野对应的RegPed
    RegPed targetPed = findFirst(RegPed, p -> distance(p, this视野节点) < 0.1);
    if(targetPed != null && targetPed.goToExit.isActive()){
        targetPed.goToExit.cancel();
        // 此处添加取消后要执行的后续指令
    }
    
  • 若存在多个RegPed,可在RegPed初始化时,动态在Main Agent中生成绑定其位置的专属视野节点。

方案2:用RegPed内部代码实时检测视野内的SpePed(无需界面节点)

  • 删除界面的视野节点,在RegPed的onTick()事件中添加检测逻辑:
    // 自定义视野半径(单位:米,可按需调整)
    double viewRadius = 5;
    // 查找当前视野范围内的所有SpePed
    List<SpePed> detected = findAll(SpePed, s -> distance(this, s) <= viewRadius);
    if(!detected.isEmpty() && goToExit.isActive()){
        goToExit.cancel();
        // 执行取消goToExit后的后续逻辑
    }
    
  • 若需要可视化视野范围,可在RegPed界面添加圆形节点,将其半径绑定为viewRadius、位置绑定到自身,即可实时显示视野边界。

方案3:使用AnyLogic官方行人感知模块

  • 打开RegPed的属性面板,找到Pedestrian Perception选项并启用。
  • 配置感知参数:设置视野的角度、半径,将检测目标类型指定为SpePed。
  • 在「感知到Agent」的触发事件中,直接执行goToExit.cancel(),并衔接后续流程。
  • 这种方式是官方推荐的行人交互检测方案,自带可视化感知范围,无需手动处理坐标同步问题,稳定性更高。

内容的提问来源于stack exchange,提问作者SA_2003

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 06:22:33