Subsystem/stabilization
Stabilization subsystem
The stabilization subsystem provides the attitude controller for rotorcrafts.
Currently possible attitude stabilization subsystem types are
Attitude Control Implementations
There are several different attitude control algorithm implementations.
They use the same STABILIZATION_ATTITUDE xml configuration section:
File: conf/airframes/myplane.xml |
<section name="STABILIZATION_ATTITUDE" prefix="STABILIZATION_ATTITUDE_">
<!-- setpoints -->
<define name="SP_MAX_PHI" value="45." unit="deg"/>
<define name="SP_MAX_THETA" value="45." unit="deg"/>
<define name="SP_MAX_R" value="90." unit="deg/s"/>
<define name="DEADBAND_A" value="0"/>
<define name="DEADBAND_E" value="0"/>
<define name="DEADBAND_R" value="250"/>
<!-- reference -->
<define name="REF_OMEGA_P" value="800" unit="deg/s"/>
<define name="REF_ZETA_P" value="0.85"/>
<define name="REF_MAX_P" value="400." unit="deg/s"/>
<define name="REF_MAX_PDOT" value="RadOfDeg(8000.)"/>
<define name="REF_OMEGA_Q" value="800" unit="deg/s"/>
<define name="REF_ZETA_Q" value="0.85"/>
<define name="REF_MAX_Q" value="400." unit="deg/s"/>
<define name="REF_MAX_QDOT" value="RadOfDeg(8000.)"/>
<define name="REF_OMEGA_R" value="500" unit="deg/s"/>
<define name="REF_ZETA_R" value="0.85"/>
<define name="REF_MAX_R" value="180." unit="deg/s"/>
<define name="REF_MAX_RDOT" value="RadOfDeg(1800.)"/>
<!-- feedback -->
<define name="PHI_PGAIN" value="1000"/>
<define name="PHI_DGAIN" value="400"/>
<define name="PHI_IGAIN" value="200"/>
<define name="THETA_PGAIN" value="1000"/>
<define name="THETA_DGAIN" value="400"/>
<define name="THETA_IGAIN" value="200"/>
<define name="PSI_PGAIN" value="500"/>
<define name="PSI_DGAIN" value="300"/>
<define name="PSI_IGAIN" value="10"/>
<!-- feedforward -->
<define name="PHI_DDGAIN" value="300"/>
<define name="THETA_DDGAIN" value="300"/>
<define name="PSI_DDGAIN" value="300"/>
</section>
|
- SP_MAX_*
- maximum PHI/THETA (roll/pitch) angles and maximum angular velocity R around yaw axis
- DEADBAND_*
- RC stick deadband around the center for A,E,R (roll,pitch,yaw)
- REF_*
- parameters for the reference model
- [PHI|THETA|PSI]_[PID]GAIN
- gains for the feedback control of the respective axis
- [PHI|THETA|PSI]_DDGAIN
- feedforward gains for the respective axis
Quaternion
Attitude controllers using quaternions (no gimbal lock). There is a fixed point implementation (recommended) and a floating point implementation for reference and testing.
- fixed point:
<subsystem name="stabilization" type="int_quat"/>
- floating point:
<subsystem name="stabilization" type="float_quat"/>
File: conf/airframes/myplane.xml |
<firmware name="rotorcraft">
...
<subsystem name="stabilization" type="int_quat"/>
</firmware>
|
You also need the STABILIZATION_ATTITUDE xml configuration section as described above.
Euler (fixed point)
Attitude controller using Euler Angles (exhibits singularities at e.g. 90deg pitch).
File: conf/airframes/myplane.xml |
<firmware name="rotorcraft">
...
<subsystem name="stabilization" type="int_quat"/>
</firmware>
|
You also need the STABILIZATION_ATTITUDE xml configuration section as described above.
Rate Control
There is only one rate control implementation (which is included in the rotorcraft firmware by default). It allows you to fly a rotorcraft like a helicopter by controlling the angular rate directly instead of having (self-leveling) attitude control.
File: conf/airframes/myplane.xml |
<firmware name="rotorcraft">
...
</firmware>
<section name="STABILIZATION_RATE" prefix="STABILIZATION_RATE_">
<!-- setpoints -->
<define name="SP_MAX_P" value="10000"/>
<define name="SP_MAX_Q" value="10000"/>
<define name="SP_MAX_R" value="10000"/>
<define name="DEADBAND_P" value="20"/>
<define name="DEADBAND_Q" value="20"/>
<define name="DEADBAND_R" value="200"/>
<define name="REF_TAU" value="4"/>
<!-- feedback -->
<define name="GAIN_P" value="400"/>
<define name="GAIN_Q" value="400"/>
<define name="GAIN_R" value="350"/>
<define name="IGAIN_P" value="75"/>
<define name="IGAIN_Q" value="75"/>
<define name="IGAIN_R" value="50"/>
<!-- feedforward -->
<define name="DDGAIN_P" value="300"/>
<define name="DDGAIN_Q" value="300"/>
<define name="DDGAIN_R" value="300"/>
</section>
|