document which checkpoint is which
Browse files
README.md
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: mit
|
| 3 |
+
tags:
|
| 4 |
+
- reinforcement-learning
|
| 5 |
+
- locomotion
|
| 6 |
+
- mujoco
|
| 7 |
+
- robotics
|
| 8 |
+
---
|
| 9 |
+
|
| 10 |
+
# Snow Locomotion β Unitree G1
|
| 11 |
+
|
| 12 |
+
A locomotion policy that walks on variable-depth snow, conditioned on an estimated support
|
| 13 |
+
signal from a sensorized crampon. Companion to the `hackathon-everest` foothold-assurance
|
| 14 |
+
project, whose estimator error statistics this training loop reproduces.
|
| 15 |
+
|
| 16 |
+
**Simulation only.** No physical robot, no field-calibrated snow physics, no real sensor data
|
| 17 |
+
anywhere in the chain. See the claim boundary at the bottom.
|
| 18 |
+
|
| 19 |
+
## Which checkpoint do I want?
|
| 20 |
+
|
| 21 |
+
| directory | what it is | use it for |
|
| 22 |
+
|---|---|---|
|
| 23 |
+
| `baseline-v3` | 200M-step flat-ground walker, stock Playground config | **the baseline** β warm start for every fine-tune, and the comparison policy |
|
| 24 |
+
| `curr-s1` | curriculum stage 1 β snow capped at 112 mm | best snow result so far (reward 15.9, episode length 724) |
|
| 25 |
+
| `curr-s2` | curriculum stage 2 β snow capped at 175 mm | warm-started from `curr-s1` |
|
| 26 |
+
| `ft-full` | first fine-tune, brief's original reward weights | best non-curriculum snow policy |
|
| 27 |
+
| `code/snow_rl` | the package that produced these | reproducing or extending any checkpoint |
|
| 28 |
+
|
| 29 |
+
### Ablation arms β controls, not deliverables
|
| 30 |
+
|
| 31 |
+
`ft-no_map`, `ft-no_support`, `ft-ablation` blank the belief map, the bilateral reserve, and
|
| 32 |
+
the entire sensor channel respectively. They isolate each component's contribution.
|
| 33 |
+
|
| 34 |
+
**Caveat:** all three were trained on reward weights that were later measured to walk badly
|
| 35 |
+
(2% velocity tracking), and came back statistically indistinguishable. Treat them as a
|
| 36 |
+
method demonstration, not as evidence about the components.
|
| 37 |
+
|
| 38 |
+
## Measured results
|
| 39 |
+
|
| 40 |
+
Against `baseline-v3`, identical terrain, seed and commanded velocity (0.8 m/s):
|
| 41 |
+
|
| 42 |
+
| terrain | baseline | snow-trained | |
|
| 43 |
+
|---|---|---|---|
|
| 44 |
+
| flat (4 mm) | 79% tracking, 5.05 m | 74%, 4.72 m | slight regression |
|
| 45 |
+
| **shallow (71 mm)** | 26% tracking, 1.34 m | **60%, 3.59 m** | **2.7Γ distance** |
|
| 46 |
+
| deep (198 mm) | 2% tracking, 1.11 m | β13%, 0.51 m | regression |
|
| 47 |
+
|
| 48 |
+
Shallow snow is the result. Deep snow currently regresses β the curriculum stages exist to
|
| 49 |
+
address that, and the deep row should be re-measured against `curr-s3` when it lands.
|
| 50 |
+
|
| 51 |
+
Note that **survival time is a misleading metric here**: a policy that stops walking maximises
|
| 52 |
+
it. Five rounds of reward tuning each survived longer while covering less ground before this
|
| 53 |
+
was caught. Score on distance and velocity tracking.
|
| 54 |
+
|
| 55 |
+
## How it works
|
| 56 |
+
|
| 57 |
+
Snow is a **force field, not geometry**. The MuJoCo ground is a flat plane representing hard
|
| 58 |
+
substrate; snow acts through `xfrc_applied` β depth-dependent sinkage plus ploughing drag on
|
| 59 |
+
the swing foot. A heightfield would model bumpy solid ground, which is the wrong physics for a
|
| 60 |
+
surface you sink into.
|
| 61 |
+
|
| 62 |
+
The policy never sees ground truth. It sees a corrupted estimate whose error statistics are
|
| 63 |
+
measured from the source project's held-out evaluation: a shrinkage slope of 0.677 (weak ground
|
| 64 |
+
reads stronger than it is), conditional noise, and a **36.7% false-safe rate** β on genuinely
|
| 65 |
+
weak ground, a confident report of 429 N when the truth is 200 N. Physics reads the truth; the
|
| 66 |
+
policy pays for acting on the lie.
|
| 67 |
+
|
| 68 |
+
Observations: 156 for the actor (103 stock + 24 estimator + 24 belief map + 5 reserve),
|
| 69 |
+
273 for the critic (adds privileged ground truth, discarded at deployment). Actions: 29 joint
|
| 70 |
+
targets at 50 Hz. Brax PPO, 512/256/128 networks, stock hyperparameters.
|
| 71 |
+
|
| 72 |
+
## Reproducing
|
| 73 |
+
|
| 74 |
+
```python
|
| 75 |
+
from huggingface_hub import snapshot_download
|
| 76 |
+
from brax.training.agents.ppo import checkpoint as ck
|
| 77 |
+
|
| 78 |
+
local = snapshot_download("iteratehack/snow-rl-baseline", allow_patterns="curr-s1/*")
|
| 79 |
+
params = ck.load(f"{local}/curr-s1/000061276160") # (normaliser, policy, value)
|
| 80 |
+
```
|
| 81 |
+
|
| 82 |
+
Pinned stack: `jax==0.7.2`, `jaxlib==0.7.2`, `brax==0.14.2`, `playground==0.2.0`,
|
| 83 |
+
`mujoco==3.12.0`. Later JAX removes `device_put_replicated`, which brax still calls.
|
| 84 |
+
|
| 85 |
+
## Claim boundary
|
| 86 |
+
|
| 87 |
+
- Simulation only; no physical robot, no validated snow physics, no tested hardware.
|
| 88 |
+
- The estimator error model is reproduced from held-out **simulation** metrics, not measured
|
| 89 |
+
on real sensors, and inherits every limitation of the synthetic terrain and reduced-order
|
| 90 |
+
contact model.
|
| 91 |
+
- The defensible claim is narrow: *a locomotion policy conditioned on an estimated support
|
| 92 |
+
signal outperforms the identical policy without that channel, on identical terrain* β and
|
| 93 |
+
as of these checkpoints that holds on shallow snow and not on deep.
|