双车/多车联动
概述 / Overview
在重载、长货物或异构车队场景下,单台 AGV 无法独立完成搬运。MDCS 双车联动让两台或多台 AGV 在物理上协同抬升或装载同一件货物,同时在调度层把它们视为一个不可分割的执行单元。典型应用包括:
- 重载贮箱 / 长板材搬运(两台 10 T 重载 AGV 头尾对接,浮动载货台承载货物)
- 大型构件总装线(多台全向 AGV 抬升航空件、风电叶片等)
- 异构联动(前车叉式取货 + 后车浮动平台跟随)
- 设备跟随联动(AGV 跟随手推叉车、卷料车等非 AGV 设备)
Two or more AGVs jointly carry a single payload when no single vehicle can. MDCS exposes coordination both as a low-level motion contract (rear-lidar pose tracking + AP heartbeat) and as a scheduling constraint (`haveCoordination` flag → an inseparable execution unit). Typical scenarios are heavy tanks/long sheets carried by paired 10 T omni-AGVs, large assembly components lifted by a swarm of forklifts, heterogeneous master/follower pairs, and AGVs shadowing manually-driven vehicles.
系统组成 / System composition
重载双车联动参考方案 / Reference configuration: heavy-load twin-car
参数 / Parameters:
| 项 / Item | 取值 / Value | 说明 / Notes |
|---|---|---|
| 单车规格 / Per-vehicle spec | 10 T 全向重载 AGV / 10 t omni-directional heavy-load AGV | 差动舵或四舵 / steer-differential or quad-steer |
| 极限联动距离 / Max inter-car distance | ~20 m | 假设车长 2 m + 货物长 17 m / vehicle length 2 m + cargo length 17 m |
| 极限带载速度 / Max loaded speed | 0.6 m/s | 全程激光雷达避障开启 / lidar obstacle avoidance always on |
| 工况坡度 / Slope | ≤ 7° | 浮动载货台吸收俯仰差 / floating platform absorbs pitch |
| 操作模式 / Operating mode | 操作工遥控前车,后车自动跟随 / Operator drives leader; follower auto-tracks | 半自主,符合搬运安全规范 / semi-autonomous, complies with handling safety codes |
车尾传感器布局 / Tail sensor layout: 两车车尾相对,每台车尾部安装一台水平观测激光雷达 + 一个 V 形特征槽。前车 V 形槽作为后车激光雷达的观测目标,宽高比小于 8(可凹可凸),目的是让 V 槽在 2D 激光点云中形成明显的角点特征,便于姿态解算。
Cars line up tail-to-tail. Each tail carries a 2D lidar plus a V-shaped feature groove (concave or convex, W/H < 8). The leader's groove gives the follower's lidar a strong corner feature for relative-pose estimation.
激光雷达选型 / Lidar selection (依分辨率 D = L · tan(δ · π/180), L=20 m):
| 型号 / Model | 角分辨率 δ | 20 m 处空间分辨率 D | 适用 / Suitable |
|---|---|---|---|
| SICK LMS1xx | 0.25° | 87 mm | 满足载货台 ±100 mm 浮动量 |
| SICK LMS5xx | 0.167° | 58 mm | 推荐 / Recommended — 冗余更大 / better margin |
浮动载货台 / Floating cargo platform: 为吸收联动误差与坡度,每台车配浮动载货台,浮动能力如下;货物锁定在载货台后由载货台与车体的浮动机构吸收变形:
To absorb coordination error and slope-induced misalignment, each car carries a floating cargo platform with the following compliance. Cargo is locked to the platform; deformation is taken up by the platform-vehicle interface, not transmitted to the cargo.
- X / Y 方向 / X-Y translation: ±100 mm
- 绕 Z 轴旋转 / yaw: ±5°
- 绕 Y 轴俯仰 / pitch: ±7°
异构联动 / Heterogeneous coordination
异构联动指两台车型不同(例如叉车 + 顶升车,或 ClumsyCar + 自评估磁导航车)的联动。常见模式:
- 主从模式 / Master-Slave: 主车规划完整路径,从车跟随主车位姿(同上)。
- 分工模式 / Specialization: 一台车做取货动作(如叉车叉起一端),另一台做支撑(如顶升车顶住另一端)。两车按动作序列分别下发任务,调度层保证时序。
A heterogeneous pair couples different vehicle types (e.g. a forklift + a lift-AGV, or a ClumsyCar + a magnet-navigated self-evaluating car). Two common patterns: master/slave pose-following, and a specialization split where each car performs a distinct physical role and the scheduler enforces a temporal ordering.
联动流程 / Coordination workflow
重载双车联动的典型流程(操作工在环 / operator-in-the-loop):
- 操作工遥控前车与后车到取货点。两车车尾相对,车间距与货物长度一致,车体中轴线对准。
Operator brings both cars to the pickup point, tail-to-tail, with spacing matching the cargo length and center-lines aligned. - 操作工在遥控手柄上启动 "联动 / Couple" 功能。
Operator presses "Couple" on the handheld remote. - 后车通过尾部激光雷达观测前车 V 槽,解算相对位姿,自动调整本车姿态,使后车中轴线与前车中轴线重合(车间距保持不变)。
Follower's tail lidar locks onto the leader's V-groove; the follower auto-aligns so its centerline matches the leader's, while preserving the inter-car distance. - 双车车灯切换颜色,提示联动已就绪。
Both vehicles' indicator lights change colour to signal "coupled". - 操作工引导吊装工把货物落到双车的浮动载货台上,并把货物锁定在载货台上。
Operator guides the rigging crew to lower the cargo onto the platforms and lock it. - 操作工遥控前车(前车此刻作为联动的"领头车")驶向终点。联动带载极限速度 0.6 m/s,全程激光雷达避障开启。
Operator drives the leader to the destination at ≤ 0.6 m/s; obstacle-avoidance lidars stay active on both vehicles. - 到达终点、吊装卸货完成后,操作工在手柄上结束联动。
After unloading at the destination, operator presses "Decouple" on the handheld remote.
运动控制原理 / Motion-control principle
浮动载货台允许吸收一定的横向、纵向与俯仰误差,且 AGV 本身相对货物较小,因此采用 后车观测前车 + 车间无刚性约束跟随 的策略,而不是用机械结构强制约束。
The floating platform absorbs a bounded coordination error, and each AGV is small relative to the cargo. We therefore use follower-tracks-leader without a rigid mechanical link, rather than a physical drawbar / chain. The follower closes a feedback loop on:
- 测量量 / Measured: 前车 V 槽在后车激光坐标系下的 (距离, 横偏, 夹角) / leader-groove pose in follower-lidar frame: (range, lateral offset, heading)
- 期望量 / Target: 距离 = 联动启动时锁定的固定值;横偏 = 0;夹角 = 0 / range = locked initial value; lateral offset = 0; heading = 0
- 控制量 / Output: 后车差动舵或四舵的速度 + 转向角 / follower's steer-differential or quad-steer command
车间心跳与控制信号通过车载 AP(Wi-Fi)传输:每台车广播自己的 `(execTick, x, y, th, batteryOK, eStopOK)`,并订阅伙伴车的同一通道。任一通道断流超过阈值(默认 200 ms)即触发联动解体保护。
Inter-car heartbeat and command signals are exchanged via on-board Wi-Fi APs. Each vehicle broadcasts its own `(execTick, x, y, th, batteryOK, eStopOK)` and subscribes to its partner's identical channel. A 200 ms gap on either side triggers a coordinated graceful stop.
角加速度约束 / Angular-acceleration bound: 底盘的差动舵切换有响应滞后,为避免因突变指令导致路径偏移、进而把误差打到货物上,应在底盘运控层设置最大角加速度(建议 ≤ 0.25 rad/s²)。
The follower's differential steer wheel has a finite response time. A bounded angular-acceleration set-point (≤ 0.25 rad/s² is a reasonable default) keeps the path smooth and prevents error from being transferred to the cargo.
调度集成 / Scheduling integration
SimpleCore 把联动车队视为一个不可分割的调度单元。已经埋下的钩子:
- `AGV任务运行逻辑` 中的 `AbstractCar.haveCoordination` 字段(`D:\src\Simple\SimpleCore\PropType\AbstractCar.cs:57`)。设为 `true` 后,调度内核会把同 `haveCoordination` 分组的车辆作为整体寻路、整体上锁。
- `Car.actualSendScript()` 仍按单车下发 TopazScript,但脚本中含 `WaitPartner(carId)` 同步原语,保证两车动作时序对齐。
The scheduler treats a coordinated set as one unit. The currently-in-place hook is the `AbstractCar.haveCoordination` boolean field. Setting it on the relevant cars makes the scheduler co-pathfind and co-lock for the group. Mission scripts still dispatch per-car, but a `WaitPartner(carId)` primitive in the per-car TopazScript serialises across vehicles.
目标 API / Target API
设计中的(未实施)/ Designed (not yet implemented):
// In SimpleCore — group cars into a coordination set
var pair = new CoordinatedSet { Leader = carA, Followers = new[]{ carB } };
pair.LockingPolicy = LockingPolicy.AsUnit; // lock route segments for the whole group
pair.MotionPolicy = MotionPolicy.LeaderFollows; // followers track leader via rear lidar
// In a mission script (TopazScript)
agv.AcquireCoordination(partner="CarB", role="Leader");
agv.Go(srcX, srcY, srcid, dstX, dstY, dstid, speed: 600);
agv.WaitPartner("CarB");
agv.ReleaseCoordination();
当前实现状态 / Implementation status
| 模块 / Module | 状态 / Status | 文件 / File |
|---|---|---|
| `AbstractCar.haveCoordination` 字段 / flag | ✅ 已实施 / Implemented | `Simple\SimpleCore\PropType\AbstractCar.cs:57` |
| 调度整体寻路 / Group pathfinding | 🚧 设计中 / Designed | (计划在 SimpleCore 调度内核扩展 / pending SimpleCore extension) |
| `CoordinatedSet` 数据结构 | 🚧 设计中 / Designed | — |
| `WaitPartner(carId)` TopazScript 原语 | 🚧 设计中 / Designed | — |
| 后车 V 槽位姿解算 / Follower V-groove pose solver | 🚧 设计中 / Designed | 计划放入 Clumsy MovementDefinition / planned as a Clumsy Movement |
| 车间 AP 心跳通道 / Inter-car AP heartbeat | 🚧 设计中 / Designed | 复用 Medulla DObject 跨网/多机扩展 / extends Medulla DObject for inter-vehicle pub/sub |
| 浮动载货台机械方案 / Floating-platform mechanical design | 📐 已规范 / Specified | `D:\src\cookbook\双车联动技术方案.pdf` §2.3 |
参考 / References
- 技术方案文档 / Design spec: `D:\src\cookbook\双车联动技术方案.pdf` (4 pages, §2.1–§2.5)
- `调度内核运行原理` — 调度内核如何把车组当作整体决策的算法基础。
- `DPS调度算法详解` — DPS 算法的多车死锁检测可作为联动组的前提。
- `AGV任务运行逻辑` — 任务下发流程,联动组扩展将复用同一通路。
相关页面 / See also
- `设备跟随联动` — AGV 跟随非 AGV 设备(手推叉车、卷料车等)。
- `联动天眼系统进行装卸车` — 多车联动 + 视觉天眼的装卸车应用。