altos: Improve TM v1.0 apogee estimate
authorKeith Packard <keithp@keithp.com>
Sun, 9 Oct 2011 04:19:52 +0000 (22:19 -0600)
committerKeith Packard <keithp@keithp.com>
Sun, 9 Oct 2011 04:23:16 +0000 (22:23 -0600)
v1.0 boards have noisy accelerometer data caused by interactions
between RF transmission and the accelerometer measurements; this noise
generates a negative bias in the accelerometer readings. The net
effect is that the estimated speed is lower than the actual speed,
causing early an apogee estimate.

By increasing the sigma value for accelerometer data, the kalman
filter 'trusts' the acceleration data less, putting more weight on the
barometer data. This causes the estimated time of apogee to be closer
to the correct value.

This reduces the response to changes in acceleration.

This new value is applied solely to TeleMetrum v1.0 boards. v1.1
boards correct for this error, and hence can use the correct sigma
value for the accelerometer.

Signed-off-by: Keith Packard <keithp@keithp.com>
src/cc1111/ao_pins.h
src/test/Makefile
src/util/make-kalman

index 723f150040e65a26fc34fe690f1a63badd345eb8..d2fbb20932969ebe1387ed1f96a9da8d15bcb87b 100644 (file)
@@ -36,6 +36,7 @@
        #define IGNITE_ON_P0            0
        #define PACKET_HAS_MASTER       0
        #define PACKET_HAS_SLAVE        1
+       #define NOISY_ACCEL             1
 
        #define HAS_COMPANION           1
        #define COMPANION_CS_ON_P1      1
index 333850e4e9c15963678fe9c572d98e97ee1aa2ce..4e403da6a113a529f48a28af3b6e87e608a6873c 100644 (file)
@@ -1,6 +1,8 @@
-vpath % ..:../core:../drivers
+vpath % ..:../core:../drivers:../util
 
-PROGS=ao_flight_test ao_flight_test_baro ao_flight_test_accel ao_gps_test ao_gps_test_skytraq ao_convert_test
+PROGS=ao_flight_test ao_flight_test_baro ao_flight_test_accel ao_flight_test_noisy_accel ao_gps_test ao_gps_test_skytraq ao_convert_test
+
+KALMAN=make-kalman 
 
 CFLAGS=-I.. -I. -I../core -I../drivers -O0 -g
 
@@ -14,6 +16,9 @@ install:
 ao_flight_test: ao_flight_test.c ao_host.h ao_flight.c ao_sample.c ao_kalman.c altitude.h ao_kalman.h
        cc $(CFLAGS) -o $@ $<
 
+ao_flight_test_noisy_accel: ao_flight_test.c ao_host.h ao_flight.c ao_sample.c ao_kalman.c altitude.h ao_kalman.h
+       cc -DNOISY_ACCEL=1 $(CFLAGS) -o $@ $<
+
 ao_flight_test_baro: ao_flight_test.c ao_host.h ao_flight.c  ao_sample.c ao_kalman.c altitude.h ao_kalman.h
        cc $(CFLAGS) -o $@ -DHAS_ACCEL=0 ao_flight_test.c
 
@@ -28,3 +33,6 @@ ao_gps_test_skytraq: ao_gps_test_skytraq.c ao_gps_skytraq.c ao_gps_print.c ao_ho
 
 ao_convert_test: ao_convert_test.c ao_convert.c altitude.h
        cc $(CFLAGS) -o $@ $<
+
+ao_kalman.h: $(KALMAN)
+       (cd .. && make ao_kalman.h)
\ No newline at end of file
index 397d60207c9ac82bddfaaf10e6adfc5a0fae9229..fd33bab0e9fab5b53bf4596c3e564de7247f35ad 100644 (file)
@@ -5,11 +5,32 @@ cd $1 2> /dev/null 1>&2
 SIGMA_BOTH="-M 2 -H 6 -A 2"
 SIGMA_BARO="-M 2 -H 6 -A 2"
 SIGMA_ACCEL="-M 2 -H 4 -A 4"
+SIGMA_BOTH_NOISY_ACCEL="-M 2 -H 6 -A 3"
+
+echo '#if NOISY_ACCEL'
+echo
+echo '/* TeleMetrum v1.0 boards have noisy accelerometer values'
+echo ' * increase the sigma value for accel data to compensate.'
+echo ' * This improves the accuracy of apogee detection.'
+echo ' */'
+echo
+
+nickle kalman.5c -p AO_BOTH -c both -t 0.01 $SIGMA_BOTH_NOISY_ACCEL
+nickle kalman.5c -p AO_BOTH -c both -t 0.1 $SIGMA_BOTH_NOISY_ACCEL
+nickle kalman.5c -p AO_BOTH -c both -t 1 $SIGMA_BOTH_NOISY_ACCEL
+
+echo '#endif'
+echo
+echo '#ifndef AO_BOTH_K00_100'
+echo
 
 nickle kalman.5c -p AO_BOTH -c both -t 0.01 $SIGMA_BOTH
 nickle kalman.5c -p AO_BOTH -c both -t 0.1 $SIGMA_BOTH
 nickle kalman.5c -p AO_BOTH -c both -t 1 $SIGMA_BOTH
 
+echo '#endif'
+echo
+
 nickle kalman.5c -p AO_ACCEL -c accel -t 0.01 $SIGMA_ACCEL
 nickle kalman.5c -p AO_ACCEL -c accel -t 0.1 $SIGMA_ACCEL
 nickle kalman.5c -p AO_ACCEL -c accel -t 1 $SIGMA_ACCEL
@@ -17,3 +38,4 @@ nickle kalman.5c -p AO_ACCEL -c accel -t 1 $SIGMA_ACCEL
 nickle kalman.5c -p AO_BARO -c baro -t 0.01 $SIGMA_BARO
 nickle kalman.5c -p AO_BARO -c baro -t 0.1 $SIGMA_BARO
 nickle kalman.5c -p AO_BARO -c baro -t 1 $SIGMA_BARO
+