paparazzi-commits
[Top][All Lists]
Advanced

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

[paparazzi-commits] [4220] Move generation of booz attitude reference qu


From: Allen Ibara
Subject: [paparazzi-commits] [4220] Move generation of booz attitude reference quaternion from macro to function and add support for
Date: Thu, 01 Oct 2009 19:00:34 +0000

Revision: 4220
          http://svn.sv.gnu.org/viewvc/?view=rev&root=paparazzi&revision=4220
Author:   aibara
Date:     2009-10-01 19:00:31 +0000 (Thu, 01 Oct 2009)
Log Message:
-----------
Move generation of booz attitude reference quaternion from macro to function 
and add support for
setting psi rate from beta vane sensor

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

Modified: 
paparazzi3/trunk/sw/airborne/booz/stabilization/booz_stabilization_attitude.h
===================================================================
--- 
paparazzi3/trunk/sw/airborne/booz/stabilization/booz_stabilization_attitude.h   
    2009-10-01 18:59:14 UTC (rev 4219)
+++ 
paparazzi3/trunk/sw/airborne/booz/stabilization/booz_stabilization_attitude.h   
    2009-10-01 19:00:31 UTC (rev 4220)
@@ -28,6 +28,7 @@
 #include STABILISATION_ATTITUDE_H
 extern void booz_stabilization_attitude_init(void);
 extern void booz_stabilization_attitude_read_rc(bool_t in_flight);
+extern void booz_stabilization_attitude_read_beta_vane(float beta);
 extern void booz_stabilization_attitude_enter(void);
 extern void booz_stabilization_attitude_run(bool_t  in_flight);
 

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-10-01 18:59:14 UTC (rev 4219)
+++ 
paparazzi3/trunk/sw/airborne/booz/stabilization/booz_stabilization_attitude_quat_float.c
    2009-10-01 19:00:31 UTC (rev 4220)
@@ -71,17 +71,55 @@
 
 }
 
+static void reset_psi_ref_from_body(void) {
+    booz_stab_att_sp_euler.psi = booz_ahrs_float.ltp_to_body_euler.psi;
+    booz_stab_att_ref_euler.psi = booz_ahrs_float.ltp_to_body_euler.psi;
+    booz_stab_att_ref_rate.r = 0;
+    booz_stab_att_ref_accel.r = 0;
+}
 
+static void update_quats_from_euler(void) {
+    struct FloatRMat sp_rmat, ref_rmat;
+
+    FLOAT_RMAT_OF_EULERS_312(sp_rmat, booz_stab_att_sp_euler);
+    /*    FLOAT_RMAT_OF_EULERS_321(sp_rmat, _sp);*/
+    FLOAT_QUAT_OF_RMAT(booz_stab_att_sp_quat, sp_rmat);
+
+    FLOAT_RMAT_OF_EULERS_312(ref_rmat, booz_stab_att_ref_euler);
+    FLOAT_QUAT_OF_RMAT(booz_stab_att_ref_quat, ref_rmat);
+}
+
+void booz_stabilization_attitude_read_beta_vane(float beta)
+{
+  booz_stab_att_ref_rate.r += beta / 4;
+  update_quats_from_euler();
+}
+
 void booz_stabilization_attitude_read_rc(bool_t in_flight) {
 
-  BOOZ_STABILIZATION_ATTITUDE_READ_RC(booz_stab_att_sp_euler, in_flight);
+    booz_stab_att_sp_euler.phi   = radio_control.values[RADIO_CONTROL_ROLL]  * 
ROLL_COEF;
+    booz_stab_att_sp_euler.theta = radio_control.values[RADIO_CONTROL_PITCH] * 
PITCH_COEF;
 
+    if (in_flight) {
+      if (YAW_DEADBAND_EXCEEDED()) {
+        booz_stab_att_sp_euler.psi += radio_control.values[RADIO_CONTROL_YAW] 
* YAW_COEF;
+        FLOAT_ANGLE_NORMALIZE(booz_stab_att_sp_euler.psi);
+      }
+    } else { /* if not flying, use current yaw as setpoint */
+      reset_psi_ref_from_body();
+      booz_stab_att_ref_rate.r = 
RC_UPDATE_FREQ*radio_control.values[RADIO_CONTROL_YAW]*YAW_COEF;
+    }
+
+    update_quats_from_euler();
 }
 
 
