dp-blockpick-varied-timing

LeRobot diffusion policy for a top-down block pick with the left arm of the ROBOTIS FFW SG2 in Isaac Lab, trained on 500 scripted demos whose timing varies from demo to demo. Best top-down block-pick model so far in our sim evals. Files at the repo root = step 100k (DiffusionPolicy.from_pretrained("padiredd/dp-blockpick-varied-timing")); step-20000/, step-40000/, step-60000/, step-80000/ = the intermediate checkpoints.

Why varied timing

The same recipe trained on demos with identical timing (every demo reaches for 5.0 s and closes the gripper at 7.0 s) learns to close on a clock read from the joint state and closes 1.5-2 cm above and 3-5 cm beside the block (22/41 on valid positions). In these demos each phase duration is scaled x0.75-1.35, the gripper pauses 0-0.5 s before closing, the pre-grasp distance (5-11 cm), lift height (8-15 cm) and reach path vary, so the gripper closes anywhere between 5.7 and 10.9 s and the policy has to use the cameras to time it.

Task and data

robot / scene ROBOTIS FFW SG2, ROBOTIS RH-P12-RN CAD gripper visuals, calibrated wrist cameras, 29.25 in table, far-edge foam board; clean nominal visuals (no domain randomization)
object lime-green 5 x 5 x 4 cm block with a 1 cm hole, 50 g
grasp straight down, pads close with the fingertips 0.5 cm above the block's half height, lift 8-15 cm
start pose fixed, the real SG2 tabletop-manipulation yaml pose
block placement uniform over x 0.28-0.48 m, y 0.065-0.315 m (robot frame, x forward, y left), yaw +-10 deg; every position on the table and in reach (500/500 collection attempts succeeded)
demos 500 episodes, 83,472 frames at 15 Hz, 8.5-14.2 s each
observation head (672x376) and both wrist (424x240) cameras, each stretched to 240x240, + 22-dim joint state
action 16 joint targets (left arm 7 + gripper, right arm 7 + gripper)

Training

framework LeRobot 0.6.1 diffusion policy, ROBOTIS-GIT/lerobot-cyclo fork @240b4a0
network separate ResNet-18 per camera, spatial softmax 32 keypoints, UNet 512/1024/2048, 287,504,496 parameters
horizon / executed 64 / 32 steps, n_obs_steps 1
diffusion DDPM 100 train steps, epsilon prediction; eval with DDIM-10 or DDPM-100
optimizer Adam 1e-4, betas (0.95, 0.999), weight decay 1e-6, grad clip 10, cosine schedule, 500 warm-up steps
steps / batch 100,000 / 8 (about 10 epochs), checkpoint every 20k
image augmentation 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 % translate, scale 0.9-1.1), perspective 0.2, blur, random erasing 2-15 %, grayscale
loss 0.007 at 20k, 0.004 at 40k, 0.003 at 60k, 0.002 at 80k and 100k
hardware / time one RTX 4090, 1 h 36 min

Sim evaluation (2026-10-31)

50 block picks in the same clean scene, block uniform over the training area, success = block lifted >= 5 cm for 1 s within 16 s.

checkpoint sampler picked
100k DDIM-10 49/50 (98 %)
60k DDIM-10 45/50 (90 %)
100k DDPM-100 50/50 (100 %)

For comparison, the identical recipe on identical-timing demos: 22/41 (100k) and 32/41 (60k) on valid positions.

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

Collection including padiredd/dp-blockpick-varied-timing