suite.make(...), or with your own task class on top of robosuite, Ballot can usually run it as it is. You add a small ballot.toml; your code stays the same.
What Ballot reads for you
You don’t copy joint lists, action sizes or scene descriptions into Ballot’s files. If Ballot can’t tell something, such as where the tool point is on an unusual gripper, preparation asks you instead of guessing.
Example project
my-project
pyproject.toml
uv.lock
my_project
__init__.py
env.py
assets
ballot.toml
.ballotignore
ballot sim init --entry my_project.env:make_env writes the ballot.toml above for you. See the ballot.toml reference for every field.
Your own task classes
Custom environments work the same way, as long as your function can import and build them. Keep your task’s success check, reset and time limit in the environment where robosuite expects them. Ballot reads them from there.Swapping robots
robosuite lets you choose a robot by name, so trying another arm is a one-word change:ballot sim prepare again. Ballot rechecks the controls, the reset and the visuals for the new robot. Your world and task code don’t change, but the episodes will: a different robot moves differently, so its episodes are new data.
Only robots listed for your runtime profile can be piloted. We add robots one at a time after checking that they’re comfortable and reliable to control. Run ballot sim profiles list to see the current list.
Two-arm environments
robosuite’s two-arm environments, such asTwoArmLift and TwoArmHandover, hold two robots. On Ballot each robot can be a seat, so two pilots each control one arm and pass objects between them. Team play rolls out after the first release; until then, one pilot controls a single-arm environment.
Wrappers
Ballot keeps your wrapper chain and steps your environment through it, never around it. Wrappers that change actions, observations or resets need support in the integration. If one of yours isn’t supported yet, preparation says so instead of bypassing it.Cameras
Ballot never turns your cameras off. Ifuse_camera_obs is on, sessions need a GPU machine. If your task doesn’t need camera observations, a version without them runs on cheaper CPU machines. That’s your call to make.