Paparazzi UAS v7.1_unstable
Paparazzi is a free software Unmanned Aircraft System.
Loading...
Searching...
No Matches
stabilization_indi module

Full INDI stabilization controller for rotorcraft

No detailed description...

Example for airframe file

Add to your firmware section: This example contains all possible configuration options, not all of them are mandatory!

<module name="stabilization_indi">
b'<define name="TILT_TWIST_CTRL" value="FALSE|TRUE" />\n\n '
b'<configure name="INDI_OUTPUTS" default="4" />\n '
b'<configure name="INDI_NUM_ACT" default="4" />\n\n '
</module>

Module configuration options

Configure Options

  • name: INDI_OUTPUTS value: None
  • name: INDI_NUM_ACT value: None

Define Options

  • name: TILT_TWIST_CTRL value: FALSE|TRUE
    Description: assume twist is slower than tilt and solve separately

Airframe file section

  • section name: RC_SETPOINT prefix: STABILIZATION_ATTITUDE_
    • name SP_MAX_PHI value: 45.
      Description: max setpoint for roll angle
    • name SP_MAX_THETA value: 45.
      Description: max setpoint for pitch angle
    • name SP_MAX_R value: 90.
      Description: max setpoint for yaw rate
    • name DEADBAND_R value: 250
      Description: deadband on yaw rate input
  • section name: STABILIZATION_ATTITUDE_INDI prefix: STABILIZATION_INDI_
    • name ALLOCATION_PSEUDO_INVERSE value: FALSE|TRUE
      Description: Master setting: leave false for WLS allocation, and use TRUE if not overactuated and no WLS
    • name G1_ROLL value: {20 , -20, -20 , 20 }
      Description: control effectiveness of every actuator on the roll axis
    • name G1_PITCH value: {14 , 14, -14 , -14 }
      Description: control effectiveness of every actuator on the pitch axis
    • name G1_YAW value: {-1, 1, -1, 1}
      Description: control effectiveness of every actuator on the yaw axis
    • name G1_THRUST value: {-.4, -.4, -.4, -.4}
      Description: control effectiveness of every actuator on the thrust axis
    • name G2 value: {-60.0, 60.0, -60.0, 60.0}
      Description: control effectiveness of every actuator derivative on the yaw axis (important for propellers with strong torque changes)
    • name REF_ERR_P value: 600.0
      Description: INDI gains linear controller
    • name REF_ERR_Q value: 600.0
      Description: INDI gains linear controller
    • name REF_ERR_R value: 600.0
      Description: INDI gains linear controller
    • name REF_RATE_P value: 28.0
      Description: INDI gains linear controller
    • name REF_RATE_Q value: 28.0
      Description: INDI gains linear controller
    • name REF_RATE_R value: 28.0
      Description: INDI gains linear controller
    • name MAX_R value: 120.0
      Description: max yaw rate
    • name FILT_CUTOFF value: 8.0
      Description: second order cutoff frequency for angular accelerations in Hz
    • name FILTER_RATES_SECOND_ORDER value: FALSE|TRUE
      Description: use second order rate filters instead of first order
    • name STABILIZATION_INDI_FILT_CUTOFF_P value: 20.0
      Description: First order cutoff freq for angular rate in Hz
    • name STABILIZATION_INDI_FILT_CUTOFF_Q value: 20.0
      Description: First order cutoff freq for angular rate in Hz
    • name STABILIZATION_INDI_FILT_CUTOFF_R value: 20.0
      Description: First order cutoff freq for angular rate in Hz
    • name ESTIMATION_FILT_CUTOFF value: 8.0
      Description: second order cutoff parameter
    • name ACT_FREQ value: {53.9, 53.9, 53.9, 53.9}
      Description: actuator dynamics [rad/s]
    • name ACT_IS_SERVO value: {0,0,0,0}
      Description: 1 for every actuator that is a servo
    • name ACT_IS_THRUSTER_X value: {0,0,0,0}
      Description: 1 for every actuator that is a thruster in the body-x direction
    • name ACT_RATE_LIMIT value: {9600,9600,9600,9600}
      Description: rate limit in PPRZ units per timestep (depends on control frequency)
    • name ACT_PREF value: {0.0, 0.0, 0.0, 0.0}
      Description: preferred (low energy) actuator value. Important when the system is over-determined!
    • name USE_ADAPTIVE value: FALSE|TRUE
      Description: enable adaptive gains
    • name ADAPTIVE_MU value: 0.0001
      Description: adaptation parameter
    • name WLS_PRIORITIES value: {1000, 1000, 1, 100, 100}
      Description: WLS control objective priorities: roll, pitch, thrust, yaw, thrust_x
    • name WLS_WU value: {1, 1, 1, 1}
      Description: WLS actuator cost (size of INDI_NUM_ACT)
    • name RPM_FEEDBACK value: FALSE
      Description: enable RPM feedback
    • name ACT_FEEDBACK_ID value: ABI_BROADCAST
      Description: listening for RPM feedback on this ABI id
    • name V_THRUST_X value: 2.
      Description: manually define the maximum virtual thrust produced on X axis
    • name V_THRUST_Y value: 2.
      Description: manually define the maximum virtual thrust produced on Y axis
    • name V_THRUST_Z value: 2.
      Description: manually define the maximum virtual thrust produced on Z axis

