Instructions to use openhorizon-labs/asimov1-getup-safefall with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Asimov
How to use openhorizon-labs/asimov1-getup-safefall with Asimov:
# Run the policy in a browser simulation of the Asimov 1 humanoid (no GPU needed) git clone https://github.com/menloresearch/humanoid-policy-viewer cd humanoid-policy-viewer npm install npm run hf openhorizon-labs/asimov1-getup-safefall
- Notebooks
- Google Colab
- Kaggle
Asimov 1 get-up and safe-fall (OpenHorizon Labs)
Two proprioceptive policies for the Menlo Asimov 1 humanoid:
- get-up: from any fallen posture (back, front, side, sitting, kneeling)
back to the standing pose of the
isaac_asimovwalking policy, ready to hand over to it. - safe-fall: once a fall is detected (tilt or angular speed), shapes the fall so the head, torso, pelvis and knees take as little impact as possible.
Trained with PPO in mjlab (MuJoCo Warp)
on Menlo's asimov-1/sim-model MJCF. Source and training setup:
https://github.com/openhorizon-labs/asimov-v1-policies
Simulation only. Neither policy has run on a robot yet.
Walking with Menlo's stock walking policy, pushed over, safe-fall, get-up, walking again
(CPU MuJoCo, --mode walk):
More in videos/: chain_push_safefall_getup.mp4, getup.mp4, safefall.mp4.
Files
| File | What |
|---|---|
policies/getup.onnx, policies/safefall.onnx |
Input obs [1, 375], output actions [1, 23]. Observation normalization is inside the graph. |
policies/*_policy_spec.json |
Everything needed to run them: observation terms and scales, history layout, joint orders, default pose, action scale, PD gains, motor torque-speed model, fall-trigger settings. |
run_policy_mujoco.py |
Standalone runner: needs only numpy, mujoco and onnxruntime, plus the Asimov 1 MJCF. Modes getup, safefall, chain (push -> safe-fall -> get-up) and walk (with Menlo's walking policy); --view or --video out.mp4. |
videos/ |
Recorded with --video. |
Run it
pip install numpy mujoco onnxruntime
hf download openhorizon-labs/asimov1-getup-safefall --local-dir asimov1-getup-safefall && cd asimov1-getup-safefall
# Menlo's robot repo, sim model only (no CAD files)
GIT_LFS_SKIP_SMUDGE=1 git clone --depth 1 --filter=blob:none --sparse https://github.com/menloresearch/asimov-1
git -C asimov-1 sparse-checkout set sim-model
python run_policy_mujoco.py --mjcf asimov-1/sim-model/xmls/asimov_1.xml \
--onnx policies/getup.onnx --spec policies/getup_policy_spec.json --mode getup --view
python run_policy_mujoco.py --mjcf asimov-1/sim-model/xmls/asimov_1.xml \
--onnx policies/safefall.onnx --spec policies/safefall_policy_spec.json --mode safefall --view
Push -> safe-fall -> get-up, and the same while walking with Menlo's walking policy
(policy.onnx from Menlo/asimov1-locomotion-0818):
python run_policy_mujoco.py --mjcf asimov-1/sim-model/xmls/asimov_1.xml --mode chain \
--onnx policies/safefall.onnx --spec policies/safefall_policy_spec.json \
--getup-onnx policies/getup.onnx --getup-spec policies/getup_policy_spec.json --view
hf download Menlo/asimov1-locomotion-0818 policy.onnx --local-dir menlo-walk
python run_policy_mujoco.py --mjcf asimov-1/sim-model/xmls/asimov_1.xml --mode walk \
--walk-onnx menlo-walk/policy.onnx \
--onnx policies/safefall.onnx --spec policies/safefall_policy_spec.json \
--getup-onnx policies/getup.onnx --getup-spec policies/getup_policy_spec.json --view
--view opens the MuJoCo viewer (on macOS run mjpython instead of python); leave
it out to print success rates over --episodes runs, or pass --video out.mp4. These policies do not use the 78-input walking interface,
so cyclotron.sh --view cannot load them.
Interface
Same conventions as the isaac_asimov walking policy:
- 50 Hz. Action: 23 joint position offsets in
ASIMOV_1_JOINT_NAMESorder;q_target = default_joint_pos + 0.25 * action. - Observation per step: gyro x0.25, projected gravity, joint position minus default and joint velocity x0.1 (both in the walking policy's joint order), last action. The last 5 steps are stacked (term by term, oldest first).
- Motors:
isaac_asimovPD gains and armature. Torque is capped at the rated torque (Menlo's firmware allows about 120% of rated), and available torque falls linearly to zero at the joint velocity limit. - Safe-fall acts only after the trigger fires (tilt > 30 deg or angular speed
2 rad/s); before that it holds the default pose.
Results
Simulation, full domain randomization (friction, mass, centre of mass,
encoder bias, joint friction and damping, armature, PD gains, torque limits,
actuator delay), on flat and bumpy ground (2-5 cm). 2048 episodes per test,
measured 2026-10-01. Training code: commit 695ceba (the get-up policy's last
1500 iterations used --env.rewards.speed-excess.weight -45).
| Metric | Target | Result |
|---|---|---|
| Get-up success | >= 95% | 99.8% |
| Get-up median time to stand | <= 6 s | 1.70 s (p90 2.92 s) |
| Get-up success after a safe-fall | >= 98% | 99.7% |
| Safe-fall peak impact on head, torso, pelvis, knees | 40% below a passive fall | 529 N vs 9937 N (94.7% lower) |
| Peak torque | <= rated | 1.00 x rated |
| Second engine (CPU MuJoCo): get-up success | drop <= 10 pp | 100% |
| Second engine: safe-fall impact reduction | >= 40% | 92.3% |
In CPU MuJoCo with the standalone runner: push -> safe-fall -> get-up stands again in 50/50 episodes (median 2.4 s after the push). Walking at 0.5 m/s with Menlo's walking policy, pushed at 1.2-2.0 m/s: walking again at the end in 30/30 (24 pushes caused a fall; the walking policy caught the other 6), and no false fall triggers while walking.
Joint speed. With the torque-speed curve above, a motor cannot drive a joint past its velocity limit. Joints still go over it when gravity or an impact pushes them (back-driving): peak 1.59x (get-up) and 1.45x (safe-fall) of the limit (p95), for at most 75 ms and 45 ms (p95; worst case 135 ms). A passive fall reaches 3.0x. Menlo has said there is no firmware speed clip and that the drivers' over-voltage protection raises a firmware error, so back-driving like this could trip a fault on the robot; whether it does is for Menlo to confirm.
Before trying this on a robot
- Both policies need the robot to accept joint commands during and after a fall. The first Asimov 1 firmware release enters DAMP and latches a fault when it detects a fall, so this is not possible yet.
- They expect 50 Hz joint and IMU data end to end.
- Suggested protocol: gantry or harness, reduced torque limits, someone on the e-stop, soft mats, easiest posture first (on its back), log everything.
Questions and discussion: https://forum.menlo.ai/t/questions-on-running-custom-get-up-safe-fall-policies-on-asimov-1/69
- Downloads last month
- 10