Drone Status Menue: rohe GPS-Hoehe im Altitude-Feld ergaenzt
MSP_RAW_GPS liefert bereits eine eigene Hoehe (gpsSol.llh.alt, Offset 10,
u16 Meter) - bislang ungenutzt/uebersprungen. Jetzt als eigenes Feld
(MspGpsReading.altitudeM -> TelemetryFrame.gpsAltitudeM) geparst und im
selben "Altitude"-Feld wie die bisherige barometrisch/GPS-fusionierte
Schaetzung angezeigt ("120 m (GPS 119 m)"), statt einer eigenen Kachel -
nur bei vorhandenem Fix angehaengt, analog zur bestehenden hasFix-Handhabung
bei GPS coordinates/HDOP.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
9cece7dbb6
commit
13e2827344
@@ -31,6 +31,7 @@ class TelemetryFrame {
|
||||
required this.hasFix,
|
||||
required this.numSat,
|
||||
required this.altitudeM,
|
||||
required this.gpsAltitudeM,
|
||||
required this.speedMs,
|
||||
required this.headingDeg,
|
||||
required this.armed,
|
||||
@@ -60,6 +61,12 @@ class TelemetryFrame {
|
||||
/// MspNavMode-/estAlt-Doku in msp_telemetry_codec.dart) - keine absolute
|
||||
/// Hoehe ueber Meeresspiegel.
|
||||
final double altitudeM;
|
||||
|
||||
/// Rohe GPS-Hoehe (`MspGpsReading.altitudeM` in msp_telemetry_codec.dart,
|
||||
/// `MSP_RAW_GPS`) statt der barometrisch/GPS-fusionierten Schaetzung
|
||||
/// oben - nur bei [hasFix] aussagekraeftig, typischerweise etwas
|
||||
/// verrauschter als [altitudeM].
|
||||
final double gpsAltitudeM;
|
||||
final double speedMs;
|
||||
|
||||
/// Kurs ueber Grund in Grad (0 = Norden, im Uhrzeigersinn) - dreht den
|
||||
|
||||
@@ -104,6 +104,11 @@ class MockFlightControllerLink implements FlightControllerLink {
|
||||
hasFix: true,
|
||||
numSat: 12,
|
||||
altitudeM: 120,
|
||||
// Leicht abweichend von altitudeM statt identisch (Doku: rohe
|
||||
// GPS-Hoehe ist typischerweise etwas verrauschter als die
|
||||
// barometrisch/GPS-fusionierte Schaetzung), damit im UI sichtbar
|
||||
// wird, dass es sich um zwei unterschiedliche Werte handelt.
|
||||
gpsAltitudeM: 120 + math.sin(_tickCount * 0.11) * 4,
|
||||
speedMs: 18,
|
||||
headingDeg: _heading,
|
||||
armed: _armed,
|
||||
|
||||
@@ -9,6 +9,7 @@ class MspGpsReading {
|
||||
required this.numSat,
|
||||
required this.lat,
|
||||
required this.lon,
|
||||
required this.altitudeM,
|
||||
required this.speedMs,
|
||||
required this.headingDeg,
|
||||
required this.hdop,
|
||||
@@ -19,6 +20,11 @@ class MspGpsReading {
|
||||
final int numSat;
|
||||
final double lat;
|
||||
final double lon;
|
||||
|
||||
/// Rohe GPS-Hoehe (`gpsSol.llh.alt`, bereits in ganzen Metern) - anders
|
||||
/// als die barometrisch/GPS-fusionierte Schaetzung aus `MSP_ALTITUDE`
|
||||
/// (siehe [parseMspAltitudeMeters]), typischerweise etwas verrauschter.
|
||||
final double altitudeM;
|
||||
final double speedMs;
|
||||
|
||||
/// Kurs ueber Grund in Grad (0 = Norden, im Uhrzeigersinn), aus
|
||||
@@ -43,6 +49,7 @@ MspGpsReading parseMspRawGps(Uint8List payload) {
|
||||
numSat: data.getUint8(1),
|
||||
lat: data.getInt32(2, Endian.little) / 1e7,
|
||||
lon: data.getInt32(6, Endian.little) / 1e7,
|
||||
altitudeM: data.getUint16(10, Endian.little).toDouble(),
|
||||
speedMs: data.getUint16(12, Endian.little) / 100.0,
|
||||
headingDeg: data.getUint16(14, Endian.little) / 10.0,
|
||||
hdop: data.getUint16(16, Endian.little) / 100.0,
|
||||
|
||||
@@ -112,6 +112,7 @@ class MspTelemetryPoller {
|
||||
hasFix: gps.hasFix,
|
||||
numSat: gps.numSat,
|
||||
altitudeM: altitudeM,
|
||||
gpsAltitudeM: gps.altitudeM,
|
||||
speedMs: gps.speedMs,
|
||||
headingDeg: gps.headingDeg,
|
||||
armed: _armed,
|
||||
|
||||
Reference in New Issue
Block a user