Skip to main content

robotbase — describe your robot, world, and scenarios in YAML; compile to a running headless ROS 2 + Gazebo sim; get pass/fail evidence.

Declarative robotics. Describe a robot, its sensors, its world, and the behaviours you want to verify in YAML — Robotbase compiles that into a running, headless ROS 2 + Gazebo simulation and gives you machine-readable evidence. Local-first and open-core: no cloud, no accounts in the core.

What it is

Robotbase is the layer over ROS 2, not a replacement for it — think Terraform over cloud APIs. What your YAML compiles down to is a real, standard ROS 2 graph (nodes, topics, TF, ros2_control) running on top of Gazebo; Robotbase just means you stop hand-writing the URDF, launch files, and bridges. Because the runtime is genuine ROS 2, a passing scenario means something, and you can drop in your own ROS 2 code — or, later, a real robot — underneath the same specs.

It's all YAML: robot.yaml (the robot + its sensors), world.yaml (the world), and one or more scenario files under simulation/scenarios/*.yaml. A scenario is the test — its assertions: block declares what "working" means:

# simulation/scenarios/drive-forward.yaml
assertions:
  - {type: robot_moved_minimum_distance, minimum_distance_metres: 1.0}
  - {type: required_topic_messages, topic: /scan, minimum_count: 5}

Robotbase compiles all of it into a complete ROS 2 + Gazebo project (URDF, world SDF, launch, ROS↔gz bridges, control config) and runs it headless in Docker. You never hand-write the XML — the way you never click through a cloud console with Terraform.

How it works

edit robot.yaml / world.yaml / a scenario  →  robotbase up  →  robotbase test
                       ▲                                              │
                       └────────── read the structured result / episode ──────────┘

