Large spikes in acceleration often occur with ejection charges, which
can cause bogus acceleration and speed data to be seen. Ignore those
for the purpose of computing the maximum values of each.
Signed-off-by: Keith Packard <keithp@keithp.com>
private double set_time;
private double prev_set_time;
private double set_time;
private double prev_set_time;
+ boolean can_max() { return true; }
+
void set(double new_value, double time) {
if (new_value != AltosLib.MISSING) {
value = new_value;
void set(double new_value, double time) {
if (new_value != AltosLib.MISSING) {
value = new_value;
- if (max_value == AltosLib.MISSING || value > max_value) {
+ if (can_max() && (max_value == AltosLib.MISSING || value > max_value))
void set_derivative(AltosValue in) {
double n = in.rate();
void set_derivative(AltosValue in) {
double n = in.rate();
if (n == AltosLib.MISSING)
return;
if (n == AltosLib.MISSING)
return;
/* Clip changes to reduce noise */
double ddt = in.time() - pt;
double ddv = (n - p) / ddt;
/* Clip changes to reduce noise */
double ddt = in.time() - pt;
double ddv = (n - p) / ddt;
final double max = 100000;
/* 100gs */
final double max = 100000;
/* 100gs */
void set_integral(AltosValue in) {
computed.set_integral(in);
}
void set_integral(AltosValue in) {
computed.set_integral(in);
}
void set_integral(AltosCValue in) {
set_integral(in.altos_value());
}
void set_integral(AltosCValue in) {
set_integral(in.altos_value());
}
void copy(AltosCValue old) {
measured.copy(old.measured);
computed.copy(old.computed);
void copy(AltosCValue old) {
measured.copy(old.measured);
computed.copy(old.computed);
}
private AltosGroundPressure ground_pressure;
}
private AltosGroundPressure ground_pressure;
public double ground_pressure() {
return ground_pressure.value();
}
public double ground_pressure() {
return ground_pressure.value();
}
}
class AltosSpeed extends AltosCValue {
}
class AltosSpeed extends AltosCValue {
+
+ boolean can_max() {
+ return state < AltosLib.ao_flight_fast;
+ }
+
void set_accel() {
acceleration.set_derivative(this);
}
void set_accel() {
acceleration.set_derivative(this);
}
}
class AltosAccel extends AltosCValue {
}
class AltosAccel extends AltosCValue {
+
+ boolean can_max() {
+ return state < AltosLib.ao_flight_fast;
+ }
+
void set_measured(double a, double time) {
super.set_measured(a, time);
if (ascent)
void set_measured(double a, double time) {
super.set_measured(a, time);
if (ascent)
time = old.time;
time_change = old.time_change;
prev_time = old.time;
time = old.time;
time_change = old.time_change;
prev_time = old.time;
tick = old.tick;
prev_tick = old.tick;
boost_tick = old.boost_tick;
tick = old.tick;
prev_tick = old.tick;
boost_tick = old.boost_tick;
apogee_delay = old.apogee_delay;
main_deploy = old.main_deploy;
flight_log_max = old.flight_log_max;
apogee_delay = old.apogee_delay;
main_deploy = old.main_deploy;
flight_log_max = old.flight_log_max;
set = 0;
ground_pressure.copy(old.ground_pressure);
set = 0;
ground_pressure.copy(old.ground_pressure);
baro = old.baro;
companion = old.companion;
}
baro = old.baro;
companion = old.companion;
}