CoolFace
Datasetpublic

THULab/unitreerobotics_G1_WBT_Brainco_Pickup_Pillow

Unitree G1 WBT BrainCo Pickup Pillow TsFile This repository is an Apache TsFile conversion of unitreerobotics/G1_WBT_Brainco_Pickup_Pillow, a LeRobot v3.0 robot-manipulation dataset for a Unitree G1 robot using BrainCo hands. The converted artifact contains the numeric robot time series and keeps episode/task identifiers as TsFile TAG columns. Source dataset and attribution Publisher/organization: Unitree Robotics (unitreerobotics); the source repository shows… See the full description on the dataset page: https://huggingface.co/datasets/THULab/unitreerobotics_G1_WBT_Brainco_Pickup_Pillow.

sourceHugging Faceapache-2.0updated 18d agoView on Hugging Face
0likes48downloads
Dataset Card

Unitree G1 WBT BrainCo Pickup Pillow TsFile

This repository is an Apache TsFile conversion of `unitreerobotics/G1_WBT_Brainco_Pickup_Pillow`, a LeRobot v3.0 robot-manipulation dataset for a Unitree G1 robot using BrainCo hands. The converted artifact contains the numeric robot time series and keeps episode/task identifiers as TsFile TAG columns.

Source dataset and attribution

  • —Publisher/organization: Unitree Robotics (unitreerobotics); the source repository shows karthus198 as its uploader/contributor.
  • —Original dataset: `unitreerobotics/G1_WBT_Brainco_Pickup_Pillow`
  • —License: Apache-2.0
  • —Task: robotics / manipulation, picking up a pillow with the Unitree G1
  • —Framework and codebase version: LeRobot v3.0
  • —Paper or formal citation: none is supplied on the original dataset card.

Dataset size and layout

  • —Split: train (0:300 episodes)
  • —Episodes: 300
  • —Rows/frames: 177,811
  • —Tasks: 1 (task_index = 0)
  • —Sampling rate: 30 fps (source metadata)
  • —Source frame layout: data/chunk-{chunk_index:03d}/file-{file_index:03d}.parquet
  • —Source metadata: meta/info.json, meta/stats.json, meta/tasks.parquet, and meta/episodes/
  • —Converted artifact: one merged TsFile, one table, one data file

The local source copy contains one frame Parquet shard at data/chunk-000/file-000.parquet; the Hugging Face repository uses the same chunk/file pattern. The converted repository has one file: data/unitreerobotics_g1_wbt_brainco_pickup_pillow.tsfile.

Converted schema

Time is synthesized from the source timestamp as round(timestamp * 1000) in milliseconds. The source timestamp restarts at zero for each episode, so Time is monotonic within each (episode_index, task_index) group.

CategoryColumnsType / meaning
TIMETimeINT64, milliseconds
TAGepisode_index, task_indexOriginal source identifiers, stored by the TsFile table/device TAG mechanism
FIELDframe_index, sample_indexINT64; sample_index is renamed from source index
FIELDobservation_state_ee_state_0..11FLOAT32, source observation.state.ee_state[12]
FIELDobservation_state_hand_state_0..11FLOAT32, source observation.state.hand_state[12]
FIELDobservation_state_robot_q_current_0..35FLOAT32, source observation.state.robot_q_current[36]
FIELDaction_ee_action_0..11FLOAT32, source action.ee_action[12]
FIELDaction_hand_cmd_0..11FLOAT32, source action.hand_cmd[12]
FIELDaction_robot_q_desired_0..35FLOAT32, source action.robot_q_desired[36]

Vector fields are flattened row-major into scalar fields. Source dots are replaced with underscores and the original feature prefix is preserved.

Feature semantics from the source card

  • —observation.state.ee_state[12]: concatenated left/right end-effector poses computed with forward kinematics, including waist motion.
  • —observation.state.hand_state[12]: BrainCo finger states for both hands; each hand is ordered thumb open/close, thumb lateral tilt, index, middle, ring, and little finger (range 0.0–1.0, open to close).
  • —observation.state.robot_q_current[36]: current robot configuration; the first seven values are root position (x, y, z) and quaternion (w, x, y, z), followed by 29 joint positions.
  • —action.ee_action[12]: target left/right end-effector states from FK, including waist motion.
  • —action.hand_cmd[12]: commanded BrainCo finger actions in the same order as hand_state.
  • —action.robot_q_desired[36]: desired configuration with target root pose in the first seven values and 29 target joint positions thereafter.

Conversion and storage policy

  • —timestamp is dropped after lossless conversion to Time; it equals Time / 1000 seconds.
  • —index is renamed to sample_index; frame_index, episode_index, and task_index are preserved.
  • —Rows are sorted by TAG columns and then Time.
  • —FLOAT/DOUBLE: GORILLA + LZ4
  • —INT32/INT64: TS_2DIFF + LZ4
  • —Time: TS_2DIFF + LZ4
  • —BOOLEAN: RLE + LZ4 (the source has no BOOLEAN columns)
  • —TAG values use TsFile table-model device/tag storage.
  • —No numeric rows or vector components are dropped.

Videos and frame alignment

The original Hugging Face repository stores videos separately from the numeric Parquet data. The four source streams are:

  • —videos/observation.images.head_stereo_left/chunk-{chunk_index:03d}/file-{file_index:03d}.mp4
  • —videos/observation.images.head_stereo_right/chunk-{chunk_index:03d}/file-{file_index:03d}.mp4
  • —videos/observation.images.wrist_left/chunk-{chunk_index:03d}/file-{file_index:03d}.mp4
  • —videos/observation.images.wrist_right/chunk-{chunk_index:03d}/file-{file_index:03d}.mp4

See the original video tree. Videos are not included in this TsFile repository. Use the unchanged source videos and align them with the converted rows using episode_index and frame_index.

Validation

The local conversion report confirms 177,811 source rows are preserved, no duplicate (episode_index, task_index, Time) keys are present, and Time is monotonic within each episode. The generated .json and .md reports and the conversion script remain local and are intentionally excluded from upload.

Minimal read example

python
from tsfile import TsFileReader

path = "data/unitreerobotics_g1_wbt_brainco_pickup_pillow.tsfile"
reader = TsFileReader(path)
table_name = "unitreerobotics_g1_wbt_brainco_pickup_pillow"
schemas = reader.get_all_table_schemas()
columns = [
    c.get_column_name()
    for c in schemas[table_name].get_columns()
    if c.get_column_name() != "Time"
]
with reader.query_table(table_name, columns, batch_size=65536) as result:
    first_batch = result.read_arrow_batch()