Elastra HoST residual policy
This residual policy lets the HoST get-up controller stand the Unitree G1 humanoid up on soft mattresses and trampolines. It was trained with reinforcement learning in Elastra, a MuJoCo simulation of elastic supports.
- Paper: Elastra: A Simulation Framework for Elastic Bodies
- Code: github.com/yichg/elastra
- Companion model: ProtoMotions residual policy
How it works
HoST is a pretrained get-up policy that was trained on rigid ground. It stays frozen. At every control step, 50 times per second, the residual policy reads the robot state, the HoST action and the surface, and adds a bounded correction to the HoST action.
delta = 1.32 * tanh(mu(obs))
The correction is in HoST action units. One unit moves the PD target by 0.25 rad, so the bound is 0.33 rad per joint.
The corrected action goes to the PD controller of HoST.
At test time the policy uses the mean action mu.
Files
| File | Content |
|---|---|
host_residual.pt |
The checkpoint evaluated in the paper. It is identical to checkpoints/host_residual.pt in the code repository, sha256 452fb4d877b0. |
config.json |
The settings stored in the checkpoint and the observation layout. |
The checkpoint is a dictionary of tensors and numbers and loads with torch.load(path, weights_only=True).
actor is an MLP with layers of 92, 256, 128 and 23 units, tanh activations and a state-independent log_std.
critic is the value network with the same hidden layers.
Usage
The policy runs together with HoST inside the Elastra code.
git clone https://github.com/yichg/elastra && cd elastra
uv sync
uv run elastra-download-assets --skip-bones # robot model and the HoST policies
uvx --from huggingface_hub hf download chugangyi/elastra-host-residual --local-dir hf/host
uv run elastra-evaluate controller=host policy=hf/host/host_residual.pt out=outputs/evaluation/host_residual
Observation
92 inputs, in this order.
| Input | Size |
|---|---|
| Joint positions | 23 |
| Joint velocities x 0.1 | 23 |
| Base orientation quaternion | 4 |
| Base angular velocity x 0.25 | 3 |
| HoST action | 23 |
| Torso height, torso uprightness, pelvis height | 3 |
| Surface type, one-hot for mattress, trampoline and rigid ground | 3 |
| Stiffness input, log2(α)/6, and 1 on rigid ground | 1 |
| Largest surface deflection x 10 | 1 |
| Robot position: root xy, root linear velocity in the root frame x 0.1, distances to the x and y task-area boundaries | 7 |
| Progress of the trial | 1 |
Training
- 1000 PPO updates with 256 environments and 64 control steps per update, on 48 CPU cores in 5.7 h.
- Updates 1 to 500 use rigid ground, mattresses with α = 8, 16, 32 and 64, and trampolines with α = 1 and 2. The policy does not observe the robot position yet.
- From update 501 on, the mattresses with α = 16, 32 and 64 are replaced by α = 1, 2 and 4, and the policy also observes the robot position. The weights of these new inputs start at zero.
- 32 training initial states, 16 prone and 16 supine, drawn with the perturbation protocol of HoST. None of them is a test state.
- The released policy is the last update.
Results
Simulated evaluation from the paper, with 96 test initial states per surface, 48 prone and 48 supine. A trial succeeds when the robot stands for 1 s without leaving the task area. Standing means that the pelvis is at least 0.7 m above the support surface and the pelvis z axis has a world-z component of at least 0.9. The factor α scales the stiffness of a surface, and a smaller α is softer. The table gives the successes out of 96 per surface.
| Surface | HoST | HoST + residual |
|---|---|---|
| Rigid ground | 96 | 96 |
| Mattress, α = 64 | 91 | 95 |
| Mattress, α = 32 | 51 | 96 |
| Mattress, α = 16 | 51 | 96 |
| Mattress, α = 8 | 24 | 90 |
| Mattress, α = 4 | 6 | 43 |
| Mattress, α = 2 | 3 | 10 |
| Mattress, α = 1, the softest | 0 | 1 |
| Trampoline, α = 1 | 53 | 85 |
| Trampoline, α = 2 | 48 | 84 |
| All 960 trials | 423 (44.1 %) | 696 (72.5 %) |
Limitations
- All results are in simulation. The policy has not been run on a real robot.
- It needs the prone and supine policies of HoST, which the HoST authors released without a stated license.
elastra-download-assetsfetches them. - The surfaces are level and uniform.
License
MIT, like the Elastra code. The robot model and HoST keep their own licenses, listed in THIRD_PARTY.md of the code repository.
Citation
@misc{sun2026elastra,
title = {Elastra: A Simulation Framework for Elastic Bodies},
author = {Youran Sun and Chugang Yi and Xingyu Ren and Haizhao Yang},
year = {2026},
eprint = {2611.15112},
archivePrefix = {arXiv},
primaryClass = {cs.RO},
url = {https://arxiv.org/abs/2611.15112}
}
- Downloads last month
- 24