diff --git a/src/Vehicle/Vehicle.cc b/src/Vehicle/Vehicle.cc index c45ae846bb7799b0c5e7a0c9c0598da6eac4141f..9128684a85c36501feca8dc921ba98fb31128cb4 100644 --- a/src/Vehicle/Vehicle.cc +++ b/src/Vehicle/Vehicle.cc @@ -138,8 +138,6 @@ Vehicle::Vehicle(LinkInterface* link, , _onboardControlSensorsEnabled(0) , _onboardControlSensorsHealth(0) , _onboardControlSensorsUnhealthy(0) - , _gpsRawIntMessageAvailable(false) - , _globalPositionIntMessageAvailable(false) , _defaultCruiseSpeed(_settingsManager->appSettings()->offlineEditingCruiseSpeed()->rawValue().toDouble()) , _defaultHoverSpeed(_settingsManager->appSettings()->offlineEditingHoverSpeed()->rawValue().toDouble()) , _telemetryRRSSI(0) @@ -332,8 +330,6 @@ Vehicle::Vehicle(MAV_AUTOPILOT firmwareType, , _onboardControlSensorsEnabled(0) , _onboardControlSensorsHealth(0) , _onboardControlSensorsUnhealthy(0) - , _gpsRawIntMessageAvailable(false) - , _globalPositionIntMessageAvailable(false) , _defaultCruiseSpeed(_settingsManager->appSettings()->offlineEditingCruiseSpeed()->rawValue().toDouble()) , _defaultHoverSpeed(_settingsManager->appSettings()->offlineEditingHoverSpeed()->rawValue().toDouble()) , _mavlinkProtocolRequestComplete(true) @@ -1260,7 +1256,9 @@ void Vehicle::_handleGpsRawInt(mavlink_message_t& message) _coordinate = newPosition; emit coordinateChanged(_coordinate); } - _altitudeAMSLFact.setRawValue(gpsRawInt.alt / 1000.0); + if (!_altitudeMessageAvailable) { + _altitudeAMSLFact.setRawValue(gpsRawInt.alt / 1000.0); + } } } @@ -1279,8 +1277,10 @@ void Vehicle::_handleGlobalPositionInt(mavlink_message_t& message) mavlink_global_position_int_t globalPositionInt; mavlink_msg_global_position_int_decode(&message, &globalPositionInt); - _altitudeRelativeFact.setRawValue(globalPositionInt.relative_alt / 1000.0); - _altitudeAMSLFact.setRawValue(globalPositionInt.alt / 1000.0); + if (!_altitudeMessageAvailable) { + _altitudeRelativeFact.setRawValue(globalPositionInt.relative_alt / 1000.0); + _altitudeAMSLFact.setRawValue(globalPositionInt.alt / 1000.0); + } // ArduPilot sends bogus GLOBAL_POSITION_INT messages with lat/lat 0/0 even when it has no gps signal // Apparently, this is in order to transport relative altitude information. @@ -1438,13 +1438,10 @@ void Vehicle::_handleAltitude(mavlink_message_t& message) mavlink_altitude_t altitude; mavlink_msg_altitude_decode(&message, &altitude); - // If data from GPS is available it takes precedence over ALTITUDE message - if (!_globalPositionIntMessageAvailable) { - _altitudeRelativeFact.setRawValue(altitude.altitude_relative); - if (!_gpsRawIntMessageAvailable) { - _altitudeAMSLFact.setRawValue(altitude.altitude_amsl); - } - } + // Data from ALTITUDE message takes precedence over gps messages + _altitudeMessageAvailable = true; + _altitudeRelativeFact.setRawValue(altitude.altitude_relative); + _altitudeAMSLFact.setRawValue(altitude.altitude_amsl); } void Vehicle::_setCapabilities(uint64_t capabilityBits) diff --git a/src/Vehicle/Vehicle.h b/src/Vehicle/Vehicle.h index 3e1b8cab3c5d848e9d43afce34920b2cc8c46082..73162690caa47f64275efe256a5c523e09b08657 100644 --- a/src/Vehicle/Vehicle.h +++ b/src/Vehicle/Vehicle.h @@ -1424,8 +1424,9 @@ private: uint32_t _onboardControlSensorsEnabled; uint32_t _onboardControlSensorsHealth; uint32_t _onboardControlSensorsUnhealthy; - bool _gpsRawIntMessageAvailable; - bool _globalPositionIntMessageAvailable; + bool _gpsRawIntMessageAvailable = false; + bool _globalPositionIntMessageAvailable = false; + bool _altitudeMessageAvailable = false; double _defaultCruiseSpeed; double _defaultHoverSpeed; int _telemetryRRSSI;