LLM-guided stunt maneuvers with safety-first validation

ManeuverGPT Agentic Control for Safe Autonomous Stunt Maneuvers

ManeuverGPT pairs a multi-agent LLM controller with physics-aware validation to generate and execute high-dynamic maneuvers such as J-turns in CARLA. It bridges natural language intent and reproducible maneuver execution.

Agentic control diagram

Agentic Control Diagram

Multi-agent orchestration guides maneuver generation and validation before execution.

Announcements

Project updates and publication milestones.

January 2026 Version 1.3.1 released

Version 1.3.1 released with major changes. See the GitHub Release here.

July 2025 Paper updated

The paper has been updated for the final submission to IROS 2025. See the updated version here.

June 2025 Paper Accepted to IROS 2025! 🎉

We are excited to announce that our paper has been accepted for publication at the IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS) 2025, and it has been selected for an oral presentation! We appreciate your interest in our work!

Paper

arXiv preprint and project resources.

ManeuverGPT: Agentic Control for Safe Autonomous Stunt Maneuvers

Shawn Azdam, Pranav Doma, Aliasghar Moj Arab

The paper introduces an LLM-driven control stack that converts natural language requests into executable stunt maneuvers through structured parameter generation and validation. It focuses on controllable, safe J-turn execution in CARLA with human-readable configuration.

Key Contributions

  • Multi-agent pipeline for query enrichment, generation, and validation.
  • Phase-structured maneuver specification for reproducibility.
  • CARLA-based evaluation with safety constraints and logging.
  • Interactive control interface for iterative maneuver refinement.

Project Facts

At-a-glance details for ManeuverGPT.

Agents 3
Maneuver J-turn
Simulator CARLA v0.9.14
arXiv 2503.09035
Submitted: March 12, 2025 Safety validation per maneuver phase Open-source pipeline + data logging

Method

Three specialized agents coordinate intent, generation, and safety.

Query Enricher

Parses user prompts, fills missing parameters, and produces a structured specification ready for maneuver generation.

Driver Agent

Generates maneuver phase parameters grounded in vehicle dynamics and operational constraints.

Validator Agent

Checks schema compliance, feasibility, and safety margins before execution.

Autonomous Pipeline

From prompt to execution with Redis-backed coordination.

Online Mode

Runs the orchestrator + CARLA client.

export OPENAI_API_KEY="..."
python -m maneuvergpt.carla.orchestrator \
  --mode online \
  --iterations 5 \
  --redis_queue maneuver_queue \
  --user_input "Generate a safe J-turn in an open lot"

python -m maneuvergpt.carla.drive \
  --mode online \
  --redis_queue maneuver_queue \
  --sync

Offline Mode

Replay any validated maneuver JSON.

python -m maneuvergpt.carla.maneuvers \
  --mode offline \
  --params maneuver_outputs/iteration_1/validated_maneuver_1.json
Tip: The Redis queue name must match between orchestrator and drive.

Demos

Watch autonomous J-turns and controller behavior in action.

YouTube Demo Playlist

Watch the full demonstration set, including the autonomous maneuver control HUD.

Open Playlist
Video Demos

Docs & Resources

Jump directly into the code, docs, or citation.

Quickstart

  1. Install dependencies with uv sync.
  2. Launch CARLA (localhost:2000) and Redis.
  3. Run the orchestrator and CARLA client.

Issues & Contact

For bugs or feature requests, open a GitHub issue. For research collaboration, reach out directly.

Figures

Agentic control flow and maneuver phase breakdown.

Maneuver phases
Maneuver Phases Overview

Citation

Please cite the paper if you use ManeuverGPT in your work.

@article{Azdam_ManeuverGPT_Agentic_Control_2025,
  author = {Azdam, Shawn and Doma, Pranav and Arab, Aliasghar Moj},
  journal = {arXiv preprint arXiv:2503.09035},
  title = {{ManeuverGPT Agentic Control for Safe Autonomous Stunt Maneuvers}},
  url = {https://arxiv.org/abs/2503.09035},
  year = {2025}
}