CoolFace
Datasetpublic

cloudwalk-research/gr00t-g1-grab-bottle-right-hand-v2

Grab-Bottle (right hand) - v2 (distance-to-goal wandering removal) LeRobot v2.1 dataset for the Unitree G1 right-hand bottle-grab task. Curated from the 105-episode source set by removing non-purposeful back-and-forth arm motion ("wandering") via a distance-to-goal method, then splitting each episode into clean sub-episodes so GR00T's 40-step action window never spans a cut. It is the training data for the v2 GR00T N1.7 fine-tune the current validated production champion (11/12… See the full description on the dataset page: https://huggingface.co/datasets/cloudwalk-research/gr00t-g1-grab-bottle-right-hand-v2.

sourceHugging Faceapache-2.0updated 3mo agoView on Hugging Face
0likes352downloads
Dataset Card

Grab-Bottle (right hand) - v2 (distance-to-goal wandering removal)

LeRobot v2.1 dataset for the Unitree G1 right-hand bottle-grab task. Curated from the 105-episode source set by removing non-purposeful back-and-forth arm motion ("wandering") via a distance-to-goal method, then splitting each episode into clean sub-episodes so GR00T's 40-step action window never spans a cut. It is the training data for the v2 GR00T N1.7 fine-tune

  • —the current validated production champion (11/12 across hand-placed bottle poses).

This is the first curation of the family; later sets replaced the distance-to-goal method with zero-wandering smoothing (radius-*, radius-20-merged) or DP resampling (speedup-3mm-*).

metric (105-ep source set)value
source episodes105
output episodes210
frames kept62,772 / 70,680 (88.8%)
training samples (40-action chunks)~54,600 (82.0% of raw)
Implementation: `feat(curation): grab-bottle dataset curation + reprocessing pipeline` Branch: curated-dataset

Quick facts

Episodes210 (clean sub-segments)
Frames62,772 @ 50 fps
FormatLeRobot v2.1
Cameraego_view 640×480 (head), H.264 yuv420p, no audio
RobotUnitree G1 (29-DoF body) + Inspire FTP hands (7-DoF/hand: 6 finger joints + 1 grip pad, via InspireFTPGripMapper)
Task instruction"grab the bottle" (single task, RIGHT hand)
State dim43 (observation.state)
Actionaction.motion_token [64] (latent) + action.wbc [43] whole-body
Mean episode length~6.0 s (~299 f)
Source105ep-v1 source set (105 ep / 70,680 f)
CollectionPICO 4 Ultra teleop (headset + 2 controllers, 3-pt VR) + 2 ankle trackers -> SMPL retargeting (CloudWalk Robotics Lab)
VisibilityPublic
LicenseApache-2.0

Collection setup

