OpenArm β€” place cube in flask

Three from-scratch policies for a single-arm (right follower) OpenArm. Task: pick a grey cylinder from an L-bracket and place it at a flask.

Trained on an NVIDIA Jetson AGX Thor. Code: https://github.com/OALcementys/OpenArmDev

folder policy episodes params run / epoch
act_202/ ACT 202 85.95 M s345 epoch 10
dp_202/ Diffusion Policy 202 101.9 M dp02 epoch 20
act_149/ ACT 149 85.95 M s34 epoch 7

Shared setup

3 cameras (cam_high, cam_right_wrist, cam_side) at 480Γ—640, ResNet-18 trunks (one per camera, not shared). State 24-d, action 8-d, chunk size 50, 50 Hz control. bf16 autocast, no validation split β€” every episode was trained on.

act_202 and dp_202 use all 202 episodes (sessions 3+4+5, 214,181 samples); act_149 uses sessions 3+4 only (167,466 samples).

Per-model

  • ACT β€” hidden 512, FF 2048, KL weight 10.0, batch 24, lr 1e-4 (backbone 1e-5), 500-step warmup, augmentation on.
  • Diffusion Policy β€” spatial-softmax pooling (32 keypoints), FiLM-residual conditioning, UNet dims 256/512/1024, 100 train steps, DDIM Γ—10 at inference, EMA (power 0.75, max 0.9999), batch 32, lr 1e-4.

Usage

Each model.pt is self-contained β€” it carries its own norm_stats and architecture config, so roll.py needs nothing else. config.json, norm_stats.json, and log.jsonl are included as provenance.

./rollout.sh runs/s345/epoch_0010 t_act202
./rollout.sh runs/dp02/epoch_0020 t_dp202
./rollout.sh runs/s34/epoch_0007  t_act149

Known behaviour

Measured over 9 rollouts of act_202: approach from the start pose to first grasp matches the demonstrations closely (6.4 s median, against 6.4 s in the data). The deficit is post-grasp β€” carry-to-release runs ~1.75Γ— the demo mean, and the policy does not reliably return to the start pose.

act_149 is the checkpoint observed to complete the full task end-to-end.

Downloads last month

-

Downloads are not tracked for this model. How to track
Video Preview
loading