HAMPER β G1 basket pickup policy
Pretrained weights for HAMPER: a Unitree G1 humanoid that walks up to a basket on the floor, threads its forearm through the handle, lifts it, and carries it away. Trained with PPO (rsl_rl) in Isaac Lab through a staged curriculum, on a single RTX A6000.
These weights only work with the HAMPER repository at a matching commit.
The checkpoint is half of the controller: the other half is the state machine in
basket_pickup/commander.py, which sequences approach β squat β thread β lift β
carry and presents the policy with the same commands and stage flag it trained
under. The observation and action layouts are frozen in interface.py; running
the network under any other layout produces garbage rather than an error.
Pinned stack: Isaac Sim 5.1.0, Isaac Lab v2.3.2, rsl_rl 3.1.2, torch 2.7.0+cu128
(see configs/versions.lock in the repository).
Files
| File | What it is | Trained iterations |
|---|---|---|
chain.pt |
The final policy β the full task | 9,496 total (2,000 on the chain stage) |
stage_thread.pt |
Parent of chain.pt: walk + carry + lift + thread |
7,497 |
stage_lift.pt |
Parent of stage_thread.pt: walk + carry + lift |
5,498 |
stage_carry.pt |
Parent of stage_lift.pt: walk + carry |
3,499 |
generalist.pt |
Root of the chain: squat-capable walking with a commanded hand target; no basket | 2,000 |
banks/standing_states.pt (+ .json) |
5,000 harvested standing states used to initialize episodes | β |
banks/squat_states.pt (+ .json) |
5,000 harvested squatting states used to initialize the lift and thread stages | β |
hero_video.mp4 |
60 s demo: full chain, threading close-up, robustness, failure case, ablation | β |
Each checkpoint is an rsl_rl OnPolicyRunner save (actor, critic, optimizer
state). The banks are required for evaluating or fine-tuning any stage other
than plain walking: episodes of the carry, lift, thread and chain stages start
from bank states.
Results (chain.pt with the repository's commander)
Full task: 98.4 Β± 0.5 % success over 500 episodes under each of 3 evaluation seeds. Zero falls, zero baskets knocked away, no drops at the nominal configuration.
| Walk | Carry | Lift | Thread | Full chain | |
|---|---|---|---|---|---|
| Success | 98.7 % | 95.9 % | 98.9 % | 82.2 % | 98.4 % |
Robustness (one policy, no retraining): success is flat across handle openings of 15β35 cm (trained on 25 cm) and basket masses of 0.3β1.5 kg (trained on 0.4β1.0 kg). Basket-pose observation noise is the limiting input: above 97 % up to 5 cm of position noise, 23.5 % at 10 cm (time-outs, not falls). On a spawn distribution the state machine was never tuned on (basket 1β3 m away, Β±90Β°, 15 s episodes) the chain succeeds in 98.6 % of 500 episodes.
Things the numbers do not show: the 3 seeds are evaluation seeds of one trained policy (retraining variance was not measured); the evaluation environment turns off Isaac Lab's proprioceptive noise and pushes (under full training conditions the chain scores 100 % / 500 episodes); the state machine's constants were tuned on the training spawn distribution. The repository README has the full discussion, sweep plots, and ablations.
How to run
Set up the repository as described in its README (Isaac Sim, Isaac Lab v2.3.2,
uv pip install -e source/basket_pickup), then from the repository root:
hf download WillXH/HAMPER --local-dir weights
cp weights/banks/* banks/ # the stage evaluations need the state banks
# full task, 200 episodes, records a video next to the checkpoint
python scripts/eval_stage.py --checkpoint weights/chain.pt --stage D_CHAIN
# individual stages
python scripts/eval_stage.py --checkpoint weights/chain.pt --stage C_THREAD # or B_LIFT, A_CARRY, LOCO
To fine-tune from a stage checkpoint, rsl_rl expects it inside a run directory
under logs/rsl_rl/basket_pickup/:
mkdir -p logs/rsl_rl/basket_pickup/hf_stage_thread
cp weights/stage_thread.pt logs/rsl_rl/basket_pickup/hf_stage_thread/model_7496.pt
python scripts/rsl_rl/train.py --task Basket-Pickup-v0 --headless --num_envs 4096 \
--resume --load_run hf_stage_thread --checkpoint model_7496.pt --max_iterations 2000 --run_name my_chain
License
Weights: MIT. The G1 robot description and Isaac Lab are BSD-3-Clause (NVIDIA / Unitree); rsl_rl is BSD-3-Clause.