paparazzi-commits
[Top][All Lists]
Advanced

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

[paparazzi-commits] [4037] hfilter realignment possible and better debug


From: Felix Ruess
Subject: [paparazzi-commits] [4037] hfilter realignment possible and better debug msg handling
Date: Mon, 31 Aug 2009 18:47:35 +0000

Revision: 4037
          http://svn.sv.gnu.org/viewvc/?view=rev&root=paparazzi&revision=4037
Author:   flixr
Date:     2009-08-31 18:47:32 +0000 (Mon, 31 Aug 2009)
Log Message:
-----------
hfilter realignment possible and better debug msg handling

Modified Paths:
--------------
    paparazzi3/trunk/conf/settings/settings_booz2.xml
    paparazzi3/trunk/sw/airborne/booz/booz2_ins.c
    paparazzi3/trunk/sw/airborne/booz/booz2_ins.h
    paparazzi3/trunk/sw/airborne/booz/ins/booz2_hf_float.c
    paparazzi3/trunk/sw/airborne/booz/ins/booz2_hf_float.h

Modified: paparazzi3/trunk/conf/settings/settings_booz2.xml
===================================================================
--- paparazzi3/trunk/conf/settings/settings_booz2.xml   2009-08-31 18:47:17 UTC 
(rev 4036)
+++ paparazzi3/trunk/conf/settings/settings_booz2.xml   2009-08-31 18:47:32 UTC 
(rev 4037)
@@ -34,24 +34,18 @@
       <dl_setting var="booz2_guidance_v_kp" min="-600" step="1" max="0"   
module="guidance/booz2_guidance_v" shortname="kp"/>
       <dl_setting var="booz2_guidance_v_kd" min="-600" step="1" max="0"   
module="guidance/booz2_guidance_v" shortname="kd"/>
       <dl_setting var="booz2_guidance_v_ki" min="-300" step="1" max="0"   
module="guidance/booz2_guidance_v" shortname="ki" handler="SetKi" />
-      <dl_setting var="booz2_guidance_v_z_sp" min="-5" step="0.5" max="3" 
module="guidance/booz2_guidance_v" 
-       shortname="sp" unit="2e-8m" alt_unit="m" alt_unit_coef="0.00390625"/>
+      <dl_setting var="booz2_guidance_v_z_sp" min="-5" step="0.5" max="3" 
module="guidance/booz2_guidance_v" shortname="sp" unit="2e-8m" alt_unit="m" 
alt_unit_coef="0.00390625"/>
       <dl_setting var="booz_ins_vff_realign" min="0" step="1" max="1" 
module="booz2_ins" shortname="vff_realign" values="OFF|ON"/>
    </dl_settings>
 
    <dl_settings NAME="Horiz Loop">
-      <dl_setting var="booz2_guidance_h_pos_sp.x" MIN="-10" MAX="10" STEP="1"  
module="guidance/booz2_guidance_h" 
-                 shortname="sp_x_ned" unit="1/2^8m" alt_unit="m" 
alt_unit_coef="0.00390625"/>
-      <dl_setting var="booz2_guidance_h_pos_sp.y" MIN="-10" MAX="10" STEP="1"  
module="guidance/booz2_guidance_h" 
-                 shortname="sp_y_ned" unit="1/2^8m" alt_unit="m" 
alt_unit_coef="0.00390625"/>
-      <dl_setting var="booz2_guidance_h_psi_sp" MIN="-180" MAX="180" STEP="5"  
module="guidance/booz2_guidance_h" 
-                 shortname="sp_psi" unit="1/2^20r" alt_unit="deg" 
alt_unit_coef="0.000054641513360"/>
-      <dl_setting var="booz2_guidance_h_pgain" min="-400" step="1" max="0" 
module="guidance/booz2_guidance_h" 
-                 shortname="kp"/>
-      <dl_setting var="booz2_guidance_h_dgain" min="-400" step="1" max="0" 
module="guidance/booz2_guidance_h" 
-                 shortname="kd"/>
-      <dl_setting var="booz2_guidance_h_igain" min="-400" step="1" max="0" 
module="guidance/booz2_guidance_h" 
-                  shortname="ki" handler="SetKi"/>
+      <dl_setting var="booz2_guidance_h_pos_sp.x" MIN="-10" MAX="10" STEP="1"  
module="guidance/booz2_guidance_h" shortname="sp_x_ned" unit="1/2^8m" 
alt_unit="m" alt_unit_coef="0.00390625"/>
+      <dl_setting var="booz2_guidance_h_pos_sp.y" MIN="-10" MAX="10" STEP="1"  
module="guidance/booz2_guidance_h" shortname="sp_y_ned" unit="1/2^8m" 
alt_unit="m" alt_unit_coef="0.00390625"/>
+      <dl_setting var="booz2_guidance_h_psi_sp" MIN="-180" MAX="180" STEP="5"  
module="guidance/booz2_guidance_h" shortname="sp_psi" unit="1/2^20r" 
alt_unit="deg" alt_unit_coef="0.000054641513360"/>
+      <dl_setting var="booz2_guidance_h_pgain" min="-400" step="1" max="0" 
module="guidance/booz2_guidance_h" shortname="kp"/>
+      <dl_setting var="booz2_guidance_h_dgain" min="-400" step="1" max="0" 
module="guidance/booz2_guidance_h" shortname="kd"/>
+      <dl_setting var="booz2_guidance_h_igain" min="-400" step="1" max="0" 
module="guidance/booz2_guidance_h" shortname="ki" handler="SetKi"/>
+         <dl_setting var="booz_ins_hff_realign" min="0" step="1" max="1" 
module="booz2_ins" shortname="hff_realign" values="OFF|ON"/>
    </dl_settings>
 
     <dl_settings NAME="Analog Baro">

