summaryrefslogtreecommitdiff
path: root/altoslib/AltosRecord.java
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2012-10-21 16:13:14 -0700
committerKeith Packard <keithp@keithp.com>2012-10-21 16:13:14 -0700
commit7894c27b2b2c3c46a7c107c8acd5977830f006cf (patch)
treef05c9d5c6bc06c1764118d1f5596a95f0016178d /altoslib/AltosRecord.java
parentdec2e455935a71dec13b84bb886252b7f4a1a641 (diff)
altoslib: Move computed state from AltosRecord to AltosState
Make AltosRecord simply track the raw data and have AltosState hold all computed values, including cross-packet averages and computed speeds. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altoslib/AltosRecord.java')
-rw-r--r--altoslib/AltosRecord.java99
1 files changed, 36 insertions, 63 deletions
diff --git a/altoslib/AltosRecord.java b/altoslib/AltosRecord.java
index 8bab1d0c..09169515 100644
--- a/altoslib/AltosRecord.java
+++ b/altoslib/AltosRecord.java
@@ -17,7 +17,7 @@
package org.altusmetrum.AltosLib;
-public class AltosRecord implements Comparable <AltosRecord>, Cloneable {
+public abstract class AltosRecord implements Comparable <AltosRecord>, Cloneable {
public static final int seen_flight = 1;
public static final int seen_sensor = 2;
@@ -43,11 +43,6 @@ public class AltosRecord implements Comparable <AltosRecord>, Cloneable {
public int state;
public int tick;
- /* Current flight dynamic state */
- public double acceleration; /* m/s² */
- public double speed; /* m/s */
- public double height; /* m */
-
public AltosGPS gps;
public boolean new_gps;
@@ -63,6 +58,11 @@ public class AltosRecord implements Comparable <AltosRecord>, Cloneable {
public AltosRecordCompanion companion;
+ /* Telemetry sources have these values recorded from the flight computer */
+ public double kalman_height;
+ public double kalman_speed;
+ public double kalman_acceleration;
+
/*
* Abstract methods that convert record data
* to standard units:
@@ -75,76 +75,48 @@ public class AltosRecord implements Comparable <AltosRecord>, Cloneable {
* temperature: °C
*/
- public double raw_pressure() { return MISSING; }
-
- public double filtered_pressure() { return MISSING; }
-
- public double ground_pressure() { return MISSING; }
-
- public double battery_voltage() { return MISSING; }
+ abstract public double pressure();
+ abstract public double ground_pressure();
+ abstract public double acceleration();
- public double main_voltage() { return MISSING; }
+ public double altitude() {
+ double p = pressure();
- public double drogue_voltage() { return MISSING; }
-
- public double temperature() { return MISSING; }
-
- public double acceleration() { return MISSING; }
-
- public double accel_speed() { return MISSING; }
-
- public AltosIMU imu() { return null; }
-
- public AltosMag mag() { return null; }
-
- /*
- * Convert various pressure values to altitude
- */
-
- public double raw_altitude() {
- double p = raw_pressure();
if (p == MISSING)
return MISSING;
return AltosConvert.pressure_to_altitude(p);
}
public double ground_altitude() {
- double p = ground_pressure();
+ double p = ground_pressure();
+
if (p == MISSING)
return MISSING;
return AltosConvert.pressure_to_altitude(p);
}
- public double filtered_altitude() {
- double ga = ground_altitude();
- if (height != MISSING && ga != MISSING)
- return height + ga;
+ public double height() {
+ double g = ground_altitude();
+ double a = altitude();
- double p = filtered_pressure();
- if (p == MISSING)
- return raw_altitude();
- return AltosConvert.pressure_to_altitude(p);
+ if (g == MISSING)
+ return MISSING;
+ if (a == MISSING)
+ return MISSING;
+ return a - g;
}
- public double filtered_height() {
- if (height != MISSING)
- return height;
+ public double battery_voltage() { return MISSING; }
- double f = filtered_altitude();
- double g = ground_altitude();
- if (f == MISSING || g == MISSING)
- return MISSING;
- return f - g;
- }
+ public double main_voltage() { return MISSING; }
- public double raw_height() {
- double r = raw_altitude();
- double g = ground_altitude();
+ public double drogue_voltage() { return MISSING; }
- if (r == MISSING || g == MISSING)
- return height;
- return r - g;
- }
+ public double temperature() { return MISSING; }
+
+ public AltosIMU imu() { return null; }
+
+ public AltosMag mag() { return null; }
public String state() {
return AltosLib.state_name(state);
@@ -164,12 +136,12 @@ public class AltosRecord implements Comparable <AltosRecord>, Cloneable {
status = old.status;
state = old.state;
tick = old.tick;
- acceleration = old.acceleration;
- speed = old.speed;
- height = old.height;
gps = new AltosGPS(old.gps);
new_gps = old.new_gps;
companion = old.companion;
+ kalman_acceleration = old.kalman_acceleration;
+ kalman_speed = old.kalman_speed;
+ kalman_height = old.kalman_height;
}
public AltosRecord clone() {
@@ -192,11 +164,12 @@ public class AltosRecord implements Comparable <AltosRecord>, Cloneable {
status = 0;
state = AltosLib.ao_flight_startup;
tick = 0;
- acceleration = MISSING;
- speed = MISSING;
- height = MISSING;
gps = new AltosGPS();
new_gps = false;
companion = null;
+
+ kalman_acceleration = MISSING;
+ kalman_speed = MISSING;
+ kalman_height = MISSING;
}
}