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.sequential:true时逐个卸载,可在两次卸货之间插入逻辑(如扫码)。
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 或在场景中重新初始化挂箱位置。