strands-robots 0.4.1
GR00T Whole-Body-Control for the Unitree G1, PPO/FastSAC RL stack
with deterministic eval, LeKiwi in sim, and hard hot-path correctness fixes
(RTC sim/real parity, no silent open-loop rollouts, persistent-policy perf).
416 commits since v0.4.0. All clips rendered headless in MuJoCo (MUJOCO_GL=egl)
against the exact source being tagged.
Highlights at a glance
1. Whole-Body Control
Non-VLA provider wrapping GR00T Whole-Body-Control (SONIC / decoupled-WBC) ONNX
controllers. Faithful 86-dim observation stacked over 6 steps, two ONNX sessions
(balance + walk) auto-selected by commanded speed, upstream PD-to-torque law.
from strands_robots import Robot
g1 = Robot("unitree_g1", mode="sim", backend="mujoco")
g1.run_policy(
policy="wbc", # GR00T SONIC whole-body controller
command={"vx": 0.5}, # forward 0.5 m/s
duration=6.0,
)
# forward walk: base +2.30 m, pelvis height 0.74 -> 0.75 m (upright, no fall)| vx | omega | result | |
|---|---|---|---|
| Forward walk | 0.5 m/s | 0.0 | +2.30 m, stays upright |
| Walk + yaw | 0.3 m/s | 0.4 rad/s | steers while balanced |
Weights: nepyope/GR00T-WholeBodyControl_g1 (NVIDIA Open Model License).
2. Reinforcement learning constructs
New strands_robots.training.rl stack. VecSimEnv runs N SimEnv as one
(N,D)-batched env over one reused thread pool. evaluate() is a deterministic
eval peer of train() - mean action, frozen normalizer, reports success_rate.
from strands_robots.training.rl import FastSacTrainer, VecSimEnv
env = VecSimEnv("so100", n_envs=8, task="reach")
trainer = FastSacTrainer(env)
trainer.train(iterations=80) # CPU: mean return -8.77 -> -5.50
stats = trainer.evaluate(episodes=10) # deterministic: elbow 0.225 vs target 0.200Also: SARM reward-model training + RA-BC production loop.
3. LeKiwi - now simulatable
from strands_robots import Robot
kiwi = Robot("lekiwi", mode="sim") # was: "No model found"
# auto-downloads Apache-2.0 Ekumen-OS/lekiwi MuJoCo description
# 6-DOF SO-ARM on 3-omniwheel base (9 actuators), front/wrist cameras4. Hot-path correctness (contract fixes - deploy-critical)
| Fix | Before | After |
|---|---|---|
| RTC sim/real parity | hardware loop ignored Real-Time Chunking contract | loop honours RTC; inference_delay forwarded to denoiser; chunk-seam re-anchored for relative-action policies. Async-RTC latency masking now default |
| No silent open-loop | state-key mismatch -> silent zero/open-loop rollout | loud error; routing-degradation telemetry (positional_fallback_used, generic_state_keys_used) in run_policy/eval_policy JSON |
| Episode-count contract | ambiguous | run_policy episode count + verify_dataset_episodes; reset() during recording flushes buffered episode |
| PersistentPolicy | reloaded heavy checkpoints per call | resident worker + cache controls + policy_resident_rss_mb telemetry |
| Clean errors | partial stub shadowed lerobot.policies; cached transient probe failures |
unknown policy types raise clean ImportError; probes no longer cache transient failures |
get_mass_matrix |
broke on MuJoCo mj_fullM signature change |
works across signatures; numpy scalars retained in state/action vectors |
5. Newton backend maturation
Scene-discovery + per-joint state parity with MuJoCo, domain randomization +
sensor-noise hooks, recording fix (camera frames captured even when policy skips images).
6. Security hardening
Output-path sandboxing across all three LLM-supplied filesystem sinks -
render(output_path=), run_policy(video=), start_cameras_recording -
centralized in simulation.safe_output: rejects .. traversal, backslash
separators, shell metacharacters, symlinked targets before any file opens.
Atomic writes; size caps.
7. Ergonomics / correctness
add_objectrejects unknown kwargs with a structured error (was: silent grey default).- Zero-config robot discovery from
robot_descriptionsin the registry. - Simulation render output is ASCII-only; unified "no world" guard contract.
Media (higher-quality MP4 originals)
| Clip | GIF | MP4 |
|---|---|---|
| G1 WBC walk | gif | mp4 |
| G1 WBC turn | gif | mp4 |
| LeKiwi drive | gif | mp4 |
| RL reach rollout | gif | mp4 |
Assets on branch release/0.4.1-visuals under release-assets/0.4.1/.
Full changelog: git log v0.4.0..v0.4.1 once tagged, or compare/v0.4.0...main.




