pi0 β ManiGuard real-teleop clutter (DROID schema)
LoRA fine-tune of pi0 on 60 real Franka teleop trajectories. This is the pi0 half of a model comparison: the pi0.5 counterpart was trained on the same data with the same recipe, so the two differ only in the model.
- Task prompt: "pick up the smallest mug and place it in the bowl"
- Dataset:
IDEAS-Lab-Northwestern/real-clutter-60-droid-refined(private) β 60 episodes, 13,171 frames, 15 fps - Warm start:
gs://openpi-assets/checkpoints/pi0_droid/params - Norm stats:
pi0_droid's bundled DROID statistics, reused verbatim β not recomputed on this dataset. Bundled per rung at<step>/assets/droid/norm_stats.json. β οΈ They are pi0's own; the pi0.5 sibling shipspi05_droid's different file. Do not swap them. - LoRA:
gemma_2b_lora(rank 16) +gemma_300m_lora(rank 32), batch 4, EMA off, 50,000 steps.
Controller β read this before running on a robot
| Action | actions[0:7] = arm joint VELOCITY (rad/s) Β· actions[7] = next-frame gripper target (normalized 0=open, 1=closed) |
| Apply as | joint-velocity command to the arm + position target to the gripper |
| Chunk | action_horizon = 10 (pi0.5 sibling uses 15) |
| β οΈ No delta reconstruction | the actions are already velocities. openpi's LeRobotDROIDDataConfig deliberately applies no delta transform β do not integrate or difference them, unlike the ManiGuard sim checkpoints which emit absolute joint targets |
| State | joint_position (7) + gripper_position (1) |
| Cameras | exterior_image_1_left β exterior third-view Β· wrist_image_left β wrist Β· exterior_image_2_left is a zero-filled placeholder (the rig has no second exterior camera) and is masked |
| Rate | data collected at 15 fps |
Checkpoints
Ladder 10000/ 20000/ 30000/ 40000/ 50000/ (the final rung is openpi's 0-indexed 49999,
relabeled). train_state/ is omitted β inference only.
The pi0.5 sibling also ships 10kβ50k, so any rung compares like-for-like.
The best real-robot rung is not assumed to be the last one; sweep the ladder on the robot.
Serving
openpi policy server with config pi0-droid_real_clutter_60_refined_lora from the ManiGuard openpi fork
(maniguard/openpi_sft/train_configs.py), pointed at a downloaded rung.
Evaluated on a real Franka, not in simulation.
Paper & Citation
Part of ManiGuard: paper (arXiv:2608.17386) Β· code Β· docs
@misc{peng2026maniguard,
title = {{MANIGUARD}: A Benchmark and Data Suite for Specification-Grounded
Safety Evaluation and Improvement of Robotic Manipulation},
author = {Peng, Yiyan and Wang, Philip and Zhan, Simon Sinong and Lyu, Yiqi
and Ni, Zhenyang and Yan, Jixin and Wong, Fiorelli and Jiao, Ruochen
and Yin, Hang and Cao, Xinyu and Shao, Huajie and Li, Manling
and Zhang, Ruohan and Zhu, Qi},
year = {2026},
eprint = {2608.17386},
archivePrefix = {arXiv},
primaryClass = {cs.RO},
url = {https://arxiv.org/abs/2608.17386},
}
License
The fine-tuned weights derive from a Physical Intelligence openpi base model whose VLM backbone is PaliGemma; use of these weights is therefore subject to the Gemma Terms of Use (including the Gemma Prohibited Use Policy), which downstream users must pass on. The openpi training code and ManiGuard's own contributions are Apache-2.0.
Model tree for IDEAS-Lab-Northwestern/pi0-real-clutter-60-droid-refined-lora
Base model
lerobot/pi0_old