If your environment is built with 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:
Run 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 as TwoArmLift 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. If use_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.

Time limits

Horizons copied from benchmarks are sized for scripted runs, and they can end a person’s attempt while they’re still working. Consider a version with a longer horizon for piloting, and test it in preview.