Metadata-Version: 2.1
Name: robovast
Version: 2.2.0
Summary: Variation Automation and Scalable Testing for Robotic Systems: vary a scenario, run the sweep as recorded simulation runs on Docker or Kubernetes, query the results.
Home-page: https://cps-test-lab.github.io/robovast/
License: Apache-2.0
Author: Frederik Pasch
Author-email: fred-labs@mailbox.org
Requires-Python: >=3.12,<3.14
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Provides-Extra: analysis
Provides-Extra: docs
Provides-Extra: fair
Provides-Extra: nav
Provides-Extra: notebooks
Provides-Extra: optuna
Provides-Extra: qd
Provides-Extra: roqsim
Provides-Extra: sftp
Provides-Extra: test
Requires-Dist: click (>=8.1,<9.0)
Requires-Dist: cmaes (>=0.11,<0.12) ; extra == "optuna" or extra == "test"
Requires-Dist: fastapi (>=0.139,<1.0)
Requires-Dist: fastmcp (==3.4.4)
Requires-Dist: ipykernel (>=7.1.0,<8.0.0) ; extra == "notebooks" or extra == "test"
Requires-Dist: lxml-html-clean (>=0.1,<0.2) ; extra == "notebooks" or extra == "test"
Requires-Dist: matplotlib (>=3.10,<4.0) ; extra == "analysis"
Requires-Dist: nbclient (>=0.10,<1.0) ; extra == "notebooks" or extra == "test"
Requires-Dist: nbconvert (>=7.16,<8.0) ; extra == "notebooks" or extra == "test"
Requires-Dist: nbformat (>=5.9,<6.0) ; extra == "notebooks" or extra == "test"
Requires-Dist: numpy (>=1.26,<3)
Requires-Dist: optuna (>=4.0,<5.0) ; extra == "optuna" or extra == "test"
Requires-Dist: pandas (>=2.2,<3.0)
Requires-Dist: paramiko (>=4.0,<5.0) ; extra == "sftp"
Requires-Dist: psutil (>=7.0,<8.0)
Requires-Dist: psycopg[binary] (>=3.2,<4.0)
Requires-Dist: pydantic (>=2.12,<3.0)
Requires-Dist: pyld (>=2.0,<3.0) ; extra == "fair" or extra == "test"
Requires-Dist: pytest (>=8.0,<9.0) ; extra == "test"
Requires-Dist: python-dotenv (>=1.0,<2.0)
Requires-Dist: pyyaml (>=6.0,<7.0)
Requires-Dist: rdflib (>=7.0,<8.0) ; extra == "fair" or extra == "test"
Requires-Dist: requests (>=2.32,<3.0)
Requires-Dist: ribs (>=0.7,<0.8) ; extra == "qd" or extra == "test"
Requires-Dist: robovast-client (==2.2.0)
Requires-Dist: robovast-nav (==2.2.0) ; extra == "nav"
Requires-Dist: robovast-sim-roqsim (==2.2.0) ; extra == "roqsim"
Requires-Dist: ruamel.yaml (>=0.18,<0.19)
Requires-Dist: scenario-execution (>=1.3.0,<2.0.0)
Requires-Dist: scipy (>=1.16,<2.0) ; extra == "analysis"
Requires-Dist: shapely (>=2.0,<3.0) ; extra == "qd" or extra == "test"
Requires-Dist: sphinx (>=7.0.0,<8.0.0) ; extra == "docs"
Requires-Dist: sphinx-click (>=5.0.0,<6.0.0) ; extra == "docs"
Requires-Dist: sphinx-rtd-theme (>=3.0.2,<4.0.0) ; extra == "docs"
Requires-Dist: sphinxcontrib-spelling (>=8.0.0,<9.0.0) ; extra == "docs"
Requires-Dist: uvicorn (>=0.35,<1.0)
Project-URL: Documentation, https://cps-test-lab.github.io/robovast/
Project-URL: Repository, https://github.com/cps-test-lab/robovast
Description-Content-Type: text/markdown

# RoboVAST

**Variation Automation and Scalable Testing for Robotic Systems.**

Robot software that passes one demo has not been tested. RoboVAST takes your robotics stack —
a Nav2 navigation setup, a manipulation pipeline, whatever drives your robot — and runs it
through hundreds of simulated runs that differ in the ways that matter: floorplans, start and
goal poses, obstacles, sensor noise, the parameters of the stack itself. Every run is recorded
with its provenance, every campaign lands in a queryable index, and the results come back as
tables, plots and a web view of each run rather than a directory of bags.

![Framework Overview](https://raw.githubusercontent.com/cps-test-lab/robovast/main/docs/images/overview.png)

## What you get

- **Say what to vary, not how.** A campaign is one file: which scenario, which factors, how
  many levels, how many repetitions. RoboVAST does the expansion, the scheduling and the
  bookkeeping.
- **One campaign, any cluster.** The same file runs as jobs on a one-node cluster on your
  laptop or across a Kubernetes cluster. Nothing about the campaign changes; only where it
  runs and how fast it finishes.
- **Reproducible by construction.** Pinned container images, recorded seeds and
  configuration, a run's full provenance beside its data. A result can be traced, and a
  campaign re-run.
- **A simulator by name.** `backend: roqsim` gives you [roqsim](https://github.com/cps-test-lab/roqsim),
  a MuJoCo simulator for mobile robots, arms and mobile manipulators. Another simulator is
  another package.
- **Results you can ask questions of.** Campaign data goes into a database; explore it in the
  web UI, in a notebook, or through an AI agent that can author, launch and analyse campaigns
  through the same interface you use.
- **Built on [scenario-execution](https://cps-test-lab.github.io/scenario-execution/)** for
  the single run and the [Floorplan-DSL](https://secorolab.github.io/FloorPlan-DSL/) for
  generated indoor environments. Mobile robot navigation is the reference use case, with a
  ready-made set of environments and scenarios to start from.

## Install

```bash
pip install robovast-client              # drive a RoboVAST service someone runs for you
pip install "robovast[nav,roqsim]"       # the core: configuration, results, the MCP server
pip install robovast-cluster             # deploy and run the service on a Kubernetes cluster
```

Then `vast cluster setup` deploys the service — into minikube on your own machine, or a
cluster for a team — and `vast workspace run` launches a campaign.

Documentation, from the quickstart to writing your own variation type or simulator backend:
[cps-test-lab.github.io/robovast](https://cps-test-lab.github.io/robovast/).

## Licence

Apache-2.0.

