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 .. cssclass:: properties morse-section Configuration parameters for Quadrotor dynamic controller --------------------------------------------------------- You can set these properties in your scripts with ``.properties(=..., =...)``. - ``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) .. cssclass:: fields morse-section Data fields ----------- This actuator reads these datafields at each simulation step: - ``engines`` (vec4, initial value: ``[0.0, 0.0, 0.0, 0.0]``) speed of each engines, in rad/s *Interface support:* - :tag:`ros` as `std_msgs/Float32MultiArray `_ (:py:mod:`morse.middleware.ros.quadrotor_dynamic.QuadrotorDynamicReader`) - :tag:`socket` as straight JSON deserialization (:py:mod:`morse.middleware.socket_datastream.SocketReader`) - :tag:`yarp` as yarp::Bottle (:py:mod:`morse.middleware.yarp_datastream.YarpReader`) .. cssclass:: services morse-section Services for Quadrotor dynamic controller ----------------------------------------- - ``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 nothing - ``get_configurations()`` (blocking) Returns the configurations of a component (parsed from the properties). - Return value a dictionary of the current component's configurations .. cssclass:: examples morse-section Examples -------- The following examples show how to use this component in a *Builder* script: .. code-block:: python 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(, , ) quadrotordynamiccontrol.rotate(, , ) robot.append(quadrotordynamiccontrol) # define one or several communication interface, like 'socket' quadrotordynamiccontrol.add_interface() env = Environment('empty') .. cssclass:: files morse-section Other sources of examples +++++++++++++++++++++++++ - `Source code <../../_modules/morse/actuators/quadrotor_dynamic_control.html>`_ - `Unit-test <../../_modules/base/quadrotor_dynamic_control_testing.html>`_ *(This page has been auto-generated from MORSE module morse.actuators.quadrotor_dynamic_control.)*