Module functions

Init Functions

These initialization functions are called once on startup.

Files

Header Files

The following headers are automatically included in modules.h

Source Files

Raw stabilization_indi.xml file:

<!DOCTYPE module SYSTEM "module.dtd">
<module name="stabilization_indi" dir="stabilization" task="control">
<doc>
<description>
Full INDI stabilization controller for rotorcraft
</description>
<configure name="INDI_OUTPUTS" default="4"/>
<configure name="INDI_NUM_ACT" default="4"/>
<define name="TILT_TWIST_CTRL" value="FALSE|TRUE" description="assume twist is slower than tilt and solve separately"/>
<section name="RC_SETPOINT" prefix="STABILIZATION_ATTITUDE_">
<define name="SP_MAX_PHI" value="45." description="max setpoint for roll angle" unit="deg"/>
<define name="SP_MAX_THETA" value="45." description="max setpoint for pitch angle" unit="deg"/>
<define name="SP_MAX_R" value="90." description="max setpoint for yaw rate" unit="deg/s"/>
<define name="DEADBAND_R" value="250" description="deadband on yaw rate input"/>
</section>
<section name="STABILIZATION_ATTITUDE_INDI" prefix="STABILIZATION_INDI_">
<define name="ALLOCATION_PSEUDO_INVERSE" value="FALSE|TRUE" description="Master setting: leave false for WLS allocation, and use TRUE if not overactuated and no WLS"/>
<define name="G1_ROLL" value="{20 , -20, -20 , 20 }" description="control effectiveness of every actuator on the roll axis"/>
<define name="G1_PITCH" value="{14 , 14, -14 , -14 }" description="control effectiveness of every actuator on the pitch axis"/>
<define name="G1_YAW" value="{-1, 1, -1, 1}" description="control effectiveness of every actuator on the yaw axis"/>
<define name="G1_THRUST" value="{-.4, -.4, -.4, -.4}" description="control effectiveness of every actuator on the thrust axis"/>
<define name="G2" value="{-60.0, 60.0, -60.0, 60.0}" description="control effectiveness of every actuator derivative on the yaw axis (important for propellers with strong torque changes)"/>
<define name="REF_ERR_P" value="600.0" description="INDI gains linear controller"/>
<define name="REF_ERR_Q" value="600.0" description="INDI gains linear controller"/>
<define name="REF_ERR_R" value="600.0" description="INDI gains linear controller"/>
<define name="REF_RATE_P" value="28.0" description="INDI gains linear controller"/>
<define name="REF_RATE_Q" value="28.0" description="INDI gains linear controller"/>
<define name="REF_RATE_R" value="28.0" description="INDI gains linear controller"/>
<define name="MAX_R" value="120.0" description="max yaw rate" unit="deg/s"/>
<define name="FILT_CUTOFF" value="8.0" description="second order cutoff frequency for angular accelerations in Hz"/>
<define name="FILTER_RATES_SECOND_ORDER" value="FALSE|TRUE" description="use second order rate filters instead of first order"/>
<define name="STABILIZATION_INDI_FILT_CUTOFF_P" value="20.0" description="First order cutoff freq for angular rate in Hz"/>
<define name="STABILIZATION_INDI_FILT_CUTOFF_Q" value="20.0" description="First order cutoff freq for angular rate in Hz"/>
<define name="STABILIZATION_INDI_FILT_CUTOFF_R" value="20.0" description="First order cutoff freq for angular rate in Hz"/>
<define name="ESTIMATION_FILT_CUTOFF" value="8.0" description="second order cutoff parameter"/>
<define name="ACT_FREQ" value="{53.9, 53.9, 53.9, 53.9}" description="actuator dynamics [rad/s]"/>
<define name="ACT_IS_SERVO" value="{0,0,0,0}" description="1 for every actuator that is a servo"/>
<define name="ACT_IS_THRUSTER_X" value="{0,0,0,0}" description="1 for every actuator that is a thruster in the body-x direction"/>
<define name="ACT_RATE_LIMIT" value="{9600,9600,9600,9600}" description="rate limit in PPRZ units per timestep (depends on control frequency)"/>
<define name="ACT_PREF" value="{0.0, 0.0, 0.0, 0.0}" description="preferred (low energy) actuator value. Important when the system is over-determined!"/>
<define name="USE_ADAPTIVE" value="FALSE|TRUE" description="enable adaptive gains"/>
<define name="ADAPTIVE_MU" value="0.0001" description="adaptation parameter"/>
<define name="WLS_PRIORITIES" value="{1000, 1000, 1, 100, 100}" description="WLS control objective priorities: roll, pitch, thrust, yaw, thrust_x"/>
<define name="WLS_WU" value="{1, 1, 1, 1}" description="WLS actuator cost (size of INDI_NUM_ACT)"/>
<define name="RPM_FEEDBACK" value="FALSE" description="enable RPM feedback"/>
<define name="ACT_FEEDBACK_ID" value="ABI_BROADCAST" description="listening for RPM feedback on this ABI id"/>
<define name="V_THRUST_X" value="2." description="manually define the maximum virtual thrust produced on X axis"/>
<define name="V_THRUST_Y" value="2." description="manually define the maximum virtual thrust produced on Y axis"/>
<define name="V_THRUST_Z" value="2." description="manually define the maximum virtual thrust produced on Z axis"/>
</section>
</doc>
<settings>
<dl_settings>
<dl_settings NAME="indi">
<dl_setting var="indi_gains.att.p" min="0" step="1" max="2500" shortname="kp_p" param="STABILIZATION_INDI_REF_ERR_P"/>
<dl_setting var="indi_gains.rate.p" min="0.1" step="0.1" max="100" shortname="kd_p" param="STABILIZATION_INDI_REF_RATE_P"/>
<dl_setting var="indi_gains.att.q" min="0" step="1" max="2500" shortname="kp_q" param="STABILIZATION_INDI_REF_ERR_Q"/>
<dl_setting var="indi_gains.rate.q" min="0.1" step="0.1" max="100" shortname="kd_q" param="STABILIZATION_INDI_REF_RATE_P"/>
<dl_setting var="indi_gains.att.r" min="0" step="1" max="2500" shortname="kp_r" param="STABILIZATION_INDI_REF_ERR_R"/>
<dl_setting var="indi_gains.rate.r" min="0.1" step="0.1" max="100" shortname="kd_r" param="STABILIZATION_INDI_REF_RATE_P"/>
<dl_setting var="indi_use_adaptive" min="0" step="1" max="1" shortname="use_adaptive" values="FALSE|TRUE" param="STABILIZATION_INDI_USE_ADAPTIVE" type="uint8"/>
<dl_setting var="stablization_indi_yaw_dist_limit" min="0" step=".01" max="10.0" shortname="lim_yaw_spec_moment" param="STABILIZATION_INDI_YAW_DISTURBANCE_LIMIT"/>
<dl_setting MAX="50." MIN="1." STEP="0.1" VAR="stabilization_indi_filter_freq" shortname="filt_freq" module="stabilization/stabilization_indi" handler="update_filt_freq"/>
</dl_settings>
</dl_settings>
</settings>
<dep>
<depends>stabilization_rotorcraft,@attitude_command,wls</depends>
<provides>commands</provides>
</dep>
<header>
<file name="stabilization_attitude_quat_indi.h"/>
</header>
<init fun="stabilization_indi_init()"/>
<makefile target="ap|nps" firmware="rotorcraft">
<file name="stabilization_indi.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<file name="stabilization_attitude_quat_indi.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<configure name="INDI_OUTPUTS" default="4"/>
<configure name="INDI_NUM_ACT" default="4"/>
<define name="INDI_OUTPUTS" value="$(INDI_OUTPUTS)"/>
<define name="INDI_NUM_ACT" value="$(INDI_NUM_ACT)"/>
<define name="STABILIZATION_ATTITUDE_INDI_FULL" value="true"/>
</makefile>
</module>