Drivora is a research-oriented infrastructure for search-based testing of Autonomous Driving Systems (ADSs).
It supports:
- Diverse state-of-the-art ADS architectures (end-to-end, vision-language, module-based, containerized)
- A variety of advanced ADS testing techniques (Random, AVFuzzer, BehAVExplor, SAMOTA, and more)
- Distributed and parallel execution for large-scale testing
- Multi-agent and multi-vehicle testing settings
Drivora enables unified, extensible, and automated testing of ADS safety and reliability across complex driving scenarios.
If you find Drivora useful, please consider giving it a star on GitHub!
- Fuzzing/Testing — Built-in scenario fuzzing and adversarial scenario generation
- ADS-Agnostic Integration — Isolated venv-based interfaces for any ADS; Docker container support for complex agents (e.g., Pylot)
- Distributed & Parallel Execution — Scale across multiple CARLA containers
- Multi-Agent Testing — Multi-vehicle evaluation with coordinated behaviors
- 8 Runtime Safety Criteria — Collision, stuck, offroad, overspeed, red light, stop sign, wrong lane, route completion
- Agent Internal Visualization — Controllable saving of each agent's debug output
- Python >= 3.8
- uv — fast Python package manager (install:
curl -LsSf https://astral.sh/uv/install.sh | sh) - CARLA >= 0.9.12
- Docker with NVIDIA Container Toolkit
- CUDA 11.x or 12.x
- Git LFS
# 1. Install uv (if not already installed)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 2. Clone and install everything
git clone https://github.com/MingfeiCheng/Drivora.git
cd Drivora
bash install_all.shTo install a specific agent or tester individually:
# Install one ADS agent
bash install_ads_eval.sh roach 0.9.15 .venvs/roach
# Install one tester (fuzzer)
bash install_tester.sh random 0.9.15 .venvs/random
# Skip large checkpoint downloads (install deps only)
SKIP_DOWNLOAD=1 bash install_ads_eval.sh roach 0.9.15 .venvs/roachSee docs/installation.md for detailed instructions and troubleshooting.
# Quick demo (random fuzzer + Roach agent)
bash scripts/demo_roach.sh
# Run a specific fuzzer on a specific agent
bash scripts/avfuzzer/roach.sh
bash scripts/samota/interfuser.sh
bash scripts/behavexplor/transfuser.shResults are saved to results/<fuzzer>_<agent>/. See docs/usage.md for parameters and results structure.
Drivora/
├── agent_corpus/ # ADS agents under test
│ ├── roach/ # Each agent has install.sh + agent code
│ ├── interfuser/
│ ├── pylot/ # Container-based agent (Docker + ZMQ)
│ │ ├── pylot_proxy_agent.py # Host-side proxy
│ │ ├── source_code/ # Pylot ERDOS pipeline + Dockerfile
│ │ └── config/ # Proxy config
│ └── ...
├── fuzzer/ # Fuzzing framework
│ ├── runner_base.py # Base fuzzer with all reusable infrastructure
│ ├── runner_random.py # Random fuzzer
│ ├── runner_avfuzzer.py # AVFuzzer (GA-based)
│ ├── runner_behavexplor.py # BehAVExplor (coverage-guided)
│ ├── runner_samota.py # SAMOTA (surrogate-assisted)
│ ├── runner_random_multi.py # Multi-ego random fuzzer
│ ├── oracle/ # Safety evaluation
│ ├── feedback/ # Fitness scoring (per-fuzzer)
│ ├── mutator/ # Scenario sampling/mutation
│ ├── misc/ # Surrogate models, coverage models
│ ├── configs/ # Fuzzer pipeline configs
│ └── requirements/ # Per-fuzzer Python requirements
├── scenario_corpus/ # Scenario definitions (OpenScenario)
├── scenario_elements/ # Behavior tree nodes, criteria, triggers
├── scenario_runner/ # CARLA scenario execution engine
├── registry/ # Dynamic module discovery & registration
├── scripts/ # Demo + per-fuzzer per-agent run scripts
├── docs/ # Documentation
├── config.yaml # Main Hydra configuration
├── install_all.sh # Install all agents + testers
├── install_ads_eval.sh # Install a single ADS agent
├── install_tester.sh # Install a tester
└── start_fuzzer.py # Entry point
12 ADS agents supported, covering end-to-end, vision-language, module-based, and container-based systems:
| Agent | Type | Repository | Drivora Doc |
|---|---|---|---|
| Roach | End-to-End | carla-roach | doc |
| InterFuser | End-to-End | InterFuser | doc |
| LAV | End-to-End | LAV | doc |
| TransFuser | End-to-End | TransFuser | doc |
| PlanT | End-to-End | PlanT | doc |
| TCP | End-to-End | TCP | doc |
| ADMLP | End-to-End | AD-MLP | doc |
| UniAD | End-to-End | UniAD | doc |
| VAD | End-to-End | VAD | doc |
| Simlingo | Vision-Language | Simlingo | doc |
| Orion | Vision-Language | Orion | doc |
| Pylot | Module-Based (Container) | Pylot | doc |
| Tool | Type | Description |
|---|---|---|
| Random | Baseline | Random scenario sampling with collision-proximity feedback |
| AVFuzzer | GA-based | Genetic algorithm with crossover, mutation, restart, and local iterative search (LIS) |
| BehAVExplor | Coverage-guided | KMeans behavior coverage model + energy-based seed selection |
| SAMOTA | Surrogate-assisted | Ensemble surrogate models (RBF + Kriging + PR) with global/local search |
| Random Multi | Multi-ego | Multi-ego testing with ego-to-ego collision distance feedback |
We provide prototype implementations following the core methodology of each paper. These are not guaranteed to be fully identical to the original implementations.
# Per-agent scripts for each fuzzer
bash scripts/random/roach.sh
bash scripts/avfuzzer/roach.sh
bash scripts/behavexplor/roach.sh
bash scripts/samota/roach.sh
bash scripts/random_multi/roach.sh
# Or use Hydra overrides directly
python start_fuzzer.py tester.type="avfuzzer" tester.config_path="fuzzer/configs/debug_avfuzzer.yaml" ...Scenarios use the OpenScenario format with actionable parameters:
Each scenario defines: ego vehicle routes, NPC vehicles, AI walkers, static obstacles, traffic light behavior, and weather conditions.
- Installation Guide — Detailed setup instructions and troubleshooting
- Usage Guide — Running demos, parameters, results structure
- Architecture — System design, data flow, module overview
- Extending Drivora — Adding new agents, fuzzers, and feedback calculators
If you use Drivora in your work, please cite:
@article{cheng2026drivora,
title = {Drivora: A Unified and Extensible Infrastructure for Search-based Autonomous Driving Testing},
author = {Cheng, Mingfei and Briand, Lionel and Zhou, Yuan},
journal = {arXiv preprint arXiv:2601.05685},
year = {2026}
}Contributions are welcome! Please open an issue first for discussion.
- Fork this repository
- Create a new branch
- Commit and push your changes
- Open a Pull Request
- All open-source Autonomous Driving Systems
- CARLA Simulator
- CARLA ScenarioRunner
- CARLA Leaderboard
For inquiries, please contact Mingfei Cheng at snowbirds.mf@gmail.com.
This project is licensed under the MIT License.






