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

AnyLogic中基于状态图实现机器人与工人避撞减速的代码求助

实现工作场所机器人遇工人自动减速的状态机监测逻辑(AnyLogic)

核心逻辑说明

由于无法使用Transporter和Pedestrian模块,我们直接基于Agent距离检测+状态机(Statechart)实现持续监测:通过机器人的Statechart持续扫描周围工人,当工人进入预设安全距离时切换低速,离开后恢复正常速度。

前置准备

  1. 给机器人Agent添加以下属性(在Agent的"Properties"面板或代码区定义):

    • double normalSpeed = 1.0; // 正常行驶速度,可按需调整
    • double slowSpeed = 0.3; // 减速后的速度
    • double currentSpeed = normalSpeed; // 当前运行速度
    • double safetyDistance = 2.0; // 触发减速的安全距离
  2. 确保工人和机器人是自定义的Agent类(比如Worker和Robot),且都被添加到同一模型环境中(保证距离检测能生效)。

状态机代码实现

在机器人的Statechart中,创建一个持续运行的状态(例如命名为"正常行驶"),在该状态的during事件中添加以下检测逻辑(during事件会在每个时间步自动触发,实现持续监测):

方案1:检测所有进入安全区的工人

适合需要同时响应多个工人的场景:

// 筛选出所有在安全距离内的工人
List<Worker> nearbyWorkers = findAll(Worker.class, worker -> distanceTo(worker) < safetyDistance);

if (!nearbyWorkers.isEmpty()) {
    // 存在工人,切换低速(避免重复赋值)
    if (currentSpeed != slowSpeed) {
        currentSpeed = slowSpeed;
        // traceln("Robot " + getIndex() + " slowed down - worker detected");
    }
} else {
    // 无工人,恢复正常速度
    if (currentSpeed != normalSpeed) {
        currentSpeed = normalSpeed;
        // traceln("Robot " + getIndex() + " resumed normal speed");
    }
}

// --- 替换为你的机器人移动逻辑 ---
// 示例:沿X轴移动的简单实现
// setX(getX() + currentSpeed * timeStep());
// 若机器人沿路径移动,需修改路径移动的速度参数为currentSpeed

方案2:仅检测最近的工人(性能更优)

如果只需响应最近的工人,用getNearestAgent减少计算量:

Worker nearestWorker = getNearestAgent(Worker.class);

// 检查最近工人是否存在且进入安全距离
if (nearestWorker != null && distanceTo(nearestWorker) < safetyDistance) {
    currentSpeed = slowSpeed;
} else {
    currentSpeed = normalSpeed;
}

// --- 绑定移动逻辑(同方案1)---

关键细节提示

  • 距离计算:默认distanceTo()是欧几里得距离,若需自定义检测范围(比如仅水平方向),可替换为曼哈顿距离:Math.abs(getX() - worker.getX()) + Math.abs(getY() - worker.getY()) < safetyDistance
  • 动态Agent适配:Resource Pool生成的Agent会自动加入模型环境,findAll和getNearestAgent能自动识别,无需额外配置
  • 移动逻辑绑定:务必确保机器人的移动代码使用currentSpeed变量,否则速度变化无法体现

内容的提问来源于stack exchange,提问作者Jahidul Hasan Razib

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:42:45