Plenty of MuJoCo projects don’t use a framework. They load an MJCF model, run their own loop and apply their own controls. This page shows how those projects will come to Ballot, so you can see how small the change is.

The idea: wrap what you already have

Your app already knows how to build the scene, reset it and advance one control step. Ballot will ask you to hand over those functions. You don’t restructure your code, and your local loop keeps working.
ballot_world.py
Ballot drives these functions from the session. It doesn’t add a second loop or step the physics behind your back.

Controls need a clear entry point

Ballot has to know where pilots’ commands go. For an arm, that’s a function that moves it toward a target. For a rover, a walker, a humanoid or a drone, it’s the controller that turns a velocity or flight command into motion, such as a drive controller or a trained walking policy. A robot driven only by raw joint torques, with nothing that accepts a command, isn’t automatically pilotable. See Upload a robot for the controller interface.

Robots

Any robot type can come from a MuJoCo app: arms, rovers, quadrupeds, humanoids and drones. Models with actuators already defined, such as the robots in MuJoCo Menagerie, are a good starting point. A URDF on its own isn’t enough: MuJoCo imports it without actuators, so there’s nothing to control yet.

Tasks

A recorded task needs your reset and a rule for when an attempt succeeds or ends. Free play needs neither.

Join the waitlist

Tell us about your MuJoCo app. Real projects decide what we support first.