File size: 5,912 Bytes
00c55c8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
> **30k candidate:** default checkpoint is
> `checkpoints/29999`. L40 and physical-robot acceptance
> are still pending. Do not publish or treat as frozen.

# StreamPI Piper-X Real6 Deployment Handoff

## 1. Release identity

| Item | Value |
|---|---|
| Release | `StreamPI-PiperX-Real6` |
| Configuration | `pi05_stream3_piper_x_real_6tasks` |
| Checkpoint | `checkpoints/20000` |
| Dataset asset | `real_piper_x_6tasks` |
| Model | StreamPI based on π0.5 |
| History horizon | 3 observations |
| History interval | 5 dataset frames |
| Prediction horizon | 10 actions |
| Execution length | 5 actions per inference |
| State dimension | 14 |
| Action dimension | 14 |

State and action order:

```text
left_joint_1 ... left_joint_6,
left_gripper,
right_joint_1 ... right_joint_6,
right_gripper
```

Camera order:

```text
cam_high
cam_left_wrist
cam_right_wrist
```

## 2. Action semantics

Training uses delta actions for the 12 arm joints.

The 14-dimensional action layout is:

```text
6 left-arm joints,
1 left gripper,
6 right-arm joints,
1 right gripper
```

The arm-joint dimensions use delta-action training semantics. The two gripper
dimensions remain absolute gripper commands.

During inference, `AbsoluteActions` converts the arm-joint predictions back to
absolute joint positions. The policy server therefore returns:

```ini
action_type=absolute_joint_position
```

The robot client must not apply an additional delta-to-absolute conversion.

## 3. Environment installation

Install the server environment:

```bash
cd /path/to/StreamPI-PiperX-Real6
bash scripts/setup_server_env.sh
```

Optionally install an independent client environment:

```bash
cd /path/to/StreamPI-PiperX-Real6
bash scripts/setup_client_env.sh
```

An existing compatible Python interpreter may instead be selected explicitly:

```bash
export OPENPI_PYTHON=/path/to/python
```

## 4. Release verification

```bash
cd /path/to/StreamPI-PiperX-Real6

export OPENPI_PYTHON=/path/to/python
bash scripts/verify_release.sh
```

Expected final markers include:

```text
CHECKPOINT_STRUCTURE_OK
CONFIG_REGISTRATION_OK
DELTA_TO_ABSOLUTE_TRANSFORM_OK
SERVER_CLIENT_PROTOCOL_OK
RELEASE_VERIFY_OK
```

## 5. Synthetic loopback test

The loopback test starts a local policy server and sends synthetic camera
images and robot states. It does not connect to robot hardware.

```bash
cd /path/to/StreamPI-PiperX-Real6

export OPENPI_PYTHON=/path/to/python
export LOOPBACK_GPU=0
export LOOPBACK_PORT=18080
export LOOPBACK_MAX_LATENCY_SECONDS=2.0

bash scripts/test_loopback.sh
```

Expected markers:

```text
POLICY_WARMUP_OK
SMOKE_CLIENT_OK
LOOPBACK_TEST_OK
```

The script should stop its policy-server subprocess automatically when it
exits.

## 6. Start the deployment server

```bash
cd /path/to/StreamPI-PiperX-Real6

export OPENPI_PYTHON=/path/to/python
export POLICY_GPU=0
export POLICY_HOST=0.0.0.0
export POLICY_PORT=8000

bash scripts/start_policy_server.sh
```

WebSocket endpoint:

```text
ws://SERVER_IP:8000
```

Only one robot/policy session should use each server process.

## 7. Warm-up before connecting hardware

The first inference calls for history lengths 1, 2 and 3 may trigger separate
JAX compilation. Complete all warm-up requests before enabling robot torque.

With the policy server already running:

```bash
cd /path/to/StreamPI-PiperX-Real6

export OPENPI_PYTHON=/path/to/python
export POLICY_HOST=127.0.0.1
export POLICY_PORT=8000
export WARMUP_STEPS=3

bash scripts/warmup_policy.sh
```

The warm-up client uses synthetic inputs and does not access robot hardware.

## 8. Client integration

Reference adapter:

```text
deployment/piperx_client.py
```

The robot-side integration must:

1. Supply all three camera observations using the documented names.
2. Supply a 14-dimensional measured state in the documented order.
3. Execute only the returned `execute_actions`, normally 5 actions.
4. Feed the latest measured robot state into the next policy request.
5. Call `reset_episode()` before every new episode.
6. Keep one WebSocket connection for one robot episode.
7. Never reuse observation history from the preceding episode.

Do not execute all 10 predicted actions and then make the next request as
though only 5 actions had been executed. The training and deployment contract
is predict 10, execute 5, and then replan.

## 9. Required robot-side safety

The policy server does not implement complete hardware safety. The robot
controller must independently enforce:

- joint-position limits;
- joint-velocity and joint-acceleration limits;
- command timeout and watchdog;
- communication-loss handling;
- collision and workspace limits;
- emergency stop;
- torque-disable recovery;
- gripper-command bounds;
- gripper-command rate limiting.

The synthetic loopback observed small arm-joint chunk-boundary gaps but larger
gripper-command changes. Gripper limiting must remain enabled during both
dry-run and real-robot evaluation.

## 10. Known non-fatal logs

On an NVIDIA machine, JAX may print unsuccessful backend probes such as:

```text
Unable to initialize backend 'rocm'
Unable to initialize backend 'tpu'
```

These messages do not indicate CUDA inference failure.

Orbax may also report that it cannot read the optional
`EXPERIMENTAL_ORBAX_USE_DISTRIBUTED_PROCESS_ID` flag. The checkpoint is
considered valid when restoration completes and the verifier produces:

```text
RELEASE_VERIFY_OK
```

## 11. Acceptance scope

Completed:

- checkpoint structure verification;
- configuration registration verification;
- delta-to-absolute action-semantics verification;
- WebSocket server/client protocol verification;
- three-frame streaming-history verification;
- episode-reset verification;
- warmed L40S synthetic-loopback verification.

Pending:

- zero-torque robot communication test;
- low-speed dry-run;
- per-task real-robot success-rate evaluation;
- final robot safety acceptance.