wb_shelf_cup
收藏资源简介:
来自Unitree_G1_WholeBody_RGB机器人的全身远程操作数据,以LeRobot v2.1格式发布。任务:从架子上拿起人类提示的杯子,然后递给人类。
Whole-body teleoperation data from the Unitree_G1_WholeBody_RGB robot, released in LeRobot v2.1 format. Task: pick up a cup indicated by a human from a shelf and hand it to the human.
wb_shelf_cup 数据集概述
基本信息
- 许可证:Apache-2.0
- 任务类别:机器人学(robotics)
- 语言:英语
- 标签:LeRobot、机器人学、人形机器人、Unitree G1、全身控制、远程操作、Inspire手、姿态估计
- 数据规模:10K–100K 帧
- 数据格式:LeRobot v2.1 格式(每集一个 Parquet 文件与一个视频片段)
任务描述
根据人类的提示,从货架上拿起指定杯子,然后将其递给人类。
数据规模
| 指标 | 数值 |
|---|---|
| 集数 | 18 |
| 总帧数 | 16600(9分钟,30 fps) |
| 单集帧数 | 708–1162(中位数924) |
| 摄像头 | 2 × 640×480 H.264 |
| 状态/动作维度 | 43维关节向量 |
| 训练/测试划分 | 训练集18集,无测试集 |
两个变体分支
数据集分为两个分支,仅在灵巧手维度上存在差异,其余列完全一致。
| 分支 | 手部状态(维度22–28 / 36–42) | 手部动作 | 适用场景 |
|---|---|---|---|
main |
全零(未记录) | 原始 Dex3 遥操作向量,含负值 | 仅需身体/运动信息 |
real_inspair |
Inspire 估计值(0.50–1.00) | Inspire 原生指令(0.50–1.00),末位为二值开关触发器 | 需要任何手部相关信息 |
注意:训练抓取任务时务必使用 real_inspair 分支;main 分支的手部状态列全为零,模型无法从中学习任何信息。
数据模式(Schema)
observation.state 和 action 均为 43 维,排列顺序:
- 0–11:腿部(左右髋关节 pitch/roll/yaw、膝关节、踝关节 pitch/roll)
- 12–14:腰部(yaw、roll、pitch)
- 15–21:左臂(肩关节 pitch/roll/yaw、肘关节、腕关节 roll/pitch/yaw)
- 22–28:左手(index_0/1、middle_0/1、thumb_0/1/2)
- 29–35:右臂(肩关节 pitch/roll/yaw、肘关节、腕关节 roll/pitch/yaw)
- 36–42:右手(index_0/1、middle_0/1、thumb_0/1/2)
在 real_inspair 分支中:
- 状态侧:Inspire 手报告 6 维估计值(槽位 22–27 / 36–41),槽位 28 / 42 保持零填充
- 动作侧:相同槽位承载原生指令,末位为二值触发器(0.0 / 1.0)
注意:
real_inspair的手部状态是估计/迁移得到的(来自记录了 Inspire 反馈的采集),并非实际记录的真值,应描述为"估计/迁移的 Inspire 手部状态"。
视频数据
| 键名 | 内容 | 编码 |
|---|---|---|
observation.images.cam_chest |
胸部相机 — 原始画面 | H.264 |
observation.images.cam_chest_hand_overlay |
胸部相机 — MediaPipe 手部关键点叠加 | H.264 |
observation.images.cam_chest_pose_overlay |
胸部相机 — RTMO 身体骨架叠加 | H.264 |
observation.images.cam_head |
头部相机 — 原始画面 | H.264 |
observation.images.cam_head_hand_overlay |
头部相机 — MediaPipe 手部关键点叠加 | H.264 |
observation.images.cam_head_pose_overlay |
头部相机 — RTMO 身体骨架叠加 | H.264 |
姿态标注
关键点以 Parquet 列直接嵌入,每帧一行,无需额外标注文件。
手部关键点(MediaPipe Hands)
| 列 | 内容 |
|---|---|
observation.human_hand.<cam>.landmarks_uv |
每只手 21 个点,像素 u/v 坐标(左槽位在前) |
observation.human_hand.<cam>.landmarks_2d |
归一化 x/y/z 坐标 |
observation.human_hand.<cam>.world_landmarks |
世界坐标 x/y/z |
observation.human_hand.<cam>.valid / .score |
左右手存在标志和置信度 |
身体关键点(RTMO rtmo-m_16xb16-600e_body7)
| 列 | 内容 |
|---|---|
observation.human_body.<cam>.landmarks_uv |
COCO-17 身体点,像素 u/v |
observation.human_body.<cam>.landmarks_2d |
归一化坐标 |
observation.human_body.<cam>.scores / .valid |
逐关键点置信度和逐帧标志 |
填充规则:未检测到时坐标为全零且 valid = 0,无 NaN 值。
标注过滤流程
- 身体检测:按集后处理 — 分数阈值 → 基于边界框包含关系的重复抑制(普通 IoU 无法处理覆盖真实框的大误检框)→ 片段合并 → 构建基于运动轨迹的单身份锁定(轨迹按饱和度掩码的躯干色调直方图合并)。时间上重叠的轨迹绝不合并(共视检测不可能是同一人)。
- 手部候选:额外锚定中心人物的手腕 — 距离手腕超过半个肩宽的检测被拒绝,从而排除手形道具干扰。
文件布局
data/chunk-000/episode_000000.parquet 每集一个 Parquet videos/chunk-000/<video_key>/episode_000000.mp4 每集每摄像头一个视频 meta/info.json 特征模式 meta/episodes.jsonl 集索引和长度 meta/tasks.jsonl 任务字符串 meta/stats.json 逐特征统计
加载方式
python from lerobot.common.datasets.lerobot_dataset import LeRobotDataset
ds = LeRobotDataset("DaoyuanZhu/wb_shelf_cup", revision="real_inspair") print(ds.meta.features.keys()) sample = ds[0]
若使用 LeRobot v3.0+,需先运行官方升级命令:
python -m lerobot.datasets.v30.convert_dataset_v21_to_v30 --repo-id=DaoyuanZhu/wb_shelf_cup



