Instructions to use DAVIAN-Robotics/pi05_droid_jointpos with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- LeRobot
How to use DAVIAN-Robotics/pi05_droid_jointpos with LeRobot:
- Notebooks
- Google Colab
- Kaggle
| library_name: lerobot | |
| pipeline_tag: robotics | |
| tags: | |
| - lerobot | |
| - pi05 | |
| - pi0.5 | |
| - openpi | |
| - droid | |
| - robotics | |
| - manipulation | |
| # pi05_droid_jointpos (lerobot PyTorch port) | |
| OpenPI ์ **`pi05_droid_jointpos`** (ฯ0.5 ๋ฅผ DROID ๋ก fine-tune, joint-position action space) | |
| ๋ฅผ [lerobot](https://github.com/huggingface/lerobot) `PI05Policy` (PyTorch) ํฌ๋งท์ผ๋ก ๋ณํํ | |
| ์ฒดํฌํฌ์ธํธ์ ๋๋ค. | |
| - **Source**: `gs://openpi-assets-simeval/pi05_droid_jointpos` (JAX/orbax) โ OpenPI ๊ณต์ ๋ฐฐํฌ๋ณธ. | |
| - **Conversion**: `openpi/examples/convert_jax_model_to_pytorch.py` (JAXโPyTorch), ์ดํ lerobot | |
| config/processor ์ ์กฐ๋ฆฝ. | |
| - **Verified**: RoboLab (Isaac Lab) `BananaInBowlTask` 8-env server-client eval โ **7/8** | |
| (๋์ผ ๊ฐ์ค์น์ openpi JAX baseline 6/8 ๊ณผ ๋๋ฑ). | |
| ## Files | |
| | file | ๋ด์ฉ | | |
| |---|---| | |
| | `config.json` | `PI05Config` โ `max_state_dim=8`, `chunk_size=15`, `dtype=bfloat16`, STATE/ACTION QUANTILES | | |
| | `model.safetensors` | 812 keys (Gemma `embed_tokens` ๋ `lm_head` ์ tie) | | |
| | `policy_preprocessor.json` (+ `*_normalizer_processor.safetensors`) | rename โ batch โ **DROID quantile normalize** โ state discretize+tokenize โ device | | |
| | `policy_postprocessor.json` (+ `*_unnormalizer_processor.safetensors`) | **DROID quantile unnormalize** | | |
| ## Usage | |
| ```python | |
| from lerobot.policies.pi05.modeling_pi05 import PI05Policy | |
| from lerobot.policies.factory import make_pre_post_processors | |
| repo = "DAVIAN-Robotics/pi05_droid_jointpos" | |
| policy = PI05Policy.from_pretrained(repo).eval() | |
| preprocessor, postprocessor = make_pre_post_processors(policy.config, pretrained_path=repo) | |
| ``` | |
| ## DROID I/O adapter (ํ์) | |
| ์ด ์ฒดํฌํฌ์ธํธ๋ lerobot-native ๋จ๊ณ(**normalize / tokenize / model / unnormalize**)๋ง | |
| self-contained ํฉ๋๋ค. DROID-specific ํ ์ ์ถ๋ ฅ ๋ณํ์ OpenPI `droid_policy` ๋ก์ง์ด๋ฉฐ lerobot ์ | |
| ์์ผ๋ฏ๋ก **์ธ๋ถ ์ด๋ํฐ๊ฐ ํ์**ํฉ๋๋ค: | |
| - **์ ๋ ฅ**: `observation.state = concat(joint_position[7], gripper_position[1])` (raw, processor ๊ฐ | |
| ์ ๊ทํ). ์ด๋ฏธ์ง๋ `observation.images.base_0_rgb` (exterior), `observation.images.left_wrist_0_rgb` | |
| (wrist) 2๊ฐ๋ง ์ฃผ๋ฉด ๋ชจ๋ธ์ด 3๋ฒ์งธ cam ์ `-1` ๋ก ์๋ pad. (`[0,1]` float, CHW.) | |
| - **์ถ๋ ฅ**: ๋ชจ๋ธ์ joint **delta**(dims 0โ6)๋ฅผ ๋ด๋ฏ๋ก ํ์ฌ joint ๋ฅผ ๋ํด **absolute** ํ | |
| (`AbsoluteActions`, mask = 7รTrue + 1รFalse), ๊ทธ ๋ค `action[:, :8]` (joint7 + gripper1) ๋ง ์ฌ์ฉ. | |
| - **์ฐธ์กฐ ๊ตฌํ**: `sft/scripts/pi05_lerobot_server/` (`droid_glue.py` + `policy.py`) โ OpenPI websocket | |
| ํ๋กํ ์ฝ ์๋ฒ๋ก, RoboLab `pi0_family` client ๊ฐ ๊ทธ๋๋ก ๋ถ๋๋ค. | |
| ## ์ฃผ์ | |
| - **`max_state_dim=8`**: pi05 ๋ ์ ๊ทํ๋ state ๋ฅผ 256-bin ์ด์ฐํํด ํ๋กฌํํธ์ ๋ฃ๋๋ฐ, DROID ๋ | |
| ์ค์ state ๊ฐ 8-dim(joint7+gripper1)์ด๋ผ **8๊ฐ ๊ฐ๋ง** ๋ฃ์ด์ผ openpi ์ ์ผ์นํ๋ค. ๊ธฐ๋ณธ pi05(32)๋ก | |
| ๋๋ฉด ์์ฌ 24๊ฐ ํ ํฐ์ด conditioning ์ ์ค์ผ์์ผ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค(ํนํ gripper ์กฐ๊ธฐ close). | |
| ์ด repo ๋ `config.json` ๊ณผ `policy_preprocessor.json`(prepare-state step)์ `max_state_dim=8` | |
| ์ ๋ช ์ํด ํ์ค ๋ก๋ฉ๋ง์ผ๋ก ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ๋ค. (lerobot ๊ธฐ๋ณธ save ๋ prepare step ์ ์ด ๊ฐ์ | |
| ์ง๋ ฌํํ์ง ์์ผ๋ฏ๋ก ์๋์ผ๋ก ๋ฃ์ด๋ ๊ฒ โ ์ง์ ๋น๋ ์ ๋์ผํ๊ฒ ๋ช ์ ํ์.) | |
| - **`RLinf/RLinf-Pi05-Polaris-droid_jointpos` ์ ํผ๋ ์ฃผ์** โ param ํค ๊ตฌ์กฐ์ norm_stats ๋ ๊ฐ์ง๋ง | |
| RL-finetune ๋ *๋ค๋ฅธ ๊ฐ์ค์น* ๋ค. ์ด repo ๋ OpenPI ๊ณต์ `pi05_droid_jointpos` ๋ณํ๋ณธ์ด๋ค. | |
| ## License / attribution | |
| ๊ฐ์ค์น๋ OpenPI(Physical Intelligence) ์ `pi05_droid_jointpos` ์์ ํ์๋์๋ค. ์ฌ์ฉ ์กฐ๊ฑด์ | |
| upstream([openpi](https://github.com/Physical-Intelligence/openpi)) ์ ๋ผ์ด์ ์ค๋ฅผ ๋ฐ๋ฅธ๋ค. | |