架构总览¶
双子项目¶
| 子项目 | 定位 | 技术栈 | 运行方式 |
|---|---|---|---|
ubt_sim |
机器人仿真平台:仿真验证、遥操作、数据采集 | Isaac Sim 5.0 + Isaac Lab 2.2 + ROS2 | Docker 容器(Isaac Sim Python 3.11 + 系统 Python 3.10) |
ubt_IL |
模仿学习平台:数据转换、训练、评估、部署 | LeRobot(vendored 子模块)+ ROS2 | Docker 容器(Python 3.12 venv + 系统 Python 3.10) |
数据流¶
┌──────────────────────────────────────────────────────────────────────────┐
│ ubt_IL 模仿学习平台 │
│ 数据转换 ──► 模型训练 ──► 离线评估 ─► 推理部署 │
└───────────▲───────────────┬──────────────────────▲──────────────┬────────┘
│ │④仿真部署 │ │⑤真机部署
│①数据采集 ▼ (ROS桥接) │②真机采集 │(ROS桥接)
┌────────┴────────────────┐ ┌─────────────┴──────────────▼──────┐
│ ubt_sim 仿真平台 │ │ 真机(天工行者 / Dex / Walker S2 / C1)│
│ (Isaac Sim 容器) │ │ ROS_DOMAIN_ID=0 直连网段 │
└─────────────────────────┘ └───────────────────────────────────┘
- ① 数据采集(仿真):
ubt_sim内置脚本任务(抓取 / 分拣)批量采集 15Hz HDF5 数据,仅任务成功才落盘。 - ② 数据采集(真机):使用 Thinker Studio 遥操数采平台采集,可导出 HDF5 或 LeRobot 数据集。
- ③ 转换 / 训练 / 评估:在
ubt_IL容器内完成,HDF5 统一转换为 LeRobot v3 数据集后训练 ACT / Pi0.5 策略,再做离线 MSE 评估。 - ④ 仿真部署:模型经 ROS2-ZMQ 桥接回注 Isaac Sim,与真机部署话题一致,用于真机部署前验证。
- ⑤ 真机部署:
rollout.sh推理部署,或 Walker S2 EDU 探索者 推理服务器常驻预热部署。
ubt_sim 仿真平台架构¶
三进程协同(Python 版本不可混用):
- 仿真
/isaac-sim/python.sh:加载 Gym 任务(天工行者 客厅 / 天工行者 Dex 抓苹果 / Walker S2 EDU 探索者 仓库 / Walker C1 客厅抓放),图像直发 ZMQ 端口。 - 桥接
/usr/bin/python3:ZMQ↔ROS2 双向转发,start_sim.sh自动拉起。 - 采集
/usr/bin/python3:发布指令、录制 15Hz HDF5。
通过 ROS2-ZMQ 桥接,仿真以与真机一致的 ROS2 话题对外发布状态与图像,实现 sim-to-real 一致的遥操作与数据采集。
ubt_IL 模仿学习平台架构¶
通信链路(以天工为例,各机型端口独立):
LeRobot (Python 3.12 venv)
│ ZMQ 5559/5560(Walker S2: 5561/5562;Walker C1: 5661/5662)
▼
Bridge2 (系统 Python 3.10 + ROS2)
│ ROS2 DDS
▼
机器人 / 仿真器
▲
└── 相机推流走 ZMQ 5558(ImageServer)/ 5563(Walker S2 relay)/ 5663(Walker C1 relay)
容器内双 Python 环境:ROS 相关用 /usr/bin/python3,LeRobot 相关用 /lerobot/.venv/bin/python。
ZMQ 端口一览¶
| 端口 | 模块 | 用途 |
|---|---|---|
| 5555 | 天工 / 天工 Dex 仿真桥接 | 控制指令(bridge PUB) |
| 5556 | 天工 / 天工 Dex 仿真桥接 | 机器人状态(bridge SUB) |
| 5557 | 天工仿真桥接 | 相机原图像(C++ 桥接处理) |
| 5558 | 仿真 / ImageServer | JPEG 相机直连(仿真发布;天工 Dex 真机由 Bridge2 --enable-image 转码) |
| 5559 / 5560 | ubt_IL ↔ Bridge2(天工 / 天工 Dex) | 动作指令 / 机器人状态 |
| 5655 | Walker S2 / Walker C1 仿真桥接 | 控制指令(bridge PUB) |
| 5656 | Walker S2 / Walker C1 仿真桥接 | 机器人状态(bridge SUB) |
| 5657 | Walker S2 / Walker C1 仿真 | 相机 RGB(采集直连) |
| 5658 | Walker S2 / Walker C1 仿真 | JPEG 图像 |
| 5561 / 5562 | Walker S2 真机 Bridge2 | 动作指令 / 机器人状态 |
| 5563 | Walker S2 真机 CameraRelay(独立进程) | 图像通道(ROS2 DDS shm_msgs 相机话题 -> ZMQ) |
| 5570 / 5571 | Walker S2 / 天工 Dex 推理服务器 | ZMQ REP 指令 / PUB 状态端口 |
| 5661 / 5662 | Walker C1 真机 Bridge2 | 动作指令 / 机器人状态 |
| 5663 | Walker C1 CameraRelay(独立进程) | 图像通道(ROS2 DDS 相机话题 -> ZMQ JPEG) |
| 5690 / 5691 | Walker C1 推理服务器 | ZMQ REP 指令 / PUB 状态端口 |
| 5755 / 5756 | 天工 Dex 仿真桥接 | 控制指令 / 机器人状态 |
| 5757 / 5758 | 天工 Dex 仿真 | 相机原图(RGB + 深度)/ JPEG 直连 |
Walker S2 与 Walker C1 的仿真桥接同为 5655-5658,同一时间只能运行一个机型;两者
ubt_IL侧插件端口不同(S2 5561-5563、C1 5661-5663),可分别与各自的仿真桥接同时运行。
项目结构¶
Thinker-IL-LAB/
├── ubt_sim/ # 仿真平台
│ ├── assets/ # 3D 模型(USD/URDF/贴图,Git LFS)
│ ├── config/ # YAML 任务/场景配置
│ ├── docker/ # Docker 容器配置
│ ├── scripts/ # 仿真启动脚本
│ ├── source/ubt_sim/ # Python pip 包(Isaac Sim 侧,Py3.11)
│ └── teleoperation/ # 机器人控制脚本(ROS2 侧)
│ ├── bridges/ # ROS2-ZMQ 桥接
│ ├── control/ # 机器人控制 + 数据采集
│ ├── image/ # 图像传输
│ ├── msgs/ # ROS2 自定义消息
│ └── tools/ # 诊断/回放工具
└── ubt_IL/ # 模仿学习平台
├── dataset/ # 数据集与转换输出
├── docker/ # Docker 容器配置
├── lerobot/ # vendored lerobot 源码(子模块)
├── model/ # 训练输出与预训练权重
├── scripts/
│ ├── convert/ # HDF5 -> LeRobot 数据转换
│ ├── train/ # 训练启动脚本
│ ├── deploy/ # 部署脚本(reset / rollout / replay / 推理服务器)
│ └── eval/ # 离线评估
├── tienkung/ # 天工 lerobot 插件
├── tienkung_dex/ # 天工行者 Dex 插件 + ROS2 消息 + Bridge2
├── walker_c1/ # Walker C1 EDU 共创者 插件 + Bridge2
└── walker/ # Walker S2 EDU 探索者 插件 + ROS2 SDK/messages + Bridge2