Quadrotor dynamic controller

Motion controller computing dynamic from propellers speed

This actuator reads speed of the four motors of the quadrotor, and computes the resulting force / moment, following the dynamic model proposed in:

  • Backstepping and Sliding-mode Technique Applied to an Indoor Micro Quadrotor
  • Control of Complex Maneuvers for a Quadrotor UAV using Geometric Methods on SE(3)

The actuator assumes that first and third properlers turns clockwise, while second and fourth turns counter-clockwise

Configuration parameters for Quadrotor dynamic controller

You can set these properties in your scripts with <component>.properties(<property1>=..., <property2>=...).

  • ThrustFactor (float, default: 9.169e-06)
    thrust factor, in Ns²
  • DragFactor (float, default: 2.4e-07)
    drag factor in Nms
  • Lever (distance between center of mass and propeller, in m, default: 0.18)
    (no documentation available yet)
  • Configuration (A character between [‘+’, ‘x’], ‘+’ denoting a configuration where the drone X-axis follows the front axle, while ‘x’ denoting a configuration where the X-axis of the drone is between the two front arm of the drone, default: "+")
    (no documentation available yet)

Data fields

This actuator reads these datafields at each simulation step:

  • engines (vec4<float>, initial value: [0.0, 0.0, 0.0, 0.0])
    speed of each engines, in rad/s

Interface support:

Services for Quadrotor dynamic controller

  • get_configurations() (blocking)

    Returns the configurations of a component (parsed from the properties).

    • Return value

      a dictionary of the current component’s configurations

  • get_properties() (blocking)

    Returns the properties of a component.

    • Return value

      a dictionary of the current component’s properties

  • set_property(prop_name, prop_val) (blocking)

    Modify one property on a component

    • Parameters

      • prop_name: the name of the property to modify (as shown the documentation)
      • prop_val: the new value of the property. Note that there is no checking about the type of the value so be careful
    • Return value



The following examples show how to use this component in a Builder script:

from morse.builder import *

# adds a default robot (the MORSE mascott!)
robot = Morsy()

# creates a new instance of the actuator
quadrotordynamiccontrol = QuadrotorDynamicControl()

# place your component at the correct location
quadrotordynamiccontrol.translate(<x>, <y>, <z>)
quadrotordynamiccontrol.rotate(<rx>, <ry>, <rz>)


# define one or several communication interface, like 'socket'

env = Environment('empty')

Other sources of examples

(This page has been auto-generated from MORSE module morse.actuators.quadrotor_dynamic_control.)