The MRS Multirotor Simulator contains a header-only implementation of the single UAV dynamics including a feedback controller pipeline.

Headers

The headers are located in include/mrs_multirotor_simulator/uav_system. All the headers should be linked using relative includes so it should be possible to just copy the whole folder into your own code.

Provided API

The API to the single UAV model is provided from:

#include "uav_system.hpp"

Constructors

Default constructor, uses parameters for Holybro x500 drone:

UavSystem(void);

A constructor that accepts model parameters:

UavSystem(const MultirotorModel::ModelParams& model_params);

A constructor that accepts model parameters and an initial spawn position:

UavSystem(const MultirotorModel::ModelParams& model_params, const Eigen::Vector3d spawn_pos, const double spawn_heading);

Stepping the simulator

The simulator step with a particular time step can be executed by:

void makeStep(const double dt);

Control inputs

The UAV accepts a variety of control inputs. You can start controlling the drone by calling any of these functions:

void setInput(const reference::Actuators& actuators);
void setInput(const reference::ControlGroup& control_group);
void setInput(const reference::AttitudeRate& attitude_rate);
void setInput(const reference::Attitude& attitude);
void setInput(const reference::TiltHdgRate& tilt);
void setInput(const reference::AccelerationHdgRate& acceleration);
void setInput(const reference::AccelerationHdg& acceleration);
void setInput(const reference::VelocityHdgRate& velocity);
void setInput(const reference::VelocityHdg& velocity);
void setInput(const reference::Position& position);

void setFeedforward(const reference::AccelerationHdgRate& cmd);
void setFeedforward(const reference::AccelerationHdg& cmd);
void setFeedforward(const reference::VelocityHdg& cmd);
void setFeedforward(const reference::VelocityHdgRate& cmd);

Getting data

The full UAV state can be obtained by:

MultirotorModel::State       getState(void);

The simulated accelerometer measurement can be obtained by:

Eigen::Vector3d getImuAcceleration(void);

Setting controller parameters

void setMixerParams(const Mixer::Params& params);
void setRateControllerParams(const RateController::Params& params);
void setAttitudeControllerParams(const AttitudeController::Params& params);
void setVelocityControllerParams(const VelocityController::Params& params);
void setPositionControllerParams(const PositionController::Params& params);

Other routines

A crash can be induced by:

void crash(void);

External force can be applied to the UAV by:

void applyForce(const Eigen::Vector3d& force);