When our team was brought in on a defense contract to support autonomous drone development, the mission was clear: build a high-fidelity simulation environment that developers could use to test drones in realistic scenarios. But as with many legacy systems, what we inherited was outdated, fragile, and full of integration landmines.
The goal was to create a clean, fully functional virtual environment that connected AirSim, Unreal Engine 4.27, PX4, and QGroundControl — with seamless support for Blender-generated 3D assets. Developers needed to test quadcopters in custom environments and see how their models performed in real-time, and they needed the simulation to just work.
Clearing Out the Wreckage
The first step was ripping out the broken pieces. The existing AirSim installation was so out of sync with the rest of the toolchain that keeping it would’ve guaranteed more headaches. I started fresh, installing Visual Studio 2022 with the right dependencies: C++ desktop dev tools, Windows 11 SDK, and the .NET Framework 4.8.1 SDK — all required to compile and build AirSim correctly.
With that foundation in place, I installed Unreal Engine 4.27 via the Epic Games Launcher and pulled the latest AirSim repository from GitHub using the Visual Studio Developer Command Prompt. From there, I built the AirSim plugin using its build script and began constructing a clean Unreal Engine project from scratch.
Getting Unreal and AirSim to Play Nice
Inside Unreal, I created a new blank project and added a minimal C++ class. This step sounds trivial, but it was crucial — it triggered Unreal to generate the Visual Studio solution we’d use to build the environment with AirSim integrated.
I copied the AirSim plugin files into the new project directory and updated the .uproject and config files to include AirSim dependencies. Once that was set, I compiled the whole thing through Visual Studio and launched the editor in GameEditor Debug mode.
To avoid common issues like spawn errors or broken simulations, I tweaked a few key settings:
- Set a proper player start location to prevent null spawns
- Assigned AirSimGameMode to ensure drone logic worked
- Tuned editor preferences for performance on dev machines
Making It Real with PX4 and QGroundControl
Once Unreal and AirSim were integrated, it was time to test the full control stack. I connected PX4 and QGroundControl to the simulation and verified drone movement, data transmission, and UI telemetry. Every adjustment brought the simulation closer to what our developers needed: a stable playground for drone experimentation with custom 3D models.
But the technical setup was only half the battle. I met daily with developers who were injecting their Blender assets into the simulation. We worked together to ensure model scaling, collisions, and materials behaved as expected in the Unreal environment. I documented every step to make onboarding easier for future teammates and prevent the same bottlenecks we’d just cleaned up.
What Came Out of It
The result was a fully operational, developer-friendly simulation environment that let our team test autonomous drones in immersive, photorealistic scenes. Blender assets dropped right in. Drone control was smooth and stable. And most importantly — the environment was reproducible, reliable, and easy to iterate on.
This setup became the foundation for future projects involving Unreal Engine + AirSim. It not only sped up testing cycles but also enabled better coordination between developers, asset designers, and control system engineers.
It’s always satisfying to build something that works. But it’s even more rewarding to build something that unlocks other people’s productivity. That’s what this project did.