altos: Use factory calibration for all acceleration computations
authorKeith Packard <keithp@keithp.com>
Wed, 15 Jan 2014 07:29:59 +0000 (23:29 -0800)
committerKeith Packard <keithp@keithp.com>
Wed, 15 Jan 2014 07:29:59 +0000 (23:29 -0800)
The ground acceleration value will vary depending on the tilt angle of
the airframe, which will result in incorrect acceleration computations
during flight. This also avoids accidental boost detect when moving
the airframe around in pad mode.

Signed-off-by: Keith Packard <keithp@keithp.com>
altoslib/AltosState.java
src/core/ao_flight.c
src/core/ao_kalman.c

index 134aeb4e34eaa3929a86b6e91cd49076a6b2aa95..08dafbb4c8ad6d12333e458638e6732abc04aede 100644 (file)
@@ -949,14 +949,8 @@ public class AltosState implements Cloneable {
        }
 
        void update_accel() {
-               double  ground = ground_accel;
-
-               if (ground == AltosLib.MISSING)
-                       ground = ground_accel_avg;
                if (accel == AltosLib.MISSING)
                        return;
-               if (ground == AltosLib.MISSING)
-                       return;
                if (accel_plus_g == AltosLib.MISSING)
                        return;
                if (accel_minus_g == AltosLib.MISSING)
@@ -964,7 +958,7 @@ public class AltosState implements Cloneable {
 
                double counts_per_g = (accel_minus_g - accel_plus_g) / 2.0;
                double counts_per_mss = counts_per_g / 9.80665;
-               acceleration.set_measured((ground - accel) / counts_per_mss, time);
+               acceleration.set_measured((accel_plus_g - accel) / counts_per_mss, time);
        }
 
        public void set_accel_g(double accel_plus_g, double accel_minus_g) {
@@ -976,10 +970,8 @@ public class AltosState implements Cloneable {
        }
 
        public void set_ground_accel(double ground_accel) {
-               if (ground_accel != AltosLib.MISSING) {
+               if (ground_accel != AltosLib.MISSING)
                        this.ground_accel = ground_accel;
-                       update_accel();
-               }
        }
 
        public void set_accel(double accel) {
index 08302140650b4c57456a5265e2ad2c1468a388aa..702c340385177df203a000494ad7fef49c190a88 100644 (file)
@@ -401,7 +401,7 @@ ao_flight_dump(void)
 #if HAS_ACCEL
        int16_t accel;
 
-       accel = ((ao_ground_accel - ao_sample_accel) * ao_accel_scale) >> 16;
+       accel = ((ao_config.accel_plus_g - ao_sample_accel) * ao_accel_scale) >> 16;
 #endif
 
        printf ("sample:\n");
index 7fd4f88992c09035e321b954b616819c85345379..9aea1f14762f6139d9fb8dce932b98a6c946068d 100644 (file)
@@ -166,7 +166,7 @@ ao_kalman_err_accel(void)
 {
        int32_t accel;
 
-       accel = (ao_ground_accel - ao_sample_accel) * ao_accel_scale;
+       accel = (ao_config.accel_plus_g - ao_sample_accel) * ao_accel_scale;
 
        /* Can't use ao_accel here as it is the pre-prediction value still */
        ao_error_a = (accel - ao_k_accel) >> 16;