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
- Available models include:
ModelBodyDragimplements quadratic body drag
ModelLinCubDragimplements linear-cubic body drag (better for MPC applications that also use such a model internally)
ModelMotorimplements a first-order system for the motor dynamics
ModelPropellerBEMimplements a propeller model based on blade-element-momentum theory which models forces and propeller drag accurately
ModelRidgidBodyimplements a ridgid body model (required to convert accelerations into velocities and velocities into positions)
ModelThrustTorqueSimpleimplements a propeller model based on widely used square law between propeller speed and thrust