Modified: paparazzi3/trunk/sw/airborne/booz/booz2_ins.c
===================================================================
--- paparazzi3/trunk/sw/airborne/booz/booz2_ins.c       2009-08-31 18:47:17 UTC 
(rev 4036)
+++ paparazzi3/trunk/sw/airborne/booz/booz2_ins.c       2009-08-31 18:47:32 UTC 
(rev 4037)
@@ -42,7 +42,12 @@
 #include "ins/booz2_hf_float.h"
 #endif
 
+#ifdef SITL
+#include "nps_fdm.h"
+#include <stdio.h>
+#endif
 
+
 #include "math/pprz_geodetic_int.h"
 
 #include "flight_plan.h"
@@ -57,6 +62,7 @@
 struct FloatVect2 booz_ins_gps_pos_m_ned;
 struct FloatVect2 booz_ins_gps_speed_m_s_ned;
 #endif
+bool_t booz_ins_hff_realign;
 
 /* barometer                   */
 #ifdef USE_VFF
@@ -91,6 +97,7 @@
 #endif
 #ifdef USE_HFF
   b2_hff_init(0., 0., 0., 0.);
+  booz_ins_hff_realign = FALSE;
 #endif
   INT32_VECT3_ZERO(booz_ins_ltp_pos);
   INT32_VECT3_ZERO(booz_ins_ltp_speed);
@@ -195,6 +202,17 @@
        VECT2_SDIV(booz_ins_gps_pos_m_ned, booz_ins_gps_pos_m_ned, 100.);
        VECT2_ASSIGN(booz_ins_gps_speed_m_s_ned, booz_ins_gps_speed_cm_s_ned.x, 
booz_ins_gps_speed_cm_s_ned.y);
     VECT2_SDIV(booz_ins_gps_speed_m_s_ned, booz_ins_gps_speed_m_s_ned, 100.);
+       if (booz_ins_hff_realign) {
+      booz_ins_hff_realign = FALSE;
+#ifdef SITL
+         struct FloatVect2 true_pos, true_speed;
+         VECT2_COPY(true_pos, fdm.ltpprz_pos);
+         VECT2_COPY(true_speed, fdm.ltpprz_ecef_vel);
+         b2_hff_realign(true_pos, true_speed);
+#else
+         b2_hff_realign(booz_ins_gps_pos_m_ned, booz_ins_gps_speed_m_s_ned);
+#endif
+       }
        b2_hff_update_gps();
     booz_ins_ltp_accel.x = ACCEL_BFP_OF_REAL(b2_hff_state.xdotdot);
     booz_ins_ltp_accel.y = ACCEL_BFP_OF_REAL(b2_hff_state.ydotdot);

Modified: paparazzi3/trunk/sw/airborne/booz/booz2_ins.h
===================================================================
--- paparazzi3/trunk/sw/airborne/booz/booz2_ins.h       2009-08-31 18:47:17 UTC 
(rev 4036)
+++ paparazzi3/trunk/sw/airborne/booz/booz2_ins.h       2009-08-31 18:47:32 UTC 
(rev 4037)
@@ -55,6 +55,7 @@
 extern struct FloatVect2 booz_ins_gps_pos_m_ned;
 extern struct FloatVect2 booz_ins_gps_speed_m_s_ned;
 #endif
+extern bool_t  booz_ins_hff_realign;
 
 extern void booz_ins_init( void );
 extern void booz_ins_periodic( void );

