Skip to content

MingfeiCheng/Drivora

Repository files navigation

Drivora Logo


Drivora

A Unified and Extensible Infrastructure for Autonomous Driving Testing

           


Overview

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!

Drivora Design

Features

  • 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

Prerequisites

  • 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

Quick Start

Install

# 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.sh

To 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/roach

See docs/installation.md for detailed instructions and troubleshooting.

Run

# 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.sh

Results are saved to results/<fuzzer>_<agent>/. See docs/usage.md for parameters and results structure.

Directory 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

ADS Corpus

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

Testing Tools

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.

Running Different Fuzzers

# 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" ...

Scenario Definition

Scenarios use the OpenScenario format with actionable parameters:

Scenario Design

Each scenario defines: ego vehicle routes, NPC vehicles, AI walkers, static obstacles, traffic light behavior, and weather conditions.

Documentation

Citation

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}
}

Contributing

Contributions are welcome! Please open an issue first for discussion.

  1. Fork this repository
  2. Create a new branch
  3. Commit and push your changes
  4. Open a Pull Request

Acknowledgements

Contact & License

For inquiries, please contact Mingfei Cheng at snowbirds.mf@gmail.com.

This project is licensed under the MIT License.

About

A Unified and Extensible Infrastructure for Autonomous Driving Testing

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

 

Packages

 
 
 

Contributors