omkarpatil/ffw_sg2_wave-left_diffusion_state
FFW SG2 · wave-left · proprioception-only Diffusion Policy
Diffusion Policy (LeRobot 0.6.1) trained on the wave-left task of omkarpatil/wave-traj (11 teleop episodes, ROBOTIS AI Worker ffw_sg2_rev1, instruction "wave using the left hand"). The policy conditions on joint state only — no cameras.
Initial state for inference
The demonstrations all start from the pose below (mean over 11 episodes; std is the spread across demos). Put the robot at this pose before issuing START. Head and lift barely varied during collection, so use those values. Base velocity dims must read ~0.
The same numbers are in `initial_state.json` (initial_state_mean is the vector to command, in joint_names order; final_state_mean is where the demos end).
Running it with cyclo_intelligence
- Set the task's
inference_hz = 15(default) andcontrol_hz = 100in the UI;ActionChunkProcessorspaces the chunk's 16 steps at1/inference_hz, so 15 Hz must match the dataset fps this policy was trained at. - Stock LeRobot refuses to build a Diffusion Policy without an image/environment-state input, and the container engine sends a single
(B, D)state per request. Both are handled bycyclo_brain/policy/lerobot/lerobot_engine/diffusion_compat.py(loaded automatically by the engine'sloading.py/prediction.py) — the policy container needs that version of the bind-mountedlerobot_engine/. Loading in plain LeRobot: calldiffusion_compat.allow_state_only_diffusion()first, thenDiffusionPolicy.from_pretrained(...), and add the time axis withexpand_obs_time_dim(batch, 1)beforepredict_action_chunk.
MuJoCo rollouts — read before deploying
In the lerobot-mujoco-tutorial FFW SG2 model, 10 rollouts from sampled initial states gave 3 full waves, 5 partial, 2 stalled (left-arm joint range 62 % of the demonstrations' on average). The failure mode is hesitation: the policy sometimes holds the start pose for several seconds before waving, or waves with reduced amplitude. Expect the same on hardware; starting closer to the mean pose and allowing a longer episode helps, and more demonstrations would fix it properly.
