Research platform investigating the connection between Swarm Structures, Hardware-in-the-Loop (HIL), Agentic Systems, and Large Language Models.
AUS-Lab provides a complete ecosystem for UAV swarm simulation with LLM-driven autonomous control. The platform features a high-performance Rust physics engine, a React/Three.js web visualization frontend, and an agentic system that translates natural language commands into structured drone operations.
User (CLI / Web UI)
|
v
Agentic Controller --> Google Gemini API
|
v
FastAPI Server (REST + WebSocket)
|
v
Rust Physics Engine
|
v
Three.js Web Frontend (real-time visualization)
AUS-Lab/
├── agentic/ # LLM-driven swarm controller
├── simulation/ # Rust physics engine + FastAPI server
│ └── rust_physics/ # Rust source code (PyO3 bindings)
└── web_simulation/ # React + Three.js frontend
- Python 3.12+
- Rust 1.75+ (with cargo)
- Node.js 18+
- Google Gemini API key
Create a .env file in the project root:
GEMINI_API_KEY=your_gemini_api_key_herecd simulation/rust_physics
cargo build --release
pip install maturin
maturin develop --release# Simulation server
cd simulation
pip install -r requirements.txt
# Agentic controller
cd ../agentic
pip install -r requirements.txtcd web_simulation
npm installcd simulation
python main.py --num 24 --webOptions:
--num N- Number of drones (default: 24)--web- Use Rust physics engine with WebSocket streaming (recommended)--port PORT- API port (default: 8000)
cd agentic
uvicorn server:app --port 8001 --reloadThis enables the chat interface in the web frontend.
cd web_simulation
npm run devAccess the visualization at http://localhost:5173
The floating chat pill at the bottom connects to the agentic API for natural language drone control.
Interactive mode:
cd agentic
python main.pySingle command:
python main.py -c "Take off to 2 meters and form a circle"Dry run (plan only):
python main.py -c "Survey the area" --dry-runThe simulation server exposes REST endpoints at http://localhost:8000:
| Endpoint | Method | Description |
|---|---|---|
/state |
GET | Current swarm state |
/takeoff |
POST | Take off to altitude |
/land |
POST | Land drones |
/goto |
POST | Move drone to position |
/formation |
POST | Arrange swarm pattern |
/hivemind/enable |
POST | Enable hivemind mode |
/hivemind/move |
POST | Move swarm as unit |
WebSocket endpoint: ws://localhost:8000/ws (real-time state updates)
The agentic controller supports these action types:
takeoff- Take off to specified altitude (0.1-5.0m)land- Land at current positionhover- Hold positiongoto- Move single drone to coordinatesvelocity- Set drone velocity directlyformation- Arrange swarm (circle, line, grid, v-formation)enable_hivemind/disable_hivemind- Toggle hivemind modemove_hivemind- Move entire swarm as single entity
"Take off all drones to 1.5 meters"
"Form a circle at altitude 2 meters with radius 3 meters"
"Send drone 0 to position 3, 2, 1.5"
"Enable hivemind and move the swarm to 5, 5, 2"
"Land all drones"
MIT
