dp-blockpick-10k-statenoise

LeRobot diffusion policy (ROBOTIS lerobot-cyclo fork, 288 M parameters) for a top-down block pick with the left arm of the ROBOTIS FFW SG2 (SG2 + ROBOTIS CAD gripper, calibrated wrist cameras, 29.25 in table).

Files at the repo root = step 100k (DiffusionPolicy.from_pretrained("padiredd/dp-blockpick-10k-statenoise")); step-10000/, step-20000/, step-30000/, step-40000/, step-50000/, step-60000/, step-70000/, step-80000/, step-90000/ = intermediate checkpoints (every 10k steps).

data padiredd/pick-cube-topdown-region10k-full-dr2-3cam: 11,710 sim demos, 1,984,945 frames, ROBOTIS FFW SG2 in Isaac Lab, left-arm top-down pick of a lime 5x5x4 cm block anywhere in the arm's full reachable table region (1,154 cm2), dr2 randomization (start pose +-2 deg, gripper open/close per episode, slow pushes with clean labels, spotlights, camera shifts, demo timing, table height -2..+2 cm)
sampling uniform over all frames (LeRobot default EpisodeAwareSampler)
inputs / outputs head + left wrist + right wrist cameras, each 240x240, + 22-dim joint state; action = 16 joint targets, 15 Hz
image augmentation heavy, random order, up to 5 of: brightness 0.6-1.4, contrast 0.6-1.4, saturation 0.3-1.7, hue +-0.1, sharpness 0.3-2.0, affine +-10 deg / 10 % / 0.9-1.1, perspective 0.2, blur, random erasing, grayscale
state noise 1 deg Gaussian noise on the 7 left-arm joint positions of the state input during training (state_noise_std in config.json is a field of our lerobot-cyclo patch; delete it to load with stock lerobot-cyclo, it is training-only)
recipe 100k steps, batch 32, ResNet18 per camera, Adam 1e-4, cosine, DDPM 100 steps, horizon 64 / 32 executed, n_obs_steps 1, seed 1000
hardware one NVIDIA RTX A5000 24 GB, 4-5.7 steps/s (shared with sim data collection late in the run)

Task string: "pick up the lime green block with the left arm". Simulation evaluation results are below.

Sim evaluation

Evaluated 2026-11-02 in the collection scene (Isaac Sim 5.1, data_collection/rollout_policy.py; protocol and scripts in data_collection/region10k/eval/ of the cyclo_lab-real2sim repo). 100 block poses uniform over the whole left-arm pickable region (the region the training data covers: x >= 0.275 m, reach profile from the shoulder point (0.006, 0.228), yaw +-10 deg; eval/points_region100.json), the same 100 poses for every model and condition, so results are paired. Nominal scene: yaml start pose (no offset), table at 29.25 in (no height offset), no pushes, nominal lights. Success = block held >= 5 cm above the table for 1 s within 400 ticks (26.7 s at 15 Hz). Samplers: the checkpoint's DDPM (100 steps) and DDIM with 10 steps (eta 0). Conditions: clean (nominal look) and dr (random backdrop real photo / texture / grid, table colour / texture, block colour, lights, camera mounts: appearance randomization NONE of these models saw in training).

Step 100k (files at the repo root), success over 100 episodes:

model DDPM clean DDIM-10 clean DDPM dr DDIM-10 dr
fullregion-dr2 74% 66% 60% 54%
fullregion-dr2-statenoise (this model) 48% 26% 31% 16%
cotrain-real075-statenoise 78% 87% 59% 63%

Checkpoint sweep, DDIM-10, clean (step-<n>/ folders): success still rising at 100k, so longer training should help.

model 20k 40k 60k 80k 100k
fullregion-dr2 0% 1% 26% 49% 66%
fullregion-dr2-statenoise (this model) 0% 5% 22% 24% 26%
cotrain-real075-statenoise 33% 46% 76% 87% 87%

This model by block position (picked / episodes per band) and failure type. "miss" = the gripper closed on air (block never lifted), the dominant failure; "holding@timeout" = block in the gripper when the 400 ticks ran out:

run                          x0.28-0.33 x0.33-0.39 x0.39-0.44 x0.44-0.50 | y-0.08-+0.15 y+0.15-+0.35 y+0.35-+0.65 | miss(closed) holding@timeout other
dr2sn_100k_ddpm_clean         14/35      15/23      16/28       3/14     |   9/26      13/36      26/38     |  48   2   2
dr2sn_100k_ddpm_dr             7/35       9/23      12/28       3/14     |  11/26      12/36       8/38     |  52   1  16
dr2sn_100k_ddim10_clean       12/35       8/23       6/28       0/14     |   1/26       7/36      18/38     |  68   0   6
dr2sn_100k_ddim10_dr           7/35       1/23       6/28       2/14     |   2/26       4/36      10/38     |  71   5   8

eval/<run>.json = full per-episode results (block pose, picked, ticks, max lift, final gripper position, randomization draw); eval/videos/ = head-camera videos of 2 picked + 2 failed episodes per condition.

Downloads last month
38
Safetensors
Model size
0.3B params
Tensor type
F32
·
Video Preview
loading

Collection including padiredd/dp-blockpick-10k-statenoise