Modified: paparazzi3/trunk/sw/airborne/booz/ins/booz2_hf_float.c
===================================================================
--- paparazzi3/trunk/sw/airborne/booz/ins/booz2_hf_float.c      2009-08-31 
18:47:17 UTC (rev 4036)
+++ paparazzi3/trunk/sw/airborne/booz/ins/booz2_hf_float.c      2009-08-31 
18:47:32 UTC (rev 4037)
@@ -27,16 +27,19 @@
 #include "booz_imu.h"
 #include "booz_ahrs.h"
 #include <stdlib.h>
+
+#ifdef SITL
 #include <stdio.h>
+#define DBG_LEVEL 1
+#define PRINT_DBG(_l, _p) {                                            \
+       if (DBG_LEVEL >= _l)                                            \
+         printf _p;                                                            
\
+}
+#else
+#define PRINT_DBG(_l, _p) {}
+#endif
 
 
-
-#define PRINT_DBG 0
-
-/* horizontal filter propagation frequency */
-#define HFF_FREQ (512./HFF_PRESCALER)
-#define DT_HFILTER (1./HFF_FREQ)
-
 /* initial covariance diagonal */
 #define INIT_PXX 1.
 /* process noise (is the same for x and y)*/
@@ -225,12 +228,10 @@
 static inline void b2_hff_get_past_accel(unsigned int back_n) {
   int i;
   if (back_n > acc_buf_n) {
-       if (PRINT_DBG)
-         printf("Cannot go back %d steps, going back only %d instead!\n", 
back_n, acc_buf_n);
+       PRINT_DBG(1, ("Cannot go back %d steps, going back only %d instead!\n", 
back_n, acc_buf_n));
        back_n = acc_buf_n;
   } else if (back_n == 0) {
-       if (PRINT_DBG)
-         printf("Cannot go back zero steps!\n");
+       PRINT_DBG(1, ("Cannot go back zero steps!\n"));
        return;
   }
   if ((int)(acc_buf_w - back_n) < 0)
@@ -239,6 +240,7 @@
        i = acc_buf_w - back_n;
   b2_hff_xdd_meas = past_accel[i].x;
   b2_hff_ydd_meas = past_accel[i].y;
+  PRINT_DBG(3, ("get past accel. buf_n: %2d \tbuf_w: %2d \tback_n: %2d \ti: 
%2d \txdd: %f \tydd: %f\n", acc_buf_n, acc_buf_w, back_n, i, b2_hff_xdd_meas, 
b2_hff_ydd_meas));
 }
 
 static inline void b2_hff_rb_put_state(struct HfilterFloat* source) {
@@ -256,8 +258,7 @@
   } else {
        INC_RB_POINTER(b2_hff_rb_last);
   }
-  if (PRINT_DBG)
-       printf("put state. fill count now: %d\n", b2_hff_rb_n);
+  PRINT_DBG(2, ("put state. fill count now: %d\n", b2_hff_rb_n));
 }
 
 static inline void b2_hff_rb_drop_last(void) {
@@ -265,13 +266,11 @@
        INC_RB_POINTER(b2_hff_rb_last);
        b2_hff_rb_n--;
   } else {
-       if (PRINT_DBG)
-         printf("hff ringbuffer empty!\n");
+       PRINT_DBG(2, ("hff ringbuffer empty!\n"));
        b2_hff_rb_last->lag_counter = 0;
        b2_hff_rb_last->rollback = FALSE;
   }
-  if (PRINT_DBG)
-       printf("drop last state. fill count now: %d\n", b2_hff_rb_n);
+  PRINT_DBG(2, ("drop last state. fill count now: %d\n", b2_hff_rb_n));
 }
 
 
