Instructions to use leapshared/Redox_200epi_subtask_pi052 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- LeRobot
How to use leapshared/Redox_200epi_subtask_pi052 with LeRobot:
# No code snippets available yet for this library. # To use this model, check the repository files and the library's documentation. # Want to help? PRs adding snippets are welcome at: # https://github.com/huggingface/huggingface.js
- Notebooks
- Google Colab
- Kaggle
File size: 18,679 Bytes
f9958fe ed4799c f9958fe 57f2c32 f9958fe 57f2c32 ed4799c f9958fe 57f2c32 f9958fe ed4799c c7118d0 ed4799c c7118d0 ed4799c c7118d0 ed4799c f9958fe ed4799c f9958fe 57f2c32 ed4799c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 | # ๋กค์์ PC์์ PI052๋ฅผ ๋๋ฆด ์ค๋น (ํ ๋ฒ๋ง)
`leapshared/Redox_200epi_subtask_pi052`๋ฅผ OpenArm ์ค๋ฌผ ๋ก๋ด์์ `lerobot-rollout`์ผ๋ก ๋๋ฆฌ๊ธฐ ์ํ ์ค์นยทํ์ธ ์ ์ฐจ๋ค.
ํ์ต ์๋ฒ ์ชฝ์์ ๊ธ์ ๊ทธ๋๋ก ๋๋ ค ๋ณธ ๊ฒ์ด๊ณ (์๋ "ํ์ธํ ๋ฒ์"), ๋กค์์ PC์์ ์ฌ๋์ด ํ๋ ๊ทธ PC์ ์ฝ๋ฉ ์ด์์คํดํธ(Claude Code ๋ฑ)์๊ฒ ์ํค๋ ์ด ๋ฌธ์ ํ๋๋ก ๋๊ฒ ์ ์๋ค.
## ์ด์์คํดํธ์๊ฒ ์ํฌ ๋์ ๊ท์น
- **`lerobot-rollout`(์ค๋ฌผ ๋ก๋ด)์ ์ด์์๊ฐ ์ง์ ์คํํ๋ค.** ์ค๋ฌผ ํ์ด ์์ง์ด๋ ๊ฒฝ๋ก๋ค. ์ด์์คํดํธ๋ 1๋ฒ(์ค์น)๊ณผ 2๋ฒ(ํ์ธ)๊น์ง๋ง ํ๊ณ , 3๋ฒ ๋ช
๋ น์ ๋ง๋ค์ด ๊ฑด๋ค๊ธฐ๋ง ํ๋ค.
- ๊ธฐ์กด `.venv`(lerobot 0.6.1, GR00T์ฉ)๋ ๊ฑด๋๋ฆฌ์ง ์๋๋ค. **`uv sync`๋ฅผ ๋๋ฆฌ์ง ์๋๋ค**(`lerobot[groot]`๋ก ์น์ ํจํค์ง๊ฐ ์ง์์ง๋ค). `pip install`๋ ์์ง ์๋๋ค.
- lerobot ๋ธ๋์น ์์ค๋ 1๋ฒ์ ํจ์น ๋ ์ค ๋ง๊ณ ๋ ๊ณ ์น์ง ์๋๋ค. 0.6.1์ `pi052`๋ฅผ ์ฎ๊ฒจ ์ฌ์ผ๋ ค ํ์ง ์๋๋ค.
- ๋งํ๋ฉด ์ถ์ธก์ผ๋ก ๋ฒ์ ์ ๋ฐ๊พธ์ง ๋ง๊ณ ์ถ๋ ฅ์ ๋ง์ง๋ง 20์ค์ ์ด์์์๊ฒ ๋ณด์ฌ ์ค๋ค.
## ์ ๋ฐ๋ก ๊น์์ผ ํ๋
์ด ๋ชจ๋ธ์ lerobot PR [#4184](https://github.com/huggingface/lerobot/pull/4184)์ ๋ธ๋์น `codex/pi052-language-policy`(์ปค๋ฐ `3298e15`, lerobot 0.6.2)์๋ง ์๋ `pi052` ์ ์ฑ
์ด๊ณ ,
์๋ธํ์คํฌ๋ฅผ ์ค์ค๋ก ๋ง๋ค๊ฒ ํ๋ `--interactive`๋ ๊ทธ ๋ธ๋์น์๋ง ์๋ค. 0.6.1์ `lerobot-rollout`์ผ๋ก 3๋ฒ ๋ช
๋ น์ ๋๋ฆฌ๋ฉด ์ด๋ ๊ฒ ๋๋๋ค.
lerobot-rollout: error: unrecognized arguments: --interactive=true --autosteer_interval_s=3
ํ๋กฌํํธ๊ฐ `(lerobot-robot-openarm-sciedu)`์ด๋ฉด 0.6.1์ `.venv`๊ฐ ์ผ์ ธ ์๋ ๊ฒ์ด๋ค. ์ผ์ ธ ์์ด๋ ์๊ด์๋ค. ์๋์ฒ๋ผ `.venv_pi052/bin/...`์ ๊ฒฝ๋ก๋ก ์ ์ด ๋ถ๋ฅด๋ฉด ๋๋ค.
## 1. ์ค์น (`~/Documents/openarmsciedu`์์)
```bash
git clone --single-branch --branch codex/pi052-language-policy https://github.com/huggingface/lerobot.git ../lerobot_pi052
git -C ../lerobot_pi052 checkout 3298e15a9e897b09b582b4ec38786ecdbedb1630
uv venv --python 3.12 .venv_pi052
uv pip freeze --python .venv/bin/python | grep -v -i -E "^lerobot|^-e " > /tmp/pi052_constraints.txt
uv pip install --no-sources --python .venv_pi052/bin/python -c /tmp/pi052_constraints.txt \
-e "../lerobot_pi052[pi,dataset,openarms,viz,deepdiff-dep,pynput-dep]" "mujoco==3.11.0" "openarm-mujoco==2.1.0" \
pyrealsense2 aiohttp pyyaml opencv-python-headless \
"openarm-control @ git+https://github.com/enactic/openarm_control@7867db88ef4814413ad1ee20d6aa82c92a167417"
uv pip install --no-deps --python .venv_pi052/bin/python -e .
.venv_pi052/bin/hf download leapshared/Redox_200epi_subtask_pi052 pi052_embed_prefix.patch rollout_pi052.py redox_subtasks.txt autosteer_goal.txt autosteer_line.txt --local-dir scripts/pi052
git -C ../lerobot_pi052 apply "$PWD/scripts/pi052/pi052_embed_prefix.patch"
```
- ๋ท์งธ ์ค์ ์ง๊ธ ๋๋ `.venv`์ ๋ฒ์ (torch 2.11.0, transformers 5.5.4 ๋ฑ)์ ๊ทธ๋๋ก ๋ฌถ๋๋ค. RTX 5090์์ ์ด๋ฏธ ๋๋ torch๋ฅผ ๊ทธ๋๋ก ์ฐ๋ ค๋ ๊ฒ์ด๋ค.
- `.venv`์ URL์ด๋ ํ์ผ ๊ฒฝ๋ก๋ก ๊น ํจํค์ง๊ฐ ์์ผ๋ฉด(์: `flash-attn @ file:///tmp/...whl`) ๊ทธ ์ค๋ constraints์ ๋ค์ด๊ฐ์ง๋ง, ์ฐ์ด์ง ์๋ URL ์ ์ฝ์ uv๊ฐ ๊ฒ์ฌํ์ง ์์ผ๋ฏ๋ก ๊ทธ๋๋ก ๋ฌ๋ ํ๋ฆฐ๋ค(๋กค์์ PC์์ ํ์ธ).
- `--no-sources`๋ ๋นผ๋ฉด ์ ๋๋ค. ๋ธ๋์น์ `[tool.uv.sources]`๊ฐ torch๋ฅผ cu128 ์ธ๋ฑ์ค๋ก ๊ฐ์ ํด์ ์ ๋ฌถ์๊ณผ ์ถฉ๋ํ๋ค.
- `mujoco==3.11.0`, `openarm-mujoco==2.1.0`๋ ๋นผ๋ฉด ์ ๋๋ค. ๋ฌถ์ง ์์ผ๋ฉด 3.13 / 2.3์ด ๊น๋ฆฌ๊ณ ์๋ฎฌ ๋ก๋ด์ด `ArmConfigurationLimit only supports scalar joints`๋ก ์ฃฝ๋๋ค.
- ๋ง์ง๋ง ๋ ์ค์ ๊ทธ ์ปค๋ฐ์ ์ก์
์ถ๋ก ๋ฒ๊ทธ(`PI05Pytorch.embed_prefix() takes 5 positional arguments but 7 were given`)๋ฅผ ๊ณ ์น๋ ๋ ์ค์ง๋ฆฌ ํจ์น๋ค.
์ด๋ฏธ ์ ์ฉ๋์ด ์์ผ๋ฉด `git apply`๊ฐ "patch does not apply"๋ก ์คํจํ๋ค. ๊ทธ๋๋ `git -C ../lerobot_pi052 diff --stat`์ `modeling_pi052.py`๊ฐ ๋ณด์ด๋ฉด ๋ ๊ฒ์ด๋ค.
## 2. ํ์ธ (๋ก๋ด์ ์ผ๊ธฐ ์ ์)
```bash
.venv_pi052/bin/lerobot-rollout --help | grep -c -- "--interactive"
.venv_pi052/bin/hf auth whoami
.venv_pi052/bin/hf download google/paligemma-3b-pt-224 tokenizer.json tokenizer.model tokenizer_config.json special_tokens_map.json added_tokens.json config.json
.venv_pi052/bin/hf download leapshared/Redox_200epi_subtask_pi052 --exclude "checkpoints/*"
```
- ์ฒซ ์ค์ 1 ์ด์์ด์ด์ผ ํ๋ค. 0์ด๋ฉด 0.6.1์ ๊ฒ์ด ๋ถ๋ฆฐ ๊ฒ์ด๋ค.
- **์
์งธ ์ค์ด ์ค์ํ๋ค.** ์ ์ฒ๋ฆฌ๊ธฐ๋ ์คํํ ๋ `google/paligemma-3b-pt-224`์ ํ ํฌ๋์ด์ ๋ฅผ ํ๋ธ์์ ๋ฐ๋๋ฐ, ๊ทธ ์ ์ฅ์๋ ์น์ธ์ด ํ์ํ๋ค(gated). ํ ํฐ ์์ด๋ `GatedRepoError 401`์ด๋ค.
`lerobot-rollout`์ ์ ์ฑ
์ ๋ถ๋ฌ์ค๊ณ โ ๋ก๋ด์ ์ฐ๊ฒฐํด ํ์ผ๋ก ๋ณด๋ธ **๋ค์** โ ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ๋ง๋ ๋ค. ๊ทธ๋์ ๋ชป ๋ฐ์ผ๋ฉด ํ์ด ํ๊น์ง ๊ฐ ๋ค์ ํ๋ก๊ทธ๋จ์ด ์ฃฝ๋๋ค
(ํ๋ฌ๊ทธ์ธ์ `atexit` ๋ท๋ฌธ์ด ํ์ ๋ด๋ ค ์ฃผ๋ฏ๋ก ์ํํ์ง๋ ์๋ค. ํ ๋ฒ์ ๋ฒ๋ฆด ๋ฟ์ด๋ค).
์คํจํ๋ฉด <https://huggingface.co/google/paligemma-3b-pt-224>์์ ์ฝ๊ด์ ๋์ํ ๊ณ์ ์ผ๋ก `.venv_pi052/bin/hf auth login` ํ๋ค. ํ ๋ฒ ๋ฐ์ ๋๋ฉด ์บ์์์ ์ฝ๋๋ค.
- ๋ท์งธ ์ค์ ๋ชจ๋ธ์ ๋ฏธ๋ฆฌ ๋ฐ์ ๋๋ค(16.6 GB). `--exclude "checkpoints/*"`๋ฅผ ๋นผ๋ฉด ์ฒดํฌํฌ์ธํธ ๋ท๊น์ง 83 GB๋ฅผ ๋ฐ๋๋ค.
- ๋ก๋ด ์์ด ๋๊น์ง ๋ณด๊ณ ์ถ์ผ๋ฉด 3๋ฒ ๋ช
๋ น์์ `--robot.type=openarm_sciedu_sim --robot.viewer=false --robot.render_camera=true --display_data=false`๋ก๋ง ๋ฐ๊พผ๋ค.
์๋ฎฌ ์ฅ๋ฉด์๋ ๋น์ปค๋ ํ๋ ์์ด์ ์์ฑ๋๋ ๋ฌธ์ฅ์ ๋ด๋ด "return to the home posture"๋ค. ๊ทธ๊ฒ ์ ์์ด๋ค.
## 3. ์คํ (์ด์์๊ฐ ํ๋ค)
```bash
.venv_pi052/bin/lerobot-rollout \
--robot.type=openarm_sciedu \
--robot.config_path=config/robot_a.yaml \
--robot.arms=left,right \
--robot.go_home=true \
--robot.entry_ramp_s=2.0 \
--robot.max_start_mismatch_deg=45.0 \
--policy.path=leapshared/Redox_200epi_subtask_pi052 \
--policy.dtype=bfloat16 \
--strategy.type=base \
--inference.type=sync \
--task="lift the metal plate out of the left beaker" \
--interactive=true \
--autosteer_interval_s=3 \
--fps=30 \
--return_to_initial_position=true \
--display_data=true \
--play_sounds=false \
--device=cuda
```
**๋๋ฆฌ๊ธฐ ์ ์ `nvidia-smi`๋ฅผ ๋ณธ๋ค.** ๋ชจ๋ธ์ ๋ถ๋ฌ์ค๋ ๋์ค์ ํผํฌ๊ฐ 24.2 GiB(์ค์ ํ ๋น)๋ผ์ 32 GB ์นด๋์์๋ ์ฝ 25.5 GiB๊ฐ ๋น์ด ์์ด์ผ ํ๋ค. ๋ชจ๋ธ์ ์ฅ ์ฑ ์ด์ ์๋ ๋ค๋ฅธ ํ์ด์ฌ ํ๋ก์ธ์ค๊ฐ ์์ผ๋ฉด
๋ก๋ฉ์์ OOM์ด ๋๋ค(๋ก๋ฉ์ ๋ก๋ด ์ฐ๊ฒฐ๋ณด๋ค ์์ด๋ผ ํ์ด ์์ง์ด๊ธฐ ์ ์ด๋ค). ๋ถ๋ฌ์จ ๋ค์๋ ์ด ํ๋ก์ธ์ค๋ ์ฝ 25 GiB๋ก ๋ณด์ธ๋ค(์บ์๋ค. ์ ์์ด๋ค).
**๋ฐฐ๋(`/start`, `/subtask`, ... ๋ช
๋ น ๋ชฉ๋ก)๊ฐ ๋ฐ ๋๊น์ง ์๋ฌด๊ฒ๋ ์
๋ ฅํ์ง ์๋๋ค.** ๋ชจ๋ธ์ ๋ถ๋ฌ์ค๋ 1๋ถ ๋ฐ์ฏค์ ๋ก๊ทธ๊ฐ ์์ด์(`Loading policy from ...`์ liger ๊ฒฝ๊ณ ์์) ๋ฉ์ถ ๊ฒ์ฒ๋ผ ๋ณด์ด๋๋ฐ ์ ์์ด๋ค.
๊ทธ๋์ ์น ์ค์ ๋ฒ๋ ค์ง์ง ์๋๋ค. ํฐ๋ฏธ๋์ ์
๋ ฅ ํ์ ๋จ์ ์๋ค๊ฐ ์ธ์
์ด ์์๋๋ ์๊ฐ ์ฝํ๋ค. ๋ก๋ฉ ์ค์ `/start`๋ฅผ ์ณ ๋๋ฉด ํ ์ด๋์ด ๋๋์๋ง์, ๋ฐฐ๋์ "the robot will NOT move until you type /start"์ ๋ฌ๋ฆฌ
์๋ฌด๊ฒ๋ ์น์ง ์์๋๋ฐ ๋กค์์์ด ์์๋๋ค(2026-09-21์ ์ค๋ฌผ์์ ์์๋ ์ผ์ด๊ณ , ์๋ฎฌ์์ ๊ฐ์ง ํฐ๋ฏธ๋๋ก ์ฌํํ๋ค: ๋ฐฐ๋์ `Rollout running`์ด ๊ฐ์ ์๊ฐ์ ์ฐํ๋ค. ์๋ฅ๊ฐ ์ธ์
์์ ๋ ์
๋ ฅ ํ๋ฅผ ๋น์ฐ์ง ์๋๋ค).
์๋ชป ์ณค์ผ๋ฉด ๋ก๋ด์ด ์ฐ๊ฒฐ๋๊ธฐ ์ (๋ก๋ฉ ์ค)์ Ctrl-C ํ๋ ๊ฒ์ด ๊ฐ์ฅ ๊นจ๋ํ๋ค.
๋ฐฐ๋๊ฐ ๋จ๋ฉด `/start`๋ฅผ ์น๊ณ , ๋ฐ๋ก ์ด์ด์ ์๋ ์ค์ ๋ถ์ฌ๋ฃ๋๋ค(๋ฏธ๋ฆฌ ๋ณต์ฌํด ๋๋ค. `/autosteer`๋ `/start` ๋ค์๋ง ๋ฐ๋๋ค).
**์ด ์ค์ ํฐ๋ฏธ๋ ํ๋ฉด์์ ๋ณต์ฌํ์ง ์๋๋ค.** 164์๋ผ์ ํ๋ฉด์์๋ ์ ํ ๋ณด์ด๊ณ , ์ ํ ์ค์ ๋ณต์ฌํ๋ฉด ๋ ์ค๋ก ๋ถ๋๋ค. `scripts/pi052/autosteer_line.txt`๋ฅผ ์๋ํฐ๋ก ์ด์ด ๋ณต์ฌํ๋ค.
๋ถ์ฌ๋ฃ์ ๋ค `Autosteer on โ goal '...'`์ด **`on the left.`๋ก ๋๋๋์ง** ๋ณธ๋ค. ์๋ ธ์ผ๋ฉด ๊ฐ์ ์ค์ ๋ค์ ๋ฃ์ผ๋ฉด ๋๋ค(์ ๋ชฉํ๊ฐ ์์ ๊ฒ์ ๋์ ํ๋ค).
์ค๋ฌผ ์ฒซ ์คํ์์ ๋ชฉํ๊ฐ `... then put`์์ ์๋ ค ๋ค์ด๊ฐ๊ณ ๋ชฉ๋ก์ ์๋ ๋ฌธ์ฅ('lift the plate out of the left beaker', 'raise raise')์ด ๋์๋ค. ๊ฐ์ ํ๋ ์์ผ๋ก ์ฌ ๋ณด๋ ์ ์ฒด ๋ฌธ์ฅ์ ๋ชฉ๋ก ๋ฐ 0๋ฒ(334ํ ์ค),
์๋ฆฐ ๋ฌธ์ฅ์ 46๋ฒ์ด์๊ณ ์ค๋ฌผ์์ ๋์จ ๊ฒ๊ณผ ๊ฐ์ ๋ฌธ์ฅ๋ค์ด์๋ค. ํ
์คํธ ํค๋๋ ์ด task ๋ฌธ์ฅ ํ๋๋ก๋ง ํ์ตํ๋ค.
```text
/autosteer Hold the metal plate by the orange handle, dip it into the blue solution, take it out and point at it, then put the plate back in the beaker on the left.
```
- `/start` ๋ค ์ฝ 2์ด๋ ์๋ฌด ์ผ๋ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค. `sync`์์๋ ์ฒซ ์ฒญํฌ๋ฅผ ๊ณ์ฐํ๋ ๋์ ๋ช
๋ น์ด ๋๊ฐ์ง ์๊ณ ๋ก๋ด์ ๋ง์ง๋ง ๋ช
๋ น(ํ ์์ธ)์ ์ ์งํ๋ค. ๊ทธ๋ค์ 2์ด์ ๊ฑธ์ณ ๋ถ๋๋ฝ๊ฒ ์ถ๋ฐํ๋ค
(ํ๋ฌ๊ทธ์ธ์ ์ง์
๋จํ๋ ์ฒซ `send_action`์์ ์์ํ๋ฏ๋ก GR00T ๋์ ๋๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. ํ๋ก์ธ์ค๋น ํ ๋ฒ์ด๋ผ ๋ ๋ฒ์งธ `/start`์๋ ์๋ค). ์ฒซ `/autosteer` ์ง์ ๋ ํ ๋ฒ ๋ ์ฝ 2์ด ๋ฉ์ถ๊ณ ,
๊ทธ ๋ค๋ก๋ ์ฒญํฌ ๊ฒฝ๊ณ(50์ก์
๋ง๋ค)์์ ์ฝ 0.15์ด, 3์ด๋ง๋ค์ ์ง์์์ ์ฝ 0.12์ด ๋ฉ์นซํ๋ค(RTX 5090์์ ์ฐ ์ถ๋ก ์๊ฐ์ด๋ค).
- `--task`๋ `/start` ์๊ฐ์ ์ก์
์ชฝ์ด ๋ฐ๋ ์ฒซ ์๋ธํ์คํฌ ๋ฌธ์ฅ์ด๋ค. ์ ์ฒด task ๋ฌธ์ฅ์ `/autosteer`์ ์ค๋ค. ์ก์
์ชฝ์ ์๋ธํ์คํฌ 8๋ฌธ์ฅ์ผ๋ก๋ง ํ์ตํ์ผ๋ฏ๋ก
`--task`์ ์ ์ฒด ๋ฌธ์ฅ์ ๋ฃ์ง ์๋๋ค. `/autosteer`๋ฅผ ์น์ง ์์ผ๋ฉด "lift ..." ํ๋๋ง ๋๊น์ง ๋ฐ๋ฅธ๋ค.
- GR00T ๋ ์ฐ๋ ๋ช
๋ น๊ณผ ๋ก๋ด ์ชฝ ์ฌ์ฏ ์ค, `strategy`, `inference`, `fps`๋ถํฐ `device`๊น์ง๋ ๊ธ์๊น์ง ๊ฐ๋ค. GR00T์ task ๋ฌธ์ฅ("Dip the metal plate ... five times")์ ๊ฐ์ ธ์ค์ง ์๋๋ค.
- `--inference.rtc.mode=trained`๋ ์ธ ์ ์๋ค(RTC๋ก ํ์ตํ ์ฒดํฌํฌ์ธํธ ์ ์ฉ. ์์ํ ๋ ๊ฑฐ๋ถ๋๋ค). RTC๋ฅผ ์ฐ๋ ค๋ฉด `--inference.type=rtc --inference.rtc.execution_horizon=10`๋ง ๋ฐ๊ฟ ์น๊ณ
`--inference.queue_threshold`๋ ๊ธฐ๋ณธ๊ฐ(30)์ผ๋ก ๋๋ค.
### 3-1. ๋ฐ์ฒ๋ก ๋๋ฆฌ๊ธฐ (์ค๋ฌผ ์ฒซ ์คํ์์ ๋์จ ๋ฌธ์ ๋ค์ ๋์ฑ
. ์ธ์๋ ๊ฐ๊ณ ์ฒซ ์ค๋ง ๋ค๋ฅด๋ค)
```bash
PI052_SUBTASK_ORDER=scripts/pi052/redox_subtasks.txt PI052_AUTOSTEER_GOAL=scripts/pi052/autosteer_goal.txt \
.venv_pi052/bin/python scripts/pi052/rollout_pi052.py \
--robot.type=openarm_sciedu \
--robot.config_path=config/robot_a.yaml \
--robot.arms=left,right \
--robot.go_home=true \
--robot.entry_ramp_s=2.0 \
--robot.max_start_mismatch_deg=45.0 \
--policy.path=leapshared/Redox_200epi_subtask_pi052 \
--policy.dtype=bfloat16 \
--strategy.type=base \
--inference.type=sync \
--task="lift the metal plate out of the left beaker" \
--interactive=true \
--autosteer_interval_s=3 \
--fps=30 \
--return_to_initial_position=true \
--display_data=true \
--play_sounds=false \
--device=cuda
```
๋ฐฐ๋๊ฐ ๋ฌ ๋ค์ `/start`, ์ด์ด์ `/autosteer go`(๋ค์ ๋ฌด์์ ์น๋ `autosteer_goal.txt`์ ๋ฌธ์ฅ์ด ๋ชฉํ๊ฐ ๋๊ณ , `Autosteer on โ goal`์ ๊ทธ ๋ฌธ์ฅ์ด ์ฐํ๋ค).
- ๋ฐฐ๋ ์ง์ ์ ํฐ๋ฏธ๋ ์
๋ ฅ ํ๋ฅผ ๋น์ด๋ค. ๋ก๋ฉ ์ค์ ์น `/start`๊ฐ ๋ฐฐ๋์ ๋์์ ์ฝํ ์ถ๋ฐํ๋ ์ผ์ด ์๋ค.
- ๊ธด `/autosteer` ์ค์ ๋ถ์ฌ๋ฃ์ ์ผ์ด ์๋ค(์๋ฆด ์ผ์ด ์๋ค).
- `PI052_SUBTASK_ORDER`: ๋ชฉ๋ก(8๋ฌธ์ฅ)์ ์๋ ์์ฑ ๋ฌธ์ฅ์ ๊ฑฐ๋ฅธ๋ค. ๋ชฉ๋ก์ ๋ฌธ์ฅ๊ณผ ๊ฑฐ์ ๊ฐ์ผ๋ฉด(๊ธ์ ์ ์ฌ๋ 0.85 ์ด์) ๊ทธ ๋ฌธ์ฅ์ผ๋ก ๋ง์ถ๊ณ , ์๋๋ฉด ๋ฒ๋ฆฌ๊ณ ์ง๊ธ ๋ฌธ์ฅ์ ์ ์งํ๋ค.
๊ฑฐ๋ฅธ ๊ฒ์ `[pi052] ...`๋ก ์ฐํ๋ค. ์ก์
์ชฝ์ ๋ชฉ๋ก์ ๋ฌธ์ฅ์ผ๋ก๋ง ํ์ตํ์ผ๋ฏ๋ก 'raise raise' ๊ฐ์ ๋ฌธ์ฅ์ด ํ๋กฌํํธ๋ก ๋ค์ด๊ฐ๋ฉด ๊ฑฐ๋์ ์ ์ ์๋ค.
์ ์ฒด ๋ชฉํ ๋ฌธ์ฅ์์๋ ๋ชฉ๋ก ๋ฐ ๋ฌธ์ฅ์ด 0/334์์ผ๋ฏ๋ก ๋ชฉํ๋ง ์ ๋๋ก ๋ค์ด๊ฐ๋ฉด ๊ธํ ์ฅ์น๋ ์๋๋ค. `PI052_AUTOSTEER_GOAL`๋ง ์ฃผ๊ณ ๋๋ ค๋ ๋๋ค.
- `PI052_SUBTASK_CONFIRM_JUMPS=1`(๊ธฐ๋ณธ์ ๊บผ์ง. ์ ๋ชฉ๋ก์ด ์์ด์ผ ํ๋ค): ์ง๊ธ ๋จ๊ณ์์ 0~+2๋จ๊ณ๊ฐ ์๋ ๋ต(์ธ ๋จ๊ณ ์ด์ ์์ผ๋ก ๋ฐ๊ฑฐ๋ ๋ค๋ก ๋์๊ฐ๋ ๊ฒ)์ ๊ฐ์ ๋ต์ด ๋ ๋ฒ ์ฐ๋ฌ์ ๋์์ผ ๋ฐ๋๋ค.
ํ ์ฅ๋ฉด์ผ๋ก ๊ตฌ๋ณ๋์ง ์๋ ์(3๋ฒ "point at ..."๊ณผ 6๋ฒ "raise ... and point", 1๋ฒ๊ณผ 7๋ฒ)์์ ๊ณ ์์ค์ด ํ ๋ฒ์ฉ ํ๋ ๊ฒ์ ๊ฑฐ๋ฅธ๋ค. ์ด๋ค ๋ต์ด๋ ๋ ๋ฒ ์ฐ๋ฌ์ ๋์ค๋ฉด ํต๊ณผํ๋ฏ๋ก ์ ๊ธฐ์ง ์๋๋ค.
+2๊น์ง ๋ฐ๋ก ๋ฐ๋ ๊ฒ์ 2๋ฒ(์์ฐ์์ 2.2์ด)๊ณผ 4๋ฒ(2.6์ด)์ด 3์ด ์ง์ ๊ฐ๊ฒฉ์์ ํ ๋ฒ๋ ์ ์กํ ์ ์์ด์๋ค.
**์ฒ์์ ๋ฃ์๋ "์ ๋จ๊ณ ๋ฌธ์ฅ์ ๋ฒ๋ฆฐ๋ค"๋ ์์ด๋ค.** ์์ผ๋ก ์๋ชป ๋ด ๋ต ํ๋๋ฅผ ๋ฐ์ผ๋ฉด ๊ทธ ๋ค์ ์ณ์ ๋ต์ด ์ ๋ถ "์ ๋จ๊ณ"๋ผ ๋ฒ๋ ค์ ธ์, 3์ด ๋ค์ ์ ์ ๋ก ๊ณ ์ณ์ง ์ค๋ต์ด ์ด์์๊ฐ ์๋ ๋๊น์ง ๊ตณ๋๋ค
(์ฒ ํ์ ์ฅ ์ฑ 'return ...'์ ๊ตณ์ผ๋ฉด ์ฉ์ก ์์์ ์ฒ ํ์ ๋์ ์ ์๋ค). ํ์ต์ ์ฐ์ง ์์ ์์์ ํ๋ฆ์ ๋ค์ ๋๋ ค ๋ณด๋ ์ค์ ๋ก 4๋ฒ์ ๊ฑด๋๋ฐ๊ณ 7๋ฒ์ ๊ตณ์๋ค.
- ๊ฐ์ ์๋ธํ์คํฌ๋ ๋ค์ ์ฐ์ง ์๋๋ค(๋ฌธ์ฅ์ด ๋ฐ๋ ๋๋ง ์ฐ๋๋ค). 3์ด๋ง๋ค ์ฐํ๋ ์ค์ด ์
๋ ฅ ๋์ค์ ๋ผ์ด๋ค์ด `/stop`์ ๋ชป ์น ์ผ์ด ์์๋ค.
- ์๋ฎฌ์์ ๊ฐ์ง ํฐ๋ฏธ๋๋ก ํ์ธํ๋ค: ๋ฏธ๋ฆฌ ์น `/start`๊ฐ ๋ฒ๋ ค์ง๊ณ , `/autosteer go`์ ๋ชฉํ๊ฐ `on the left.`๋ก ๋๋๊ณ , 'lift the plate out of the left beaker'๋ 1๋ฒ์ผ๋ก ๋ง์ถฐ์ง๊ณ , 'raise raise'์ 'hold the plate'๋ ๋ฒ๋ ค์ง๊ณ , 2๋ฒ์์ ํ ๋ฒ ํ 'return to the home posture'๋ ์ ์ฉ๋์ง ์๋๋ค.
## 4. ๋ฉ์ถ ๋
- **์ฒ ํ์ ์ฅ๊ณ ์๊ฑฐ๋ ์ฒ ํ์ด ์ฉ์กยท๋น์ปค ์์ ์๋ ๋์์๋ `/stop`, `/reset`, Ctrl-C๋ฅผ ํ์ง ์๋๋ค.** ์
๋ค ๋จผ์ ์ฒ์ ์์ธ๋ก 3์ด ๋์ ๊ด์ ๊ณต๊ฐ์์ ์ง์ ์ผ๋ก ๊ฐ๊ณ ,
๊ทธ๋ฆฌํผ๋ ์ฒ์ ๊ฐ(์ด๋ฆผ)์ผ๋ก ๊ฐ์ด ๋์๊ฐ๋ฏ๋ก ๊ฐ๋ ๋์ค์ ์ฒ ํ์ ๋๋๋ค. `/stop`๊ณผ Ctrl-C๋ ๊ทธ ๋ค์ ํ์ ๋ด๋ฆฌ๊ณ ํ ํฌ๋ฅผ ํผ๋ค.
์ฒ ํ์ด ์ผ์ชฝ ๋น์ปค์ ๋์๊ฐ๊ณ ํ์ด ํ์ ์จ ๋ค์ `/stop`ํ๋ค. ๊ธํ๋ฉด ๋น์์ ์ง๋ค.
- ๊ณ ์์ค์ด ํ ๋ฌธ์ฅ์ ๋จธ๋ฌผ๊ฑฐ๋ ์ ๋จ๊ณ๋ก ๋๋์๊ฐ๋ฉด ์์ผ๋ก ๋๊ธด๋ค(autosteer๋ ๊บผ์ง๋ค. ๋ฌธ์ฅ์ด ๋ฐ๋๋ฉด ํ์ ๋จ์ ์ก์
์ ๋ฒ๋ฆฌ๊ณ ๋ฐ๋ก ์๋ก ์ถ๋ก ํ๋ค).
`/subtask raise the plate and point at it` โ `/subtask put the plate into the left beaker` โ `/subtask return to the home posture` โ `/stop`.
๋ค์ ๋งก๊ธฐ๋ ค๋ฉด ์ `/autosteer` ์ค์ ๋ค์ ์น๋ค.
- ์
๋ ฅ ๋์ค์ ์ถ๋ ฅ์ด ๋ผ์ด๋ค์ด ํ๋ฉด์ด ๊นจ์ ธ๋ ์น ๊ธ์๋ ์
๋ ฅ ์ค์ ๊ทธ๋๋ก ๋ค์ด๊ฐ ์๋ค. ๋ค์ ์น๋ฉด ์กฐ๊ฐ์ด ์์ธ๋ค(`Unknown command '//st/st/autosteer'`). Ctrl-U๋ก ์ค์ ๋น์ฐ๊ณ `/stop`์ ์น๋ค.
- ๋๋ ๋ค์๋ 'return to the home posture'์ ๋จธ๋ฌธ๋ค. ์์ฐ์ ํ๊น์ง ๋์๊ฐ์ง ์๊ณ ํ์์ ๊ด์ ๊ธฐ์ค ์ฝ 21๋ ์(200๊ฐ์ ์ค์๊ฐ)์์ ๋๋๊ณ , ๊ทธ ์ฅ๋ฉด์ ๋ผ๋ฒจ์ ์ ๋ถ 'return ...'์ด๋ค.
๊ณ ์์ค์๋ ๊ธฐ์ต์ด ์์ผ๋ฏ๋ก ๊ฑฐ๊ธฐ๊ฐ ๊ณ ์ ์ ์ด๋ค(์ค๋ฌผ์์๋ ๊ทธ๋ฌ๋ค. ํ์ต์ ์ฐ์ง ์์ ์์ 4๊ฐ ์ค 3๊ฐ๋ 'return ...'์ผ๋ก ๋๋ฌ๊ณ ๋๋ ๋ค 'lift ...'๋ก ๋์ด๊ฐ ์ ์ ์๋ค. ๋๋จธ์ง ํ๋๋ 'move the plate over ...'๋ก ๋๋ฌ๋ค). `/autosteer`๋ฅผ ๋ค์ ๋ฃ๋ ๊ฒ์ผ๋ก๋ ์ ๋ฐํด๊ฐ ์์๋์ง ์๋๋ค.
์ ๋ฐํด๋ ์ฒ ํ์ ๋น์ปค์ ๋๋ ค๋์ ์ํ์์ `/reset`(์ฒ์ ์์ธ๋ก 3์ด ๋ณต๊ท, task ๋ณต์) โ `/start` โ `/autosteer`. ๋ ๋ฒ์งธ `/start`์๋ ํ๋ฌ๊ทธ์ธ์ ์ง์
๋จํ๊ฐ ์๋ค(ํ๋ก์ธ์ค๋น ํ ๋ฒ. ํด๋จํ์ ์๋ ์ ํ๋ง ๊ฑธ๋ฆฐ๋ค).
- ์ค๊ธฐ `sync` ๋ฃจํ๋ 30 Hz๊ฐ ์๋๋ผ 14~21 Hz๋ก ์ฌ์ด์ ธ ์๋ค(๋ค๋ฅธ ์ ์ฑ
์ผ๋ก ์ฐ ๊ฐ. ํฑ์ ๋๋ถ๋ถ์ด ์นด๋ฉ๋ผยทCAN ๋ฑ ๋ก๋ด ์ชฝ์ด๋ค). ์์ฐ๋ณด๋ค 1.4~2๋ฐฐ ๋๋ฆฌ๊ฒ ์์ง์ด๋ ๊ฒ์ ๊ณ ์ฅ์ด ์๋๋ค.
๊ทธ๋์ `--duration`์ ์ฃผ์ง ์์๋ค(๋ํํ์์ ์๊ฐ์ด ๋ค ๋๋ฉด ํ์ผ๋ก ๊ฐ์ง ์๊ณ ๊ทธ ์๋ฆฌ์ ๋ฉ์ถ๋ฉฐ autosteer๋ ๊บผ์ง๋ค).
## ํ์ธํ ๋ฒ์ (2026-09-21, ํ์ต ์๋ฒ)
- ๋น ์๋ฆฌ์์ `uv sync --frozen --extra train --extra annotate`๋ก ๋กค์์ PC์ `.venv`(lerobot 0.6.1)๋ฅผ ์ฌํํ๋ค. ๊ทธ `lerobot-rollout --help`์๋ `--interactive`๊ฐ ์๋ค(์ ์ค๋ฅ์ ๊ฐ์ ์กฐ๊ฑด).
- ๊ทธ ์์์ 1๋ฒ์ ๊ธ์ ๊ทธ๋๋ก ๋๋ ธ๋ค: constraints 143์ค(`openarm-control @ git+...` ํ ์ค ํฌํจ), ์ค์น exit 0, ํจ์น ์ ์ฉ, `--interactive` ์์, `--policy.type`์ `pi052` ์์,
lerobot 0.6.2 / torch 2.11.0+cu130 / transformers 5.5.4, ๋ก๋ด ์ข
๋ฅ์ `openarm_sciedu`ยท`openarm_sciedu_sim`. `lerobot[groot]==0.6.1`์ ์น์ด๋ ๊ธฐ์กด ๋ฒ์ ์ ๋ฐ๋์ง ์๋๋ค(dry-run).
- ๊ทธ๋ ๊ฒ ๊น `.venv_pi052`๋ง์ผ๋ก 3๋ฒ ๋ช
๋ น์ ๋ก๋ด๋ง ์๋ฎฌ๋ก ๋ฐ๊ฟ ๋๊น์ง ๋๋ ธ๋ค(`/start` โ `Autosteer on` โ 3์ด๋ง๋ค ์์ฑ โ `/stop` โ ํ๊ฐ, exit 0).
- ํ ํฐ ์์ด๋ PaliGemma ํ ํฌ๋์ด์ ๊ฐ 401์ธ ๊ฒ, 2๋ฒ ๋ท์งธ ์ค์ด 16.6 GB๋ง ๋ฐ๋ ๊ฒ(dry-run)์ ํ์ธํ๋ค.
- ๋กค์์ PC(RTX 5090, ๋๋ผ์ด๋ฒ 595.84, uv 0.12.3)์์ 1ยท2๋ฒ์ด ๋งํ ์์ด ๋๋ฌ๋ค(2026-09-21): `--interactive` 2, `hf auth whoami` = leapshared, ํ ํฌ๋์ด์ ์ ๋ชจ๋ธ ๋ฐ์์ง, `uv pip check` ํต๊ณผ.
๋ก๋ด ์์ด sync ์์ง๊ณผ ๊ฐ์ ๊ฒฝ๋ก๋ก: ์ก์
์ฒญํฌ ํ๊ท ์ค์ฐจ 0.59๋, next_subtask 8/8, ์ฒญํฌ ์ถ๋ก 155 ms(์ฒซ ํ 2.1์ด), ๋ฌธ์ฅ ์์ฑ 116 ms(์ฒซ ํ 1.8์ด), ๋ก๋ฉ ํผํฌ 24.2 GiBยท์ถ๋ก ์ค 8.9 GiB.
- **์ค๋ฌผ ์ฒซ ์คํ(2026-09-21, ์ด์์)**: ๋ก๋ฉยท์นด๋ฉ๋ผ 3๋ยทํ ์ด๋(110๋๋ฅผ 6์ด์, ๋จ์ ์ค์ฐจ 3๋)ยทsync ์์ง์ ์ ์. ๋ก๋ฉ ์ค์ ๋ฏธ๋ฆฌ ์น `/start`๊ฐ ๋ ๋ฒ ๋ค ๋ฐฐ๋ ์งํ์ ์ฝํ๊ณ , `/autosteer` ๋ชฉํ๊ฐ ์๋ ค ๋ค์ด๊ฐ ๋ชฉ๋ก ๋ฐ ๋ฌธ์ฅ์ด ๋์๋ค(์ 3๋ฒ).
๋ชฉํ๋ฅผ ํ ์ค๋ก ๋ฃ์ ์คํ์์๋ ๋ฌธ์ฅ์ด ์์๋๋ก ๋์์ง๋ง **ํ์ ์ฒ ํ ์ก๊ธฐ๋ฅผ ๋์ณค๊ณ , ๋น์์ผ๋ก ๋ค์ด ์ฌ๋ฆฌ๊ณ ๋ค๋ฅธ ์์ผ๋ก ๊ฐ๋ฆฌํจ ๋ค ์ค๊ฐ ๋จ๊ณ๋ฅผ ๊ฑด๋๋ฐ์ด 'return to the home posture'๊น์ง ๊ฐ๋ค.**
๊ณ ์์ค์ ์ง๊ธ ์์๊ณผ task ๋ฌธ์ฅ๋ง ๋ณด๊ณ ์ฑ๊ณตํ ์์ฐ 200๊ฐ๋ก๋ง ํ์ตํด์ "์ก๊ธฐ๋ฅผ ๋์ณค๋ค"๋ฅผ ๋ชจ๋ฅธ๋ค. ๊ณผ์ ๋ ์ฑ๊ณตํ์ง ๋ชปํ๋ค.
- **ํ์ธํ์ง ๋ชปํ ๊ฒ**: ๋ฆฌ์ผ์ผ์คยทCAN์ด ๋ถ์ ์ํ์ ๋ฃจํ ์๋(Cadence summary๋ฅผ ์์ง ๋ฐ์ง ๋ชปํ๋ค), ์ก๊ธฐ๊ฐ ์ ๋น๋๊ฐ๋์ง.
|