+
 void booz_stabilization_attitude_enter(void) {
 
-  BOOZ_STABILIZATION_ATTITUDE_RESET_PSI_REF(  booz_stab_att_sp_euler );
+  reset_psi_ref_from_body();
+  update_quats_from_euler();
+  
   FLOAT_EULERS_ZERO( booz_stabilization_att_sum_err );
   FLOAT_QUAT_ZERO( booz_stabilization_sum_err );
   

Modified: 
paparazzi3/trunk/sw/airborne/booz/stabilization/booz_stabilization_attitude_ref_quat_float.h
===================================================================
--- 
paparazzi3/trunk/sw/airborne/booz/stabilization/booz_stabilization_attitude_ref_quat_float.h
        2009-10-01 18:59:14 UTC (rev 4219)
+++ 
paparazzi3/trunk/sw/airborne/booz/stabilization/booz_stabilization_attitude_ref_quat_float.h
        2009-10-01 19:00:31 UTC (rev 4220)
@@ -40,46 +40,6 @@
    radio_control.values[RADIO_CONTROL_YAW] < 
-BOOZ_STABILIZATION_ATTITUDE_DEADBAND_R)
 
 
-#define BOOZ_STABILIZATION_ATTITUDE_RESET_PSI_REF(_sp) {               \
-    _sp.psi = booz_ahrs_float.ltp_to_body_euler.psi;   \
-    booz_stab_att_ref_euler.psi = _sp.psi;                             \
-    booz_stab_att_ref_rate.r = 0;                                      \
-    booz_stab_att_ref_accel.r = 0;                                     \
-    struct FloatRMat   sp_rmat;                                                
\
-    FLOAT_RMAT_OF_EULERS_312(sp_rmat, _sp);                            \
-    /*    FLOAT_RMAT_OF_EULERS_321(sp_rmat, _sp);*/                    \
-    FLOAT_QUAT_OF_RMAT(booz_stab_att_sp_quat, sp_rmat);                        
\
-    FLOAT_RMAT_OF_EULERS_312(sp_rmat, booz_stab_att_ref_euler);                
                \
-    FLOAT_QUAT_OF_RMAT(booz_stab_att_ref_quat, sp_rmat);               \
-  }
-
-
-#define BOOZ_STABILIZATION_ATTITUDE_READ_RC(_sp, _inflight) {          \
-                                                                       \
-    _sp.phi   = radio_control.values[RADIO_CONTROL_ROLL]  * ROLL_COEF; \
-    _sp.theta = radio_control.values[RADIO_CONTROL_PITCH] * PITCH_COEF; \
-    if (_inflight) {                                                   \
-      if (YAW_DEADBAND_EXCEEDED()) {                                   \
-       _sp.psi += radio_control.values[RADIO_CONTROL_YAW] * YAW_COEF;  \
-       FLOAT_ANGLE_NORMALIZE(_sp.psi);                                 \
-      }                                                                        
\
-      struct FloatRMat   sp_rmat;                                      \
-      FLOAT_RMAT_OF_EULERS_312(sp_rmat, _sp);                          \
-      /*FLOAT_RMAT_OF_EULERS_321(sp_rmat, _sp);*/                      \
-      FLOAT_QUAT_OF_RMAT(booz_stab_att_sp_quat, sp_rmat);              \
-      /*FLOAT_EULERS_OF_QUAT(sp_euler321, sp_quat);*/                  \
-    }                                                                  \
-    else { /* if not flying, use current yaw as setpoint */            \
-      BOOZ_STABILIZATION_ATTITUDE_RESET_PSI_REF(_sp);                  \
-      if (YAW_DEADBAND_EXCEEDED()) {                                   \
-       booz_stab_att_ref_rate.r = 
RC_UPDATE_FREQ*radio_control.values[RADIO_CONTROL_YAW]*YAW_COEF; \
-      }                                                                        
\
-    }                                                                  \
-                                                                       \
-  }
-
-
-
 #endif /* BOOZ_STABILIZATION_ATTITUDE_REF_QUAT_FLOAT_H */
 
 





reply via email to

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