CARLA-Air: Fly Drones Inside a CARLA World -- A Unified Infrastructure for Air-Ground Embodied Intelligence
Organizations: 1Shenzhen Key Laboratory of Robotics and Computer Vision, Southern University of Science and Technology.
Abstract
The convergence of low-altitude economies, embodied intelligence, and air-ground cooperative systems creates growing demand for simulation infrastructure capable of jointly modeling aerial and ground agents within a single physically coherent environment. Existing open-source platforms remain domain-segregated: driving simulators lack aerial dynamics, while multirotor simulators lack realistic ground scenes. Bridge-based co-simulation introduces synchronization overhead and cannot guarantee strict spatial-temporal consistency. We present CARLA-Air, an open-source infrastructure that unifies high-fidelity urban driving and physics-accurate multirotor flight within a single Unreal Engine process. The platform preserves both CARLA and AirSim native Python APIs and ROS 2 interfaces, enabling zero-modification code reuse. Within a shared physics tick and rendering pipeline, CARLA-Air delivers photorealistic environments with rule-compliant traffic, socially-aware pedestrians, and aerodynamically consistent UAV dynamics, synchronously capturing up to 18 sensor modalities across all platforms at each tick. The platform supports representative air-ground embodied intelligence workloads spanning cooperation, embodied navigation and vision-language action, multi-modal perception and dataset construction, and reinforcement-learning-based policy training. An extensible asset pipeline allows integration of custom robot platforms into the shared world. By inheriting AirSim's aerial capabilities -- whose upstream development has been archived -- CARLA-Air ensures this widely adopted flight stack continues to evolve within a modern infrastructure. Released with prebuilt binaries and full source: https://github.com/louiszengCN/CarlaAir
Figures & tables
| Platform | Urban Traffic | Pedes- trians | UAV Flight | Single Process | Shared Renderer | Native APIs | Joint Sensors | Prebuilt Binary | Test Suite | Custom Assets | Open Source |
| Autonomous Driving | |||||||||||
| CARLA [ 2 ] | ✓ | ✓ | × | ✓ | ✓ | ✓ | × | ✓ | × | ✓ | ✓ |
| LGSVL [ 13 ] | ✓ | ✓ | × | ✓ | ✓ | ✓ | × | ✓ | × | ✓ | |
| SUMO [ 8 ] | ✓ | ✓ | × | ✓ | × | ✓ | × | ✓ | × | × | ✓ |
| MetaDrive [ 7 ] | ✓ | × | ✓ | ✓ | × | × | × | × | ✓ | ||
| VISTA [ 1 ] | × | × | ✓ | ✓ | × | × | × | × | ✓ | ||
| Platform | Single Proc. | API Kept | Shared Render | Sync Mode | Open Source |
| TranSimHub [ 17 ] | × | × | × | Msg. | ✓ |
| CARLA+SUMO [ 2 , 8 ] | × | × | RPC | ✓ | |
| AirSim+Gazebo [ 15 , 6 , 9 ] | × | × | Decpl. | ✓ | |
| AirSim+CARLA b | × | × | × | Decpl. | ✓ |
| CARLA-Air (Ours) | ✓ | ✓ | ✓ | Shared | ✓ |
| Profile | Configuration | FPS | VRAM (MiB) | CPU (%) |
| Standalone baselines | ||||
| Ground sim only s | 3 vehicles + 2 pedestrians; 8 sensors @ | |||
| Aerial sim only s | 1 drone; 8 sensors @ | |||
| Joint workloads | ||||
| Idle | Town10HD; no actors; no sensors | |||
| Ground only | 3 vehicles + 2 pedestrians; 8 sensors @ | |||
| Metric | Early (cycles 1–30) | Late (cycles 328–357) |
| Frame rate (FPS) | ||
| VRAM (MiB) | ||
| CPU utilization (%) | ||
| API error count | 0 | 0 |
| Crash count | 0 | 0 |
| VRAM regression slope | MiB/cycle, | |
| API | Call | Median ( s) | IQR ( s) |
| Ground sim | World state snapshot | 320 | 40 |
| Ground sim | Actor transform query | 280 | 35 |
| Ground sim | Actor spawn (+ paired destroy) | 1,850 | 210 |
| Ground sim | Actor destroy | 920 | 95 |
| Aerial sim | Multirotor state query | 410 | 55 |
| Aerial sim | Image capture (1 RGB stream) | 3,200 | 380 |
| Workflow | Research Direction | Platform Features Exercised | FPS | Key Outcome | |
| W1 | Precision landing | Air-ground cooperation | Tick-sync control, descent planning, cross-frame coordination | m final landing error | |
| W2 | VLN/VLA data generation | Embodied navigation | Dual-view sensing, waypoint planning, semantic annotation | — | Cross-view VLN data pipeline |
| W3 | Multi-modal dataset | Perception & dataset | 12-stream sync capture, shared tick | -tick alignment error | |
| W4 | Cross-view perception | Perception & dataset | Shared renderer, weather consistency | 14/14 weather presets verified | |
| W5 | RL training env. | RL policy training | Sync stepping, stable resets, cross-domain reward | — | 357 reset cycles, 0 crashes |
| Metric | Value | Notes |
| Mean FPS | Harmonic mean | |
| Initial altitude | m | Start of descent |
| Landing duration | s | Approach to touchdown |
| Final horiz. error | m | Within tolerance band |
| Initial horiz. error | m | At descent start |
| RPC errors | Both clients |
| Metric | Value | Notes |
| Mean FPS | Harmonic mean | |
| Concurrent streams | 12 | 8 ground + 4 aerial |
| Records collected | 1 000 | One per tick |
| Max alignment dev. | tick | Normal disk-write load |
| RPC errors | Both clients | |
| Per-tick write latency | ms | Incl. serialization |
| Metric | Value | Notes |
| Mean FPS | Harmonic mean | |
| Co-registered pairs | 500 | Aerial depth + ground seg. |
| Per-tick latency | ms | Full collection loop |
| Sensor alignment | ticks | Sync mode guarantee |
| Weather presets passed | All official presets | |
| RPC errors | Both clients |
Appendix figures & tables4 assets
Supplementary material from the paper’s appendix.
Appendix
| Service | Protocol | Port |
| CARLA RPC Server | TCP | 2000 |
| CARLA Streaming | UDP | 2001 |
| AirSim RPC Server | TCP | 41451 |
| Component | Status |
| CARLA API | 89/89 automated tests passing |
| AirSim API | Full flight control and sensor access verified |
| ROS 2 topics | 63 total (43 CARLA + 14 AirSim + 6 generic) |
| Key upstream scripts confirmed working | |
| manual_control.py | CARLA manual driving interface |
| automatic_control.py | CARLA autopilot demonstration |
| File | Modification |
| CarlaGameModeBase.h | friend declaration for CARLAAirGameMode |
| CarlaEpisode.h | Sensor tagging visibility: private protected |
| CarlaGameModeBase.cpp | State flag assignment (1 line) |
| New integration layer (no upstream modification) | |
| CARLAAirGameMode | Unified game mode class; lines C++ |