RLDS 还是 HDF5:机器人操作数据该用哪种格式(rlds hdf5 robot dataset 选型指南)
关键词:rlds hdf5 robot dataset, 机器人数据格式 · 阅读约 5 分钟 · 作者:DexHand 团队
读完本文,你能在十分钟内决定自己的灵巧手操作数据该用 HDF5 还是 RLDS 存,以及两者之间怎么转换才不返工。
先分清需求:采集存储和训练分发是两件事
很多团队争论 rlds hdf5 robot dataset 哪个更好,其实是把两个阶段混在了一起。采集阶段关心的是写入吞吐、断电可恢复、随时能打开看一眼;训练分发阶段关心的是 episode 语义清晰、能被主流训练框架直接加载、跨团队不用改代码。HDF5 与 RLDS 分别在这两个阶段各有优势,选型的关键是先确认你现在处于哪个阶段,以及数据最终要交给谁用。
HDF5:面向采集和本地实验
HDF5 是通用的层次化数值容器,一个文件里可以放多个数据集,支持分块、压缩和按切片部分读取。对机器人操作数据来说,这意味着几件具体的事:
- 关节角、力矩、相机帧可以按各自采样率存成独立数据集,不必对齐到同一时间轴后再落盘。
- 单文件、可随机访问,调试时用 h5py 直接切片看某一段轨迹,不需要先构建加载器。
- Python、C++、MATLAB 都有成熟读写库,与 ROS 2 采集节点或 Python SDK 直接对接。
- 缺点是没有统一的 episode/step 约定,字段命名和嵌套结构由各团队自定,跨团队交换时容易出现“同名不同义”。
RLDS:面向 episode 语义和生态互通
RLDS(Reinforcement Learning Datasets)是一种按 episode 与 step 组织数据的规范,核心约定是每个 step 包含 observation、action、reward、discount 以及 is_first / is_last / is_terminal 等标志位。它通常构建在 TFDS 之上,以分片文件形式存储,重点解决的是“数据能否被别人直接用”:
- episode 边界和终止标志是格式的一部分,模仿学习与离线强化学习的加载逻辑不用为每个数据集重写。
- Hugging Face、LeRobot 等社区工具链对这类结构化数据集有现成的转换与加载路径,便于公开发布。
- 代价是写入路径较重,采集端往往需要先缓存再批量转换,不适合在实验室里边采边看。
- 对不需要 reward 字段的纯示教数据,需要按约定填占位值,属于额外但一次性的工作。
一张表看清差异
| 维度 | HDF5 | RLDS |
|---|---|---|
| 数据组织 | 自定义层次结构 | 固定的 episode / step 约定 |
| 典型用途 | 采集、本地实验、调试 | 训练分发、公开发布、跨团队复用 |
| 部分读取 | 按切片随机访问 | 按 episode 顺序读取为主 |
| 生态兼容 | 通用数值工具链 | Hugging Face、LeRobot 等训练框架 |
| 写入开销 | 低,可流式追加 | 较高,通常离线批量转换 |
| 跨团队一致性 | 依赖各自约定 | 由规范保证 |
推荐流程:HDF5 采、RLDS 发
对多数灵巧手团队,务实的做法不是二选一,而是分阶段使用。采集节点把原始信号写入 HDF5,保留原始采样率和未裁剪的相机帧;实验稳定后,用一段转换脚本把 HDF5 中的轨迹切分为 episode,映射到 RLDS 的 observation / action 字段,再导出为可发布版本。执行时有几个要点值得提前定下来:
- 在 HDF5 阶段就为每条轨迹记录起止标志和任务标签,后续切分 episode 不用靠人工回看视频。
- 把 action 定义写进元数据:是目标关节角还是关节角增量、是否归一化,转换脚本和训练脚本都从这里读。
- 相机帧与关节数据的时间戳分别保存,对齐策略放在转换层而不是采集层,方便日后换策略重跑。
- 转换脚本纳入版本管理,让 RLDS 版本能追溯到对应的 HDF5 原始文件。
在 DexHand 工具链里如何落地
DexHand-5F 具有 17 台伺服电机和 17 个主动自由度,通过 EtherCAT 总线由多轴一体伺服驱动塔控制,配套 ROS 2 接口与 Python SDK,可以直接把关节状态和指令流写入 HDF5。与实机 1:1 的虚拟手仿真使用同一控制器,因此在 NVIDIA Isaac Sim、MuJoCo 或 Gazebo 里采集的仿真数据与真机数据可以共用同一套字段定义。我们提供的数据集同时支持 HDF5 与 RLDS 两种格式,并兼容 Hugging Face 与 LeRobot 的加载方式,你可以把它当作字段命名和转换流程的参考模板。
如果想先看看两种格式在真实灵巧手数据上分别长什么样,可以直接到 /downloads/ 领取免费的 10 MB 数据集样本,对照本文的流程试着跑一遍转换。
本文由 DexHand 内容智能体起草、团队审校;事实以产品页与规格表为准。
English summary
Teams building manipulation datasets for dexterous hands often ask whether to store data in HDF5 or RLDS. The answer depends on the stage of work. HDF5 is a general hierarchical container with chunking, compression and random slice access, which makes it well suited to data collection and local experiments: joint angles, torques and camera frames can be stored at their native rates and inspected immediately. RLDS enforces an episode/step structure with observation, action and boundary flags, so datasets load directly in training frameworks and are easy to share through Hugging Face and LeRobot. A practical workflow is to record raw signals in HDF5, then convert to RLDS for release, keeping action definitions and timestamps in metadata. The DexHand-5F, with 17 servo motors and 17 active degrees of freedom, streams data over EtherCAT via ROS 2 and a Python SDK, and its simulation twin shares the same controller. A free 10 MB sample in both formats is available in the download center.
Deutsche Zusammenfassung
Bei Manipulationsdaten für Roboterhände stellt sich häufig die Frage, ob HDF5 oder RLDS das passende Format ist. HDF5 ist ein hierarchischer Container mit Chunking, Kompression und wahlfreiem Zugriff und eignet sich gut für die Aufzeichnung und lokale Experimente. RLDS legt eine feste Episode/Step-Struktur mit Beobachtung, Aktion und Grenzmarkern fest, wodurch Datensätze direkt in Trainingsframeworks wie Hugging Face und LeRobot nutzbar sind. Empfohlen wird ein zweistufiger Ablauf: Rohdaten in HDF5 erfassen, danach für die Veröffentlichung nach RLDS konvertieren. Die DexHand-5F mit 17 Servomotoren und 17 aktiven Freiheitsgraden liefert ihre Daten über EtherCAT, ROS 2 und ein Python-SDK; die Simulation nutzt denselben Controller. Ein kostenloses 10-MB-Beispiel in beiden Formaten steht im Downloadbereich bereit.