CoolFace
Datasetpublic

THULab/aaronsu11_so100_instrument

SO100 Instrument TsFile This dataset is an Apache TsFile conversion of aaronsu11/so100_instrument, a LeRobot v2.1 SO100 robot-manipulation dataset containing demonstrations for grabbing or picking up scissors and forceps. Modalities: Time-series. The converted repository contains numeric robot state, actions, frame timing, and episode/task tags. The two camera streams remain in the original Hugging Face dataset and are linked below. Source Dataset and Provenance… See the full description on the dataset page: https://huggingface.co/datasets/THULab/aaronsu11_so100_instrument.

sourceHugging Faceapache-2.0updated 1mo agoView on Hugging Face
0likes78downloads
Dataset Card

SO100 Instrument TsFile

This dataset is an Apache TsFile conversion of `aaronsu11/so100_instrument`, a LeRobot v2.1 SO100 robot-manipulation dataset containing demonstrations for grabbing or picking up scissors and forceps.

Modalities: Time-series. The converted repository contains numeric robot state, actions, frame timing, and episode/task tags. The two camera streams remain in the original Hugging Face dataset and are linked below.

Source Dataset and Provenance

  • Original dataset: `aaronsu11/so100_instrument`
  • Pinned source revision: `32acf178fc1f70ba4649e36e083da6a91aa018b1`
  • Original repository creator and uploader: Aaron Su (`aaronsu11`)
  • License: Apache-2.0
  • Robot type: so100
  • LeRobot codebase version: v2.1
  • Split: train
  • Sampling rate: 30 fps
  • Scale: 125 episodes, 25,882 frame rows, 4 tasks, 125 source Parquet files, 250 source videos
  • Source frame layout: data/chunk-{episode_chunk:03d}/episode_{episode_index:06d}.parquet
  • Source video layout: videos/chunk-{episode_chunk:03d}/{video_key}/episode_{episode_index:06d}.mp4

The source README embeds an older 85-episode copy of meta/info.json. At the pinned revision, the actual meta/info.json, Parquet tree, and video tree all describe the current 125-episode dataset; those files are authoritative here.

Tasks and Scale

task_indexTaskEpisodesRows
0Grab the scissors4512,081
1Grab the forceps408,825
2Pick up the scissors202,783
3Pick up the forceps202,193

Converted Files

  • TsFile: data/so100_instrument_train.tsfile
  • Table: so100_instrument_train
  • Rows: 25,882
  • Episodes/devices: 125
  • TsFile size: 688,236 bytes (672 KiB)
  • Time precision: milliseconds
  • Metadata: meta/ is mirrored from the source, with meta/info.json rewritten to describe the TsFile artifact and conversion mapping.

Encoding and compression

The TsFile uses a type-aware compact profile: Time and all INT64 fields use TS_2DIFF + LZ4; FLOAT fields use GORILLA + LZ4; and TAG values use the table-model device/tag mechanism with string tag segments. This reduces the converted file from 1,895,860 bytes in the previous PLAIN/UNCOMPRESSED build to 688,236 bytes. This snapshot has no BOOLEAN measurement columns.

TsFile Schema

Time is an INT64 millisecond timestamp computed as round(timestamp * 1000) and restarts for each episode.

TAG columns (stored as TsFile STRING tags while preserving the original INT64 source dtype in metadata):

  • episode_index
  • task_index

FIELD columns:

  • frame_index
  • sample_index
  • action_0
  • action_1
  • action_2
  • action_3
  • action_4
  • action_5
  • observation_state_0
  • observation_state_1
  • observation_state_2
  • observation_state_3
  • observation_state_4
  • observation_state_5

Flattened vector groups:

  • action -> action_0 ... action_5 (6 FLOAT fields)
  • observation.state -> observation_state_0 ... observation_state_5 (6 FLOAT fields)

Conversion Notes

  • The shared config-driven lerobot converter is used; the included convert_so100_instrument.py is the dataset-specific orchestration and documentation entry point.
  • The train split is merged into one table-model TsFile. Filter by episode_index and task_index to select an episode or task.
  • action[6] and observation.state[6] are flattened to scalar FLOAT fields; the full source prefix is retained and . is replaced with _.
  • The source timestamp column is dropped after Time synthesis because it is redundant with Time / 1000 seconds.
  • The source index column is retained as sample_index; frame_index is retained unchanged.
  • All 25,882 source rows and all 12 action/state dimensions are retained.

Videos

Videos are not duplicated in this converted repository. The pinned source contains two frame-aligned camera streams, each with 125 per-episode MP4 files:

The numeric TsFile rows remain aligned with the original videos through episode_index, frame_index, and the source per-episode metadata.

Minimal Read Example

python
from tsfile import TsFileReader

reader = TsFileReader("data/so100_instrument_train.tsfile")
table_name = "so100_instrument_train"
columns = [
    "episode_index",
    "task_index",
    "frame_index",
    "sample_index",
    "action_0",
    "observation_state_0",
]

with reader.query_table(table_name, columns, batch_size=65536) as result:
    batch = result.read_arrow_batch()
    print(batch.to_pandas().head())
reader.close()

Citation

The source dataset card provides no paper or completed citation. Cite the original Hugging Face dataset and Aaron Su (aaronsu11) when using this converted artifact.