wb_handover_glass_jar_to_box
收藏资源简介:
来自Unitree_G1_WholeBody_RGB的全身遥操作数据,以LeRobot v2.1格式发布。任务:从人类手中接过玻璃罐并放入旁边的盒子中。
Whole-body teleoperation data from Unitree_G1_WholeBody_RGB, released in LeRobot v2.1 format. Task: take a glass jar from a human hand and put it into the box next to it.
wb_handover_glass_jar_to_box 数据集概述
基本信息
- 任务: 从人类手中接过玻璃罐并将其放入附近的箱子中
- 机器人平台: Unitree_G1_WholeBody_RGB(宇树G1人形机器人)
- 控制模式: 全身遥操作(Whole-body teleoperation)
- 数据格式: LeRobot v2.1 格式(每 episodes 对应一个 parquet 文件和一个视频片段)
- 许可协议: Apache-2.0
数据规模
| 指标 | 数值 |
|---|---|
| 总集数(Episodes) | 46 |
| 总帧数 | 27,209 (约15分钟,30fps) |
| 单集长度 | 323–1056 帧(中位数 577 帧) |
| 相机 | 2 个 640×480 H.264 摄像头 |
| 状态/动作维度 | 43维关节向量 |
| 训练/测试划分 | 全部用于训练(train 0:46) |
双分支版本
数据集提供两个分支,仅灵巧手维度不同,其他所有列(身体关节、时间戳等)完全相同:
| 分支 | 手部状态(维度22–28/36–42) | 手部动作 | 适用场景 |
|---|---|---|---|
main |
全为零(未记录) | 原始 Dex3 遥操作向量(含负值) | 只需要身体/运动信息时 |
real_inspair |
Inspire 估计值(0.50–1.00) | Inspire 原生指令(0.50–1.00),最后一槽位为二值开/关触发器 | 需要手部相关数据时 |
注意: 如果训练抓取任务,应使用 real_inspair 分支。在 main 分支上,手部状态列全为零,模型无法从中学习到任何信息。real_inspair 分支的手部状态为估计值(从记录过 Inspire 反馈的采集中迁移而来),并非直接记录的 ground truth。
数据模式(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, index_1, middle_0, middle_1, thumb_0, thumb_1, thumb_2)
- 29–35: 右臂(肩 pitch/roll/yaw、肘、腕 roll/pitch/yaw)
- 36–42: 右手(index_0, index_1, middle_0, middle_1, thumb_0, thumb_1, thumb_2)
在 real_inspair 中,Inspire 手提供 6 维估计值:槽位 22–27/36–41 携带数据,槽位 28/42 保持零填充。动作侧对应槽位携带原生指令,最后一个槽位为二值触发器(0.0/1.0)。
视频数据
| 按键 | 内容 | 编码 |
|---|---|---|
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 值。身体检测经过每集的分数阈值、基于包围盒包含关系的重复抑制、片段合并、以及基于运动轨迹的单人身份锁定等后处理。手部候选点会锚定到中心人物的手腕——距手腕超过半个肩宽的检测会被拒绝,从而排除手形道具的干扰。
数据集结构
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_handover_glass_jar_to_box", revision="real_inspair") print(ds.meta.features.keys()) sample = ds[0]
注意: v2.1 格式的数据在 lerobot v3.0+ 上需要先运行官方升级命令:
python -m lerobot.datasets.v30.convert_dataset_v21_to_v30 --repo-id=DaoyuanZhu/wb_handover_glass_jar_to_box



