mhbench_handover_test
收藏资源简介:
MHBench 交接任务——固定基座(G1 × 2):包含50个成功双操作者演示的机器人操作数据集,任务为两个Unitree G1人形机器人(每个机器人由一名人类操作员通过Meta Quest 3头显控制)在厨房柜台间传递一个瓶子。数据采集于2026年8月14日,共17,634帧(50Hz),对应5.9分钟的模拟演示。两个机器人站着不动,难点在于交接:同一时间只有一个机器人持有瓶子,因此存在一个瞬间两个机器人都没有牢固握持,物体命运取决于两个操作员对该瞬间的协调。瓶子在每个机器人内部也会换手——用一只手拿起,移动到另一只手,然后递出——因此策略需要学习四种不同的抓握方式。数据集采用LeRobot v2.1格式:Parquet行、H.264视频和meta/目录。每个机器人状态包含43个测量关节角度,分组为腿部、腰部、手臂和手部;动作包含35个维度(手臂、手部和腰部关节目标,以及两个运动命令)。数据集包含五路H.264视频流(两个第一人称RGB、一个第三人称场景、两个深度流),并提供语言指令(三个任务描述:机器人A和B各自的角色)。注意:手腕方向是通过正向运动学计算的,而非直接测量。数据集已知限制包括:无行走、抓取是抽象电磁吸盘而非真实手指接触、仅一个操作员对和单一场景等。
MHBench Handover Task - Fixed Base (G1 × 2): A robot manipulation dataset containing 50 successful dual-operator demonstrations. The task involves two Unitree G1 humanoid robots (each controlled by a human operator via Meta Quest 3 headset) passing a bottle between kitchen counters. Data was collected on August 14, 2026, totaling 17,634 frames (50Hz) corresponding to 5.9 minutes of simulated demonstrations. Both robots stand still; the difficulty lies in the handover: only one robot holds the bottle at a time, with a moment when neither robot has a firm grip, and the objects fate depends on the coordination between the two operators. The bottle also changes hands within each robot—picked up with one hand, moved to the other, and then handed out—so the policy must learn four different grasping methods. The dataset uses the LeRobot v2.1 format: Parquet rows, H.264 videos, and a meta/ directory. Each robot state includes 43 measured joint angles grouped into legs, waist, arms, and hands; actions have 35 dimensions (arm, hand, and waist joint targets plus two motion commands). The dataset includes five H.264 video streams (two first-person RGB, one third-person view, two depth streams) and provides language instructions (three task descriptions: roles for robot A and B). Note: wrist orientation is computed via forward kinematics, not directly measured. Known limitations include: no walking, grasping is abstract electromagnetic suction cups rather than real finger contact, only one operator pair, and a single scene.
MHBench — Handover 数据集概览
基本信息
- 数据集名称:MHBench — Handover, fixed base (G1 × 2)
- 任务标识:
Isaac-HandoverFixed-G1x2-v0 - 许可证:Apache-2.0
- 任务类别:机器人学(Robotics)
- 数据规模:少于 1K 个样本(n<1K)
- 数据格式:LeRobot v2.1 (parquet 行 + H.264 视频 + meta/)
数据内容概述
核心任务
数据集包含 50 个成功的双操作员演示,场景为两台 Unitree G1 人形机器人(机器人 A 和机器人 B)在厨房台面上传递一个瓶子。每位机器人由一名人类操作员通过 Meta Quest 3 头显进行遥操作,在联邦双进程 Isaac Sim 环境中协作完成。
数据规模
- 总帧数:17,634 帧(采样率 50 Hz)
- 总时长:约 5.9 分钟模拟演示
- 每集帧数范围:298–459 帧(中位数 348 帧)
任务难点
- 两机器人均固定站立,挑战不在于够到瓶子,而在于交接过程
- 设计上同一时刻仅一台机器人持有瓶子,存在两者都未稳固握持的瞬间,物体状态取决于两位操作员对交接时机的协调
- 瓶子在每台机器人内部也会换手(左手拾取→换到右手→递出),策略需学习四种不同的抓握方式
数据布局
meta/ info.json 特征、数据类型、维度名称、帧率、路径模式 modality.json 每个键与列的映射关系 episodes.jsonl 每集信息:索引、任务、长度 tasks.jsonl 三条语言指令 mhbench_provenance.json 录制来源、丢弃内容、腕部旋转计算说明 data/chunk-000/episode_000000.parquet ... episode_000049.parquet videos/chunk-000/observation.images.ego_a/ 彩色视频 observation.images.ego_b/ observation.images.scene/ observation.depth.ego_a/ 深度视频(米,无损) observation.depth.ego_b/ configs/operators.yaml 所有 meta/* 整数代码的图例
策略读取的状态与动作
状态(每台机器人 43 个测量关节角)
| 键 | 维度 | 说明 |
|---|---|---|
{robot}_left_leg / _right_leg |
6 + 6 | 腿部关节角 |
{robot}_waist |
3 | 腰部关节角 |
{robot}_left_arm / _right_arm |
7 + 7 | 手臂关节角 |
{robot}_left_hand / _right_hand |
7 + 7 | 手部关节角(thumb_0, thumb_1, thumb_2, middle_0, middle_1, index_0, index_1) |
动作(每台机器人 35 维)
| 键 | 维度 | 说明 |
|---|---|---|
{robot}_left_arm / _right_arm |
7 + 7 | 关节目标,相对于chunk起始时角度 |
{robot}_left_hand / _right_hand |
7 + 7 | 关节目标,绝对位置 |
{robot}_waist |
3 | 关节目标,绝对位置 |
{robot}_base_height_command |
1 | 髋部高度(米) |
{robot}_navigate_command |
3 | vx, vy, wz 速度指令 |
腿部仅在状态中、不在动作中:运动通过速度和高度指令控制,由平衡控制器解析腿部。本任务中机器人不移动,navigate_command 始终为零,base_height_command 恒为站立高度 0.72 m。
附加特征
| 键 | 维度 | 说明 |
|---|---|---|
{robot}_{left,right}_wrist_pos / _wrist_abs_quat |
3+4 每个 | 腕部位姿(骨盆坐标系,wxyz) |
{robot}_root |
7 | 骨盆位姿(世界坐标系,xyzw) |
{camera}_camera_pose |
7 每个 | 相机位姿(世界坐标系,xyzw) |
{robot}_wrench |
12 | 左右手力/力矩传感器数据 |
object |
7 | 瓶子位姿 |
grasp_latched |
4 | 磁性闩锁状态 |
语言指令
三条指令,因为角色不对称(一方给、一方收):
- 总体指令:"Pass the bottle from one end of the counter to the other with a hand-to-hand handover."
- 机器人 A:"Pick up the bottle from the counter with your left hand, transfer it to your right hand, and hand it across to your partner."
- 机器人 B:"Receive the bottle with your right hand, transfer it to your left hand, and set it down at the far end of the counter."
场景随机化与成功标准
场景已随机化(不同于 MHBench 的 CoCarry 版本):
- 瓶子起点和目标垫每个 episode 在约 10cm × 10cm 区域内随机生成
- 机器人出生位置固定到毫米级
成功标准:瓶子需位于该 episode 目标垫 ±0.15 m(X/Y)、±0.06 m(高度)、倾斜角 <15°、移动速度 <0.05 m/s 且角速度 <0.15 rad/s,所有手释放至少 0.20 秒。
视觉数据
视频流(每集 5 个 H.264 流,240×320 分辨率)
| 视频键 | 说明 |
|---|---|
observation.images.ego_a |
机器人 A 的视角 |
observation.images.ego_b |
机器人 B 的视角 |
observation.images.scene |
固定第三人称视角 |
observation.depth.ego_a |
深度流(米,无损) |
observation.depth.ego_b |
深度流(米,无损) |
深度数据特性
- 标准 h264 MP4 格式但无损,像素表示毫米值
- 高字节存于 R 通道,低字节存于 G 通道,B 恒为零
- 在视频播放器中呈绿色条纹状(正常现象),解码后为干净深度图
- 最差误差为 0.5mm 舍入误差
- 每个深度特征携带相机内参(
camera.fx/fy/cx/cy) - 提供反投影代码示例
重新渲染说明
视频帧是从记录状态重新渲染而非会话原始像素,原因:
- 机器人 A 没有头部:会话中隐藏以避免遮挡操作员视线,但 USD 可见性属于场景级属性,导致在
ego_b和scene视角也被隐藏 - 录制器状态提示叠加层:悬浮在房间中的状态胶囊(如 "SUCCESS demo 40 saved")出现在 13,878/17,634 帧(78.7%) 的场景帧中,泄露 episode 结果
重新渲染后:无隐藏物体、无叠加层、曝光与会话匹配(比值 1.003/1.004/1.006)。
关键已知限制
- 腕部朝向为计算值:
observation.eef_state中腕部位置为实测,但朝向由正向运动学从关节角重建(误差 7.2e-05 度),与记录数据的检查结果 4.9e-07/分量 - 帧为重新渲染:几何精确恢复、曝光匹配(0.6% 误差),但时序累积状态(边缘和移动物体)有差异
- 无移动:两台机器人固定,
navigate_command恒为零,base_height_command恒为 0.72m(70 个动作维度中 6 个恒定) - 慢速遥操作:每集以 0.245–0.289× 实时速度运行(约 13 Hz 对 50 Hz 控制率),操作员全程慢动作
- 抓取为抽象:磁性表面闩锁而非手指-物体接触解算,
states/hand_contact/*恒为零 - 单一配置:一对操作员、一个场景、一个瓶子。瓶子与目标位置每集随机(约 10cm 抖动),其他参数固定(
terrain_id = 0,partner_id = 0,operator_id_a = 0,operator_id_b = 1)
加载与使用
数据集可直接作为 LeRobot 或 GR00T 数据集路径指向仓库根目录加载。多模态键通过 meta/modality.json 定义列切片偏移(不必硬编码)。提供 ACT、Diffusion Policy 的转换脚本(scripts/data_convertion.py),以及 GR00T 训练启动命令示例。
质量验证
- 所有 episode 与源录制逐键对比:关节状态、动作、指令、力传感器、相机位姿完全一致(最大差异 = 0)
- 深度帧 2.7 G 像素范围内 0.5mm 量化误差内往返
- 无四元数半球变化
- 每个视频帧计数等于对应 parquet 行数
- 测试脚本:
scripts/test_export_lerobot.py和scripts/verify_dataset.py



