andreaskoepf/dk1_duplo_disassembly_2026-04-04
This dataset was created using LeRobot. Dataset Description Bimanual duplo disassembly demonstrations with DK1 robot Robot: TRLC DK1 bimanual (bi_dk1_follower) — 2× 6-DOF arms with grippers Task: separate the duplo bricks Episodes: 42 Total frames: 86,441 (48.0 min @ 30 fps) Avg episode length: 68.6s License: apache-2.0 Cameras Camera Resolution Codec FPS observation.images.head 640x360 h264 30 observation.images.left_wrist 640x360 h264 30… See the full description on the dataset page: https://huggingface.co/datasets/andreaskoepf/dk1_duplo_disassembly_2026-04-04.
This dataset was created using LeRobot.
<a class="flex" href="https://huggingface.co/spaces/lerobot/visualizedataset?path=andreaskoepf/dk1duplodisassembly2026-04-04"> <img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface/badges/resolve/main/visualize-this-dataset-xl.svg"/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface/badges/resolve/main/visualize-this-dataset-xl-dark.svg"/> </a>
Dataset Description
Bimanual duplo disassembly demonstrations with DK1 robot
- Robot: TRLC DK1 bimanual (
bi_dk1_follower) — 2× 6-DOF arms with grippers - Task: separate the duplo bricks
- Episodes: 42
- Total frames: 86,441 (48.0 min @ 30 fps)
- Avg episode length: 68.6s
- License: apache-2.0
Cameras
Observation Space
- `observation.state`: float32[40] — leftjoint1.pos, leftjoint2.pos, leftjoint3.pos, leftjoint4.pos, leftjoint5.pos, leftjoint6.pos... (joint positions, velocities, torques for both arms + grippers)
- *`observation.images.`**: 3 camera streams
Action Space
- `action`: float32[14] — leftjoint1.pos, leftjoint2.pos, leftjoint3.pos, leftjoint4.pos, leftjoint5.pos, leftjoint6.pos... (joint position targets for both arms + grippers)
Loading the Dataset
from lerobot.datasets.lerobot_dataset import LeRobotDataset
dataset = LeRobotDataset("andreaskoepf/dk1_duplo_disassembly_2026-04-04")
# Access a frame
frame = dataset[0]
print(frame["observation.state"].shape) # torch.Size([40])
print(frame["action"].shape) # torch.Size([14])
print(frame["observation.images.head"].shape) # torch.Size([3, 720, 1280])Dataset Structure
meta/info.json:
{
"codebase_version": "v3.0",
"robot_type": "bi_dk1_follower",
"total_episodes": 42,
"total_frames": 86441,
"total_tasks": 1,
"chunks_size": 1000,
"data_files_size_in_mb": 11,
"video_files_size_in_mb": 7657,
"fps": 30,
"splits": {
"train": "0:42"
},
"data_path": "data/chunk-{chunk_index:03d}/file-{file_index:03d}.parquet",
"video_path": "videos/{video_key}/chunk-{chunk_index:03d}/file-{file_index:03d}.mp4",
"features": {
"action": {
"dtype": "float32",
"names": [
"left_joint_1.pos",
"left_joint_2.pos",
"left_joint_3.pos",
"left_joint_4.pos",
"left_joint_5.pos",
"left_joint_6.pos",
"left_gripper.pos",
"right_joint_1.pos",
"right_joint_2.pos",
"right_joint_3.pos",
"right_joint_4.pos",
"right_joint_5.pos",
"right_joint_6.pos",
"right_gripper.pos"
],
"shape": [
14
]
},
"observation.state": {
"dtype": "float32",
"names": [
"left_joint_1.pos",
"left_joint_2.pos",
"left_joint_3.pos",
"left_joint_4.pos",
"left_joint_5.pos",
"left_joint_6.pos",
"left_gripper.pos",
"right_joint_1.pos",
"right_joint_2.pos",
"right_joint_3.pos",
"right_joint_4.pos",
"right_joint_5.pos",
"right_joint_6.pos",
"right_gripper.pos",
"left_joint_1.vel",
"left_joint_2.vel",
"left_joint_3.vel",
"left_joint_4.vel",
"left_joint_5.vel",
"left_joint_6.vel",
"right_joint_1.vel",
"right_joint_2.vel",
"right_joint_3.vel",
"right_joint_4.vel",
"right_joint_5.vel",
"right_joint_6.vel",
"left_joint_1.torque",
"left_joint_2.torque",
"left_joint_3.torque",
"left_joint_4.torque",
"left_joint_5.torque",
"left_joint_6.torque",
"left_gripper.torque",
"right_joint_1.torque",
"right_joint_2.torque",
"right_joint_3.torque",
"right_joint_4.torque",
"right_joint_5.torque",
"right_joint_6.torque",
"right_gripper.torque"
],
"shape": [
40
]
},
"observation.images.head": {
"dtype": "video",
"shape": [
360,
640,
3
],
"names": [
"height",
"width",
"channels"
],
"info": {
"video.height": 360,
"video.width": 640,
"video.codec": "h264",
"video.pix_fmt": "yuv420p",
"video.is_depth_map": false,
"video.fps": 30,
"video.channels": 3,
"has_audio": false
}
},
"observation.images.left_wrist": {
"dtype": "video",
"shape": [
360,
640,
3
],
"names": [
"height",
"width",
"channels"
],
"info": {
"video.height": 360,
"video.width": 640,
"video.codec": "h264",
"video.pix_fmt": "yuv420p",
"video.is_depth_map": false,
"video.fps": 30,
"video.channels": 3,
"has_audio": false
}
},
"observation.images.right_wrist": {
"dtype": "video",
"shape": [
360,
640,
3
],
"names": [
"height",
"width",
"channels"
],
"info": {
"video.height": 360,
"video.width": 640,
"video.codec": "h264",
"video.pix_fmt": "yuv420p",
"video.is_depth_map": false,
"video.fps": 30,
"video.channels": 3,
"has_audio": false
}
},
"timestamp": {
"dtype": "float32",
"shape": [
1
],
"names": null
},
"frame_index": {
"dtype": "int64",
"shape": [
1
],
"names": null
},
"episode_index": {
"dtype": "int64",
"shape": [
1
],
"names": null
},
"index": {
"dtype": "int64",
"shape": [
1
],
"names": null
},
"task_index": {
"dtype": "int64",
"shape": [
1
],
"names": null
}
}
}Citation
BibTeX:
@misc{andreaskoepf_dk1_duplo_disassembly_2026_04_04,
title = {separate the duplo bricks},
author = {The Robot Learning Company},
year = {2026},
publisher = {HuggingFace},
url = {https://huggingface.co/datasets/andreaskoepf/dk1_duplo_disassembly_2026-04-04}
}