projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
AltosSiteMap: explain tile size better
[fw/altos]
/
ao-tools
/
altosui
/
AltosState.java
diff --git
a/ao-tools/altosui/AltosState.java
b/ao-tools/altosui/AltosState.java
index fc06f839c5f0b22ed946f5e529a9c2ca198217eb..ec499d5acf2110e776e2096decf83e8b088a69e8 100644
(file)
--- a/
ao-tools/altosui/AltosState.java
+++ b/
ao-tools/altosui/AltosState.java
@@
-21,9
+21,6
@@
package altosui;
package altosui;
-import altosui.AltosRecord;
-import altosui.AltosGPS;
-
public class AltosState {
AltosRecord data;
public class AltosState {
AltosRecord data;
@@
-35,6
+32,7
@@
public class AltosState {
int tick;
int state;
int tick;
int state;
+ boolean landed;
boolean ascent; /* going up? */
double ground_altitude;
boolean ascent; /* going up? */
double ground_altitude;
@@
-60,10
+58,13
@@
public class AltosState {
static final int MIN_PAD_SAMPLES = 10;
int npad;
static final int MIN_PAD_SAMPLES = 10;
int npad;
+ int ngps;
int gps_waiting;
boolean gps_ready;
AltosGreatCircle from_pad;
int gps_waiting;
boolean gps_ready;
AltosGreatCircle from_pad;
+ double elevation; /* from pad */
+ double range; /* total distance */
double gps_height;
double gps_height;
@@
-78,7
+79,7
@@
public class AltosState {
data = cur;
ground_altitude = data.ground_altitude();
data = cur;
ground_altitude = data.ground_altitude();
- height = data.altitude() - ground_altitude;
+ height = data.
filtered_
altitude() - ground_altitude;
report_time = System.currentTimeMillis();
report_time = System.currentTimeMillis();
@@
-89,12
+90,13
@@
public class AltosState {
main_sense = data.main_voltage();
battery = data.battery_voltage();
tick = data.tick;
main_sense = data.main_voltage();
battery = data.battery_voltage();
tick = data.tick;
- state = data.state
()
;
+ state = data.state;
if (prev_state != null) {
/* Preserve any existing gps data */
npad = prev_state.npad;
if (prev_state != null) {
/* Preserve any existing gps data */
npad = prev_state.npad;
+ ngps = prev_state.ngps;
gps = prev_state.gps;
pad_lat = prev_state.pad_lat;
pad_lon = prev_state.pad_lon;
gps = prev_state.gps;
pad_lat = prev_state.pad_lat;
pad_lon = prev_state.pad_lon;
@@
-118,15
+120,23
@@
public class AltosState {
baro_speed = prev_state.baro_speed;
} else {
npad = 0;
baro_speed = prev_state.baro_speed;
} else {
npad = 0;
+ ngps = 0;
gps = null;
baro_speed = 0;
time_change = 0;
}
if (state == Altos.ao_flight_pad) {
gps = null;
baro_speed = 0;
time_change = 0;
}
if (state == Altos.ao_flight_pad) {
- if (data.gps != null && data.gps.gps_locked && data.gps.nsat >= 4) {
+
+ /* Track consecutive 'good' gps reports, waiting for 10 of them */
+ if (data.gps != null && data.gps.locked && data.gps.nsat >= 4)
npad++;
npad++;
- if (npad > 1) {
+ else
+ npad = 0;
+
+ /* Average GPS data while on the pad */
+ if (data.gps != null && data.gps.locked && data.gps.nsat >= 4) {
+ if (ngps > 1) {
/* filter pad position */
pad_lat = (pad_lat * 31.0 + data.gps.lat) / 32.0;
pad_lon = (pad_lon * 31.0 + data.gps.lon) / 32.0;
/* filter pad position */
pad_lat = (pad_lat * 31.0 + data.gps.lat) / 32.0;
pad_lon = (pad_lon * 31.0 + data.gps.lon) / 32.0;
@@
-136,8
+146,7
@@
public class AltosState {
pad_lon = data.gps.lon;
pad_alt = data.gps.alt;
}
pad_lon = data.gps.lon;
pad_alt = data.gps.alt;
}
- } else {
- npad = 0;
+ ngps++;
}
}
}
}
@@
-159,13
+168,20
@@
public class AltosState {
if (height > max_height)
max_height = height;
if (data.gps != null) {
if (height > max_height)
max_height = height;
if (data.gps != null) {
- if (gps == null || !gps.
gps_locked || data.gps.gps_
locked)
+ if (gps == null || !gps.
locked || data.gps.
locked)
gps = data.gps;
gps = data.gps;
- if (n
pad > 0 && gps.gps_locked)
+ if (n
gps > 0 && gps.locked) {
from_pad = new AltosGreatCircle(pad_lat, pad_lon, gps.lat, gps.lon);
from_pad = new AltosGreatCircle(pad_lat, pad_lon, gps.lat, gps.lon);
+ }
}
}
- if (npad > 0) {
+ elevation = 0;
+ range = -1;
+ if (ngps > 0) {
gps_height = gps.alt - pad_alt;
gps_height = gps.alt - pad_alt;
+ if (from_pad != null) {
+ elevation = Math.atan2(height, from_pad.distance) * 180 / Math.PI;
+ range = Math.sqrt(height * height + from_pad.distance * from_pad.distance);
+ }
} else {
gps_height = 0;
}
} else {
gps_height = 0;
}