双车/多车联动

来自MDCS wiki2
跳到导航 跳到搜索

模板:Note

概述 / 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):

  1. 操作工遥控前车与后车到取货点。两车车尾相对,车间距与货物长度一致,车体中轴线对准。
    Operator brings both cars to the pickup point, tail-to-tail, with spacing matching the cargo length and center-lines aligned.
  2. 操作工在遥控手柄上启动 "联动 / Couple" 功能。
    Operator presses "Couple" on the handheld remote.
  3. 后车通过尾部激光雷达观测前车 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.
  4. 双车车灯切换颜色,提示联动已就绪。
    Both vehicles' indicator lights change colour to signal "coupled".
  5. 操作工引导吊装工把货物落到双车的浮动载货台上,并把货物锁定在载货台上。
    Operator guides the rigging crew to lower the cargo onto the platforms and lock it.
  6. 操作工遥控前车(前车此刻作为联动的"领头车")驶向终点。联动带载极限速度 0.6 m/s,全程激光雷达避障开启。
    Operator drives the leader to the destination at ≤ 0.6 m/s; obstacle-avoidance lidars stay active on both vehicles.
  7. 到达终点、吊装卸货完成后,操作工在手柄上结束联动。
    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