TacVerse/xtac-umi-g1-insert-rubber-stopper
Representative frames from TacVerse's bimanual demonstrations. Collected with XTac-UMI-G1 grippers, released as LeRobot datasets. This dataset was created using LeRobot. Explore this dataset with the LeRobot Dataset Viewer. Dataset Structure meta/info.json: { "codebase_version": "v3.0", "robot_type": "xtac_umi_g1", "total_episodes": 10, "total_frames": 6204, "total_tasks": 1, "chunks_size": 1000, "data_files_size_in_mb": 100… See the full description on the dataset page: https://huggingface.co/datasets/TacVerse/xtac-umi-g1-insert-rubber-stopper.
<img src="assets/footer.png" width="100%" alt="Xense Robotics"/>
<p align="center"><em>Representative frames from TacVerse's bimanual demonstrations.</em></p>
<img src="assets/teaser.png" width="100%" alt="TacVerse collection and processing pipeline"/>
<p align="center"><em>Collected with XTac-UMI-G1 grippers, released as LeRobot datasets.</em></p>
This dataset was created using LeRobot.
Explore this dataset with the LeRobot Dataset Viewer.
Dataset Description
- Homepage: TacVerse/TacVerse
- Paper: [More Information Needed]
- License: cc-by-sa-4.0
Dataset Structure
meta/info.json:
{
"codebase_version": "v3.0",
"robot_type": "xtac_umi_g1",
"total_episodes": 10,
"total_frames": 6204,
"total_tasks": 1,
"chunks_size": 1000,
"data_files_size_in_mb": 100,
"video_files_size_in_mb": 200,
"fps": 30,
"splits": {
"train": "0:10"
},
"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_tcp.x",
"left_tcp.y",
"left_tcp.z",
"left_tcp.r1",
"left_tcp.r2",
"left_tcp.r3",
"left_tcp.r4",
"left_tcp.r5",
"left_tcp.r6",
"left_gripper.pos",
"right_tcp.x",
"right_tcp.y",
"right_tcp.z",
"right_tcp.r1",
"right_tcp.r2",
"right_tcp.r3",
"right_tcp.r4",
"right_tcp.r5",
"right_tcp.r6",
"right_gripper.pos",
"head.x",
"head.y",
"head.z",
"head.r1",
"head.r2",
"head.r3",
"head.r4",
"head.r5",
"head.r6"
],
"shape": [
29
]
},
"observation.state": {
"dtype": "float32",
"names": [
"left_tcp.x",
"left_tcp.y",
"left_tcp.z",
"left_tcp.r1",
"left_tcp.r2",
"left_tcp.r3",
"left_tcp.r4",
"left_tcp.r5",
"left_tcp.r6",
"left_gripper.pos",
"right_tcp.x",
"right_tcp.y",
"right_tcp.z",
"right_tcp.r1",
"right_tcp.r2",
"right_tcp.r3",
"right_tcp.r4",
"right_tcp.r5",
"right_tcp.r6",
"right_gripper.pos",
"head.x",
"head.y",
"head.z",
"head.r1",
"head.r2",
"head.r3",
"head.r4",
"head.r5",
"head.r6"
],
"shape": [
29
]
},
"observation.tracker_confidence": {
"dtype": "float32",
"names": [
"left_tracker.confidence",
"right_tracker.confidence"
],
"shape": [
2
]
},
"observation.images.head_left": {
"dtype": "video",
"shape": [
480,
640,
3
],
"names": [
"height",
"width",
"channels"
],
"info": {
"video.height": 480,
"video.width": 640,
"video.codec": "h264",
"video.pix_fmt": "yuv420p",
"video.is_depth_map": false,
"video.fps": 30,
"video.channels": 3,
"has_audio": false,
"video.video_backend": "pyav"
}
},
"observation.images.head_right": {
"dtype": "video",
"shape": [
480,
640,
3
],
"names": [
"height",
"width",
"channels"
],
"info": {
"video.height": 480,
"video.width": 640,
"video.codec": "h264",
"video.pix_fmt": "yuv420p",
"video.is_depth_map": false,
"video.fps": 30,
"video.channels": 3,
"has_audio": false,
"video.video_backend": "pyav"
}
},
"observation.images.left_tactile_left": {
"dtype": "video",
"shape": [
400,
700,
3
],
"names": [
"height",
"width",
"channels"
],
"info": {
"video.height": 400,
"video.width": 700,
"video.codec": "h264",
"video.pix_fmt": "yuv420p",
"video.is_depth_map": false,
"video.fps": 30,
"video.channels": 3,
"has_audio": false,
"video.video_backend": "pyav",
"taccap.rectified": true,
"taccap.rectify_kind": "tactile",
"taccap.rectify_config": {
"base_grid": [
84,
216,
210,
151,
348,
86,
563,
48,
84,
273,
211,
332,
351,
398,
556,
433
],
"cols": 2,
"padding": [
0,
0,
0,
0
],
"rot": 0.0,
"rows": 4,
"scale": 1.0,
"trans_x": 0.0,
"trans_y": 0.0
}
}
},
"observation.images.left_tactile_right": {
"dtype": "video",
"shape": [
400,
700,
3
],
"names": [
"height",
"width",
"channels"
],
"info": {
"video.height": 400,
"video.width": 700,
"video.codec": "h264",
"video.pix_fmt": "yuv420p",
"video.is_depth_map": false,
"video.fps": 30,
"video.channels": 3,
"has_audio": false,
"video.video_backend": "pyav",
"taccap.rectified": true,
"taccap.rectify_kind": "tactile",
"taccap.rectify_config": {
"base_grid": [
71,
201,
192,
139,
325,
73,
529,
35,
69,
257,
193,
318,
328,
383,
535,
414
],
"cols": 2,
"padding": [
0,
0,
0,
0
],
"rot": 0.0,
"rows": 4,
"scale": 1.0,
"trans_x": 0.0,
"trans_y": 0.0
}
}
},
"observation.images.left_wrist": {
"dtype": "video",
"shape": [
480,
640,
3
],
"names": [
"height",
"width",
"channels"
],
"info": {
"video.height": 480,
"video.width": 640,
"video.codec": "h264",
"video.pix_fmt": "yuv420p",
"video.is_depth_map": false,
"video.fps": 30,
"video.channels": 3,
"has_audio": false,
"video.video_backend": "pyav"
}
},
"observation.images.right_tactile_left": {
"dtype": "video",
"shape": [
400,
700,
3
],
"names": [
"height",
"width",
"channels"
],
"info": {
"video.height": 400,
"video.width": 700,
"video.codec": "h264",
"video.pix_fmt": "yuv420p",
"video.is_depth_map": false,
"video.fps": 30,
"video.channels": 3,
"has_audio": false,
"video.video_backend": "pyav",
"taccap.rectified": true,
"taccap.rectify_kind": "tactile",
"taccap.rectify_config": {
"base_grid": [
77,
225,
200,
164,
340,
97,
549,
55,
77,
288,
205,
339,
343,
405,
549,
441
],
"cols": 2,
"padding": [
0,
0,
0,
0
],
"rot": 0.0,
"rows": 4,
"scale": 1.0,
"trans_x": 0.0,
"trans_y": 0.0
}
}
},
"observation.images.right_tactile_right": {
"dtype": "video",
"shape": [
400,
700,
3
],
"names": [
"height",
"width",
"channels"
],
"info": {
"video.height": 400,
"video.width": 700,
"video.codec": "h264",
"video.pix_fmt": "yuv420p",
"video.is_depth_map": false,
"video.fps": 30,
"video.channels": 3,
"has_audio": false,
"video.video_backend": "pyav",
"taccap.rectified": true,
"taccap.rectify_kind": "tactile",
"taccap.rectify_config": {
"base_grid": [
72,
211,
196,
150,
332,
84,
546,
47,
74,
267,
197,
327,
337,
394,
554,
435
],
"cols": 2,
"padding": [
0,
0,
0,
0
],
"rot": 0.0,
"rows": 4,
"scale": 1.0,
"trans_x": 0.0,
"trans_y": 0.0
}
}
},
"observation.images.right_wrist": {
"dtype": "video",
"shape": [
480,
640,
3
],
"names": [
"height",
"width",
"channels"
],
"info": {
"video.height": 480,
"video.width": 640,
"video.codec": "h264",
"video.pix_fmt": "yuv420p",
"video.is_depth_map": false,
"video.fps": 30,
"video.channels": 3,
"has_audio": false,
"video.video_backend": "pyav"
}
},
"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
}
}
}Sensor key map
<p align="center"> <img src="assets/sensorkeymap.png" width="760" alt="Sensor key map — each image stream keyed to its physical mount"/> </p>
<p align="center"><em>Tactile keys map to fingertip sensors; wrist keys to gripper cameras; head keys to the headset's stereo eyes.</em></p>
Citation
BibTeX:
@misc{tacverse2026,
title = {TacVerse: A Large-Scale Bimanual Visuo-Tactile Manipulation Dataset},
author = {Xense Robotics},
year = {2026},
howpublished = {\url{https://huggingface.co/datasets/TacVerse/TacVerse}},
note = {Collected with the XTac-UMI-G1 handheld gripper and Xense Neutron visuotactile sensors}
}