ground_altitude = data.ground_altitude();
altitude = data.altitude();
+ if (altitude == AltosRecord.MISSING && data.gps != null)
+ altitude = data.gps.alt;
height = AltosRecord.MISSING;
if (data.kalman_height != AltosRecord.MISSING)
height = data.kalman_height;
else {
- if (prev_state != null && altitude != AltosRecord.MISSING && ground_altitude != AltosRecord.MISSING) {
+ if (altitude != AltosRecord.MISSING && ground_altitude != AltosRecord.MISSING) {
double cur_height = altitude - ground_altitude;
- if (prev_state.height == AltosRecord.MISSING)
+ if (prev_state == null || prev_state.height == AltosRecord.MISSING)
height = cur_height;
else
height = (prev_state.height * 15 + cur_height) / 16.0;
if (data.kalman_acceleration != AltosRecord.MISSING)
acceleration = data.kalman_acceleration;
- else {
+ else
acceleration = data.acceleration();
- System.out.printf ("data acceleration %g\n", acceleration);
- }
temperature = data.temperature();
drogue_sense = data.drogue_voltage();
main_sense = data.main_voltage();
/* compute barometric speed */
double height_change = height - prev_state.height;
+
+ double prev_baro_speed = prev_state.baro_speed;
+ if (prev_baro_speed == AltosRecord.MISSING)
+ prev_baro_speed = 0;
+
if (time_change > 0)
- baro_speed = (prev_state.baro_speed * 3 + (height_change / time_change)) / 4.0;
+ baro_speed = (prev_baro_speed * 3 + (height_change / time_change)) / 4.0;
else
baro_speed = prev_state.baro_speed;
+ double prev_accel_speed = prev_state.accel_speed;
+
+ if (prev_accel_speed == AltosRecord.MISSING)
+ prev_accel_speed = 0;
+
if (acceleration == AltosRecord.MISSING) {
/* Fill in mising acceleration value */
accel_speed = baro_speed;
- if (time_change > 0)
- acceleration = (accel_speed - prev_state.accel_speed) / time_change;
+
+ if (time_change > 0 && accel_speed != AltosRecord.MISSING)
+ acceleration = (accel_speed - prev_accel_speed) / time_change;
else
acceleration = prev_state.acceleration;
} else {
/* compute accelerometer speed */
- accel_speed = prev_state.accel_speed + acceleration * time_change;
+ accel_speed = prev_accel_speed + acceleration * time_change;
}
}
-
} else {
npad = 0;
ngps = 0;
gps = null;
baro_speed = AltosRecord.MISSING;
accel_speed = AltosRecord.MISSING;
- max_baro_speed = AltosRecord.MISSING;
- max_accel_speed = AltosRecord.MISSING;
- max_height = AltosRecord.MISSING;
- max_acceleration = AltosRecord.MISSING;
+ pad_alt = AltosRecord.MISSING;
+ max_baro_speed = 0;
+ max_accel_speed = 0;
+ max_height = 0;
+ max_acceleration = 0;
time_change = 0;
}
/* Only look at accelerometer data under boost */
if (boost && acceleration != AltosRecord.MISSING && (max_acceleration == AltosRecord.MISSING || acceleration > max_acceleration))
max_acceleration = acceleration;
- if (boost && accel_speed != AltosRecord.MISSING && (max_accel_speed == AltosRecord.MISSING || accel_speed > max_accel_speed))
+ if (boost && accel_speed != AltosRecord.MISSING && accel_speed > max_accel_speed)
max_accel_speed = accel_speed;
- if (boost && baro_speed != AltosRecord.MISSING && (max_baro_speed == AltosRecord.MISSING || baro_speed > max_baro_speed))
+ if (boost && baro_speed != AltosRecord.MISSING && baro_speed > max_baro_speed)
max_baro_speed = baro_speed;
- if (height != AltosRecord.MISSING || (max_height == AltosRecord.MISSING || height > max_height))
+ if (height != AltosRecord.MISSING && height > max_height)
max_height = height;
if (data.gps != null) {
if (gps == null || !gps.locked || data.gps.locked)