You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
`_extract_complementary_data` now preserves any `privileged.*` batch key. Without
211
+
this the preprocessor (`batch = preprocessor(batch)` in the train loop) drops them
212
+
before `forward` and the safety loss can't see the cube positions. They ride
213
+
through as complementary data → un-normalized, untouched by feature classification
214
+
(`dataset_to_policy_features``continue`s on non-`observation`/`action` keys).
215
+
216
+
**Before the first real run, verify:** (1) `pytorch_kinematics` is installed and
217
+
`FKChain.fk(state[:5])` matches the recorded `privileged.ee_pos` on a sample frame
218
+
(FK-frame == world-frame assumption); (2) privileged keys actually arrive in
219
+
`policy.forward`'s batch; (3) sweep `λ` (`--policy.safety_weight`) — it's the
220
+
central knob.
221
+
222
+
## Still NOT done
185
223
186
-
-**`SafePI0Policy`** — the LeRobot subclass with `L = L_flow_matching + λ·L_safety` per `project_summary.md` §5. Privileged keys are already in the recorded datasets (`privileged.cube_positions`, `privileged.cube_half_extents`, `privileged.blue_cube_pos`, `privileged.goal_pos`, `privileged.ee_pos`, `privileged.grasped`) — the policy/loss just needs to read them from the batch and ignore them at inference. Per-cube arrays are flattened to 1D; reshape on load.
187
-
-**DAgger driver** — sketched in `sim/README.md`. The primitives it needs are already in place (`SafeCubeEnv`, `ScriptedExpert`, `EpisodeRecorder`, `evaluate.evaluate()`).
188
224
-**Domain randomization not yet applied.**`sim/randomize.py` defines `apply_dr(model, rng, cfg)` but `env.reset()` doesn't call it. Wire it in after the scene compiles, before the first physics step, when ready.
189
225
-**Real-world fine-tune / hardware deployment** — out of scope for the sim.
0 commit comments