Model card
Browse files
README.md
CHANGED
|
@@ -1,3 +1,74 @@
|
|
| 1 |
---
|
| 2 |
license: mit
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3 |
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
license: mit
|
| 3 |
+
tags:
|
| 4 |
+
- robotics
|
| 5 |
+
- reinforcement-learning
|
| 6 |
+
- safe-reinforcement-learning
|
| 7 |
+
- reach-avoid
|
| 8 |
+
- unitree-go2
|
| 9 |
+
- mujoco
|
| 10 |
---
|
| 11 |
+
|
| 12 |
+
# ODD-conditioned safety filters — trained policies
|
| 13 |
+
|
| 14 |
+
Trained policies for **ODD-conditioned safety filters** on a Unitree Go2 in MuJoCo (mjlab): safety filters whose
|
| 15 |
+
guarantee survives runtime changes of the operating design domain — a payload loaded mid-mission, a motor that
|
| 16 |
+
derates. The filter is an automaton over specification modes (stand/walk ↔ rest) with certified transition
|
| 17 |
+
funnels between them.
|
| 18 |
+
|
| 19 |
+
Code, documentation and the evaluation that reproduces every result:
|
| 20 |
+
**[SafeRoboticsLab/odd-conditioned](https://github.com/SafeRoboticsLab/odd-conditioned/tree/cleanup)** (branch
|
| 21 |
+
`cleanup`). These weights are meant to be used with it.
|
| 22 |
+
|
| 23 |
+
## Use
|
| 24 |
+
|
| 25 |
+
```bash
|
| 26 |
+
# in a clone of the code repository, after `source activate.sh`
|
| 27 |
+
bash scripts/fetch_weights.sh https://huggingface.co/buzinguyen/odd-conditioned-dev/resolve/c923466bd1c68132b643f6806b9e8a2c532e4f1f/odd-conditioned-weights-v1.tar.gz
|
| 28 |
+
pytest -q tests/ && bash scripts/reproduce.sh payload figures
|
| 29 |
+
```
|
| 30 |
+
|
| 31 |
+
`fetch_weights.sh` installs the policies under `checkpoints/` and checks every file against the manifest
|
| 32 |
+
committed in the code repository (`weights/MANIFEST.sha256`, also included here).
|
| 33 |
+
|
| 34 |
+
## Files
|
| 35 |
+
|
| 36 |
+
| path | contents |
|
| 37 |
+
|---|---|
|
| 38 |
+
| `odd-conditioned-weights-v1.tar.gz` | everything below, as one archive (what `fetch_weights.sh` installs) |
|
| 39 |
+
| `checkpoints/<name>/model.zip` | a two-player reach-avoid PPO twin (`ReachAvoidPPO2P`, safety-stable-baselines 0.4.0): control policy + state-value net, whose sign is the mode's certificate |
|
| 40 |
+
| `checkpoints/<name>/tensornormalize.pt` | its frozen observation-normalization statistics (48-d actor observation) |
|
| 41 |
+
| `checkpoints/<name>/config.yaml` | the exact training configuration of the run |
|
| 42 |
+
| `checkpoints/{rest,getup_stage1}/final/` | final models used as warm starts when retraining `descend` and `getup` |
|
| 43 |
+
| `MANIFEST.sha256` | sha256 of every file |
|
| 44 |
+
|
| 45 |
+
| policy | role |
|
| 46 |
+
|---|---|
|
| 47 |
+
| `stand` | STAND expert under a carried load W ∈ [0, 120] N with a raised centre of mass; its value is `V_stand` |
|
| 48 |
+
| `rest` | REST expert: lie down and settle under any load — the anchor safe set |
|
| 49 |
+
| `getup` | certified get-up funnel REST → STAND; its value `V_up` gates the return and the abort |
|
| 50 |
+
| `descend` | certified descent funnel STAND → REST |
|
| 51 |
+
| `stand_wide` | STAND expert trained on W ∈ [0, 150] N (a noisier certificate; the single-spec comparison) |
|
| 52 |
+
| `unified`, `unified_discounted` | single-specification baselines (one policy for stand-or-rest) |
|
| 53 |
+
| `leg_stand` | STAND expert for a derated front-right leg (the negative control) |
|
| 54 |
+
| `compound_stand`, `compound_rest` | STAND / REST experts for a leg that derates while carrying 80 N |
|
| 55 |
+
|
| 56 |
+
The nominal walking policy is not here: it ships with
|
| 57 |
+
[go2_atomic_skills](https://github.com/SafeRoboticsLab/go2_atomic_skills).
|
| 58 |
+
|
| 59 |
+
## Training
|
| 60 |
+
|
| 61 |
+
Every policy was trained with the two-player safety-PPO recipe of safety-stable-baselines on tasks of
|
| 62 |
+
[robot-safety-sandbox](https://github.com/SafeRoboticsLab/robot-safety-sandbox/tree/project/odd-conditioned)
|
| 63 |
+
(branch `project/odd-conditioned`): 1024 environments, 50M steps, seed 0, a learned adversarial push of up to
|
| 64 |
+
25 N. The released checkpoint of each run is the one at 49,999,872 steps. `scripts/train.sh` in the code
|
| 65 |
+
repository retrains any of them.
|
| 66 |
+
|
| 67 |
+
**Training variance.** Each policy is a single training run, and the stance-type policies (`stand`,
|
| 68 |
+
`compound_stand`) vary a lot from run to run: retrained with other seeds, most stand experts fail the acceptance
|
| 69 |
+
test that the released one passes. The code repository documents an acceptance test (`scripts/check_policies.py`)
|
| 70 |
+
and a threshold-calibration script for retrained policies.
|
| 71 |
+
|
| 72 |
+
## License
|
| 73 |
+
|
| 74 |
+
MIT, as the code.
|