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๋ฅผ ์•„์ง ๋ฐ›์ง€ ๋ชปํ–ˆ๋‹ค), ์žก๊ธฐ๊ฐ€ ์™œ ๋น—๋‚˜๊ฐ”๋Š”์ง€.