跳到主要内容

AGV脚本管理

AGVScriptManager(在脚本中通过 agvManager 访问)负责调度单车 AGV 的所有基础行为:路径行驶、装货/卸货、返回、状态检查等。下面列出最常用方法与实践原则。

核心方法

runAGV

runAGV(
carrierName: string,
carrierType: string,
waypoints: string[],
carryItem: string,
carryEndPoint?: string,
sourceItem?: string
): Promise<{ success: boolean; error?: Error | string }>;
  • 用途:一次性执行“到达 → 装载 → 运输 → 卸载 → 返回”全流程。
  • 参数建议
    • carrierType 需与场景中配置一致,常见值如 "AGV""AGF"
    • carryEndPoint 通常为路径中的终点别名,若不传将使用 waypoints 最后一个点。
    • 当货物需相对其他参考对象卸载时设置 sourceItem
  • 错误处理success === false 时,error 会给出具体原因(如路径不可达、载荷不存在)。

moveCarrier

moveCarrier(
carrierName: string,
waypoints: string[],
isLookAt = true
): Promise<{ success: boolean; error?: Error | string }>;
  • 用途:仅驱动车辆沿指定路径行驶,不做装卸操作。
  • 技巧
    • 对长路径可 await 每一段,方便在节点间插入逻辑。
    • isLookAt = false 时可保持车辆原朝向,用于倒车或视觉演示。

moveBackCarrier

moveBackCarrier(carrierName, waypoints) 将车辆按原路径逆向返回。通常配合 moveCarrierrunAGV 使用,用于补充“复位”动作。

装卸相关

  • pickupItem(carrierName, itemName, attachPos?, attachRot?)
    • attachPos 缺省 {x: 0, y: 0.5, z: 0},用于轻微调整货物相对位置。
    • attachRot 以角度表示,常用于保持货物朝向一致。
  • dropItem(itemName, targetPoint, sourceItem?, offsetPos?)
    • targetPoint 可为停靠点或缓存位。
    • sourceItem 指定卸载时挂靠的对象,例如料箱或工位。
  • setPosItem(itemName, targetPoint, offsetPos?)
    • 常用于初始化,让货物到正确位置或恢复场景状态。

推荐流程模板

async function transportOnce({carrier, type, load, path}) {
const enterPoint = path[0];
const leavePoint = path[path.length - 1];

const startResult = await agvManager.moveCarrier(carrier, [enterPoint]);
if (!startResult.success) throw new Error(`无法驶入装货点: ${startResult.error}`);

const pickupResult = agvManager.pickupItem(carrier, load, {y: 0.45});
if (!pickupResult.success) throw new Error(`装货失败: ${pickupResult.error}`);

const runResult = await agvManager.moveCarrier(carrier, path.slice(1));
if (!runResult.success) throw new Error(`运输失败: ${runResult.error}`);

agvManager.dropItem(load, leavePoint);
await agvManager.moveBackCarrier(carrier, path.slice().reverse());
}

调试与排查

  1. 路径校验:在运行前调用 console.table(path) 检查点位名称;若返回 error: "node not found",说明场景中不存在该点。
  2. 载荷占用:同一个 itemName 不应同时被多个 AGV 装载,可在装货前调用 editor.getByName(itemName) 查看当前挂载父节点。
  3. 并发执行:对同一车辆并行执行多个 moveCarrier 会导致冲突,建议为每辆车维护执行队列。

常见问题

  • 车辆卡在路径上:确认路径点是否在地面上方、是否有障碍碰撞。必要时在场景中重新生成路径或提高路径点的高度。
  • 卸货位置偏差:调整 offsetPos,或检查卸货点的本地坐标系统是否与预期一致。
  • 返回流程触发过早:将 moveBackCarrier 放在 dropItem 之后,并在 dropItem 执行后 await 一小段延迟(例如 await editor.sleep(250))确保动作完成。

结合 agvBoxManageragvCurePathManager 可进一步实现拖挂编队与曲线拖拽,详见对应章节。