⚠️ 这是一张架构设计草案,不是产品规格。 目的是把姊妹篇反复出现的「子母车集成只能自建中间件」这句结论,落成一张能照着搭的最小图。所列接口/协议(unitree_sdk2 的 DDS、VDA5050 的 MQTT/JSON)均以各 SDK/标准官方文档与真实 PoC 验证为准;本篇外链 curl 200 可达。「最小」= PoC 阶段范围,刻意只画跑通一条闭环所必需的模块,不含量产级冗余/安全认证/多机调度扩展(那些在阶段 2/3 再加)。
🌐 这篇要回答什么
两篇姊妹篇都指向同一句话:GO2 选型·集成 说「GO2 无现成 AMR 方案,集成必然自建——而这正是差异化」;SEER M4 落地路径 说「即便不与 SEER 合作,也可把它当 benchmark 自建」。那『自建』到底建什么? 本篇把它画成一张最小架构图 + 一条作业时序,作为 PoC 阶段 1 的技术起点。
子母车的概念/案例见 子母车研究;三种融合形态见 融合篇;买现成路径见 SEER M4 落地路径。
🧱 一、为什么是「自建中间件」(一句话接上结论)
- 机器狗(GO2/B2 等)没有现成的 AMR 对接产品,也不支持 VDA5050(VDA5050 只面向 2D 轮式 AMR)——见 GO2 选型·集成。
- 所以「AMR 驮狗、狗爬楼」这条闭环里,母车与子车之间的编排、对接、协同,没有现成协议可套,必须自己写一层中间件。
- 这层中间件就是事业企划书里「软件 × 硬件」的护城河:硬件(AMR、机器狗)都买现成,协同编排是自社的。SEER 把这件事做成了产品(见 SEER 篇);自建则是「自己做一个 mini 版、且完全自主可控」。
🗺️ 二、最小架构图(一张图三层)
╔══════════════════════════════════════════════════════════════════╗
║ 自社中间件 / 调度编排层 (核心差异化 · 全是自社的) ║
║ ║
║ ┌───────────────┐ ┌───────────────┐ ┌────────────────────┐ ║
║ │ 任务状态机 │ │ 地图 / 定位融合 │ │ Docking 协同控制 │ ║
║ │ Orchestrator │ │ Map / Localize │ │ 对接握手协议(handshake)│ ║
║ │ (无死锁流程) │ │ (母车↔狗坐标对齐)│ │ (上/下车·复位) │ ║
║ └───────┬───────┘ └───────────────┘ └─────────┬──────────┘ ║
║ │ 监控 / HMI / 日志 / 告警 │ ║
╚═══════════╪═══════════════════════════════════════════════╪═══════╝
│ │
① 母车接口 │ VDA5050 (MQTT/JSON) 或厂商私有 API ② 子车接口 │ DDS / ROS2 / WebRTC
│ │
┌────────▼─────────┐ ═══ docking ═══ ┌────────▼──────────┐
│ 母车 AMR │ 物理对接面 + │ 子车 机器狗 │
│ (现成 · 轮式) │◄──── 充电/复位/锁止 ────►│ (GO2 EDU 起步) │
│ 搬运重货·平地长程 │ │ 爬楼·最后一百米 │
└──────────────────┘ └───────────────────┘
既有 AGV 可复用 unitree_sdk2 / unitree_ros2
读图三个要点:
- 左右两条接口是异构的:母车用工业 AMR 那一套(VDA5050 或厂商 API),子车用宇树那一套(DDS/ROS2)——中间件的第一份工作就是把这两套翻译成统一的内部任务语言。
- 中间最值钱的是「调度编排层」:它不生产硬件能力,它生产「什么时候、让谁、做什么、怎么交接」——这正是自社软件。
- docking 是物理 + 协议双层:既有机械对接面(上/下车、锁止、可选充电),也有软件握手(确认狗已固定/已离车才允许母车动)——安全闭锁在这层。
🔌 三、逐层接口清单(自建实际要对接什么)
| 层 | 模块 | 用什么对接 | 来源 / 说明 |
|---|---|---|---|
| 子车通信 | 运动指令 / 读传感器 | unitree_sdk2(CycloneDDS 底层) | 1 |
| 子车通信 | ROS2 生态桥接 | unitree_ros2 | 2 |
| 子车通信 | Python 快速原型 | unitree_sdk2_python | 3 |
| 子车通信 | Wi-Fi/以太双通道(社区参考) | go2_ros2_sdk(WebRTC+DDS,无 fleet) | 4 |
| 母车通信 | 标准调度协议 | VDA5050(MQTT/JSON;母车支持才可用) | 5 |
| 母车通信 | fleet manager 参考实现 | openTCS VDA5050 适配器 | 6 |
| 编排层 | 任务状态机 / 无死锁流程 | 自社(参考 marsupial 文献 Petri-net 编排) | 见 子母车研究 |
| 编排层 | docking 握手 / 安全闭锁 | 自社(物理+协议双层) | 本篇 |
| 对照 | 买现成同等能力 | SEER M4(四足+VDA5050 同系统协同) | 7 |
EDU 才有低层控制:要写自定义步态/精细对接,子车必须是 GO2 EDU(含低层
rt/lowcmd,Air/Pro 锁死)——见 GO2 选型·集成。
⏱️ 四、作业时序(一条无死锁闭环)
把「AMR 驮狗、狗爬楼」拆成一条状态机,每步都有进入/退出条件,按 marsupial 文献做成无死锁流程(子母车研究):
[IDLE]
│ 收到任务(目标楼层/点位)
▼
[AMR_DRIVE] 母车载狗平地行驶到楼梯口 ──(到位)──►
[ARRIVE] 母车停稳·定位对齐 ──(校验 OK)──►
[WAKE_DOG] 中间件唤醒狗·下发任务坐标 ──►
[DOG_DISMOUNT] docking 解锁·狗下车 ──(确认离车)──►
[DOG_TASK] 狗爬楼/最后一百米/搬运·识别 ──(任务完成)──►
[DOG_RETURN] 狗自主返回到母车对接面 ──►
[DOCK] docking 握手·锁止·(可选充电) ──(确认固定)──►
[AMR_DEPART] 母车载狗驶向下一点 / 返航 ──► [IDLE]
异常分支(任一步失败)→[SAFE_HOLD] 停止·告警·人工介入·不允许母车带未固定的狗移动
安全第一条铁律:
[AMR_DEPART]的前置条件是 docking 握手确认「狗已固定」——这条闭锁防止母车拖着没坐稳的狗跑,是 PoC 也必须有的最小安全。
⚖️ 五、自建 vs 买 SEER(同一张图的两种实现)
| 维度 | 自建中间件(本篇) | 买 SEER(SEER 篇) |
|---|---|---|
| 调度编排层 | 自社从零写(state machine + docking 握手) | M4 现成(四足+VDA5050 同系统)7 |
| 子车运动控制 | unitree_sdk2/ROS2 自接 | SRC 控制器现成 |
| 接既有 AGV | 自写 VDA5050/厂商 API 桥接 | M4 走 VDA5050 桥接 |
| 自主可控 | ✅ 完全自主 | ⚠️ 依赖 SEER(且日本无代理) |
| 起步成本/周期 | ⚠️ 高(要自己写) | ✅ 低(买现成) |
| 差异化护城河 | ✅ 编排是自社 IP | ⚠️ 编排是 SEER 的 |
| 建议 | GO2 PoC 阶段先自建一个 mini 版(最低成本验证闭环 + 攒自社 IP) | 规模化/接重载异构时,再评估 M4 当统一 RCS |
两条不是互斥:先自建 mini 版把闭环和自社 IP 攒出来,规模化时如果 SEER 更划算,自建的编排经验也能无缝迁到「用 M4 + 自社上层业务」。
🪜 六、PoC 三阶段映射(这张图怎么分期搭)
- 阶段 1(单台·最小闭环):GO2 EDU + 一台现成 AMR + 本图的「编排层最小子集」(状态机 + docking 握手),跑通「行驶→下车→爬楼→返回→对接→出发」一条线。失败成本最低。
- 阶段 2(厂内雏形):加地图/定位融合 + 监控 HMI,对标 驭势×国网「车狗一体」 做厂内真实路线。
- 阶段 3(接既有车队/升级重载):货重确认后重载段换 B2/B2-W,母车接大冢既有 AGV(VDA5050 桥接),或评估整体上 SEER M4——阶段 1/2 的编排软件栈平移复用。
⚠️ 待你核实 / 待补充
- 要不要我把这张图导出成 SVG/PNG,放进给大冢的客户提案(docx/ppt)里做技术页。
- 母车选型:阶段 1 用哪台现成 AMR(大冢既有车 or 采购一台轻型 AMR 做 PoC)——给我型号我把母车接口那一栏(VDA5050 还是厂商 API)落实。
- docking 机构:物理对接面要不要我单独起一篇「上/下车机构 + 安全闭锁」的设计草案(含充电对接选项)。
- 真实路线/货重:拿到后我把状态机各步的超时/重试参数、以及何时必须从 GO2 升 B2 的临界点算清。