Prerequisites: Linux with Docker and Python 3.12 (Python 3.11 and below can't install it). On Windows or macOS, use WSL2 Ubuntu 24.04 + Docker Desktop — that's the supported path. The runtime is ROS 2 Jazzy + Gazebo Harmonic in Docker.

pip install robotbase-kit

robotbase create my-bot        # scaffold a project (differential-drive by default)
cd my-bot
robotbase up                   # start the container + build (first run builds the image)
robotbase test drive-forward   # run a scenario; prints a structured pass/fail result

Every run is an objective result (metrics + assertions) plus a recorded MCAP episode (Foxglove/Rerun-openable). Every action is a verb with a structured result, so a human and a coding agent drive it the same way.

Build your own robot and world

The scaffold is only a starting point — the robot, its sensors, the world, and the tests are all yours to edit. Author declaratively and let the tool keep you honest:

robotbase schema      # the full robot.yaml / world.yaml / scenario authoring reference
# …edit robot.yaml and world.yaml…
robotbase validate    # static physics checks (mass, inertia, joint limits) before you launch
robotbase explain     # which links / joints / topics each line of your spec produced
robotbase describe    # structured ground truth for the robot, world, and scenarios
robotbase up          # recompile the specs, (re)build, and run

Define what "working" means as scenarios — each is a simulation/scenarios/*.yaml whose assertions: block is the test:

robotbase scenario add reach-the-shelf
robotbase test reach-the-shelf

Bring your own policy

Instead of a ROS controller, you can drive a scenario with a plain Python policy — ideal for evaluating a trained one. Write a Policy with act(obs) -> action (robotbase policy new scaffolds it), point a scenario at it with {type: run_policy, module: policy}, and get the same objective evidence. robotbase describe reports the exact observation/action keys for your robot.

Statistical evaluation

robotbase eval <scenario> --trials N runs a scenario over N randomized trials and reports a success-rate with a 95% confidence interval (Wilson score) plus per-metric distributions — persisted as a shareable report.json + report.md. It evaluates a ROS controller or a brought policy identically. When a scenario isn't randomized it says so instead of printing a meaningless interval.

Studio (a local control panel)

pip install robotbase-kit[studio] then robotbase studio opens a localhost web app: see your robot, world, and scenarios; run a scenario or an eval and watch it live; open the 3D in Foxglove; and read the structured results and eval reports — all a thin client over the same CLI/runtime.

Start from a template or an existing URDF

robotbase templates                                # list the built-in templates
robotbase create my-arm --template arm             # differential-drive | camera-bot | arm | drone
robotbase create my-bot --from-urdf my_robot.urdf  # import an existing URDF verbatim

Each create gives you a minimal, working robot that passes one smoke-test scenario — a starting point to build on. Want worked, unsolved challenges to practise on (or to test a coding agent)? See examples/challenges/.

The knowledge layer (built for agents)

Robotbase is meant to be operated by a coding agent, so the tool teaches the agent how to use it — there are no external docs to keep in sync.

  • One surface, CLI + MCP. The full robotbase CLI is mirrored by a 19-tool MCP server (describe, explain, validate, build, test, diagnose, episode …). A human types the commands; an agent calls the tools — same verbs, same structured results.
  • A built-in authoring reference. robotbase schema (and the authoring_schema MCP tool) returns the full robot.yaml / world.yaml / scenario format — every field, the sensor/archetype vocabulary, the assertion types, and the common mistakes — as prose or JSON Schema. It's generated from the code, so it can't drift from what the compiler actually accepts.
  • Ground truth, not files to parse. describe / explain / validate and the episode query verbs hand back structured facts about the compiled robot, world, topics, and recorded runs.
  • Every project is agent-ready. robotbase create drops an AGENTS.md (project-specific instructions) and a .mcp.json into the new project.

Setup for the MCP server: none beyond pip install robotbase-kit — it ships in the core install. An MCP-aware agent (e.g. Claude Code) opened in a project picks up the bundled .mcp.json automatically. To run it by hand:

ROBOTBASE_PROJECT_DIR=. python -m robotbase.mcp_server   # stdio; ROBOTBASE_GUI=foxglove to watch runs

Why it exists

Standing up ROS 2 + Gazebo by hand is a tax paid in opaque C++ tracebacks and terminal scraping — and it's especially brutal for a coding agent. Robotbase removes it and replaces it with what agents are good at:

  • Declarative, not fiddly. A few lines of YAML; the compiler owns every sim gotcha (collision lumping, bridge wiring, inertia, control config) and, when the spec is wrong, returns an error that names the field instead of a crash.
  • Structured state, not log-scraping. describe / explain / validate and the episode query verbs hand back ground truth, not console output to parse.
  • Evidence, not vibes. A scenario is an objective pass/fail; you can't claim a robot works and be believed — you make the assertions pass. That closes the gap the project exists to close: a coding agent can write robot code; on its own it can't tell whether the robot actually works.

Benchmark data — coding agents with vs. without Robotbase — coming soon.

Status

Alpha, proven end-to-end. The full local loop works — create → author the specs → build → run → read the evidence — across four robot templates (differential-drive, camera-bot, arm, drone), a growing scenario/assertion/metric vocabulary, MCAP episode recording + query, auto-diagnosis, a domain-randomized eval layer, bring-your-own-policy evaluation (drive a scenario with a Python policy via run_policy), and a proven sim-agnostic runner (Gazebo + an in-process MuJoCo backend). Local-first, MIT-licensed.

License

MIT — see LICENSE.

Metadata

Release files for robotbase-kit 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for robotbase-kit 0.3.0
File Size Uploaded
robotbase_kit-0.3.0.tar.gz 418.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for robotbase-kit 0.3.0
File Interpreter ABI Platform
robotbase_kit-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 826.5 kB

Release files / robotbase_kit-0.3.0.tar.gz

Download URL robotbase_kit-0.3.0.tar.gz
Size 418.7 kB
Tags Source
SHA-256 checksum
How to use checksums
97a7a187664c3cf29784783ce0fa533b8d475e3c3904970b9aac5b22676384c7
BLAKE2b-256 checksum
How to use checksums
025352a6f13e9aa48b32eabcd8178e332a30a943819e0169a4c6b2f640366266
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / robotbase_kit-0.3.0-py3-none-any.whl

Download URL robotbase_kit-0.3.0-py3-none-any.whl
Size 407.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
863f566230790379140c5035602ae8ad1d5a66125b12d9177416e122dba57a3e
BLAKE2b-256 checksum
How to use checksums
f6d1d351e2d37afaf5183bc06f39ff9b1bb2a3acab41bffd3c6adfe91c8db866
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release history Release notifications | RSS feed

0.3.1

2 release files

This release

0.3.0 This release

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page