huru g1_walk_mjlab in a 34-policy G1 benchmark - the port stands alone, falls under punches; and the runtime link is 404
Hi, thanks for huru — and for putting the whole contract into the ONNX metadata. joint_names, joint_stiffness, joint_damping, default_joint_pos, action_scale and observation_names in metadata_props made this the easiest integration in the field: my adapter is a transcription of the file, not a reading of a deploy script. I wish every export did this.
I benchmarked 34 open-source Unitree G1 walking policies behind one C++ interface, on one task: 60 s, 12 waypoints, 50 Hz control over a 2 ms step, a crane that releases after a 3 s shared stance, and a punch on every segment (random joint, random direction, 0.08 s, up to 600 N). The policy owns the 15 leg and waist joints; the 14 arm joints random-walk under the harness and cannot be borrowed for balance. Everything runs in both MuJoCo and PhysX.
huru (g1_walk_mjlab.onnx) scored 0 % / 0 %, mean survival 7.8 s MuJoCo / 8.1 s PhysX, 149 cm / 59° error.
What I run, straight from the metadata: 99-dim observation in the order base_lin_vel, base_ang_vel, projected_gravity, joint_pos - default, joint_vel, actions, twist, 29 actions with the per-joint action_scale, the published stiffness and damping. The harness applies the first 15 targets and overrides the 14 arm targets with its own. Command limits are vx ±0.9, vy ±0.85, yaw rate ±0.5.
The reason I do not think the port is broken: in a standalone MuJoCo rollout with the arms held at the default pose, no punches and a zero command, it stands, and it tracks 0.3 m/s. What kills it in the benchmark is the combination of arms it does not control and a punch every segment.
Three questions:
- Base linear velocity. The observation wants it, and the real G1 does not publish it, so this row is marked in my table as reading it from the simulator. What supplies it in huru on hardware — an estimator, or is this checkpoint sim-only so far?
- Was the policy trained with any arm perturbation, or does it expect to own the arms? If it was never asked to balance with the arms taken away, this result says nothing about it and I will say so in the table.
- The model card links https://github.com/aur3l14no/huru as the runtime, and that URL is 404 at the moment. Has it moved? I would like NOTICE to point at the right place.
A correction lets me fix policies/huru/policy.cpp and re-run both engines. PRs are welcome too.
https://github.com/rhoyn/teleop-walking-benchmark
https://rhoyn.com/stable-walk