From: Keith Packard Date: Wed, 13 May 2009 18:00:43 +0000 (-0700) Subject: Accelerometer-based velocity values are invalid after apogee X-Git-Tag: 0.2~8 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=8168820b667cc1deffab64dd81cb4e6e2e6eabe4 Accelerometer-based velocity values are invalid after apogee Because the orientation of the flight computer relative to the ground is unknown after apogee, the accelerometer data cannot be integrated to compute velocity. Main deploy is now based purely on barometric altitude and landing detection no longer checks for a low velocity value. Signed-off-by: Keith Packard --- diff --git a/ao_flight.c b/ao_flight.c index d50d37e3..0b47bfa5 100644 --- a/ao_flight.c +++ b/ao_flight.c @@ -377,13 +377,17 @@ ao_flight(void) /* drogue to main deploy: * - * accelerometer: abs(velocity) > 100m/s (in case the drogue failed) - * OR * barometer: reach main deploy altitude + * + * Would like to use the accelerometer for this test, but + * the orientation of the flight computer is unknown after + * drogue deploy, so we ignore it. Could also detect + * high descent rate using the pressure sensor to + * recognize drogue deploy failure and eject the main + * at that point. Perhaps also use the drogue sense lines + * to notice continutity? */ - if (ao_flight_vel < -ACCEL_VEL_MAIN || - ao_flight_vel > ACCEL_VEL_MAIN || - ao_flight_pres >= ao_main_pres) + if (ao_flight_pres >= ao_main_pres) { ao_ignite(ao_igniter_main); ao_flight_state = ao_flight_main; @@ -395,8 +399,8 @@ ao_flight(void) /* drogue/main to land: * - * accelerometer: value stable and velocity less than 10m/s - * OR + * accelerometer: value stable + * AND * barometer: altitude stable and within 1000m of the launch altitude */ @@ -419,10 +423,9 @@ ao_flight(void) ao_interval_cur_min_accel = ao_interval_cur_max_accel = ao_flight_accel; } - if ((abs(ao_flight_vel) < ACCEL_VEL_LAND && - (uint16_t) (ao_interval_max_accel - ao_interval_min_accel) < (uint16_t) ACCEL_INT_LAND) || - (ao_flight_pres > ao_ground_pres - BARO_LAND && - (uint16_t) (ao_interval_max_pres - ao_interval_min_pres) < (uint16_t) BARO_INT_LAND)) + if ((uint16_t) (ao_interval_max_accel - ao_interval_min_accel) < (uint16_t) ACCEL_INT_LAND && + ao_flight_pres > ao_ground_pres - BARO_LAND && + (uint16_t) (ao_interval_max_pres - ao_interval_min_pres) < (uint16_t) BARO_INT_LAND) { ao_flight_state = ao_flight_landed;