* General Public License for more details.
*/
-package org.altusmetrum.altoslib_13;
+package org.altusmetrum.altoslib_14;
import java.util.*;
}
private void compute_height() {
- double ground_altitude = cal_data().ground_altitude;
- if (height_series == null && ground_altitude != AltosLib.MISSING && altitude_series != null) {
- height_series = add_series(height_name, AltosConvert.height);
- for (AltosTimeValue alt : altitude_series)
- height_series.add(alt.time, alt.value - ground_altitude);
+ if (height_series == null) {
+ double ground_altitude = cal_data().ground_altitude;
+ if (ground_altitude != AltosLib.MISSING && altitude_series != null) {
+ height_series = add_series(height_name, AltosConvert.height);
+ for (AltosTimeValue alt : altitude_series)
+ height_series.add(alt.time, alt.value - ground_altitude);
+ } else if (speed_series != null) {
+ height_series = add_series(height_name, AltosConvert.height);
+ speed_series.integrate(height_series);
+ }
}
if (gps_height == null && cal_data().gps_pad != null && cal_data().gps_pad.alt != AltosLib.MISSING && gps_altitude != null) {
}
public AltosTimeSeries orient_series;
+ public AltosTimeSeries azimuth_series;
public static final String orient_name = "Tilt Angle";
+ public static final String azimuth_name = "Azimuth Angle";
private void compute_orient() {
if (cal_data.accel_zero_across == AltosLib.MISSING)
return;
+ if (cal_data.gyro_zero_roll == AltosLib.MISSING)
+ return;
+
AltosRotation rotation = new AltosRotation(accel_ground_across,
accel_ground_through,
accel_ground_along,
orient_series = add_series(orient_name, AltosConvert.orient);
orient_series.add(ground_time, rotation.tilt());
+ azimuth_series = add_series(azimuth_name, AltosConvert.orient);
+ azimuth_series.add(ground_time, rotation.azimuth());
+
for (AltosTimeValue roll_v : gyro_roll) {
double time = roll_v.time;
double dt = time - prev_time;
rotation.rotate(pitch, yaw, roll);
orient_series.add(time, rotation.tilt());
+ azimuth_series.add(time, rotation.azimuth());
}
prev_time = time;
}
public static final String mag_along_name = "Magnetic Field Along";
public static final String mag_across_name = "Magnetic Field Across";
public static final String mag_through_name = "Magnetic Field Through";
+ public static final String mag_total_name = "Magnetic Field Strength";
+ public static final String compass_name = "Compass";
- public AltosTimeSeries mag_along, mag_across, mag_through;
+ public AltosTimeSeries mag_along, mag_across, mag_through, mag_total, compass;
public void set_accel(double along, double across, double through) {
if (accel_along == null) {
mag_along = add_series(mag_along_name, AltosConvert.magnetic_field);
mag_across = add_series(mag_across_name, AltosConvert.magnetic_field);
mag_through = add_series(mag_through_name, AltosConvert.magnetic_field);
+ mag_total = add_series(mag_total_name, AltosConvert.magnetic_field);
+ compass = add_series(compass_name, AltosConvert.orient);
}
mag_along.add(time(), along);
mag_across.add(time(), across);
mag_through.add(time(), through);
+ mag_total.add(time(), Math.sqrt(along * along + across * across + through *through));
+ compass.add(time(), Math.atan2(across, through) * 180 / Math.PI);
}
public void set_orient(double orient) {
public void set_companion(AltosCompanion companion) {
}
+ public static final String motor_pressure_name = "Motor Pressure";
+
+ public AltosTimeSeries motor_pressure_series;
+
+ public void set_motor_pressure(double motor_pressure) {
+ if (motor_pressure_series == null)
+ motor_pressure_series = add_series(motor_pressure_name, AltosConvert.pressure);
+ motor_pressure_series.add(time(), motor_pressure);
+ }
+
public void finish() {
compute_orient();
if (speed_series == null) {