--- license: apache-2.0 library_name: openpi tags: - robotics - vla - pi0 - isaaclab - manipulation --- # PPS Checkpoints — IsaacLab DROID proxy steering models PROXY steering models for [`TritiumR/pps`](https://github.com/TritiumR/pps), trained on IsaacLab DROID manipulation tasks with joint-position actions. Each task ships a **pair** of proxies used by `eval_steering.py`: - `task//` — the **task proxy**, trained on task demonstrations - `reference/20000/` — the **reference proxy**, the steering baseline At inference the base pi0.5 velocity is nudged by their difference: ``` v_t[:, :, :proxy_action_dim] += steer_scale * (task_v_t - ref_v_t) ``` ## Contents | Task | Task proxy | Reference proxy | IsaacLab task id | |---|---|---|---| | pot | `task/24000` | `reference/20000` | `Isaac-Pot-Droid-Visuomotor-v0` | | tea | `task/32000` | `reference/20000` | `Isaac-Tea-Droid-Visuomotor-v0` | | weight | `task/24000` | `reference/20000` | `Isaac-Weight-Droid-Visuomotor-v0` | Only the final task step and the reference are published — these are exactly the checkpoints the evaluation scripts load. Optimizer state is not included, so these are for **inference / steering, not resuming training**. Each step directory holds `model.safetensors` (the Gemma-based action expert plus projection heads, ~135 MB fp32), `metadata.pt`, and `assets/cn356//norm_stats.json`. ## Download > [!IMPORTANT] > These must land under a directory literally named `checkpoints/`. > `eval_steering.py` derives the training-config name from the path — it finds > the `checkpoints/` segment and reads the **next** segment as the config name > (e.g. `.../checkpoints/proxy_isaaclab_droid_pot_pi05_jointpos/task/24000`). > Unpacking anywhere else raises `Could not derive a training config name`. From the repo root: ```bash python openpi/fetch_checkpoints.py ``` or equivalently: ```python from huggingface_hub import snapshot_download snapshot_download( repo_id="Tritiumac/PPS_checkpoints", local_dir="openpi/checkpoints", ) ``` ## Usage You also need the base pi0.5 policy at `openpi/checkpoints/pytorch/pi05_droid_jointpos`, and the scene assets from [Tritiumac/PPS_assets](https://huggingface.co/datasets/Tritiumac/PPS_assets). ```bash python eval_steering.py \ --task Isaac-Pot-Droid-Visuomotor-v0 \ --base_checkpoint_dir openpi/checkpoints/pytorch/pi05_droid_jointpos \ --task_checkpoint_dir openpi/checkpoints/proxy_isaaclab_droid_pot_pi05_jointpos/task/24000 \ --ref_checkpoint_dir openpi/checkpoints/proxy_isaaclab_droid_pot_pi05_jointpos/reference/20000 \ --prompt "remove the lid of the pot and put egg in it" \ --exp_name demo --seed_start 42 --seed_end 43 ``` Prompts used for the published results: | Task | Prompt | |---|---| | pot | `remove the lid of the pot and put egg in it` | | tea | `pour the tea from the teapot into the cup` | | weight | `put pear and apple on the scale` | ## Model details Configs are registered in `openpi/src/openpi/training/config.py` under names matching the directory names (`proxy_isaaclab_droid__pi05_jointpos`): - action expert: `gemma_12m`, action horizon 15, action dim 8 - vision backbone: `facebook/dinov3-vits16-pretrain-lvd1689m` - quantile normalization, joint-position action space The DINOv3 backbone is **not bundled** — it is fetched from the Hub at load time and carries its own license terms. ## License Apache-2.0, matching [openpi](https://github.com/Physical-Intelligence/openpi). The DINOv3 vision backbone is a runtime dependency under Meta's DINOv3 license.