Simulation
The simulator
module is implemented in agilib/src/simulator/
. The simulation consists of two seperate parts, a low-level controller and a physics simulation.
The purpose of the low-level controller is to simulate the behavior of the controllers typically found onboard a drone: it takes a collective thrust and a bodyrate command and translates this into individual motor commands for the four motors.
Every low-level controller should inherit from the LowLevelControllerBase
class and implement a run
function, which has access to the full drone state and the CTBR command and needs to compute desired motor RPMs for each propeller.
The second part is the physics simulation. All such models inherit from ModelBase
and need to implement a run
function as well. The function has read-only access to the full state of the drone. It needs to compute the derivative of the state. All models are chained together in a ModelPipeline
which is then executed by the simulator.
All parameters required by a model are stored in a corresponding [ModelName]params
class.
- Available models include:
ModelBodyDrag
implements quadratic body dragModelLinCubDrag
implements linear-cubic body drag (better for MPC applications that also use such a model internally)ModelMotor
implements a first-order system for the motor dynamicsModelPropellerBEM
implements a propeller model based on blade-element-momentum theory which models forces and propeller drag accuratelyModelRidgidBody
implements a ridgid body model (required to convert accelerations into velocities and velocities into positions)ModelThrustTorqueSimple
implements a propeller model based on widely used square law between propeller speed and thrust