BotManifold
Studio

Policies in Studio

Play an example policy, upload your own ONNX file, drive by hand, and use policies trained in mjlab.

Studio runs policies in the browser with ONNX Runtime Web, next to the MuJoCo physics. Nothing is sent to a server while the policy runs.

Play a policy

  1. Add a robot to the scene (for example the Unitree Go2).
  2. Click + policy in the play bar and pick an example policy for that robot, or upload an .onnx file.
  3. Press play.

The example policies for the Go2 are a scripted diagonal trot and Velocity Flat (RL), a reinforcement-learning policy trained in mjlab. Velocity Flat holds a stable trot at forward speeds of 0 to 2 m/s in the browser simulator; its default command is 1 m/s forward.

Drive mode

For a policy that takes a velocity command (such as Velocity Flat), a wasd toggle appears in the play bar. Turn it on to send forward, backward, turn and strafe commands from the keyboard while the policy keeps the robot balanced. Reset returns the robot to its initial pose and stop ends the run.

Upload your own policy

An uploaded ONNX file comes with no settings of its own, so Studio has to guess how it reads observations and writes actions. At the first step it checks the file's input and output sizes against the robot and reports a mismatch. For a locomotion policy that expects a specific observation layout, joint order, gains and action scale, the policy needs a settings file next to it (see the next section); without one Studio cannot reproduce how it was trained.

Policies trained in mjlab

A checkpoint trained in mjlab can be published to Studio. The training script writes the ONNX file together with a <name>.policy.json that records how the policy was trained, and Studio reads both:

  • the observation layout, the joint order, the PD gains, the action scale and the default pose;
  • the actuator model (position actuators with the armature and effort limits used in training).

Before running, Studio checks that the policy's joint order is the loaded robot's actuator order and refuses to run on a mismatch, because a different order would send each action to the wrong joint.

Studio supports one observation layout: base angular velocity, projected gravity, velocity command, joint positions relative to the default pose, joint velocities and the previous action, for a 12-joint robot. A policy that uses other observation terms, observation scaling or clipping is not published, and the training script prints the reason.

Availability

Publishing writes to a BotManifold storage bucket, so it is set up by the BotManifold team for now. If you train in mjlab and want to see a checkpoint in Studio, get in touch.

What to expect from browser physics

Studio uses MuJoCo compiled to WebAssembly. Policies trained in other simulators can behave differently here because contact, actuator and timing details differ. The settings above (the timestep, the position-actuator model, the joint order) exist to remove the largest sources of mismatch for mjlab policies; policies trained elsewhere may still need checking in Verify.

On this page