真机数据准备#

概述#

很多真机采集的训练数据通过 HDF5 格式保存。本文档将说明如何将这些数据转换为 LeRobot 数据集 v2.1 格式用于 FluxVLA 训练。

数据转换脚本: 请从项目仓库获取,详见项目 README 中的说明。


数据格式要求#

输入数据格式(HDF5)#

HDF5 文件应命名为 episode_*.hdf5 格式,脚本会递归搜索指定目录下的所有匹配文件。

必需字段#

/observations/qpos - 机器人关节位置#
  • 数据类型float32float64

  • 形状[num_frames, 14][num_frames, 16](16 维会自动转换为 14 维)

  • 关节顺序:左臂(7 个关节)+ 右臂(7 个关节)

  • 格式说明

    • 16 维格式:夹爪开合由两个夹爪的绝对位置(共 8 维)表示

    • 14 维格式:夹爪开合由归一化到 [0, 0.1] 相对位置表示

    • 转换公式gripper_value = (left_finger - right_finger) * (0.1 / 0.07)

/observations/images/<camera_name> - 相机图像#
  • 支持的相机head_cam, left_cam, right_cam

  • 格式

    • 未压缩的 4 维 numpy 数组 [num_frames, height, width, channels]uint8

    • 或 JPEG 压缩字节流 [num_frames](会自动解码为 RGB)

可选字段#

/action - 机器人期望关节位置#
  • 数据类型float32float64

  • 形状[num_frames, 14][num_frames, 16](16 维会自动转换为 14 维)

/observations/eepose - 机器人末端执行器位姿#
  • 数据类型float32float64

  • 形状[num_frames, 14]

  • 说明:包含左右两个末端执行器的位置(x, y, z)和四元数(qx, qy, qz, qw)

/observations/images_depth/<camera_name>_depth - 深度图像#
  • 支持的相机head_cam, left_cam, right_cam

  • 数据类型uint16(值为 mm 值)

  • 形状[num_frames, height, width]

  • 说明:需要在 DatasetConfig 中设置 add_infos = ["depth"] 才会处理


输出数据格式(LeRobot v2.1)#

转换后的数据集采用 LeRobot v2.1 格式,存储在 HuggingFace Datasets 兼容的目录结构中:

<output_dir>/<repo_id>/
├── data/
│   ├── train/
│   │   ├── episode_0.parquet
│   │   └── ...
│   └── video/
│       ├── episode_0/
│       │   ├── observation.images.head_cam.mp4
│       │   └── ...
│       └── ...
├── info.json
└── meta.json

数据字段说明#

每个 episode 的 parquet 文件包含以下字段:

observation.state#
  • 类型float32

  • 形状(14,)

  • 说明:机器人关节状态,字段顺序与输入 qpos 相同

observation.images.<camera_name>#
  • 类型VideoFrame 对象

  • 说明:相机图像引用,包含视频文件路径和帧时间戳

  • 支持的相机head_cam, left_cam, right_cam

  • 视频规格

    • 帧率:30 FPS

    • 图像尺寸:(480, 640, 3)

    • 存储位置:video/ 目录下的 MP4 文件

action(可选)#
  • 类型float32

  • 形状(14,)

  • 说明:机器人动作,仅当输入包含 /action 时生成

observation.eepose(可选)#
  • 类型float32

  • 形状(14,)

  • 说明:末端执行器位姿,字段顺序与输入相同,仅当输入包含 /observations/eepose 时生成

observation.depth.<camera_name>(可选)#
  • 类型uint16

  • 形状(480, 640)

  • 说明:深度图像,仅当输入包含深度图像且 add_infos = ["depth"] 时生成

task#
  • 类型string

  • 默认值"pick up the yellow banana and put it on the pink plate"

  • 说明:任务标签,可通过 init_task 参数自定义