Same data collection as the 105-ep source set

  • —see that card for the full setup. In brief:
  • —Robot: Unitree G1 (29-DoF body) + Inspire FTP hands (7-DoF/hand: 6 finger joints + 1 grip pad, via InspireFTPGripMapper)
  • —Whole-body controller: SONIC WBC
  • —Teleoperation: PICO 4 Ultra (headset + 2 controllers, 3-point VR tracking) + 2 ankle trackers -> SMPL retargeting
  • —Camera: Intel RealSense D435I on the G1 head; Hand control: grip buttons close the Inspire FTP right hand during the grasp
  • —Task prompt: the teleop demonstrations were collected under the task prompt "grab the bottle"; the same prompt is used to invoke the policy at inference (see the model cards' "Prompt conditioning" caveat).

This card's dataset is the distance-to-goal curation of that source (see Curation method).

Action and state layout

This is a GR00T + SONIC dataset, not a flat-joint-vector dataset. The policy action is emitted as a 64-D latent `motion_token` (decoded by the SONIC whole-body controller into whole-body joint commands) plus 7-D left/right hand-joint targets - it only produces motion through the SONIC WBC + ZMQ deploy pipeline, not on a bare G1.

FieldShapeMeaning
observation.state43leftleg 6 + rightleg 6 + waist 3 + leftarm 7 + lefthand 7 + rightarm 7 + righthand 7
action.wbc43whole-body joint targets (same layout as observation.state)
action.motion_token64latent action token decoded by the SONIC WBC
observation.eef_state14left/right wrist pos (3) + abs quat (4), x2
observation.images.ego_view480×640×3head camera (video)

See meta/info.json for the full feature schema, including teleop.* retargeting fields and observation.* base state.

Curation method

The problem

Raw teleop trajectories contain segments where the arm drifts away from the bottle and then returns - the operator corrects mid-reach. A policy trained on these learns to replicate the unstable back-and-forth behavior rather than committing to a purposeful reach.

Kinematic distance-to-goal

The dataset has no bottle pose annotation, so a proxy goal is used:

Goal = right-wrist position at the grasp instant. The grasp instant is detected as the first frame where the grip closes past 95% of its open->closed range (teleop.right_hand_joints sum: 0.9 open -> 6.0 closed).

Wandering = wrist moving away from this goal. Per-frame Euclidean distance from the right wrist (observation.eef_state[7:10], world frame) to the goal is computed and smoothed. Frames where the smoothed distance is rising faster than a threshold are marked as toxic.

Detection pipeline:

  1. 1.Beginning cutoff: ignore all frames before the point of maximum wrist distance - that is the arm getting into position; the real reach only starts after it.
  2. 2.Grip cutoff: never remove anything at or after the grasp - the grasp and all subsequent frames are always kept.
  3. 3.Rising runs: between those two gates, find contiguous runs where smoothed distance rises faster than rise_thresh.
  4. 4.`min_segment`: drop runs shorter than this (noise blips).
  5. 5.`margin`: pad each surviving removal block on both sides.
  6. 6.`min_gap`: merge removal blocks separated by a kept chunk shorter than this.

Golden parameters (tuned interactively with curate_tuner.py on episode 2 and spot-checked across the set):

ParamValueMeaning
rise_thresh24 mm/smin outward speed counted as wandering
smooth_win15 framesmoving-average window on the distance curve
min_segment4 framesdrop removal runs shorter than this
margin0.4 s (20 f)pad each removal block on both sides
min_gap0 smerge kept gaps shorter than this (0 = off)
grasp_frac0.95grip fraction marking the grasp instant

Episode splitting: each set of frames surviving removal becomes its own output episode. Sub-episodes shorter than 40 frames are dropped (too short for any training samples under the 40-step action horizon).

What this dataset is - and is not

  • —Is: the first curation of the family and the training data for the v2 GR00T N1.7 fine-tune
  • —the current validated production champion (11/12).
  • —Is not: the source teleoperation set. For un-segmented demonstrations use the 105-ep source set.
  • —Is not: a zero-wandering or DP-resampled set. Later curations (radius-*, speedup-3mm-*) replaced the distance-to-goal method; they are separate experiments, not supersets of this one.
  • —Right-hand only, single camera, single task - see caveats below.

How to download

python
from huggingface_hub import snapshot_download

snapshot_download(
    repo_id="cloudwalk-research/gr00t-g1-grab-bottle-right-hand-v2",
    repo_type="dataset",
    local_dir="data/real/gr00t-g1-grab-bottle-right-hand-v2",
)

How to load

python
from lerobot.common.datasets.lerobot_dataset import LeRobotDataset

ds = LeRobotDataset(
    "gr00t-g1-grab-bottle-right-hand-v2",
    repo_id="cloudwalk-research/gr00t-g1-grab-bottle-right-hand-v2",
)
print(ds.num_episodes, ds.num_frames, ds.fps)

How to use for fine-tuning & inference

This set trained the v2 GR00T N1.7 fine-tune (checkpoint-20000) - the validated production champion (11/12 across hand-placed bottle poses; grasps from poses where v1 failed). Fine-tuning was run on NVIDIA B200 GPUs with the Isaac-GR00T stack; see the model card for the exact hyperparameters.

To run the resulting policy in inference (policy server), from an Isaac-GR00T environment:

bash
python -m gr00t.eval.run_gr00t_server \
    --model-path <checkpoint-dir> \
    --embodiment-tag UNITREE_G1_SONIC \
    --device cuda:0 --host 0.0.0.0 --port 5550

The server must be launched with the same UNITREE_G1_SONIC embodiment tag used in training. Closed-loop control of the G1 is driven by the SONIC WBC in GR00T-WholeBodyControl; see the NVlabs VLA inference tutorial.

Caveats

  1. 1.Right-hand-only, single task, single camera. Only the head ego_view was recorded - no wrist cameras. Left-hand and locomotion dims reflect the largely stationary demonstrations.
  2. 2.Curated, not source. Episodes are clean sub-segments, so "episode length" is a clean-segment length (shorter than full demonstrations). Use the source set for the un-segmented distribution.
  3. 3.First-generation curation. Uses the distance-to-goal method; later radius-* sets use zero-wandering smoothing and speedup-3mm-* sets use DP resampling. These are alternative curations, not incremental improvements of this set.
  4. 4.Deployment needs the SONIC stack. Actions are motion_token + hand joints for the UNITREE_G1_SONIC embodiment; they only produce motion through the SONIC WBC + ZMQ deploy pipeline, not on a bare G1.

Lineage

This set is the first curation of the family - a distance-to-goal wandering removal on the 105-ep source set. Its direct siblings (same 105-ep source, different method) are the four zero-wandering-smooth-radius-{5,10,15,20} variants. The full family - including the both-source merges - is in the table below.

DatasetDerived fromEpisodesFramesNotes
105ep-v1- (source)10570,680Base teleoperation set -> v1 fine-tune
worst-positions-empty-115ep-v3- (source)11578,621Worst-positions + 20 empty-scene episodes (eps 95-114, no bottle/no movement)
right-hand-v2 (this)105ep-v121062,772Distance-to-goal wandering removal -> v2 fine-tune (production champion)
zero-wandering-smooth-radius-5105ep-v141748,577Zero-wandering r=5 (most aggressive) -> v4 fine-tune
zero-wandering-smooth-radius-10105ep-v137149,578Zero-wandering r=10 (experiment, no fine-tune)
zero-wandering-smooth-radius-15105ep-v134250,634Zero-wandering r=15 (experiment, no fine-tune)
zero-wandering-smooth-radius-20105ep-v131450,496Zero-wandering r=20 (least aggressive) -> v5 fine-tune
radius-20-merged105ep-v1 + 115ep-v3502120,017Both sources, zero-wandering r=20, grasp-frame preservation; 115ep eps 0-94 curated, 95-114 as-is -> v6 fine-tune
speedup-3mm-v1105ep-v1 + 115ep-v322060,163DP wrist-Cartesian resample 3mm/frame, max_K=40, NO segment removal -> v7 fine-tune (trained 2026-06-25, checkpoint-20000 only)
speedup-3mm-cycle-removed-v1105ep-v1 + 115ep-v340547,944DP resample + cycle detection + sub-episode splitting (no fine-tune yet)

Attribution

Collected at the CloudWalk Robotics Lab (CW-RL) using PICO 4 Ultra teleoperation on the Unitree G1 with the SONIC whole-body controller, then curated with the distance-to-goal wandering-removal pipeline. Stored in the LeRobot v2.1 format.

Citation

bibtex
@misc{cwrl_grab_bottle_v2_2026,
  title        = {GR00T G1 "grab the bottle" --- right-hand distance-to-goal wandering-removal curation (210 episodes, SONIC WBC)},
  author       = {{CloudWalk Robotics Lab}},
  year         = {2026},
  howpublished = {Hugging Face dataset repository},
  url          = {https://huggingface.co/datasets/cloudwalk-research/gr00t-g1-grab-bottle-right-hand-v2}
}

@article{gr00t_n1_2025,
  title         = {{GR00T N1}: An Open Foundation Model for Generalist Humanoid Robots},
  author        = {{NVIDIA}},
  year          = {2025},
  eprint        = {2503.14734},
  archivePrefix = {arXiv},
  url           = {https://arxiv.org/abs/2503.14734}
}

@article{sonic_2025,
  title         = {{SONIC}: Whole-Body Controller for Humanoid Robot Teleoperation},
  year          = {2025},
  eprint        = {2511.07820},
  archivePrefix = {arXiv},
  url           = {https://arxiv.org/abs/2511.07820}
}

@software{lerobot2024,
  title  = {{LeRobot}: State-of-the-art Machine Learning for Real-World Robotics in {PyTorch}},
  author = {{Hugging Face}},
  url    = {https://github.com/huggingface/lerobot},
  year   = {2024}
}

License

Released under Apache-2.0 by CloudWalk Research. Demonstrations were collected on hardware owned by CloudWalk; the SONIC WBC and GR00T stacks retain their respective upstream licenses. Research preview - closed-loop deployment on a physical humanoid requires human oversight.