diff --git a/conf/airframes/ENAC/quadrotor/booz2_g1.xml b/conf/airframes/ENAC/quadrotor/booz2_g1.xml index d3a1f27697..8017f92a94 100644 --- a/conf/airframes/ENAC/quadrotor/booz2_g1.xml +++ b/conf/airframes/ENAC/quadrotor/booz2_g1.xml @@ -5,6 +5,7 @@ + @@ -185,7 +187,6 @@
-
diff --git a/conf/settings/estimation/ins_sonar.xml b/conf/settings/estimation/ins_sonar.xml index 0c016fa593..e709d2c6f5 100644 --- a/conf/settings/estimation/ins_sonar.xml +++ b/conf/settings/estimation/ins_sonar.xml @@ -3,7 +3,7 @@ - + diff --git a/sw/airborne/boards/ardrone/navdata.c b/sw/airborne/boards/ardrone/navdata.c index 4373e6fa80..7e30c91127 100644 --- a/sw/airborne/boards/ardrone/navdata.c +++ b/sw/airborne/boards/ardrone/navdata.c @@ -64,10 +64,9 @@ measures_t navdata; * Sensor sensitivity in m/adc (float) */ #ifndef SONAR_SCALE -#define SONAR_SCALE 0.00034 +#define SONAR_SCALE 0.00047 #endif - // FIXME(ben): there must be a better home for these ssize_t full_write(int fd, const uint8_t *buf, size_t count) { @@ -482,7 +481,7 @@ void navdata_update() // Check if there is a new sonar measurement and update the sonar if (navdata.ultrasound >> 15) { - float sonar_meas = (navdata.ultrasound & 0x7FFF); + float sonar_meas = (float)((navdata.ultrasound & 0x7FFF) - SONAR_OFFSET) * SONAR_SCALE; AbiSendMsgAGL(AGL_SONAR_ARDRONE2_ID, &sonar_meas); } #endif diff --git a/sw/airborne/subsystems/ins/ins_int.c b/sw/airborne/subsystems/ins/ins_int.c index 32143b5a4d..93b94a28be 100644 --- a/sw/airborne/subsystems/ins/ins_int.c +++ b/sw/airborne/subsystems/ins/ins_int.c @@ -230,11 +230,12 @@ void ins_propagate(void) { } static void baro_cb(uint8_t __attribute__((unused)) sender_id, const float *pressure) { - if (!ins_impl.baro_initialized) { + if (!ins_impl.baro_initialized && *pressure > 1e-7) { + // wait for a first positive value ins_impl.qfe = *pressure; ins_impl.baro_initialized = TRUE; } - if (ins_impl.vf_reset) { + if (ins_impl.vf_reset && ins_impl.baro_initialized) { ins_impl.vf_reset = FALSE; ins_impl.qfe = *pressure; vff_realign(0.); @@ -323,7 +324,7 @@ static void sonar_cb(uint8_t __attribute__((unused)) sender_id, const float *dis #ifdef INS_SONAR_VARIANCE_THRESHOLD /* compute variance of error between sonar and baro alt */ - float err = distance + ins_impl.baro_z; // sonar positive up, baro positive down !!!! + float err = *distance + ins_impl.baro_z; // sonar positive up, baro positive down !!!! var_err[var_idx] = err; var_idx = (var_idx + 1) % VAR_ERR_MAX; float var = variance_float(var_err, VAR_ERR_MAX);