@@ -292,28 +291,24 @@
 }
 
 static inline void b2_hff_propagate_past(struct HfilterFloat* hff_past) {
-  if (PRINT_DBG)
-       printf("enter propagate past: %d\n", hff_past->lag_counter);
+  PRINT_DBG(1, ("enter propagate past: %d\n", hff_past->lag_counter));
   /* run max MAX_PP_STEPS propagation steps */
   for (int i=0; i < MAX_PP_STEPS; i++) {
        if (hff_past->lag_counter > 0) {
          b2_hff_get_past_accel(hff_past->lag_counter);
-         //if (PRINT_DBG)
-         //printf("propagate past: %d\n", hff_past->lag_counter);
+         PRINT_DBG(2, ("propagate past: %d\n", hff_past->lag_counter));
          b2_hff_propagate_x(hff_past);
          b2_hff_propagate_y(hff_past);
          hff_past->lag_counter--;
 
          if (past_save_counter == 0) {
                /* next GPS measurement valid at this state -> save */
-               if (PRINT_DBG)
-                 printf("save past state\n");
+               PRINT_DBG(2, ("save past state\n"));
                b2_hff_rb_put_state(hff_past);
                past_save_counter = -1;
          } else if (past_save_counter > 0) {
                past_save_counter--;
-               //if (PRINT_DBG)
-               //printf("dec past_save_counter: %d\n", past_save_counter);
+               PRINT_DBG(2, ("dec past_save_counter: %d\n", 
past_save_counter));
          } else {
                /* increase lag counter on if next state is already saved */
                if (hff_past == &b2_hff_rb[HFF_RB_MAXN-1])
@@ -366,6 +361,7 @@
          b2_hff_propagate_x(&b2_hff_state);
          b2_hff_propagate_y(&b2_hff_state);
        }
+
 #ifdef GPS_LAG
        /* increase lag counter on last saved state */
        if (b2_hff_rb_n > 0)
@@ -373,8 +369,7 @@
 
        /* save filter state if needed */
        if (save_counter == 0) {
-         if (PRINT_DBG)
-               printf("save current state\n");
+         PRINT_DBG(1, ("save current state\n"));
          b2_hff_rb_put_state(&b2_hff_state);
          save_counter = -1;
        } else if (save_counter > 0) {
@@ -396,8 +391,7 @@
   if (b2_hff_rb_n > 0) {
        /* roll back if state was saved approx when GPS was valid */
        lag_counter_err = b2_hff_rb_last->lag_counter - GPS_LAG_N;
-       //if (PRINT_DBG)
-       //printf("update. rb_n: %d   lag cnt err: %d\n", b2_hff_rb_n, 
lag_counter_err);
+       PRINT_DBG(2, ("update. rb_n: %d  lag_counter: %d  lag_cnt_err: %d\n", 
b2_hff_rb_n, b2_hff_rb_last->lag_counter, lag_counter_err));
        if (abs(lag_counter_err) < 3) {
          b2_hff_rb_last->rollback = TRUE;
          b2_hff_update_x(b2_hff_rb_last, booz_ins_gps_pos_m_ned.x);
@@ -407,19 +401,18 @@
          b2_hff_update_ydot(b2_hff_rb_last, booz_ins_gps_speed_m_s_ned.y);
 #endif
          past_save_counter = GPS_DT_N-1 + lag_counter_err;
-         if (PRINT_DBG)
-               printf("gps updated. past_save_counter: %d\n", 
past_save_counter);
+         PRINT_DBG(2, ("gps updated. past_save_counter: %d\n", 
past_save_counter));
          b2_hff_propagate_past(b2_hff_rb_last);
        } else if (lag_counter_err >= GPS_DT_N-2) {
          /* apparently missed a GPS update, try next saved state */
+         PRINT_DBG(2, ("try next saved state\n"));
          b2_hff_rb_drop_last();
          b2_hff_update_gps();
        }
   } else if (save_counter < 0) {
        /* ringbuffer empty -> save output filter state at next GPS validity 
point in time */
        save_counter = GPS_DT_N-1 - (GPS_LAG_N % GPS_DT_N);
-       if (PRINT_DBG)
-         printf("rb empty, save counter set: %d\n", save_counter);
+       PRINT_DBG(2, ("rb empty, save counter set: %d\n", save_counter));
   }
 
 #else /* GPS_LAG */
@@ -435,7 +428,21 @@
 }
 
 
+void b2_hff_realign(struct FloatVect2 pos, struct FloatVect2 speed) {
+  b2_hff_state.x = pos.x;
+  b2_hff_state.y = pos.y;
+  b2_hff_state.xdot = speed.x;
+  b2_hff_state.ydot = speed.y;
+#ifdef GPS_LAG
+  while (b2_hff_rb_n > 0) {
+       b2_hff_rb_drop_last();
+  }
+  save_counter = -1;
+  past_save_counter = -1;
+#endif
+}
 
+
 /*
  *
  * Propagation

Modified: paparazzi3/trunk/sw/airborne/booz/ins/booz2_hf_float.h
===================================================================
--- paparazzi3/trunk/sw/airborne/booz/ins/booz2_hf_float.h      2009-08-31 
18:47:17 UTC (rev 4036)
+++ paparazzi3/trunk/sw/airborne/booz/ins/booz2_hf_float.h      2009-08-31 
18:47:32 UTC (rev 4037)
@@ -33,6 +33,10 @@
 #define HFF_PRESCALER 16
 #endif
 
+/* horizontal filter propagation frequency */
+#define HFF_FREQ (512./HFF_PRESCALER)
+#define DT_HFILTER (1./HFF_FREQ)
+
 #define B2_HFF_UPDATE_SPEED
 
 struct HfilterFloat {





reply via email to

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