Flying Quadshot with INDI and adaptive gains

And removed trailing whitespace
This commit is contained in:
Ewoud Smeur
2017-10-19 13:21:12 +02:00
parent d56e0978b3
commit 93a9608c3b
2 changed files with 17 additions and 14 deletions
@@ -4,10 +4,10 @@
<airframe name="quadshot aspirin 2.1 spektrum"> <airframe name="quadshot aspirin 2.1 spektrum">
<servos driver="Pwm"> <servos driver="Pwm">
<servo name="A1" no="0" min="1000" neutral="1100" max="2000"/> <servo name="A1" no="0" min="1000" neutral="1100" max="1600"/>
<servo name="A2" no="1" min="1000" neutral="1100" max="2000"/> <servo name="A2" no="1" min="1000" neutral="1100" max="1600"/>
<servo name="B1" no="2" min="1000" neutral="1100" max="2000"/> <servo name="B1" no="2" min="1000" neutral="1100" max="1600"/>
<servo name="B2" no="3" min="1000" neutral="1100" max="2000"/> <servo name="B2" no="3" min="1000" neutral="1100" max="1600"/>
<!-- <servo name="A1" no="0" min="1000" neutral="1000" max="2000"/> <!-- <servo name="A1" no="0" min="1000" neutral="1000" max="2000"/>
<servo name="A2" no="1" min="1000" neutral="1000" max="2000"/> <servo name="A2" no="1" min="1000" neutral="1000" max="2000"/>
<servo name="B1" no="2" min="1000" neutral="1000" max="2000"/> <servo name="B1" no="2" min="1000" neutral="1000" max="2000"/>
@@ -41,16 +41,16 @@
<let var="elevator_feedback_right" value="+@PITCH"/> <let var="elevator_feedback_right" value="+@PITCH"/>
<!-- Here the gains are defined for the two feedback cases, hover and forward--> <!-- Here the gains are defined for the two feedback cases, hover and forward-->
<let var="hover_left" value="15*$aileron_feedback_left"/> <let var="hover_left" value="10*$aileron_feedback_left"/>
<let var="hover_right" value="15*$aileron_feedback_right"/> <let var="hover_right" value="10*$aileron_feedback_right"/>
<!-- if using INDI --> <!-- if using INDI -->
<!-- <let var="forward_left" value="aileron_gain*$aileron_feedback_left+elevator_gain*$elevator_feedback_left"/> <!-- <let var="forward_left" value="aileron_gain*$aileron_feedback_left+elevator_gain*$elevator_feedback_left"/>
<let var="forward_right" value="aileron_gain*$aileron_feedback_right+elevator_gain*$elevator_feedback_right"/>--> <let var="forward_right" value="aileron_gain*$aileron_feedback_right+elevator_gain*$elevator_feedback_right"/>-->
<!-- if using PID with gain scheduling --> <!-- if using PID with gain scheduling -->
<let var="forward_left" value="5*$aileron_feedback_left + 4*$elevator_feedback_left"/> <let var="forward_left" value="3*$aileron_feedback_left + 4*$elevator_feedback_left"/>
<let var="forward_right" value="5*$aileron_feedback_right + 4*$elevator_feedback_right"/> <let var="forward_right" value="3*$aileron_feedback_right + 4*$elevator_feedback_right"/>
<!-- This statement tells the autopilot to use the hover feedback if in mode attitude direct and to use the forward feedback in all other cases--> <!-- This statement tells the autopilot to use the hover feedback if in mode attitude direct and to use the forward feedback in all other cases-->
<set servo="ELEVON_LEFT" value="AP_MODE == AP_MODE_ATTITUDE_DIRECT ? $hover_left : $forward_left" /> <set servo="ELEVON_LEFT" value="AP_MODE == AP_MODE_ATTITUDE_DIRECT ? $hover_left : $forward_left" />
@@ -218,9 +218,9 @@
<define name="DEADBAND_A" value="250"/> <define name="DEADBAND_A" value="250"/>
<define name="SP_PSI_DELTA_LIMIT" value="90" unit="deg"/> <define name="SP_PSI_DELTA_LIMIT" value="90" unit="deg"/>
<!-- control effectiveness --> <!-- control effectiveness -->
<define name="G1_P" value="0.025"/> <define name="G1_P" value="0.0179"/>
<define name="G1_Q" value="0.0833"/> <define name="G1_Q" value="0.0708"/>
<define name="G1_R" value="0.00588"/> <define name="G1_R" value="0.0095"/>
<define name="G2_R" value="0.0"/> <define name="G2_R" value="0.0"/>
<!-- reference acceleration for attitude control --> <!-- reference acceleration for attitude control -->
<define name="REF_ERR_P" value="70.0"/> <define name="REF_ERR_P" value="70.0"/>
@@ -237,7 +237,7 @@
<define name="ACT_DYN_Q" value="0.03"/> <define name="ACT_DYN_Q" value="0.03"/>
<define name="ACT_DYN_R" value="0.03"/> <define name="ACT_DYN_R" value="0.03"/>
<!-- Adaptive Learning Rate --> <!-- Adaptive Learning Rate -->
<define name="USE_ADAPTIVE" value="FALSE"/> <define name="USE_ADAPTIVE" value="TRUE"/>
<define name="ADAPTIVE_MU" value="0.0001"/> <define name="ADAPTIVE_MU" value="0.0001"/>
</section> </section>
@@ -261,6 +261,9 @@
<define name="H_X" value="0.39049610"/> <define name="H_X" value="0.39049610"/>
<define name="H_Y" value="0.00278894"/> <define name="H_Y" value="0.00278894"/>
<define name="H_Z" value="0.92060036"/> <define name="H_Z" value="0.92060036"/>
<!-- For vibrating airfames -->
<define name="GRAVITY_HEURISTIC_FACTOR" value="0"/>
</section> </section>
<!-- Gains for horizontal navigation--> <!-- Gains for horizontal navigation-->
@@ -341,7 +344,7 @@
<module name="radio_control" type="spektrum"> <module name="radio_control" type="spektrum">
<define name="RADIO_KILL_SWITCH" value="5"/> <define name="RADIO_KILL_SWITCH" value="5"/>
<!-- Put the mode on channel AUX1--> <!-- Put the mode on channel AUX1-->
<define name="RADIO_MODE" value="6"/> <define name="RADIO_MODE" value="4"/>
<!-- <configure name="USE_SECONDARY_SPEKTRUM_RECEIVER" value="1"/> --> <!-- <configure name="USE_SECONDARY_SPEKTRUM_RECEIVER" value="1"/> -->
</module> </module>
@@ -351,7 +351,7 @@ static inline void stabilization_indi_calc_cmd(int32_t indi_commands[], struct I
Bound(indi.u_in.q, -9600, 9600); Bound(indi.u_in.q, -9600, 9600);
float rlim = 9600 - fabs(indi.u_in.q); float rlim = 9600 - fabs(indi.u_in.q);
Bound(indi.u_in.r, -rlim, rlim); Bound(indi.u_in.r, -rlim, rlim);
Bound(indi.u_in.r, -9600, 9600); Bound(indi.u_in.r, -9600, 9600);
#else #else
Bound(indi.u_in.p, -4500, 4500); Bound(indi.u_in.p, -4500, 4500);
Bound(indi.u_in.q, -4500, 4500); Bound(indi.u_in.q, -4500, 4500);