Multirotor Dynamics¶
Multirotor flight vehicles are a rapidly growing domain of aerospace engineering, boasting applications ranging from photography and package delivery using smaller drones to passenger transport with larger eVTOL concepts. At the same time, the dynamics of these aircraft are notoriously complex, creating challenges in modeling, design, and control.
The tightly coupled, strongly nonlinear dynamics, unsteady and often extreme aerodynamic conditions, and sensitive dependence on geometry create opportunities for advanced model-based engineering approaches. These include parameter estimation, trajectory optimization, and integrated design optimization.
Tutorial overview¶
In this tutorial, we will walk through the process of modeling a multirotor vehicle using Archimedes. We’ll start with a simplified approximation of the aerodynamics and progressively build towards a higher-fidelity blade-element model. This approach will showcase how Archimedes allows us to:
Implement models using familiar NumPy code: We’ll write our numerical implementation in standard NumPy, then execute it using the powerful CasADi symbolic/numeric C++ framework.
Achieve significant performance gains: Archimedes can reach 5-10x speedups in simulation compared to vanilla NumPy implementations.
Leverage automatic differentiation: This enables efficient optimization and control design.
Generate C code: For deployment to embedded controllers or other performance-critical applications.
Develop modular, extensible models: We’ll use modern software design practices to create a flexible modeling framework.
This tutorial will cover the following topics:
Fundamentals of multirotor dynamics:
6-DOF rigid body dynamics
Rotorcraft aerodynamics
Blade-element momentum theory
-
Designing a modular multirotor modeling framework
Adapting NumPy code to work with Archimedes
-
Simulating with a standard SciPy solver
Accelerating simulation with Archimedes
-
Efficient trim point identification
Linear stability analysis
Blade-element momentum theory:
Extending the initial model with a more accurate rotor dynamics model
Prerequisites¶
While this tutorial aims to be largely self-contained, it will reference established texts for detailed presentations of modeling methods, focusing instead on implementation and applications with Archimedes. A basic familiarity with rigid body dynamics and aerodynamics will be helpful. We’ll closely follow the notation and methods from these references:
“Principles of Helicopter Aerodynamics” by Leishman
“Aircraft Control and Simulation” by Stevens, Lewis, and Johnson
“Flight Dynamics” by Stengel
Some basic Python knowledge will also be beneficial. Our code makes extensive use of:
To run the code, you’ll need a Python environment configured with Archimedes and its dependencies (NumPy, SciPy, Matplotlib, and CasADi). You’ll also need the multirotor.py source code for the models.