Simulation is crucial when working with Unmanned Aerial Vehicles (UAVs). Testing different trajectories and control paradigms in a simulator before implementing them on the real platform ensures not only safety but also facilitates development.
This page presents several simulator options for aerial robotics enthusiasts.
The following simulators have their own integrated physics simulation and basic rendering capabilities. They are capable of simulating the aerodynamic forces necessary to keep UAVs airborne:
For the following comparison, we have refered to this article:
C. A. Dimmig et al., "Survey of Simulators for Aerial Robots: An Overview and In-Depth Systematic Comparisons," in IEEE Robotics & Automation Magazine, doi: 10.1109/MRA.2024.3433171
The Arxiv prepint of the paper can be found here
List migh not be complete. If you see any error or missing components, feel free to open a PR or issue.
Name | Physics Engine | Rendering | Linux1 | Windows1 | MacOS1 | Interface | (S/H)ITL2 | Active3 | Hardware requirement4 | Licence | Open source5 | Interest 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Gazebo ( RotorS, CrazyS, PX4 SITL) |
ODE/ Bullet/ DART/ Simbody | OGRE | ✓ ( ✓ ✓ ✓ ) |
✱ ( ✗ ✗ ✗) |
✓ ( ✗ ✗ ✗ ) |
ROS 1/2, C++, RL | PX4, ArduPilot, CF7 | ✓ ( ✗ ✱ ✗ ) |
minimal/decent | Apache 2.0 | ✓ | High |
Gazebo | Bullet/ DART/ TPE | OGRE | ✓ | ✱ | ✓ | ROS 1/2, C++, Python, RL | PX4, ArduPilot, CF | ✓ | minimal/decent | Apache 2.0 | ✓ | High |
Isaac ( Pegasus, Aerial Gym) |
NVIDIA PhysX/ Flex | Vulkan | ✓ | ✗ | ✗ | ROS 1/2, Python, RL | Pegasus: PX4 | ✓ | high/demanding | NVIDIA OMNIVERSE (BSD 3) |
✗ (✓ ✓) |
User specific |
Webots | ODE | OpenGL | ✓ | ✓ | ✓ | ROS 1/2, C/C++, Python, MATLAB, Java | ArduPilot, CF | ✓ | decent/high | Apache 2.0 | ✓ | Developing |
CoppeliaSim | Bullet/ODE/Vortex/Newton/MuJoCo | OpenGL | ✓ | ✓ | ✓ | ROS 1/2, C/C++, Python, MATLAB, Java,Lua,Octave | -- | ✓ | decent/high | GNU GPL/Commercial | ✱ | Decent |
AIRsim | NVIDIA PhysX | Unreal,Unity | ✓ | ✓ | ✓ | ROS 1, C++, Python, C#, Java,RL | PX4, ArduPilot | ✗ | medium/high | MIT | ✓ | Low |
Flightmare | Ad hoc, Gazebo classic | Unity | ✓ | ✗ | ✗ | ROS 1, C++, RL | -- | ✗ | -- | MIT | ✓ | Low |
FlightGoggles | Ad hoc | Unity | ✓ | ✱ | ✗ | ROS 1, C++ | Motion capture | ✗ | -- | MIT | ✓ | Unknown |
Gym-pybullet-drones | Pybullet | OpenGL | ✓ | ✱ | ✓ | Python, RL | Betaflight, CF | ✓ | minimal/decent/high | MIT (Pybullet: zlib) | ✓ | High |
RotorTM | Ad hoc | OpenGL | ✓ | ✗ | ✗ | ROS 1, Python, MATLAB | -- | ✓ | -- | GNU GPL | ✓ | Unknown |
MATLAB UAV Toolbox | MATLAB | Unreal | ✓ | ✓ | ✓ | ROS 2, MATLAB | PX4 | ✓ | -- | Proprietary, Commercial | ✗ | Unknown |
O3de | NVIDIA PhysX/ NVIDIA Cloth/ AMD TressFX | Atom | ✓ | ✓ | ✱ | ROS 28 , C++ | unknown | ✓ | decent/high | Apache-2.0/MIT | ✓ | Developing |
Drake | ad hoc | unknown | ✓ | ✗ | ✓ | C++, Python, ROS 2 | unknown | ✓ | unknown | BSD 3 | ✓ | Developing |
Flightgear | unknown | unknown | ✓ | ✓ | ✓ | C++ | unknown | ✓ | minimal/decent | GNU-GPL | ✓ | Low |
RealFlight | unknown | unknown | ✗ | ✓ | ✗ | -- | unknown | ✓ | minimal/decent | non-public | ✗ | Low |
RotorPy | ad hoc | unknown | ✓ | ✓ | ✓ | Python | -- | ✓ | minimal/decent | MIT | ✓ | Developing |
Simulator | Multirotor (Basic) | Multirotor (Drag) | Multirotor (Wind) | Fixed-wings | Aerial Manipulators | Swarms | Cars | Other vehicles |
---|---|---|---|---|---|---|---|---|
Gazebo (Classic & New) | ✓ | ✓ | ✓ | ✓ | ✱ | ✱ | ✓ | ✓ |
Isaac (Pegasus, Aerial Gym) | ✓ | ✗(✓,✗) | ✗ | ✗ | ✗ | ✓ | ✓(✗,✗) | ✓(✗,✗) |
Webots | ✓ | ✗ | ✗ | ✗ | ✗ | ✱ | ✓ | ✓ |
CoppeliaSim | ✓ | ✓ | ✱ | ✗ | ✱ | ✱ | ✓ | ✓ |
AirSim | ✓ | ✓ | ✓ | ✗ | ✗ | ✱ | ✓ | ✗ |
Flightmare | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ |
FlightGoggles | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ |
gym-pybullet-drones | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ |
RotorTM | ✓ | ✗ | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ |
MATLAB UAV Toolbox | ✓ | ✓ | ✓ | ✓ | ✗ | ✱ | ✗ | ✗ |
O3de* | ~ | ? | ? | ? | ? | ? | ~ | ~ |
Drake* | ? | ? | ? | ? | ? | ? | ? | ? |
RotorPy* | ~ | ~ | ~ | ✗ | ✗ | ~ | ✗ | ✗ |
- [ * ] : Unknown data. If you have information on specific topic, please comment bellow with the referance link.
- [ ~ ] : Yes according to my knowledge but it needs development.
- [ ? ] : Unknown
- [ ✗ ] : No according to my research.
- [ ✓ ] : Yes
- [ ✱ ] : Yes. But not specifically designed for it
- [ ✗ ] : No
TODO
Some simulators mostly focus on creating accurate dynamics for aerial vehicles. Here are some options:
- JSBSim (https://github.com/JSBSim-Team/jsbsim)
- YASim (https://wiki.flightgear.org/YASim)
- More to be added!
Each simulator typically offers a range of ready-to-use aerial vehicle models:
Several autopilot suites provide instructions for using simulators, often with Software-in-the-Loop (SITL) or Hardware-in-the-Loop (HITL) options:
- Ardupilot: https://ardupilot.org/copter/docs/common-simulation.html
- Betaflight: https://betaflight.com/docs/development/SITL#sitl-in-realflight-9
- Crazyflie: https://www.bitcraze.io/documentation/tutorials/getting-started-with-simulation/
- DJI: https://www.dji.com/se/simulator
- Paparazzi UAV: https://wiki.paparazziuav.org/wiki/Simulation
- PX4: https://docs.px4.io/main/en/simulation/#simulation
- ROSflight: https://docs.rosflight.org/v1.3/user-guide/gazebo_simulation/
This page was last updated: {{ git_revision_date_localized }}
--8<-- "docs/goatcounter.html"
Footnotes
-
(Software/Hardware) In The Loop ↩
-
✓: Active and maintained, ✱: Inactive but responding to issues/ PR, ✗: Inactive for 2+ years ↩
-
For a referance, a laptop running Intel i5 10th gen (or similar) with 8gb ddr4 ram and NVIDIA T100 4gb (or similar) are considered as minimal requirement. ↩
-
✓: Yes, ✱: Yes for non commercial use-case , ✗: No ↩
-
Usage in Aerial ROS/Robotics community according to several survey on Discourse and during the meetings. ↩
-
Crazyflie ↩
-
It seem under development and there is some docs out there. ↩