[modules] convert GNC susystems to modules for rotorcraft

This commit is contained in:
Gautier Hattenberger
2017-01-07 00:09:08 +01:00
committed by Felix Ruess
parent 23fe7efc64
commit 3048259ea8
36 changed files with 891 additions and 170 deletions
-11
View File
@@ -98,17 +98,6 @@ $(TARGET).srcs += state.c
include $(CFG_SHARED)/baro_board.makefile
$(TARGET).srcs += $(SRC_FIRMWARE)/stabilization.c
$(TARGET).srcs += $(SRC_FIRMWARE)/stabilization/stabilization_none.c
$(TARGET).srcs += $(SRC_FIRMWARE)/guidance/guidance_h.c
$(TARGET).srcs += $(SRC_FIRMWARE)/guidance/guidance_h_ref.c
$(TARGET).srcs += $(SRC_FIRMWARE)/guidance/guidance_v.c
$(TARGET).srcs += $(SRC_FIRMWARE)/guidance/guidance_v_ref.c
$(TARGET).srcs += $(SRC_FIRMWARE)/guidance/guidance_v_adapt.c
$(TARGET).srcs += $(SRC_FIRMWARE)/guidance/guidance_flip.c
include $(CFG_ROTORCRAFT)/navigation.makefile
else
$(TARGET).CFLAGS += -DFBW=1
endif
@@ -1,2 +0,0 @@
$(TARGET).CFLAGS += -DHYBRID_NAVIGATION=TRUE
$(TARGET).srcs += $(SRC_FIRMWARE)/guidance/guidance_hybrid.c
@@ -1,2 +0,0 @@
$(TARGET).CFLAGS += -DGUIDANCE_INDI=TRUE
$(TARGET).srcs += $(SRC_FIRMWARE)/guidance/guidance_indi.c
@@ -1,7 +0,0 @@
# Hey Emacs, this is a -*- makefile -*-
$(TARGET).CFLAGS += -DUSE_NAVIGATION
$(TARGET).srcs += $(SRC_FIRMWARE)/navigation.c
#$(TARGET).srcs += subsystems/navigation/common_nav.c
$(TARGET).srcs += subsystems/navigation/waypoints.c
$(TARGET).srcs += subsystems/navigation/common_flight_plan.c
@@ -1,2 +0,0 @@
$(error The stabilization euler subsystem has been renamed, please replace <subsystem name="stabilization" type="euler"/> with <subsystem name="stabilization" type="int_euler"/> in your airframe file.)
@@ -1,11 +0,0 @@
STAB_ATT_CFLAGS = -DSTABILIZATION_ATTITUDE_TYPE_FLOAT
STAB_ATT_CFLAGS += -DSTABILIZATION_ATTITUDE_TYPE_H=\"stabilization/stabilization_attitude_euler_float.h\"
STAB_ATT_SRCS = $(SRC_FIRMWARE)/stabilization/stabilization_attitude_ref_euler_float.c
STAB_ATT_SRCS += $(SRC_FIRMWARE)/stabilization/stabilization_attitude_euler_float.c
STAB_ATT_SRCS += $(SRC_FIRMWARE)/stabilization/stabilization_attitude_rc_setpoint.c
ap.CFLAGS += $(STAB_ATT_CFLAGS)
ap.srcs += $(STAB_ATT_SRCS)
nps.CFLAGS += $(STAB_ATT_CFLAGS)
nps.srcs += $(STAB_ATT_SRCS)
@@ -1,12 +0,0 @@
STAB_ATT_CFLAGS = -DSTABILIZATION_ATTITUDE_TYPE_FLOAT
STAB_ATT_CFLAGS += -DSTABILIZATION_ATTITUDE_TYPE_H=\"stabilization/stabilization_attitude_quat_float.h\"
STAB_ATT_SRCS = $(SRC_FIRMWARE)/stabilization/stabilization_attitude_ref_quat_float.c
STAB_ATT_SRCS += $(SRC_FIRMWARE)/stabilization/stabilization_attitude_quat_float.c
STAB_ATT_SRCS += $(SRC_FIRMWARE)/stabilization/stabilization_attitude_quat_transformations.c
STAB_ATT_SRCS += $(SRC_FIRMWARE)/stabilization/stabilization_attitude_rc_setpoint.c
ap.CFLAGS += $(STAB_ATT_CFLAGS)
ap.srcs += $(STAB_ATT_SRCS)
nps.CFLAGS += $(STAB_ATT_CFLAGS)
nps.srcs += $(STAB_ATT_SRCS)
@@ -1,11 +0,0 @@
STAB_ATT_CFLAGS = -DSTABILIZATION_ATTITUDE_TYPE_INT
STAB_ATT_CFLAGS += -DSTABILIZATION_ATTITUDE_TYPE_H=\"stabilization/stabilization_attitude_heli_indi.h\"
STAB_ATT_SRCS += $(SRC_FIRMWARE)/stabilization/stabilization_attitude_heli_indi.c
STAB_ATT_SRCS += $(SRC_FIRMWARE)/stabilization/stabilization_attitude_quat_transformations.c
STAB_ATT_SRCS += $(SRC_FIRMWARE)/stabilization/stabilization_attitude_rc_setpoint.c
ap.CFLAGS += $(STAB_ATT_CFLAGS)
ap.srcs += $(STAB_ATT_SRCS)
nps.CFLAGS += $(STAB_ATT_CFLAGS)
nps.srcs += $(STAB_ATT_SRCS)
@@ -1,15 +0,0 @@
STAB_ATT_CFLAGS = -DSTABILIZATION_ATTITUDE_TYPE_INT
STAB_ATT_CFLAGS += -DSTABILIZATION_ATTITUDE_TYPE_H=\"stabilization/stabilization_attitude_quat_indi.h\"
STAB_ATT_CFLAGS += -DSTABILIZATION_ATTITUDE_INDI_FULL=true
STAB_ATT_SRCS = $(SRC_FIRMWARE)/stabilization/stabilization_indi.c
STAB_ATT_SRCS += $(SRC_FIRMWARE)/stabilization/stabilization_attitude_quat_indi.c
STAB_ATT_SRCS += $(SRC_FIRMWARE)/stabilization/stabilization_attitude_quat_transformations.c
STAB_ATT_SRCS += $(SRC_FIRMWARE)/stabilization/stabilization_attitude_rc_setpoint.c
ap.CFLAGS += $(STAB_ATT_CFLAGS)
ap.srcs += $(STAB_ATT_SRCS)
nps.CFLAGS += $(STAB_ATT_CFLAGS)
nps.srcs += $(STAB_ATT_SRCS)
@@ -1,15 +0,0 @@
STAB_ATT_CFLAGS = -DSTABILIZATION_ATTITUDE_TYPE_INT
STAB_ATT_CFLAGS += -DSTABILIZATION_ATTITUDE_TYPE_H=\"stabilization/stabilization_attitude_quat_indi.h\"
STAB_ATT_CFLAGS += -DSTABILIZATION_ATTITUDE_INDI_SIMPLE=true
STAB_ATT_SRCS = $(SRC_FIRMWARE)/stabilization/stabilization_indi_simple.c
STAB_ATT_SRCS += $(SRC_FIRMWARE)/stabilization/stabilization_attitude_quat_indi.c
STAB_ATT_SRCS += $(SRC_FIRMWARE)/stabilization/stabilization_attitude_quat_transformations.c
STAB_ATT_SRCS += $(SRC_FIRMWARE)/stabilization/stabilization_attitude_rc_setpoint.c
ap.CFLAGS += $(STAB_ATT_CFLAGS)
ap.srcs += $(STAB_ATT_SRCS)
nps.CFLAGS += $(STAB_ATT_CFLAGS)
nps.srcs += $(STAB_ATT_SRCS)
@@ -1,11 +0,0 @@
STAB_ATT_CFLAGS = -DSTABILIZATION_ATTITUDE_TYPE_INT
STAB_ATT_CFLAGS += -DSTABILIZATION_ATTITUDE_TYPE_H=\"stabilization/stabilization_attitude_euler_int.h\"
STAB_ATT_SRCS = $(SRC_FIRMWARE)/stabilization/stabilization_attitude_ref_euler_int.c
STAB_ATT_SRCS += $(SRC_FIRMWARE)/stabilization/stabilization_attitude_euler_int.c
STAB_ATT_SRCS += $(SRC_FIRMWARE)/stabilization/stabilization_attitude_rc_setpoint.c
ap.CFLAGS += $(STAB_ATT_CFLAGS)
ap.srcs += $(STAB_ATT_SRCS)
nps.CFLAGS += $(STAB_ATT_CFLAGS)
nps.srcs += $(STAB_ATT_SRCS)
@@ -1,12 +0,0 @@
STAB_ATT_CFLAGS = -DSTABILIZATION_ATTITUDE_TYPE_INT
STAB_ATT_CFLAGS += -DSTABILIZATION_ATTITUDE_TYPE_H=\"stabilization/stabilization_attitude_quat_int.h\"
STAB_ATT_SRCS = $(SRC_FIRMWARE)/stabilization/stabilization_attitude_ref_quat_int.c
STAB_ATT_SRCS += $(SRC_FIRMWARE)/stabilization/stabilization_attitude_quat_int.c
STAB_ATT_SRCS += $(SRC_FIRMWARE)/stabilization/stabilization_attitude_quat_transformations.c
STAB_ATT_SRCS += $(SRC_FIRMWARE)/stabilization/stabilization_attitude_rc_setpoint.c
ap.CFLAGS += $(STAB_ATT_CFLAGS)
ap.srcs += $(STAB_ATT_SRCS)
nps.CFLAGS += $(STAB_ATT_CFLAGS)
nps.srcs += $(STAB_ATT_SRCS)
@@ -1,10 +0,0 @@
STAB_ATT_CFLAGS = -DSTABILIZATION_ATTITUDE_NO_REF
STAB_ATT_CFLAGS += -DSTABILIZATION_ATTITUDE_TYPE_INT
STAB_ATT_CFLAGS += -DSTABILIZATION_ATTITUDE_TYPE_H=\"stabilization/stabilization_attitude_passthrough.h\"
STAB_ATT_SRCS = $(SRC_FIRMWARE)/stabilization/stabilization_attitude_passthrough.c
STAB_ATT_SRCS += $(SRC_FIRMWARE)/stabilization/stabilization_attitude_rc_setpoint.c
ap.CFLAGS += $(STAB_ATT_CFLAGS)
ap.srcs += $(STAB_ATT_SRCS)
nps.CFLAGS += $(STAB_ATT_CFLAGS)
nps.srcs += $(STAB_ATT_SRCS)
@@ -1 +0,0 @@
$(error The stabilization quaternion subsystem has been changed, for normal rotorcrafts please use <subsystem name="stabilization" type="int_quat"/>, for transitioning rotorcrafts (quadshot) use <subsystem name="stabilization" type="int_quat_transition"/>)
@@ -1,8 +0,0 @@
STAB_RATE_CFLAGS = -DUSE_STABILIZATION_RATE
STAB_RATE_SRCS = $(SRC_FIRMWARE)/stabilization/stabilization_rate.c
ap.CFLAGS += $(STAB_RATE_CFLAGS)
ap.srcs += $(STAB_RATE_SRCS)
nps.CFLAGS += $(STAB_RATE_CFLAGS)
nps.srcs += $(STAB_RATE_SRCS)
@@ -1,10 +0,0 @@
STAB_RATE_CFLAGS = -DUSE_STABILIZATION_RATE
STAB_RATE_SRCS = $(SRC_FIRMWARE)/stabilization/stabilization_indi.c
STAB_RATE_SRCS = $(SRC_FIRMWARE)/stabilization/stabilization_rate_indi.c
STAB_RATE_CFLAGS += -DSTABILIZATION_RATE_INDI=true
ap.CFLAGS += $(STAB_RATE_CFLAGS)
ap.srcs += $(STAB_RATE_SRCS)
nps.CFLAGS += $(STAB_RATE_CFLAGS)
nps.srcs += $(STAB_RATE_SRCS)
+29
View File
@@ -0,0 +1,29 @@
<!DOCTYPE module SYSTEM "module.dtd">
<module name="guidance_hybrid" dir="guidance">
<doc>
<description>
Guidance controller for hybrid vehicles
</description>
</doc>
<settings>
<dl_settings>
<dl_settings NAME="Hybrid Guidance">
<dl_setting var="max_airspeed" MIN="4" STEP="1" MAX="15" module="guidance/guidance_hybrid"/>
<dl_setting var="wind_gain" MIN="1" STEP="1" MAX="256"/>
<dl_setting var="horizontal_speed_gain" MIN="1" STEP="1" MAX="15" shortname="hor_speed_div"/>
<dl_setting var="alt_pitch_gain" MIN="0" STEP="0.01" MAX="5.0" shortname="alt_pitch_gain"/>
<dl_setting var="max_turn_bank" MIN="10.0" STEP="1.0" MAX="60.0" shortname="max_turn_bank"/>
<dl_setting var="turn_bank_gain" MIN="0.1" STEP="0.01" MAX="3.0" shortname="turn_bank_gain"/>
</dl_settings>
</dl_settings>
</settings>
<header>
<file name="guidance_hybrid.h"/>
</header>
<init fun="guidance_hybrid_init()"/>
<makefile target="ap|nps" firmware="rotorcraft">
<file name="guidance_hybrid.c" dir="$(SRC_FIRMWARE)/guidance"/>
<define name="HYBRID_NAVIGATION" value="TRUE"/>
</makefile>
</module>
+17
View File
@@ -0,0 +1,17 @@
<!DOCTYPE module SYSTEM "module.dtd">
<module name="guidance_indi" dir="guidance">
<doc>
<description>
Guidance controller for rotorcraft using INDI
</description>
</doc>
<header>
<file name="guidance_indi.h"/>
</header>
<init fun="guidance_indi_enter()"/>
<makefile target="ap|nps" firmware="rotorcraft">
<file name="guidance_indi.c" dir="$(SRC_FIRMWARE)/guidance"/>
<define name="GUIDANCE_INDI" value="TRUE"/>
</makefile>
</module>
+67
View File
@@ -0,0 +1,67 @@
<!DOCTYPE module SYSTEM "module.dtd">
<module name="guidance_rotorcraft" dir="guidance">
<doc>
<description>
Base guidance code for rotorcraft
It provides:
- horizontal guidance with reference
- vertical guidance with reference and adaptive control
- flip mode
</description>
<section name="GUIDANCE_H" prefix="GUIDANCE_H_">
<define name="MAX_BANK" value="20" description="maximum commanded bank angle" unit="deg"/>
<define name="PGAIN" value="79" description="feedback horizontal control P gain"/>
<define name="DGAIN" value="100" description="feedback horizontal control D gain"/>
<define name="IGAIN" value="30" description="feedback horizontal control I gain"/>
</section>
<section name="GUIDANCE_V" prefix="GUIDANCE_V_">
<define name="HOVER_KP" value="283" description="feedback vertical control P gain"/>
<define name="HOVER_KD" value="82" description="feedback vertical control D gain"/>
<define name="HOVER_KI" value="13" description="feedback vertical control I gain"/>
<define name="NOMINAL_HOVER_THROTTLE" value="0.655" description="nominal throttle at hover (between 0 and 1)"/>
<define name="ADAPT_THROTTLE_ENABLED" value="FALSE|TRUE" description="enable adaptive control by default"/>
</section>
</doc>
<settings target="ap|nps">
<dl_settings>
<dl_settings NAME="Vert Loop">
<dl_setting var="guidance_v_kp" min="0" step="1" max="600" shortname="kp" param="GUIDANCE_V_HOVER_KP" persistent="true" module="guidance/guidance_v"/>
<dl_setting var="guidance_v_kd" min="0" step="1" max="600" shortname="kd" param="GUIDANCE_V_HOVER_KD" persistent="true"/>
<dl_setting var="guidance_v_ki" min="0" step="1" max="300" shortname="ki" handler="SetKi" param="GUIDANCE_V_HOVER_KI" persistent="true" module="guidance/guidance_v"/>
<dl_setting var="guidance_v_nominal_throttle" min="0.2" step="0.01" max="0.8" shortname="nominal_throttle" param="GUIDANCE_V_NOMINAL_HOVER_THROTTLE" persistent="true"/>
<dl_setting var="guidance_v_adapt_throttle_enabled" min="0" step="1" max="1" shortname="adapt_throttle" param="GUIDANCE_V_ADAPT_THROTTLE_ENABLED" values="FALSE|TRUE" persistent="true"/>
<dl_setting var="guidance_v_z_sp" min="-5" step="0.5" max="3" shortname="sp" unit="2e-8m" alt_unit="m" alt_unit_coef="0.00390625"/>
</dl_settings>
<dl_settings NAME="Horiz Loop">
<dl_setting var="guidance_h.use_ref" min="0" step="1" max="1" shortname="use_ref" values="FALSE|TRUE" handler="SetUseRef" param="GUIDANCE_H_USE_REF" persistent="true" module="guidance/guidance_h"/>
<dl_setting var="gh_ref.max_speed" min="0.1" step="0.1" max="15.0" shortname="max_speed" handler="SetMaxSpeed" param="GUIDANCE_H_REF_MAX_SPEED" type="float" persistent="true" module="guidance/guidance_h"/>
<dl_setting var="guidance_h.approx_force_by_thrust" min="0" step="1" max="1" shortname="approx_force" values="FALSE|TRUE" param="GUIDANCE_H_APPROX_FORCE_BY_THRUST" type="uint8" persistent="true"/>
<dl_setting var="gh_ref.tau" min="0.1" step="0.1" max="1.0" shortname="tau" handler="SetTau" param="GUIDANCE_H_REF_TAU" type="float" persistent="true" module="guidance/guidance_h"/>
<dl_setting var="gh_ref.omega" min="0.1" step="0.1" max="3.0" shortname="omega" handler="SetOmega" param="GUIDANCE_H_REF_OMEGA" type="float" persistent="true" module="guidance/guidance_h"/>
<dl_setting var="gh_ref.zeta" min="0.7" step="0.05" max="1.0" shortname="zeta" handler="SetZeta" param="GUIDANCE_H_REF_ZETA" type="float" persistent="true" module="guidance/guidance_h"/>
<dl_setting var="guidance_h.gains.p" min="0" step="1" max="400" shortname="kp" param="GUIDANCE_H_PGAIN" type="int32" persistent="true"/>
<dl_setting var="guidance_h.gains.d" min="0" step="1" max="400" shortname="kd" param="GUIDANCE_H_DGAIN" type="int32" persistent="true"/>
<dl_setting var="guidance_h.gains.i" min="0" step="1" max="400" shortname="ki" handler="set_igain" param="GUIDANCE_H_IGAIN" type="int32" persistent="true" module="guidance/guidance_h"/>
<dl_setting var="guidance_h.gains.v" min="0" step="1" max="400" shortname="kv" param="GUIDANCE_H_VGAIN" type="int32" persistent="true"/>
<dl_setting var="guidance_h.gains.a" min="0" step="1" max="400" shortname="ka" param="GUIDANCE_H_AGAIN" type="int32" persistent="true"/>
<dl_setting var="guidance_h.sp.pos.x" MIN="-10" MAX="10" STEP="1" shortname="sp_x_ned" unit="1/2^8m" alt_unit="m" alt_unit_coef="0.00390625"/>
<dl_setting var="guidance_h.sp.pos.y" MIN="-10" MAX="10" STEP="1" shortname="sp_y_ned" unit="1/2^8m" alt_unit="m" alt_unit_coef="0.00390625"/>
</dl_settings>
</dl_settings>
</settings>
<header>
<file name="guidance_h.h"/>
<file name="guidance_v.h"/>
</header>
<init fun="guidance_h_init()"/>
<init fun="guidance_v_init()"/>
<makefile target="ap|nps" firmware="rotorcraft">
<file name="guidance_h.c" dir="$(SRC_FIRMWARE)/guidance"/>
<file name="guidance_h_ref.c" dir="$(SRC_FIRMWARE)/guidance"/>
<file name="guidance_v.c" dir="$(SRC_FIRMWARE)/guidance"/>
<file name="guidance_v_ref.c" dir="$(SRC_FIRMWARE)/guidance"/>
<file name="guidance_v_adapt.c" dir="$(SRC_FIRMWARE)/guidance"/>
<file name="guidance_flip.c" dir="$(SRC_FIRMWARE)/guidance"/>
</makefile>
</module>
+31
View File
@@ -0,0 +1,31 @@
<!DOCTYPE module SYSTEM "module.dtd">
<module name="nav_basic_rotorcraft" dir="nav">
<doc>
<description>
Standard navigation patterns and flight plan handling for rotorcraft
</description>
</doc>
<settings>
<dl_settings>
<dl_settings NAME="NAV">
<dl_setting var="flight_altitude" MIN="0" STEP="0.1" MAX="400" module="navigation" unit="m" handler="SetFlightAltitude"/>
<dl_setting var="nav_heading" MIN="0" STEP="1" MAX="360" unit="1/2^12r" alt_unit="deg" alt_unit_coef="0.0139882"/>
<dl_setting var="nav_radius" MIN="-50" STEP="0.1" MAX="50" unit="m"/>
<dl_setting var="nav_climb_vspeed" MIN="0" STEP="0.1" MAX="10.0" unit="m/s" param="NAV_CLIMB_VSPEED"/>
<dl_setting var="nav_descend_vspeed" MIN="-10.0" STEP="0.1" MAX="0.0" unit="m/s" param="NAV_DESCEND_VSPEED"/>
</dl_settings>
</dl_settings>
</settings>
<autoload name="guidance" type="rotorcraft"/>
<header>
<file name="navigation.h" dir="firmwares/rotorcraft"/>
</header>
<init fun="nav_init()"/>
<makefile target="ap|nps" firmware="rotorcraft">
<file name="navigation.c" dir="$(SRC_FIRMWARE)"/>
<file name="common_flight_plan.c" dir="subsystems/navigation"/>
<file name="waypoints.c" dir="subsystems/navigation"/>
<define name="USE_NAVIGATION"/>
</makefile>
</module>
+1 -1
View File
@@ -3,7 +3,7 @@
<module name="navigation" dir="nav">
<doc>
<description>
Meta module for loading proper navigation module
Meta module for loading proper navigation
</description>
</doc>
<autoload name="nav_basic_fw"/>
@@ -0,0 +1,75 @@
<!DOCTYPE module SYSTEM "module.dtd">
<module name="stabiliztion_adaptive" dir="stabilization">
<doc>
<description>
Adaptive attitude and lateral (heading) control for fixedwing aircraft.
Mostly based on PID and optional reference generators and feedforward gains.
Adaptive parameters should not be used for normal operation at the moment.
</description>
<section name="HORIZONTAL CONTROL" prefix="H_CTL_">
<define name="COURSE_PGAIN" value="1.0" description="feedback heading P gain"/>
<define name="COURSE_DGAIN" value="0.3" description="feedback heading D gain"/>
<define name="ROLL_MAX_SETPOINT" value="45." description="max roll setpoint" unit="deg"/>
<define name="PITCH_MAX_SETPOINT" value="30." description="max pitch up setpoint" unit="deg"/>
<define name="PITCH_MIN_SETPOINT" value="-30." description="max pitch down setpoint" unit="deg"/>
<define name="ROLL_ATTITUDE_GAIN" value="7500" description="feedback roll P gain"/>
<define name="ROLL_RATE_GAIN" value="1500" description="feedback roll rate P gain (roll D gain)"/>
<define name="ROLL_IGAIN" value="100." description="feedback roll I gain"/>
<define name="ROLL_KFFA" value="0" description="feedforward roll acceleration gain"/>
<define name="ROLL_KFFD" value="0" description="feedforward roll rate gain"/>
<define name="PITCH_PGAIN" value="12000." description="feedback pitch P gain"/>
<define name="PITCH_DGAIN" value="1.5" description="feedback pitch D gain"/>
<define name="PITCH_IGAIN" value="400" description="feedback pitch I gain"/>
<define name="PITCH_KFFA" value="0." description="feedforward pitch acceleration gain"/>
<define name="PITCH_KFFD" value="0." description="feedforward pitch rate gain"/>
<define name="PITCH_OF_ROLL" value="1." description="feedforward pitch of roll coupling" unit="deg"/>
<define name="AILERON_OF_THROTTLE" value="0.0" description="feedforward roll of throttle coupling"/>
</section>
</doc>
<settings>
<dl_settings>
<dl_settings NAME="control horiz">
<dl_settings NAME="trim">
<dl_setting MAX="960" MIN="-960" STEP="1" VAR="ap_state->command_roll_trim" shortname="roll_trim" module="inter_mcu" param="COMMAND_ROLL_TRIM"/>
<dl_setting MAX="960" MIN="-960" STEP="1" VAR="ap_state->command_pitch_trim" shortname="pitch_trim" param="COMMAND_PITCH_TRIM"/>
<dl_setting MAX="9000" MIN="-9000" STEP="1" VAR="ap_state->command_yaw_trim" shortname="yaw_trim" param="COMMAND_YAW_TRIM"/>
</dl_settings>
<dl_settings NAME="attitude">
<dl_setting MAX="15000" MIN="0" STEP="250" VAR="h_ctl_roll_attitude_gain" shortname="roll_pgain" param="H_CTL_ROLL_ATTITUDE_GAIN" module="stabilization/stabilization_attitude"/>
<dl_setting MAX="15000" MIN="0" STEP="250" VAR="h_ctl_roll_rate_gain" shortname="roll_dgain" param="H_CTL_ROLL_RATE_GAIN" module="stabilization/stabilization_attitude"/>
<dl_setting MAX="5000" MIN="0" STEP="10" VAR="h_ctl_roll_igain" shortname="roll_igain" param="H_CTL_ROLL_IGAIN" handler="SetRollIGain" module="stabilization/stabilization_adaptive"/>
<dl_setting MAX="25000" MIN="0" STEP="250" VAR="h_ctl_pitch_pgain" shortname="pitch_pgain" param="H_CTL_PITCH_PGAIN" module="stabilization/stabilization_attitude"/>
<dl_setting MAX="50000" MIN="0" STEP="250" VAR="h_ctl_pitch_dgain" shortname="pitch_dgain" param="H_CTL_PITCH_DGAIN" module="stabilization/stabilization_attitude"/>
<dl_setting MAX="5000" MIN="0" STEP="10" VAR="h_ctl_pitch_igain" shortname="pitch_igain" param="H_CTL_PITCH_IGAIN" handler="SetPitchIGain" module="stabilization/stabilization_adaptive"/>
<dl_setting MAX=".3" MIN="0." STEP="0.001" VAR="h_ctl_pitch_of_roll" shortname="pitch_of_roll" param="H_CTL_PITCH_OF_ROLL" module="stabilization/stabilization_attitude"/>
<dl_setting MAX="5000" MIN="0" STEP="100" VAR="h_ctl_aileron_of_throttle" shortname="aileron_of_throttle" module="stabilization/stabilization_adaptive"/>
<dl_setting MAX="60" MIN="0" STEP="1." VAR="h_ctl_roll_max_setpoint" shortname="max_roll" param="H_CTL_ROLL_MAX_SETPOINT" unit="rad" alt_unit="deg"/>
<dl_setting MAX="1" MIN="0" STEP="1" var="use_airspeed_ratio" values="FALSE|TRUE"/>
</dl_settings>
<dl_settings NAME="feedforward">
<dl_setting MAX="5000" MIN="0" STEP="10" VAR="h_ctl_roll_Kffa" shortname="roll_Kffa" param="H_CTL_ROLL_KFFA"/>
<dl_setting MAX="5000" MIN="0" STEP="10" VAR="h_ctl_roll_Kffd" shortname="roll_Kffd" param="H_CTL_ROLL_KFFD"/>
<dl_setting MAX="5000" MIN="0" STEP="10" VAR="h_ctl_pitch_Kffa" shortname="pitch_Kffa" param="H_CTL_PITCH_KFFA"/>
<dl_setting MAX="5000" MIN="0" STEP="10" VAR="h_ctl_pitch_Kffd" shortname="pitch_Kffd" param="H_CTL_PITCH_KFFD"/>
</dl_settings>
<dl_settings name="course">
<dl_setting MAX="3" MIN="0.1" STEP="0.05" VAR="h_ctl_course_pgain" shortname="course pgain" param="H_CTL_COURSE_PGAIN"/>
<dl_setting MAX="2" MIN="0" STEP="0.1" VAR="h_ctl_course_dgain" shortname="course dgain"/>
<dl_setting MAX="2" MIN="0.1" STEP="0.05" VAR="h_ctl_course_pre_bank_correction" shortname="pre bank cor"/>
<dl_setting MAX="1" MIN="0.02" STEP="0.01" VAR="h_ctl_roll_slew" shortname="roll slew"/>
</dl_settings>
</dl_settings>
</dl_settings>
</settings>
<header>
<file name="stabilization_adaptive.h"/>
</header>
<init fun="h_ctl_init()"/>
<makefile target="ap|sim|nps" firmware="fixedwing">
<file name="stabilization_adaptive.c" dir="$(SRC_FIRMWARE)/stabilization"/>
</makefile>
</module>
@@ -0,0 +1,56 @@
<!DOCTYPE module SYSTEM "module.dtd">
<module name="stabiliztion_attitude" dir="stabilization">
<doc>
<description>
Legacy attitude and lateral (heading) control for fixedwing aircraft
</description>
<section name="HORIZONTAL CONTROL" prefix="H_CTL_">
<define name="COURSE_PGAIN" value="1.0" description="feedback heading P gain"/>
<define name="COURSE_DGAIN" value="0.3" description="feedback heading D gain"/>
<define name="ROLL_MAX_SETPOINT" value="45." description="max roll setpoint" unit="deg"/>
<define name="PITCH_MAX_SETPOINT" value="30." description="max pitch up setpoint" unit="deg"/>
<define name="PITCH_MIN_SETPOINT" value="-30." description="max pitch down setpoint" unit="deg"/>
<define name="PITCH_PGAIN" value="12000." description="feedback pitch P gain"/>
<define name="PITCH_DGAIN" value="1.5" description="feedback pitch D gain"/>
<define name="ELEVATOR_OF_ROLL" value="1250" description="feedforward pitch to roll coupling"/>
<define name="ROLL_SLEW" value="0.1" description="roll slew rate limiter"/>
<define name="ROLL_ATTITUDE_GAIN" value="7500" description="feedback roll P gain"/>
<define name="ROLL_RATE_GAIN" value="1500" description="feedback roll rate P gain (roll D gain)"/>
</section>
</doc>
<settings>
<dl_settings>
<dl_settings NAME="control horiz">
<dl_settings NAME="trim">
<dl_setting MAX="960" MIN="-960" STEP="1" VAR="ap_state->command_roll_trim" shortname="roll_trim" module="inter_mcu" param="COMMAND_ROLL_TRIM"/>
<dl_setting MAX="960" MIN="-960" STEP="1" VAR="ap_state->command_pitch_trim" shortname="pitch_trim" param="COMMAND_PITCH_TRIM"/>
<dl_setting MAX="9000" MIN="-9000" STEP="1" VAR="ap_state->command_yaw_trim" shortname="yaw_trim" param="COMMAND_YAW_TRIM"/>
</dl_settings>
<dl_settings NAME="attitude">
<dl_setting MAX="25000" MIN="000" STEP="250" VAR="h_ctl_roll_pgain" shortname="roll_pgain" module="stabilization/stabilization_attitude"/>
<dl_setting MAX="60" MIN="0" STEP="1." VAR="h_ctl_roll_max_setpoint" shortname="max_roll" param="H_CTL_ROLL_MAX_SETPOINT" unit="rad" alt_unit="deg"/>
<dl_setting MAX="25000" MIN="0" STEP="250" VAR="h_ctl_pitch_pgain" shortname="pitch_pgain" param="H_CTL_PITCH_PGAIN"/>
<dl_setting MAX="50000" MIN="0" STEP="10" VAR="h_ctl_pitch_dgain" shortname="pitch_dgain" param="H_CTL_PITCH_DGAIN"/>
<dl_setting MAX="5000" MIN="0" STEP="100" VAR="h_ctl_elevator_of_roll" shortname="elevator_of_roll" param="H_CTL_ELEVATOR_OF_ROLL"/>
<dl_setting MAX="5000" MIN="0" STEP="100" VAR="h_ctl_aileron_of_throttle" shortname="aileron_of_throttle"/>
<dl_setting MAX="15000" MIN="0" STEP="250" VAR="h_ctl_roll_attitude_gain" shortname="roll attitude pgain" param="H_CTL_ROLL_ATTITUDE_GAIN"/>
<dl_setting MAX="15000" MIN="0" STEP="250" VAR="h_ctl_roll_rate_gain" shortname="roll rate gain" param="H_CTL_ROLL_RATE_GAIN"/>
</dl_settings>
<dl_settings name="course">
<dl_setting MAX="3" MIN="0.1" STEP="0.05" VAR="h_ctl_course_pgain" shortname="course pgain" param="H_CTL_COURSE_PGAIN"/>
<dl_setting MAX="2" MIN="0" STEP="0.1" VAR="h_ctl_course_dgain" shortname="course dgain" param="H_CTL_COURSE_DGAIN"/>
<dl_setting MAX="2" MIN="0.1" STEP="0.05" VAR="h_ctl_course_pre_bank_correction" shortname="pre bank cor" param="H_CTL_COURSE_PRE_BANK_CORRECTION"/>
<dl_setting MAX="1" MIN="0.02" STEP="0.01" VAR="h_ctl_roll_slew" shortname="roll slew"/>
</dl_settings>
</dl_settings>
</dl_settings>
</settings>
<header>
<file name="stabilization_attitude.h"/>
</header>
<init fun="h_ctl_init()"/>
<makefile target="ap|sim|nps" firmware="fixedwing">
<file name="stabilization_attitude.c" dir="$(SRC_FIRMWARE)/stabilization"/>
</makefile>
</module>
@@ -0,0 +1,73 @@
<!DOCTYPE module SYSTEM "module.dtd">
<module name="stabiliztion_float_euler" dir="stabilization">
<doc>
<description>
Stabilization controller for rotorcraft using float euler implementation
</description>
<section name="STABILIZATION_ATTITUDE" 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"/>
<define name="REF_OMEGA_P" value="400" description="reference generator omega param on roll rate" unit="deg/s"/>
<define name="REF_ZETA_P" value="0.9" description="reference generator zeta param on roll rate"/>
<define name="REF_MAX_P" value="300." description="reference generator max roll rate" unit="deg/s"/>
<define name="REF_MAX_PDOT" value="RadOfDeg(7000.)" description="reference generator max roll acceleration"/>
<define name="REF_OMEGA_Q" value="400" description="reference generator omega param on pitch rate" unit="deg/s"/>
<define name="REF_ZETA_Q" value="0.9" description="reference generator zeta param on pitch rate"/>
<define name="REF_MAX_Q" value="300." description="reference generator max pitch rate" unit="deg/s"/>
<define name="REF_MAX_QDOT" value="RadOfDeg(7000.)" description="reference generator max pitch acceleration"/>
<define name="REF_OMEGA_R" value="250" description="reference generator omega param on yaw rate" unit="deg/s"/>
<define name="REF_ZETA_R" value="0.9" description="reference generator zeta param on yaw rate"/>
<define name="REF_MAX_R" value="180." description="reference generator max yaw rate" unit="deg/s"/>
<define name="REF_MAX_RDOT" value="RadOfDeg(1800.)" description="reference generator max yaw acceleration"/>
<define name="PHI_PGAIN" value="400" description="feedback roll P gain"/>
<define name="PHI_DGAIN" value="300" description="feedback roll D gain"/>
<define name="PHI_IGAIN" value="100" description="feedback roll I gain"/>
<define name="THETA_PGAIN" value="400" description="feedback pitch P gain"/>
<define name="THETA_DGAIN" value="300" description="feedback pitch D gain"/>
<define name="THETA_IGAIN" value="100" description="feedback pitch I gain"/>
<define name="PSI_PGAIN" value="380" description="feedback yaw P gain"/>
<define name="PSI_DGAIN" value="320" description="feedback yaw D gain"/>
<define name="PSI_IGAIN" value="100" description="feedback yaw I gain"/>
<define name="PHI_DDGAIN" value="300" description="feedforward roll acceleration gain"/>
<define name="THETA_DDGAIN" value="300" description="feedforward pitch acceleration gain"/>
<define name="PSI_DDGAIN" value="300" description="feedforward yaw acceleration gain"/>
</section>
</doc>
<settings target="ap|nps">
<dl_settings>
<dl_settings NAME="Att Loop">
<dl_setting var="stabilization_gains.p.x" min="1" step="1" max="8000" shortname="pgain phi" param="STABILIZATION_ATTITUDE_PHI_PGAIN" persistent="true" module="stabilization/stabilization_attitude"/>
<dl_setting var="stabilization_gains.i.x" min="0" step="1" max="800" shortname="igain phi" param="STABILIZATION_ATTITUDE_PHI_IGAIN" persistent="true"/>
<dl_setting var="stabilization_gains.d.x" min="1" step="1" max="4000" shortname="dgain p" param="STABILIZATION_ATTITUDE_PHI_DGAIN" persistent="true"/>
<dl_setting var="stabilization_gains.rates_d.x" min="0" step="1" max="500" shortname="dgaind p" param="STABILIZATION_ATTITUDE_PHI_DGAIN_D" persistent="true"/>
<dl_setting var="stabilization_gains.dd.x" min="0" step="1" max="1000" shortname="ddgain p" param="STABILIZATION_ATTITUDE_PHI_DDGAIN" persistent="true"/>
<dl_setting var="stabilization_gains.p.y" min="1" step="1" max="8000" shortname="pgain theta" param="STABILIZATION_ATTITUDE_THETA_PGAIN" persistent="true"/>
<dl_setting var="stabilization_gains.i.y" min="0" step="1" max="800" shortname="igain theta" param="STABILIZATION_ATTITUDE_THETA_IGAIN" persistent="true"/>
<dl_setting var="stabilization_gains.d.y" min="1" step="1" max="4000" shortname="dgain q" param="STABILIZATION_ATTITUDE_THETA_DGAIN" persistent="true"/>
<dl_setting var="stabilization_gains.rates_d.y" min="0" step="1" max="500" shortname="dgaind q" param="STABILIZATION_ATTITUDE_THETA_DGAIN_D" persistent="true"/>
<dl_setting var="stabilization_gains.dd.y" min="0" step="1" max="1000" shortname="ddgain q" param="STABILIZATION_ATTITUDE_THETA_DDGAIN" persistent="true"/>
<dl_setting var="stabilization_gains.p.z" min="1" step="1" max="4000" shortname="pgain psi" param="STABILIZATION_ATTITUDE_PSI_PGAIN" persistent="true"/>
<dl_setting var="stabilization_gains.i.z" min="0" step="1" max="400" shortname="igain psi" param="STABILIZATION_ATTITUDE_PSI_IGAIN" persistent="true"/>
<dl_setting var="stabilization_gains.d.z" min="1" step="1" max="4000" shortname="dgain r" param="STABILIZATION_ATTITUDE_PSI_DGAIN" persistent="true"/>
<dl_setting var="stabilization_gains.rates_d.z" min="0" step="1" max="500" shortname="dgaind r" param="STABILIZATION_ATTITUDE_PHI_DGAIN_D" persistent="true"/>
<dl_setting var="stabilization_gains.dd.z" min="0" step="1" max="1000" shortname="ddgain r" param="STABILIZATION_ATTITUDE_PSI_DDGAIN" persistent="true"/>
</dl_settings>
</dl_settings>
</settings>
<autoload name="stabilization" type="rotorcraft"/>
<header>
<file name="stabilization_attitude.h"/>
<file name="stabilization_attitude_euler_float.h"/>
</header>
<init fun="stabilization_attitude_init()"/>
<makefile target="ap|nps" firmware="rotorcraft">
<file name="stabilization_attitude_euler_float.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<file name="stabilization_attitude_ref_euler_float.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<file name="stabilization_attitude_rc_setpoint.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<define name="STABILIZATION_ATTITUDE_TYPE_FLOAT"/>
<define name="STABILIZATION_ATTITUDE_TYPE_H" value="stabilization_attitude_euler_float.h" type="string"/>
</makefile>
</module>
+80
View File
@@ -0,0 +1,80 @@
<!DOCTYPE module SYSTEM "module.dtd">
<module name="stabiliztion_float_quat" dir="stabilization">
<doc>
<description>
Stabilization controller for rotorcraft using float quaternion implementation
</description>
<section name="STABILIZATION_ATTITUDE" 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"/>
<define name="REF_OMEGA_P" value="{400}" description="reference generator omega param on roll rate" unit="deg/s"/>
<define name="REF_ZETA_P" value="{0.9}" description="reference generator zeta param on roll rate"/>
<define name="REF_MAX_P" value="300." description="reference generator max roll rate" unit="deg/s"/>
<define name="REF_MAX_PDOT" value="RadOfDeg(7000.)" description="reference generator max roll acceleration"/>
<define name="REF_OMEGA_Q" value="{400}" description="reference generator omega param on pitch rate" unit="deg/s"/>
<define name="REF_ZETA_Q" value="{0.9}" description="reference generator zeta param on pitch rate"/>
<define name="REF_MAX_Q" value="300." description="reference generator max pitch rate" unit="deg/s"/>
<define name="REF_MAX_QDOT" value="RadOfDeg(7000.)" description="reference generator max pitch acceleration"/>
<define name="REF_OMEGA_R" value="{250}" description="reference generator omega param on yaw rate" unit="deg/s"/>
<define name="REF_ZETA_R" value="{0.9}" description="reference generator zeta param on yaw rate"/>
<define name="REF_MAX_R" value="180." description="reference generator max yaw rate" unit="deg/s"/>
<define name="REF_MAX_RDOT" value="RadOfDeg(1800.)" description="reference generator max yaw acceleration"/>
<define name="PHI_PGAIN" value="{400}" description="feedback roll P gain"/>
<define name="PHI_DGAIN" value="{300}" description="feedback roll D gain"/>
<define name="PHI_IGAIN" value="{100}" description="feedback roll I gain"/>
<define name="THETA_PGAIN" value="{400}" description="feedback pitch P gain"/>
<define name="THETA_DGAIN" value="{300}" description="feedback pitch D gain"/>
<define name="THETA_IGAIN" value="{100}" description="feedback pitch I gain"/>
<define name="PSI_PGAIN" value="{380}" description="feedback yaw P gain"/>
<define name="PSI_DGAIN" value="{320}" description="feedback yaw D gain"/>
<define name="PSI_IGAIN" value="{100}" description="feedback yaw I gain"/>
<define name="PHI_DDGAIN" value="{300}" description="feedforward roll acceleration gain"/>
<define name="THETA_DDGAIN" value="{300}" description="feedforward pitch acceleration gain"/>
<define name="PSI_DDGAIN" value="{300}" description="feedforward yaw acceleration gain"/>
</section>
</doc>
<settings target="ap|nps">
<dl_settings>
<dl_settings NAME="Att Loop">
<dl_setting var="stabilization_gains[0].p.x" min="1" step="1" max="8000" shortname="pgain phi" param="STABILIZATION_ATTITUDE_PHI_PGAIN" persistent="true" module="stabilization/stabilization_attitude" />
<dl_setting var="stabilization_gains[0].i.x" min="0" step="1" max="800" shortname="igain phi" param="STABILIZATION_ATTITUDE_PHI_IGAIN" persistent="true"/>
<dl_setting var="stabilization_gains[0].d.x" min="1" step="1" max="4000" shortname="dgain p" param="STABILIZATION_ATTITUDE_PHI_DGAIN" persistent="true"/>
<dl_setting var="stabilization_gains[0].rates_d.x" min="0" step="1" max="500" shortname="dgaind p" param="STABILIZATION_ATTITUDE_PHI_DGAIN_D" persistent="true"/>
<dl_setting var="stabilization_gains[0].dd.x" min="0" step="1" max="1000" shortname="ddgain p" param="STABILIZATION_ATTITUDE_PHI_DDGAIN" persistent="true"/>
<dl_setting var="stabilization_gains[0].p.y" min="1" step="1" max="8000" shortname="pgain theta" param="STABILIZATION_ATTITUDE_THETA_PGAIN" persistent="true"/>
<dl_setting var="stabilization_gains[0].i.y" min="0" step="1" max="800" shortname="igain theta" param="STABILIZATION_ATTITUDE_THETA_IGAIN" persistent="true"/>
<dl_setting var="stabilization_gains[0].d.y" min="1" step="1" max="4000" shortname="dgain q" param="STABILIZATION_ATTITUDE_THETA_DGAIN" persistent="true"/>
<dl_setting var="stabilization_gains[0].rates_d.y" min="0" step="1" max="500" shortname="dgaind q" param="STABILIZATION_ATTITUDE_THETA_DGAIN_D" persistent="true"/>
<dl_setting var="stabilization_gains[0].dd.y" min="0" step="1" max="1000" shortname="ddgain q" param="STABILIZATION_ATTITUDE_THETA_DDGAIN" persistent="true"/>
<dl_setting var="stabilization_gains[0].p.z" min="1" step="1" max="4000" shortname="pgain psi" param="STABILIZATION_ATTITUDE_PSI_PGAIN" persistent="true"/>
<dl_setting var="stabilization_gains[0].i.z" min="0" step="1" max="400" shortname="igain psi" param="STABILIZATION_ATTITUDE_PSI_IGAIN" persistent="true"/>
<dl_setting var="stabilization_gains[0].d.z" min="1" step="1" max="4000" shortname="dgain r" param="STABILIZATION_ATTITUDE_PSI_DGAIN" persistent="true"/>
<dl_setting var="stabilization_gains[0].rates_d.z" min="0" step="1" max="500" shortname="dgaind r" param="STABILIZATION_ATTITUDE_PHI_DGAIN_D" persistent="true"/>
<dl_setting var="stabilization_gains[0].dd.z" min="0" step="1" max="1000" shortname="ddgain r" param="STABILIZATION_ATTITUDE_PSI_DDGAIN" persistent="true"/>
<dl_setting var="att_ref_quat_f.model[0].omega.p" min="1" step="1" max="1000" unit="rad/s" alt_unit="deg/s" shortname="omega p" param="STABILIZATION_ATTITUDE_REF_OMEGA_P" handler="SetOmegaP" module="stabilization/stabilization_attitude_quat_float"/>
<dl_setting var="att_ref_quat_f.model[0].zeta.p" min="0.5" step="0.05" max="1.2" shortname="zeta p" param="STABILIZATION_ATTITUDE_REF_ZETA_P"/>
<dl_setting var="att_ref_quat_f.model[0].omega.q" min="1" step="1" max="1000" unit="rad/s" alt_unit="deg/s" shortname="omega q" param="STABILIZATION_ATTITUDE_REF_OMEGA_Q" handler="SetOmegaQ"/>
<dl_setting var="att_ref_quat_f.model[0].zeta.q" min="0.5" step="0.05" max="1.2" shortname="zeta q" param="STABILIZATION_ATTITUDE_REF_ZETA_Q"/>
<dl_setting var="att_ref_quat_f.model[0].omega.r" min="1" step="1" max="1000" unit="rad/s" alt_unit="deg/s" shortname="omega r" param="STABILIZATION_ATTITUDE_REF_OMEGA_R" handler="SetOmegaR"/>
<dl_setting var="att_ref_quat_f.model[0].zeta.r" min="0.5" step="0.05" max="1.2" shortname="zeta r" param="STABILIZATION_ATTITUDE_REF_ZETA_R"/>
</dl_settings>
</dl_settings>
</settings>
<autoload name="stabilization" type="rotorcraft"/>
<header>
<file name="stabilization_attitude.h"/>
<file name="stabilization_attitude_quat_float.h"/>
</header>
<init fun="stabilization_attitude_init()"/>
<makefile target="ap|nps" firmware="rotorcraft">
<file name="stabilization_attitude_quat_float.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<file name="stabilization_attitude_ref_quat_float.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<file name="stabilization_attitude_rc_setpoint.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<file name="stabilization_attitude_quat_transformations.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<define name="STABILIZATION_ATTITUDE_TYPE_FLOAT"/>
<define name="STABILIZATION_ATTITUDE_TYPE_H" value="stabilization_attitude_quat_float.h" type="string"/>
</makefile>
</module>
+61
View File
@@ -0,0 +1,61 @@
<!DOCTYPE module SYSTEM "module.dtd">
<module name="stabiliztion_heli_indi" dir="stabilization">
<doc>
<description>
INDI stabilization controller for helicopters
</description>
<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="ATTITUDE_REFERENCE" prefix="STABILIZATION_ATTITUDE_">
<define name="REF_OMEGA_P" value="400" description="reference generator omega param on roll rate" unit="deg/s"/>
<define name="REF_ZETA_P" value="0.9" description="reference generator zeta param on roll rate"/>
<define name="REF_MAX_P" value="300." description="reference generator max roll rate" unit="deg/s"/>
<define name="REF_MAX_PDOT" value="RadOfDeg(7000.)" description="reference generator max roll acceleration"/>
<define name="REF_OMEGA_Q" value="400" description="reference generator omega param on pitch rate" unit="deg/s"/>
<define name="REF_ZETA_Q" value="0.9" description="reference generator zeta param on pitch rate"/>
<define name="REF_MAX_Q" value="300." description="reference generator max pitch rate" unit="deg/s"/>
<define name="REF_MAX_QDOT" value="RadOfDeg(7000.)" description="reference generator max pitch acceleration"/>
<define name="REF_OMEGA_R" value="250" description="reference generator omega param on yaw rate" unit="deg/s"/>
<define name="REF_ZETA_R" value="0.9" description="reference generator zeta param on yaw rate"/>
<define name="REF_MAX_R" value="180." description="reference generator max yaw rate" unit="deg/s"/>
<define name="REF_MAX_RDOT" value="RadOfDeg(1800.)" description="reference generator max yaw acceleration"/>
</section>
<section name="STABILIZATION_ATTITUDE_INDI" prefix="STABILIZATION_INDI_">
<define name="G1_P" value="0.0639" description="control effectiveness G1 gain on roll rate"/>
<define name="G1_Q" value="0.0361" description="control effectiveness G1 gain on pitch rate"/>
<define name="G1_R" value="0.0022" description="control effectiveness G1 gain on yaw rate"/>
<define name="G2_R" value="0.1450" description="control effectiveness G2 gain on yaw rate"/>
<define name="REF_ERR_P" value="600.0" description="reference acceleration"/>
<define name="REF_ERR_Q" value="600.0" description="reference acceleration"/>
<define name="REF_ERR_R" value="600.0" description="reference acceleration"/>
<define name="REF_RATE_P" value="28.0" description="reference acceleration"/>
<define name="REF_RATE_Q" value="28.0" description="reference acceleration"/>
<define name="REF_RATE_R" value="28.0" description="reference acceleration"/>
<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 parameter"/>
<define name="ESTIMATION_FILT_CUTOFF" value="8.0" description="second order cutoff parameter"/>
<define name="ACT_DYN_P" value="0.1" description="first order actuator dynamics on roll rate"/>
<define name="ACT_DYN_Q" value="0.1" description="first order actuator dynamics on pitch rate"/>
<define name="ACT_DYN_R" value="0.1" description="first order actuator dynamics on yaw rate"/>
<define name="USE_ADAPTIVE" value="FALSE|TRUE" description="enable adaptive gains"/>
<define name="ADAPTIVE_MU" value="0.0001" description="adaptation parameter"/>
</section>
</doc>
<autoload name="stabilization" type="rotorcraft"/>
<header>
<file name="stabilization_heli_indi.h"/>
</header>
<init fun="stabilization_attitude_init()"/>
<makefile target="ap|nps" firmware="rotorcraft">
<file name="stabilization_attutude_heli_indi.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<file name="stabilization_attutude_quat_transformations.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<file name="stabilization_attutude_rc_setpoint.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<define name="STABILIZATION_ATTITUDE_TYPE_INT"/>
<define name="STABILIZATION_ATTITUDE_TYPE_H" value="stabilization/stabilization_attutude_heli_indi.h" type="string"/>
</makefile>
</module>
+63
View File
@@ -0,0 +1,63 @@
<!DOCTYPE module SYSTEM "module.dtd">
<module name="stabiliztion_indi" dir="stabilization">
<doc>
<description>
Full INDI stabilization controller for rotorcraft
</description>
<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="ATTITUDE_REFERENCE" prefix="STABILIZATION_ATTITUDE_">
<define name="REF_OMEGA_P" value="400" description="reference generator omega param on roll rate" unit="deg/s"/>
<define name="REF_ZETA_P" value="0.9" description="reference generator zeta param on roll rate"/>
<define name="REF_MAX_P" value="300." description="reference generator max roll rate" unit="deg/s"/>
<define name="REF_MAX_PDOT" value="RadOfDeg(7000.)" description="reference generator max roll acceleration"/>
<define name="REF_OMEGA_Q" value="400" description="reference generator omega param on pitch rate" unit="deg/s"/>
<define name="REF_ZETA_Q" value="0.9" description="reference generator zeta param on pitch rate"/>
<define name="REF_MAX_Q" value="300." description="reference generator max pitch rate" unit="deg/s"/>
<define name="REF_MAX_QDOT" value="RadOfDeg(7000.)" description="reference generator max pitch acceleration"/>
<define name="REF_OMEGA_R" value="250" description="reference generator omega param on yaw rate" unit="deg/s"/>
<define name="REF_ZETA_R" value="0.9" description="reference generator zeta param on yaw rate"/>
<define name="REF_MAX_R" value="180." description="reference generator max yaw rate" unit="deg/s"/>
<define name="REF_MAX_RDOT" value="RadOfDeg(1800.)" description="reference generator max yaw acceleration"/>
</section>
<section name="STABILIZATION_ATTITUDE_INDI" prefix="STABILIZATION_INDI_">
<define name="G1_P" value="0.0639" description="control effectiveness G1 gain on roll rate"/>
<define name="G1_Q" value="0.0361" description="control effectiveness G1 gain on pitch rate"/>
<define name="G1_R" value="0.0022" description="control effectiveness G1 gain on yaw rate"/>
<define name="G2_R" value="0.1450" description="control effectiveness G2 gain on yaw rate"/>
<define name="REF_ERR_P" value="600.0" description="reference acceleration"/>
<define name="REF_ERR_Q" value="600.0" description="reference acceleration"/>
<define name="REF_ERR_R" value="600.0" description="reference acceleration"/>
<define name="REF_RATE_P" value="28.0" description="reference acceleration"/>
<define name="REF_RATE_Q" value="28.0" description="reference acceleration"/>
<define name="REF_RATE_R" value="28.0" description="reference acceleration"/>
<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 parameter"/>
<define name="ESTIMATION_FILT_CUTOFF" value="8.0" description="second order cutoff parameter"/>
<define name="ACT_DYN_P" value="0.1" description="first order actuator dynamics on roll rate"/>
<define name="ACT_DYN_Q" value="0.1" description="first order actuator dynamics on pitch rate"/>
<define name="ACT_DYN_R" value="0.1" description="first order actuator dynamics on yaw rate"/>
<define name="USE_ADAPTIVE" value="FALSE|TRUE" description="enable adaptive gains"/>
<define name="ADAPTIVE_MU" value="0.0001" description="adaptation parameter"/>
</section>
</doc>
<autoload name="stabilization" type="rotorcraft"/>
<header>
<file name="stabilization_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_attutude_quat_indi.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<file name="stabilization_attutude_quat_transformations.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<file name="stabilization_attutude_rc_setpoint.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<define name="STABILIZATION_ATTITUDE_TYPE_INT"/>
<define name="STABILIZATION_ATTITUDE_TYPE_H" value="stabilization/stabilization_attutude_quat_indi.h" type="string"/>
<define name="STABILIZATION_ATTITUDE_INDI_FULL" value="true"/>
</makefile>
</module>
@@ -0,0 +1,82 @@
<!DOCTYPE module SYSTEM "module.dtd">
<module name="stabiliztion_indi_simple" dir="stabilization">
<doc>
<description>
Simple INDI stabilization controller for rotorcraft
</description>
<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="ATTITUDE_REFERENCE" prefix="STABILIZATION_ATTITUDE_">
<define name="REF_OMEGA_P" value="400" description="reference generator omega param on roll rate" unit="deg/s"/>
<define name="REF_ZETA_P" value="0.9" description="reference generator zeta param on roll rate"/>
<define name="REF_MAX_P" value="300." description="reference generator max roll rate" unit="deg/s"/>
<define name="REF_MAX_PDOT" value="RadOfDeg(7000.)" description="reference generator max roll acceleration"/>
<define name="REF_OMEGA_Q" value="400" description="reference generator omega param on pitch rate" unit="deg/s"/>
<define name="REF_ZETA_Q" value="0.9" description="reference generator zeta param on pitch rate"/>
<define name="REF_MAX_Q" value="300." description="reference generator max pitch rate" unit="deg/s"/>
<define name="REF_MAX_QDOT" value="RadOfDeg(7000.)" description="reference generator max pitch acceleration"/>
<define name="REF_OMEGA_R" value="250" description="reference generator omega param on yaw rate" unit="deg/s"/>
<define name="REF_ZETA_R" value="0.9" description="reference generator zeta param on yaw rate"/>
<define name="REF_MAX_R" value="180." description="reference generator max yaw rate" unit="deg/s"/>
<define name="REF_MAX_RDOT" value="RadOfDeg(1800.)" description="reference generator max yaw acceleration"/>
</section>
<section name="STABILIZATION_ATTITUDE_INDI" prefix="STABILIZATION_INDI_">
<define name="G1_P" value="0.0639" description="control effectiveness G1 gain on roll rate"/>
<define name="G1_Q" value="0.0361" description="control effectiveness G1 gain on pitch rate"/>
<define name="G1_R" value="0.0022" description="control effectiveness G1 gain on yaw rate"/>
<define name="G2_R" value="0.1450" description="control effectiveness G2 gain on yaw rate"/>
<define name="REF_ERR_P" value="600.0" description="reference acceleration"/>
<define name="REF_ERR_Q" value="600.0" description="reference acceleration"/>
<define name="REF_ERR_R" value="600.0" description="reference acceleration"/>
<define name="REF_RATE_P" value="28.0" description="reference acceleration"/>
<define name="REF_RATE_Q" value="28.0" description="reference acceleration"/>
<define name="REF_RATE_R" value="28.0" description="reference acceleration"/>
<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 parameter"/>
<define name="ESTIMATION_FILT_CUTOFF" value="8.0" description="second order cutoff parameter"/>
<define name="ACT_DYN_P" value="0.1" description="first order actuator dynamics on roll rate"/>
<define name="ACT_DYN_Q" value="0.1" description="first order actuator dynamics on pitch rate"/>
<define name="ACT_DYN_R" value="0.1" description="first order actuator dynamics on yaw rate"/>
<define name="USE_ADAPTIVE" value="FALSE|TRUE" description="enable adaptive gains"/>
<define name="ADAPTIVE_MU" value="0.0001" description="adaptation parameter"/>
</section>
</doc>
<settings>
<dl_settings>
<dl_settings NAME="indi">
<dl_setting var="indi.reference_acceleration.err_p" min="0" step="1" max="2500" shortname="kp_p" param="STABILIZATION_INDI_REF_ERR_P" persistent="true" module="stabilization/stabilization_indi_simple"/>
<dl_setting var="indi.reference_acceleration.rate_p" min="0" step="0.1" max="100" shortname="kd_p" param="STABILIZATION_INDI_REF_RATE_P" persistent="true"/>
<dl_setting var="indi.g1.p" min="0" step="0.001" max="10" shortname="ctl_eff_p" param="STABILIZATION_INDI_G1_P" persistent="true"/>
<dl_setting var="indi.reference_acceleration.err_q" min="0" step="1" max="2500" shortname="kp_q" param="STABILIZATION_INDI_REF_ERR_Q" persistent="true"/>
<dl_setting var="indi.reference_acceleration.rate_q" min="0" step="0.1" max="100" shortname="kd_q" param="STABILIZATION_INDI_REF_RATE_P" persistent="true"/>
<dl_setting var="indi.g1.q" min="0" step="0.001" max="10" shortname="ctl_eff_q" param="STABILIZATION_INDI_G1_Q" persistent="true"/>
<dl_setting var="indi.reference_acceleration.err_r" min="0" step="1" max="2500" shortname="kp_r" param="STABILIZATION_INDI_REF_ERR_R" persistent="true"/>
<dl_setting var="indi.reference_acceleration.rate_r" min="0" step="0.1" max="100" shortname="kd_r" param="STABILIZATION_INDI_REF_RATE_P" persistent="true"/>
<dl_setting var="indi.g1.r" min="0" step="0.001" max="10" shortname="ctl_eff_r" param="STABILIZATION_INDI_G1_R" persistent="true"/>
<dl_setting var="indi.g2" min="0" step="0.01" max="10" shortname="g2" param="STABILIZATION_INDI_G2_R" persistent="true"/>
<dl_setting var="indi.adaptive" min="0" step="1" max="1" shortname="use_adaptive" values="FALSE|TRUE" param="STABILIZATION_INDI_USE_ADAPTIVE" type="uint8" persistent="true"/>
<dl_setting var="indi.max_rate" min="0" step="0.01" max="400.0" shortname="max_rate" param="STABILIZATION_INDI_MAX_RATE" unit="rad/s" alt_unit="deg/s"/>
<dl_setting var="indi.attitude_max_yaw_rate" min="0" step="0.01" max="400.0" shortname="max_yaw_rate_attitude" param="STABILIZATION_INDI_MAX_R" unit="rad/s" alt_unit="deg/s"/>
</dl_settings>
</dl_settings>
</settings>
<autoload name="stabilization" type="rotorcraft"/>
<header>
<file name="stabilization_indi_simple.h"/>
</header>
<init fun="stabilization_indi_init()"/>
<makefile target="ap|nps" firmware="rotorcraft">
<file name="stabilization_indi_simple.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<file name="stabilization_attutude_quat_indi.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<file name="stabilization_attutude_quat_transformations.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<file name="stabilization_attutude_rc_setpoint.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<define name="STABILIZATION_ATTITUDE_TYPE_INT"/>
<define name="STABILIZATION_ATTITUDE_TYPE_H" value="stabilization/stabilization_attutude_quat_indi.h" type="string"/>
<define name="STABILIZATION_ATTITUDE_INDI_SIMPLE" value="true"/>
</makefile>
</module>
+70
View File
@@ -0,0 +1,70 @@
<!DOCTYPE module SYSTEM "module.dtd">
<module name="stabiliztion_int_euler" dir="stabilization">
<doc>
<description>
Stabilization controller for rotorcraft using integer euler implementation
</description>
<section name="STABILIZATION_ATTITUDE" 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"/>
<define name="REF_OMEGA_P" value="400" description="reference generator omega param on roll rate" unit="deg/s"/>
<define name="REF_ZETA_P" value="0.9" description="reference generator zeta param on roll rate"/>
<define name="REF_MAX_P" value="300." description="reference generator max roll rate" unit="deg/s"/>
<define name="REF_MAX_PDOT" value="RadOfDeg(7000.)" description="reference generator max roll acceleration"/>
<define name="REF_OMEGA_Q" value="400" description="reference generator omega param on pitch rate" unit="deg/s"/>
<define name="REF_ZETA_Q" value="0.9" description="reference generator zeta param on pitch rate"/>
<define name="REF_MAX_Q" value="300." description="reference generator max pitch rate" unit="deg/s"/>
<define name="REF_MAX_QDOT" value="RadOfDeg(7000.)" description="reference generator max pitch acceleration"/>
<define name="REF_OMEGA_R" value="250" description="reference generator omega param on yaw rate" unit="deg/s"/>
<define name="REF_ZETA_R" value="0.9" description="reference generator zeta param on yaw rate"/>
<define name="REF_MAX_R" value="180." description="reference generator max yaw rate" unit="deg/s"/>
<define name="REF_MAX_RDOT" value="RadOfDeg(1800.)" description="reference generator max yaw acceleration"/>
<define name="PHI_PGAIN" value="400" description="feedback roll P gain"/>
<define name="PHI_DGAIN" value="300" description="feedback roll D gain"/>
<define name="PHI_IGAIN" value="100" description="feedback roll I gain"/>
<define name="THETA_PGAIN" value="400" description="feedback pitch P gain"/>
<define name="THETA_DGAIN" value="300" description="feedback pitch D gain"/>
<define name="THETA_IGAIN" value="100" description="feedback pitch I gain"/>
<define name="PSI_PGAIN" value="380" description="feedback yaw P gain"/>
<define name="PSI_DGAIN" value="320" description="feedback yaw D gain"/>
<define name="PSI_IGAIN" value="100" description="feedback yaw I gain"/>
<define name="PHI_DDGAIN" value="300" description="feedforward roll acceleration gain"/>
<define name="THETA_DDGAIN" value="300" description="feedforward pitch acceleration gain"/>
<define name="PSI_DDGAIN" value="300" description="feedforward yaw acceleration gain"/>
</section>
</doc>
<settings target="ap|nps">
<dl_settings>
<dl_settings NAME="Att Loop">
<dl_setting var="stabilization_gains.p.x" min="1" step="1" max="8000" shortname="pgain phi" param="STABILIZATION_ATTITUDE_PHI_PGAIN" type="int32" persistent="true" module="stabilization/stabilization_attitude_common_int"/>
<dl_setting var="stabilization_gains.d.x" min="1" step="1" max="4000" shortname="dgain p" param="STABILIZATION_ATTITUDE_PHI_DGAIN" type="int32" persistent="true"/>
<dl_setting var="stabilization_gains.i.x" min="0" step="1" max="800" shortname="igain phi" param="STABILIZATION_ATTITUDE_PHI_IGAIN" type="int32" persistent="true"/>
<dl_setting var="stabilization_gains.dd.x" min="0" step="1" max="1000" shortname="ddgain p" param="STABILIZATION_ATTITUDE_PHI_DDGAIN" type="int32" persistent="true"/>
<dl_setting var="stabilization_gains.p.y" min="1" step="1" max="8000" shortname="pgain theta" param="STABILIZATION_ATTITUDE_THETA_PGAIN" type="int32" persistent="true"/>
<dl_setting var="stabilization_gains.d.y" min="1" step="1" max="4000" shortname="dgain q" param="STABILIZATION_ATTITUDE_THETA_DGAIN" type="int32" persistent="true"/>
<dl_setting var="stabilization_gains.i.y" min="0" step="1" max="800" shortname="igain theta" param="STABILIZATION_ATTITUDE_THETA_IGAIN" type="int32" persistent="true"/>
<dl_setting var="stabilization_gains.dd.y" min="0" step="1" max="1000" shortname="ddgain q" param="STABILIZATION_ATTITUDE_THETA_DDGAIN" type="int32" persistent="true"/>
<dl_setting var="stabilization_gains.p.z" min="1" step="1" max="4000" shortname="pgain psi" param="STABILIZATION_ATTITUDE_PSI_PGAIN" type="int32" persistent="true"/>
<dl_setting var="stabilization_gains.d.z" min="1" step="1" max="4000" shortname="dgain r" param="STABILIZATION_ATTITUDE_PSI_DGAIN" type="int32" persistent="true"/>
<dl_setting var="stabilization_gains.i.z" min="0" step="1" max="400" shortname="igain psi" param="STABILIZATION_ATTITUDE_PSI_IGAIN" type="int32" persistent="true"/>
<dl_setting var="stabilization_gains.dd.z" min="0" step="1" max="1000" shortname="ddgain r" param="STABILIZATION_ATTITUDE_PSI_DDGAIN" type="int32" persistent="true"/>
</dl_settings>
</dl_settings>
</settings>
<autoload name="stabilization" type="rotorcraft"/>
<header>
<file name="stabilization_attitude.h"/>
<file name="stabilization_attitude_euler_int.h"/>
</header>
<init fun="stabilization_attitude_init()"/>
<makefile target="ap|nps" firmware="rotorcraft">
<file name="stabilization_attitude_euler_int.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<file name="stabilization_attitude_ref_euler_int.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<file name="stabilization_attitude_rc_setpoint.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<define name="STABILIZATION_ATTITUDE_TYPE_INT"/>
<define name="STABILIZATION_ATTITUDE_TYPE_H" value="stabilization_attitude_euler_int.h" type="string"/>
</makefile>
</module>
+77
View File
@@ -0,0 +1,77 @@
<!DOCTYPE module SYSTEM "module.dtd">
<module name="stabiliztion_int_quat" dir="stabilization">
<doc>
<description>
Stabilization controller for rotorcraft using integer quaternion implementation
</description>
<section name="STABILIZATION_ATTITUDE" 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"/>
<define name="REF_OMEGA_P" value="400" description="reference generator omega param on roll rate" unit="deg/s"/>
<define name="REF_ZETA_P" value="0.9" description="reference generator zeta param on roll rate"/>
<define name="REF_MAX_P" value="300." description="reference generator max roll rate" unit="deg/s"/>
<define name="REF_MAX_PDOT" value="RadOfDeg(7000.)" description="reference generator max roll acceleration"/>
<define name="REF_OMEGA_Q" value="400" description="reference generator omega param on pitch rate" unit="deg/s"/>
<define name="REF_ZETA_Q" value="0.9" description="reference generator zeta param on pitch rate"/>
<define name="REF_MAX_Q" value="300." description="reference generator max pitch rate" unit="deg/s"/>
<define name="REF_MAX_QDOT" value="RadOfDeg(7000.)" description="reference generator max pitch acceleration"/>
<define name="REF_OMEGA_R" value="250" description="reference generator omega param on yaw rate" unit="deg/s"/>
<define name="REF_ZETA_R" value="0.9" description="reference generator zeta param on yaw rate"/>
<define name="REF_MAX_R" value="180." description="reference generator max yaw rate" unit="deg/s"/>
<define name="REF_MAX_RDOT" value="RadOfDeg(1800.)" description="reference generator max yaw acceleration"/>
<define name="PHI_PGAIN" value="400" description="feedback roll P gain"/>
<define name="PHI_DGAIN" value="300" description="feedback roll D gain"/>
<define name="PHI_IGAIN" value="100" description="feedback roll I gain"/>
<define name="THETA_PGAIN" value="400" description="feedback pitch P gain"/>
<define name="THETA_DGAIN" value="300" description="feedback pitch D gain"/>
<define name="THETA_IGAIN" value="100" description="feedback pitch I gain"/>
<define name="PSI_PGAIN" value="380" description="feedback yaw P gain"/>
<define name="PSI_DGAIN" value="320" description="feedback yaw D gain"/>
<define name="PSI_IGAIN" value="100" description="feedback yaw I gain"/>
<define name="PHI_DDGAIN" value="300" description="feedforward roll acceleration gain"/>
<define name="THETA_DDGAIN" value="300" description="feedforward pitch acceleration gain"/>
<define name="PSI_DDGAIN" value="300" description="feedforward yaw acceleration gain"/>
</section>
</doc>
<settings target="ap|nps">
<dl_settings>
<dl_settings NAME="Att Loop">
<dl_setting var="stabilization_gains.p.x" min="1" step="1" max="8000" shortname="pgain phi" param="STABILIZATION_ATTITUDE_PHI_PGAIN" type="int32" persistent="true" module="stabilization/stabilization_attitude_common_int"/>
<dl_setting var="stabilization_gains.d.x" min="1" step="1" max="4000" shortname="dgain p" param="STABILIZATION_ATTITUDE_PHI_DGAIN" type="int32" persistent="true"/>
<dl_setting var="stabilization_gains.i.x" min="0" step="1" max="800" shortname="igain phi" param="STABILIZATION_ATTITUDE_PHI_IGAIN" type="int32" persistent="true"/>
<dl_setting var="stabilization_gains.dd.x" min="0" step="1" max="1000" shortname="ddgain p" param="STABILIZATION_ATTITUDE_PHI_DDGAIN" type="int32" persistent="true"/>
<dl_setting var="stabilization_gains.p.y" min="1" step="1" max="8000" shortname="pgain theta" param="STABILIZATION_ATTITUDE_THETA_PGAIN" type="int32" persistent="true"/>
<dl_setting var="stabilization_gains.d.y" min="1" step="1" max="4000" shortname="dgain q" param="STABILIZATION_ATTITUDE_THETA_DGAIN" type="int32" persistent="true"/>
<dl_setting var="stabilization_gains.i.y" min="0" step="1" max="800" shortname="igain theta" param="STABILIZATION_ATTITUDE_THETA_IGAIN" type="int32" persistent="true"/>
<dl_setting var="stabilization_gains.dd.y" min="0" step="1" max="1000" shortname="ddgain q" param="STABILIZATION_ATTITUDE_THETA_DDGAIN" type="int32" persistent="true"/>
<dl_setting var="stabilization_gains.p.z" min="1" step="1" max="4000" shortname="pgain psi" param="STABILIZATION_ATTITUDE_PSI_PGAIN" type="int32" persistent="true"/>
<dl_setting var="stabilization_gains.d.z" min="1" step="1" max="4000" shortname="dgain r" param="STABILIZATION_ATTITUDE_PSI_DGAIN" type="int32" persistent="true"/>
<dl_setting var="stabilization_gains.i.z" min="0" step="1" max="400" shortname="igain psi" param="STABILIZATION_ATTITUDE_PSI_IGAIN" type="int32" persistent="true"/>
<dl_setting var="stabilization_gains.dd.z" min="0" step="1" max="1000" shortname="ddgain r" param="STABILIZATION_ATTITUDE_PSI_DDGAIN" type="int32" persistent="true"/>
<dl_setting var="att_ref_quat_i.model.omega.p" min="1" step="1" max="1000" unit="rad/s" alt_unit="deg/s" shortname="omega p" param="STABILIZATION_ATTITUDE_REF_OMEGA_P" handler="SetOmegaP" module="stabilization/stabilization_attitude_quat_int"/>
<dl_setting var="att_ref_quat_i.model.zeta.p" min="0.5" step="0.05" max="1.2" shortname="zeta p" param="STABILIZATION_ATTITUDE_REF_ZETA_P" handler="SetZetaP" module="stabilization/stabilization_attitude_quat_int"/>
<dl_setting var="att_ref_quat_i.model.omega.q" min="1" step="1" max="1000" unit="rad/s" alt_unit="deg/s" shortname="omega q" param="STABILIZATION_ATTITUDE_REF_OMEGA_Q" handler="SetOmegaQ" module="stabilization/stabilization_attitude_quat_int"/>
<dl_setting var="att_ref_quat_i.model.zeta.q" min="0.5" step="0.05" max="1.2" shortname="zeta q" param="STABILIZATION_ATTITUDE_REF_ZETA_Q" handler="SetZetaQ" module="stabilization/stabilization_attitude_quat_int"/>
<dl_setting var="att_ref_quat_i.model.omega.r" min="1" step="1" max="1000" unit="rad/s" alt_unit="deg/s" shortname="omega r" param="STABILIZATION_ATTITUDE_REF_OMEGA_R" handler="SetOmegaR" module="stabilization/stabilization_attitude_quat_int"/>
<dl_setting var="att_ref_quat_i.model.zeta.r" min="0.5" step="0.05" max="1.2" shortname="zeta r" param="STABILIZATION_ATTITUDE_REF_ZETA_R" handler="SetZetaR" module="stabilization/stabilization_attitude_quat_int"/>
</dl_settings>
</dl_settings>
</settings>
<autoload name="stabilization" type="rotorcraft"/>
<header>
<file name="stabilization_attitude.h"/>
<file name="stabilization_attitude_quat_int.h"/>
</header>
<init fun="stabilization_attitude_init()"/>
<makefile target="ap|nps" firmware="rotorcraft">
<file name="stabilization_attitude_quat_int.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<file name="stabilization_attitude_ref_quat_int.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<file name="stabilization_attitude_rc_setpoint.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<file name="stabilization_attitude_quat_transformations.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<define name="STABILIZATION_ATTITUDE_TYPE_INT"/>
<define name="STABILIZATION_ATTITUDE_TYPE_H" value="stabilization_attitude_quat_int.h" type="string"/>
</makefile>
</module>
@@ -0,0 +1,21 @@
<!DOCTYPE module SYSTEM "module.dtd">
<module name="stabiliztion_passthrough" dir="stabilization">
<doc>
<description>
Passthrough controller for rotorcraft
</description>
</doc>
<autoload name="stabilization" type="rotorcraft"/>
<header>
<file name="stabilization_attitude_passthrough.h"/>
</header>
<init fun="stabilization_attitude_init()"/>
<makefile target="ap|nps" firmware="rotorcraft">
<file name="stabilization_attutude_passthrough.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<file name="stabilization_attutude_rc_setpoint.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<define name="STABILIZATION_ATTITUDE_NO_REF"/>
<define name="STABILIZATION_ATTITUDE_TYPE_INT"/>
<define name="STABILIZATION_ATTITUDE_TYPE_H" value="stabilization/stabilization_attutude_passthrough.h" type="string"/>
</makefile>
</module>
+44
View File
@@ -0,0 +1,44 @@
<!DOCTYPE module SYSTEM "module.dtd">
<module name="stabiliztion_rate" dir="stabilization">
<doc>
<description>
Rate controller for rotorcraft
</description>
<section name="STABILIZATION_RATE" prefix="STABILIZATION_RATE_">
<define name="SP_MAX_P" value="300" description="max roll rate setpoint" unit="deg/s"/>
<define name="SP_MAX_Q" value="300" description="max pitch rate setpoint" unit="deg/s"/>
<define name="SP_MAX_R" value="240" description="max yaw rate setpoint" unit="deg/s"/>
<define name="DEADBAND_P" value="20" description="deadband on roll rate"/>
<define name="DEADBAND_Q" value="20" description="deadband on pitch rate"/>
<define name="DEADBAND_R" value="200" description="deadband on yaw rate"/>
<define name="GAIN_P" value="1000" description="feedback P roll rate gain"/>
<define name="GAIN_Q" value="1000" description="feedback P pitch rate gain"/>
<define name="GAIN_R" value="800" description="feedback P yaw rate gain"/>
<define name="IGAIN_P" value="75" description="feedback I roll rate gain"/>
<define name="IGAIN_Q" value="75" description="feedback I pitch rate gain"/>
<define name="IGAIN_R" value="50" description="feedback I yaw rate gain"/>
</section>
</doc>
<settings target="ap|nps">
<dl_settings>
<dl_settings NAME="Rate Loop">
<dl_setting var="stabilization_rate_gain.p" min="1" step="1" max="1000" shortname="pgain p" param="STABILIZATION_RATE_GAIN_P" type="int32" persistent="true" module="stabilization/stabilization_rate"/>
<dl_setting var="stabilization_rate_gain.q" min="1" step="1" max="1000" shortname="pgain q" param="STABILIZATION_RATE_GAIN_Q" type="int32" persistent="true"/>
<dl_setting var="stabilization_rate_gain.r" min="1" step="1" max="1000" shortname="pgain r" param="STABILIZATION_RATE_GAIN_R" type="int32" persistent="true"/>
<dl_setting var="stabilization_rate_igain.p" min="0" step="1" max="500" shortname="igain p" param="STABILIZATION_RATE_IGAIN_P" type="int32" persistent="true"/>
<dl_setting var="stabilization_rate_igain.q" min="0" step="1" max="500" shortname="igain q" param="STABILIZATION_RATE_IGAIN_Q" type="int32" persistent="true"/>
<dl_setting var="stabilization_rate_igain.r" min="0" step="1" max="500" shortname="igain r" param="STABILIZATION_RATE_IGAIN_R" type="int32" persistent="true"/>
</dl_settings>
</dl_settings>
</settings>
<autoload name="stabilization" type="rotorcraft"/>
<header>
<file name="stabilization_rate.h"/>
</header>
<init fun="stabilization_rate_init()"/>
<makefile target="ap|nps" firmware="rotorcraft">
<file name="stabilization_rate.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<define name="USE_STABILIZATION_RATE"/>
</makefile>
</module>
+20
View File
@@ -0,0 +1,20 @@
<!DOCTYPE module SYSTEM "module.dtd">
<module name="stabiliztion_rate_indi" dir="stabilization">
<doc>
<description>
Rate INDI controller for rotorcraft
</description>
</doc>
<autoload name="stabilization" type="rotorcraft"/>
<header>
<file name="stabilization_rate_indi.h"/>
</header>
<init fun="stabilization_rate_init()"/>
<makefile target="ap|nps" firmware="rotorcraft">
<file name="stabilization_indi.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<file name="stabilization_rate_indi.c" dir="$(SRC_FIRMWARE)/stabilization"/>
<define name="USE_STABILIZATION_RATE"/>
<define name="STABILIZATION_RATE_INDI" value="true"/>
</makefile>
</module>
+22
View File
@@ -0,0 +1,22 @@
<!DOCTYPE module SYSTEM "module.dtd">
<module name="stabilization_rotorcraft" dir="stabilization">
<doc>
<description>
Base stabilization code for rotorcraft
Also provide the direct mode 'stabilization_none'
As a durty hack, it also provides navigation and guidance: this should be done in the airframe at some point
</description>
</doc>
<autoload name="nav_basic_rotorcraft"/>
<header>
<file name="stabilization.h" dir="firmwares/rotorcraft"/>
<file name="stabilization_none.h"/>
</header>
<init fun="stabilization_init()"/>
<init fun="stabilization_none_init()"/>
<makefile target="ap|nps" firmware="rotorcraft">
<file name="stabilization.c" dir="$(SRC_FIRMWARE)"/>
<file name="stabilization_none.c" dir="$(SRC_FIRMWARE)/stabilization"/>
</makefile>
</module>
+2 -22
View File
@@ -30,6 +30,8 @@
#include <stdint.h>
#include "firmwares/rotorcraft/autopilot.h"
#include "generated/modules.h"
#include "mcu_periph/uart.h"
#include "mcu_periph/sys_time.h"
#include "subsystems/radio_control.h"
@@ -38,16 +40,6 @@
#include "subsystems/electrical.h"
#include "subsystems/settings.h"
#include "subsystems/datalink/telemetry.h"
#include "firmwares/rotorcraft/navigation.h"
#include "firmwares/rotorcraft/guidance.h"
#include "firmwares/rotorcraft/stabilization.h"
#include "firmwares/rotorcraft/stabilization/stabilization_none.h"
#include "firmwares/rotorcraft/stabilization/stabilization_attitude.h"
#if USE_STABILIZATION_RATE
#include "firmwares/rotorcraft/stabilization/stabilization_rate.h"
#endif
#include "generated/settings.h"
@@ -264,18 +256,6 @@ void autopilot_init(void)
gpio_clear(POWER_SWITCH_GPIO); // POWER OFF
#endif
// init GNC stack
// TODO this should be done in modules init
nav_init();
guidance_h_init();
guidance_v_init();
stabilization_init();
stabilization_none_init();
#if USE_STABILIZATION_RATE
stabilization_rate_init();
#endif
stabilization_attitude_init();
// call implementation init
// it will set startup mode
#if USE_GENERATED_AUTOPILOT
@@ -197,13 +197,6 @@ void guidance_h_init(void)
register_periodic_telemetry(DefaultPeriodic, PPRZ_MSG_ID_ROTORCRAFT_TUNE_HOVER, send_tune_hover);
#endif
#if GUIDANCE_INDI
guidance_indi_enter();
#endif
#if HYBRID_NAVIGATION
guidance_hybrid_init();
#endif
}