跳到主要内容

AGV编队拖拽

AGVScriptBoxManager(脚本变量 agvBoxManager)用于管理带挂箱的编队场景:建立拖拽关系、沿路径移动、按序卸载箱体等。适合产线配送、仓储拖车等业务。

建立拖拽链

setupChainBoxDragging(
leaderName: string,
chainNames: string[],
options?: {
firstBoxOverlap?: number;
spacingScale?: number;
}
): { success: boolean; error?: string };
  • leaderName:主车对象名称,需已存在于场景。
  • chainNames:从前到后的挂箱名称数组。
  • options.firstBoxOverlap 控制第一节挂箱与主车的重叠量(米),默认 0.5,可防止视觉断层。
  • options.spacingScale(如有)用于整体缩放间距,适合不同车长。

调用后可通过以下方法检查状态:

const boxes = agvBoxManager.getFollowingBoxes("AGV_MAIN");
console.log(boxes); // ["BOX_A", "BOX_B"]

驱动编队沿路径运行

moveAGVAlongPath(
leaderName: string,
pointNames: string[],
speed = 1,
rotationSpeed = 1,
paused = true
): Promise<boolean>;
  • 速度控制speed 以 m/s,为避免穿模,建议 0.8–1.2 之间。
  • 旋转策略:当 paused = true 时,车辆会在完成 80% 转向后再前进,可避免急转弯导致挂箱摆动。
  • 返回值:成功返回 true,失败会抛出异常;建议包裹 try/catch

示例:

await agvBoxManager.moveAGVAlongPath("AGV_MAIN", ["P_START", "P_TURN", "P_END"], 0.9);

卸载与回收

  • unloadBoxToPoint(leaderName, boxName, pointName, options?)
    • options.offset:针对目标点微调 {x,y,z}
    • options.speed / options.duration:控制动画节奏,优先级 duration > speed
  • unloadMultipleBoxesToPoint(leaderName, boxNames, pointName, options?)
    • options.offsets:为每个箱体提供独立偏移量。
    • options.spacing:当 offsets 不提供时使用统一间距(默认 1 米)。
    • options.sequentialtrue 时逐个卸载,可在两次卸货之间插入逻辑(如扫码)。
  • removeBoxFromChain(leaderName, boxName):在卸货完成后移除箱体,避免继续跟随。

使用模式示例

agvBoxManager.setupChainBoxDragging("AGV_MAIN", ["BOX_A", "BOX_B", "BOX_C"], {
firstBoxOverlap: 0.4,
});

await agvBoxManager.moveAGVAlongPath("AGV_MAIN", ROUTE_TO_STATION);

await agvBoxManager.unloadMultipleBoxesToPoint(
"AGV_MAIN",
["BOX_B", "BOX_C"],
"POINT_UNLOAD",
{
spacing: 0.8,
sequential: true,
offsets: [
{x: 0.2, y: 0, z: 0},
{x: 0.6, y: 0, z: 0},
],
},
);

agvBoxManager.removeBoxFromChain("AGV_MAIN", "BOX_B");

排错清单

症状排查步骤
挂箱遗漏或顺序错误调用 getFollowingBoxes 查看链表,确认在调用 setupChainBoxDragging 前挂箱对象已存在。
移动时飘逸或穿模降低 speed,同时检查路径转角是否过于尖锐;必要时增加中间点。
卸货位置不准确为指定箱体设置 offset,或为卸货点添加辅助对象作为参照。

使用完毕后若需重置,可调用 removeBoxFromChain 或在场景中重新初始化挂箱位置。