tysyuvraj/g1-apple2plate-lerobot-v21
g1-apple2plate-lerobot-v21 Teleoperated pick-and-place demonstrations on a Unitree G1 humanoid: pick up an apple (red or green) and place it on a plate. The dataset also includes correction / redirect episodes in which the arm begins reaching toward the wrong apple and then redirects to the correct one — useful for training recovery behaviour and for closed-loop intent-correction research. Recorded for fine-tuning NVIDIA GR00T N1.7. Stored in LeRobot v2.1 format (the version… See the full description on the dataset page: https://huggingface.co/datasets/tysyuvraj/g1-apple2plate-lerobot-v21.
g1-apple2plate-lerobot-v21
Teleoperated pick-and-place demonstrations on a Unitree G1 humanoid: pick up an apple (red or green) and place it on a plate. The dataset also includes correction / redirect episodes in which the arm begins reaching toward the wrong apple and then redirects to the correct one — useful for training recovery behaviour and for closed-loop intent-correction research.
Recorded for fine-tuning NVIDIA GR00T N1.7. Stored in LeRobot v2.1 format (the version GR00T's data loader consumes).
Robot
State / action layout (meta/modality.json)
Both observation.state and action use this identical 16-D layout.
Dataset statistics
Composition
Only two distinct task strings appear across all four buckets. This is deliberate: the correction episodes are labelled with the final target's normal instruction, not a special "correction" phrase. At deployment, when the operator says "not that one, the other one," the controller simply sends the new target's standard instruction — there is no dedicated correction command reaching the policy. A redirect episode should therefore look to the model like: instruction says "green", the arm happens to start near the red apple → go get the green one.
Correction episodes — how they were prepared
In the two *_correction buckets the arm starts by reaching toward the wrong apple, then redirects. The initial reach-toward-the-wrong-object segment was trimmed from each of those episodes so that behaviour cloning does not imitate the mistake. Concretely, the leading frames were removed and each episode's data.json was verified so that:
- the removed frames form a contiguous prefix (frames
0..N-1only — no mid-episode gaps that would create false temporal jumps), and - every remaining frame's referenced camera images exist on disk.
Episodes with non-contiguous or end-of-episode gaps were flagged for manual review rather than trimmed. The clean-pick-place buckets (green_apple2plate, red_apple2plate) were left untrimmed.
Features
observation.state float32 [16]
action float32 [16]
observation.images.cam_head video (RGB, 30fps)
observation.images.cam_right_wrist video (RGB, 30fps)
timestamp, frame_index, episode_index, index, task_indexUsage
from lerobot.datasets.lerobot_dataset import LeRobotDataset
ds = LeRobotDataset("tysyuvraj/g1-apple2plate-lerobot-v21")
print(ds.meta.total_episodes, ds.meta.total_frames)
sample = ds[0]Requires a LeRobot version that reads codebase v2.1 (e.g. lerobot==0.3.3). Newer LeRobot releases default to v3.0 and expect a different on-disk layout.
GR00T N1.7 fine-tuning
The meta/modality.json maps the 16-D state/action into GR00T's arm/gripper groups and the two cameras, so the dataset can be passed directly to GR00T's fine-tuning pipeline with embodiment tag new_embodiment.
Provenance & notes
- Converted from Unitree's raw JSON teleoperation format via the
unitree_lerobotconverter, using LeRobot 0.3.3 (which writes v2.1). - A separate v3.0-format copy of the same recordings exists at
tysyuvraj/g1-apple2plate-lerobot; this v2.1 repo is the one compatible with GR00T N1.7. - Same robot embodiment as the earlier
monster-tray-pickplacedataset, so the modality configuration is shared.
