Skip to main content
The LIBERO example constructs the simulator, publishes its camera frames, executes returned chunks, and reports the executed actions. Reactor runs inference; LIBERO runs the Panda controller and scores the task. Complete client setup for the public client environment and an API key. Use a separate Python 3.10 environment for simulation. The frozen lockfile records the tested Python SDK, robosuite 1.4.0, and NumPy 1.26.4; it constrains PyTorch below 2.6 for LIBERO’s saved initial states.

Install LIBERO

From the reactor-cookbook repository root:
Pre-seeding the config avoids LIBERO’s interactive first-import prompt. The package marker makes the source checkout discoverable by its installer. The benchmark assets and initial states are part of the pinned LIBERO source. This rollout does not need a training-dataset download. Your host must support MuJoCo offscreen rendering; use LIBERO’s installation guidance for platform prerequisites.

Check wiring and run one episode

Use the installed interpreter directly after the editable LIBERO install, so another environment sync does not remove the extra package:
check_wiring.py runs a local simulator smoke test with synthetic actions and no Reactor session. The live command uses the benchmark’s language instruction. libero_10 is LIBERO-Long; change --task-id and --init-state-id to evaluate other tasks and starts. Keep --exec-steps 16 and --seed-skip 4: the first chunk executes 12 rows, then each later chunk executes 16. A smaller horizon can stall the server’s next commit. --seed seeds the environment, not model sampling; the reference bridge sends reset {}. The process logs episode success and execution diagnostics and writes rollout.mp4. A time cap can end a run before the task succeeds. Inspect the score and recording, not just the connection status. Simulation pauses while waiting for inference, so success does not measure uninterrupted physical-time behavior. Default recording includes these waits.

Timing and client limits

The bridge publishes frames from each simulator step and waits --echo-delay 0.1 seconds before sending the completed echo. This reduces late-frame risk without guaranteeing frame/action pairing. The Python SDK manages transport keepalive. The bridge rounds echoes to five decimal places; identical rounded echoes can stop progress. Restart with a fresh session after an uncertain timeout; see troubleshooting.