paparazzi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[paparazzi-commits] [4129] Re-enable igain for quaternion controller, m


From: Allen Ibara
Subject: [paparazzi-commits] [4129] Re-enable igain for quaternion controller, maybe should be switched to addition instead of multiplication
Date: Wed, 09 Sep 2009 18:07:51 +0000

Revision: 4129
          http://svn.sv.gnu.org/viewvc/?view=rev&root=paparazzi&revision=4129
Author:   aibara
Date:     2009-09-09 18:07:50 +0000 (Wed, 09 Sep 2009)
Log Message:
-----------
Re-enable igain for quaternion controller, maybe should be switched to addition 
instead of multiplication

Modified Paths:
--------------
    
paparazzi3/trunk/sw/airborne/booz/stabilization/booz_stabilization_attitude_quat_float.c

Modified: 
paparazzi3/trunk/sw/airborne/booz/stabilization/booz_stabilization_attitude_quat_float.c
===================================================================
--- 
paparazzi3/trunk/sw/airborne/booz/stabilization/booz_stabilization_attitude_quat_float.c
    2009-09-09 17:58:03 UTC (rev 4128)
+++ 
paparazzi3/trunk/sw/airborne/booz/stabilization/booz_stabilization_attitude_quat_float.c
    2009-09-09 18:07:50 UTC (rev 4129)
@@ -35,6 +35,7 @@
 struct FloatVect3  booz_stabilization_dgain;
 struct FloatVect3  booz_stabilization_ddgain;
 struct FloatVect3  booz_stabilization_igain;
+struct FloatQuat   booz_stabilization_sum_err;
 struct FloatEulers booz_stabilization_att_sum_err;
 
 float booz_stabilization_att_fb_cmd[COMMANDS_NB];
@@ -65,6 +66,7 @@
               BOOZ_STABILIZATION_ATTITUDE_THETA_DDGAIN,
               BOOZ_STABILIZATION_ATTITUDE_PSI_DDGAIN);
 
+  FLOAT_QUAT_ZERO( booz_stabilization_sum_err );
   FLOAT_EULERS_ZERO( booz_stabilization_att_sum_err );
 
 }
@@ -81,10 +83,13 @@
 
   BOOZ_STABILIZATION_ATTITUDE_RESET_PSI_REF(  booz_stab_att_sp_euler );
   FLOAT_EULERS_ZERO( booz_stabilization_att_sum_err );
+  FLOAT_QUAT_ZERO( booz_stabilization_sum_err );
   
 }
 
 
+#define IERROR_SCALE 1024
+
 #define MAX_SUM_ERR RadOfDeg(56000)
 #include <stdio.h>
 void booz_stabilization_attitude_run(bool_t  in_flight) {
@@ -120,13 +125,20 @@
   FLOAT_QUAT_WRAP_SHORTEST(att_err);  
 
   if (in_flight) {
+    struct FloatQuat new_sum_err, scaled_att_err;
     /* update accumulator */
-    //    EULERS_ADD(booz_stabilization_att_sum_err, err);
-    EULERS_BOUND_CUBE(booz_stabilization_att_sum_err, -MAX_SUM_ERR, 
MAX_SUM_ERR);
+    FLOAT_QUAT_COPY(scaled_att_err, att_err);
+    scaled_att_err.qx /= IERROR_SCALE;
+    scaled_att_err.qy /= IERROR_SCALE;
+    scaled_att_err.qz /= IERROR_SCALE;
+    FLOAT_QUAT_COMP_INV(new_sum_err, booz_stabilization_sum_err, 
scaled_att_err);
+    FLOAT_QUAT_NORMALISE(new_sum_err);
+    FLOAT_QUAT_COPY(booz_stabilization_sum_err, new_sum_err);
   }
   else {
     /* reset accumulator */
     FLOAT_EULERS_ZERO(booz_stabilization_att_sum_err);
+    FLOAT_QUAT_ZERO( booz_stabilization_sum_err );
   }
   
   /*  rate error                */
@@ -136,18 +148,18 @@
   /*  PID                  */
   booz_stabilization_att_fb_cmd[COMMAND_ROLL] = 
     -2. * booz_stabilization_pgain.x  * QUAT1_BFP_OF_REAL(att_err.qx)+
-    booz_stabilization_dgain.x  * RATE_BFP_OF_REAL(rate_err.p) /*+
-    booz_stabilization_igain.x  * booz_stabilization_att_sum_err.phi / 1024.*/;
+    booz_stabilization_dgain.x  * RATE_BFP_OF_REAL(rate_err.p) +
+    booz_stabilization_igain.x  * 
QUAT1_BFP_OF_REAL(booz_stabilization_sum_err.qx);
 
   booz_stabilization_att_fb_cmd[COMMAND_PITCH] = 
     -2. * booz_stabilization_pgain.y  * QUAT1_BFP_OF_REAL(att_err.qy)+
-    booz_stabilization_dgain.y  * RATE_BFP_OF_REAL(rate_err.q) /*+
-    booz_stabilization_igain.y  * booz_stabilization_att_sum_err.theta / 
1024.*/;
+    booz_stabilization_dgain.y  * RATE_BFP_OF_REAL(rate_err.q) +
+    booz_stabilization_igain.y  * 
QUAT1_BFP_OF_REAL(booz_stabilization_sum_err.qy);
   
   booz_stabilization_att_fb_cmd[COMMAND_YAW] = 
     -2. * booz_stabilization_pgain.z  * QUAT1_BFP_OF_REAL(att_err.qz)+
-    booz_stabilization_dgain.z  * RATE_BFP_OF_REAL(rate_err.r) /*+
-    booz_stabilization_igain.z  * booz_stabilization_att_sum_err.psi / 1024.*/;
+    booz_stabilization_dgain.z  * RATE_BFP_OF_REAL(rate_err.r) +
+    booz_stabilization_igain.z  * 
QUAT1_BFP_OF_REAL(booz_stabilization_sum_err.qz);
 
 
   booz_stabilization_cmd[COMMAND_ROLL] = 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]