From 312c2896773df99d724b1f8cdc90c52be15edb5e Mon Sep 17 00:00:00 2001 From: DonLakeFlyer Date: Mon, 10 Apr 2017 11:34:44 -0700 Subject: [PATCH] Add vehicle heading to plan toolbar Also work on plan toolbar readability --- src/MissionManager/MissionController.cc | 21 +++++++--- src/MissionManager/MissionController.h | 1 + src/MissionManager/VisualMissionItem.h | 8 ++-- src/PlanView/PlanToolBar.qml | 55 +++++++++++++------------ 4 files changed, 50 insertions(+), 35 deletions(-) diff --git a/src/MissionManager/MissionController.cc b/src/MissionManager/MissionController.cc index 730584c9c..322e2e696 100644 --- a/src/MissionManager/MissionController.cc +++ b/src/MissionManager/MissionController.cc @@ -77,6 +77,7 @@ void MissionController::_resetMissionFlightStatus(void) _missionFlightStatus.cruiseSpeed = _activeVehicle ? _activeVehicle->defaultCruiseSpeed() : std::numeric_limits::quiet_NaN(); _missionFlightStatus.hoverSpeed = _activeVehicle ? _activeVehicle->defaultHoverSpeed() : std::numeric_limits::quiet_NaN(); _missionFlightStatus.vehicleSpeed = _activeVehicle ? (_activeVehicle->multiRotor() || _activeVehicle->vtol() ? _missionFlightStatus.hoverSpeed : _missionFlightStatus.cruiseSpeed) : std::numeric_limits::quiet_NaN(); + _missionFlightStatus.vehicleYaw = 0.0; _missionFlightStatus.gimbalYaw = std::numeric_limits::quiet_NaN(); // Battery information @@ -97,6 +98,17 @@ void MissionController::_resetMissionFlightStatus(void) _missionFlightStatus.ampMinutesAvailable = (double)_missionFlightStatus.mAhBattery / 1000.0 * 60.0 * ((100.0 - batteryPercentRemainingAnnounce) / 100.0); } } + + emit missionDistanceChanged(_missionFlightStatus.totalDistance); + emit missionTimeChanged(); + emit missionHoverDistanceChanged(_missionFlightStatus.hoverDistance); + emit missionCruiseDistanceChanged(_missionFlightStatus.cruiseDistance); + emit missionHoverTimeChanged(); + emit missionCruiseTimeChanged(); + emit missionMaxTelemetryChanged(_missionFlightStatus.maxTelemetryDistance); + emit batteryChangePointChanged(_missionFlightStatus.batteryChangePoint); + emit batteriesRequiredChanged(_missionFlightStatus.batteriesRequired); + } void MissionController::start(bool editMode) @@ -322,6 +334,7 @@ void MissionController::removeAll(void) _addMissionSettings(_activeVehicle, _visualItems, false /* addToCenter */); _initAllVisualItems(); _visualItems->setDirty(true); + _resetMissionFlightStatus(); } } @@ -953,8 +966,6 @@ void MissionController::_recalcMissionFlightStatus() const double homePositionAltitude = _settingsItem->coordinate().altitude(); minAltSeen = maxAltSeen = _settingsItem->coordinate().altitude(); - double lastVehicleYaw = 0; - _resetMissionFlightStatus(); bool vtolInHover = true; @@ -1034,8 +1045,8 @@ void MissionController::_recalcMissionFlightStatus() if (item->specifiesCoordinate()) { // Update vehicle yaw assuming direction to next waypoint if (item != lastCoordinateItem) { - lastVehicleYaw = lastCoordinateItem->exitCoordinate().azimuthTo(item->coordinate()); - lastCoordinateItem->setMissionVehicleYaw(lastVehicleYaw); + _missionFlightStatus.vehicleYaw = lastCoordinateItem->exitCoordinate().azimuthTo(item->coordinate()); + lastCoordinateItem->setMissionVehicleYaw(_missionFlightStatus.vehicleYaw); } // Keep track of the min/max altitude for all waypoints so we can show altitudes as a percentage @@ -1115,7 +1126,7 @@ void MissionController::_recalcMissionFlightStatus() lastCoordinateItem = item; } } - lastCoordinateItem->setMissionVehicleYaw(lastVehicleYaw); + lastCoordinateItem->setMissionVehicleYaw(_missionFlightStatus.vehicleYaw); if (_missionFlightStatus.mAhBattery != 0 && _missionFlightStatus.batteryChangePoint == -1) { _missionFlightStatus.batteryChangePoint = 0; diff --git a/src/MissionManager/MissionController.h b/src/MissionManager/MissionController.h index 06751e8f6..2b8ddfe77 100644 --- a/src/MissionManager/MissionController.h +++ b/src/MissionManager/MissionController.h @@ -48,6 +48,7 @@ public: double cruiseSpeed; double hoverSpeed; double vehicleSpeed; ///< Either cruise or hover speed based on vehicle type and vtol state + double vehicleYaw; double gimbalYaw; ///< NaN signals yaw was never changed int mAhBattery; ///< 0 for not available double hoverAmps; ///< Amp consumption during hover diff --git a/src/MissionManager/VisualMissionItem.h b/src/MissionManager/VisualMissionItem.h index 76805227a..b2cdba88b 100644 --- a/src/MissionManager/VisualMissionItem.h +++ b/src/MissionManager/VisualMissionItem.h @@ -71,10 +71,10 @@ public: // The following properties are calculated/set by the MissionController recalc methods - Q_PROPERTY(double altDifference READ altDifference WRITE setAltDifference NOTIFY altDifferenceChanged) ///< Change in altitude from previous waypoint - Q_PROPERTY(double altPercent READ altPercent WRITE setAltPercent NOTIFY altPercentChanged) ///< Percent of total altitude change in mission altitude - Q_PROPERTY(double azimuth READ azimuth WRITE setAzimuth NOTIFY azimuthChanged) ///< Azimuth to previous waypoint - Q_PROPERTY(double distance READ distance WRITE setDistance NOTIFY distanceChanged) ///< Distance to previous waypoint + Q_PROPERTY(double altDifference READ altDifference WRITE setAltDifference NOTIFY altDifferenceChanged) ///< Change in altitude from previous waypoint + Q_PROPERTY(double altPercent READ altPercent WRITE setAltPercent NOTIFY altPercentChanged) ///< Percent of total altitude change in mission altitude + Q_PROPERTY(double azimuth READ azimuth WRITE setAzimuth NOTIFY azimuthChanged) ///< Azimuth to previous waypoint + Q_PROPERTY(double distance READ distance WRITE setDistance NOTIFY distanceChanged) ///< Distance to previous waypoint // Property accesors diff --git a/src/PlanView/PlanToolBar.qml b/src/PlanView/PlanToolBar.qml index 261ace7bf..248a2962e 100644 --- a/src/PlanView/PlanToolBar.qml +++ b/src/PlanView/PlanToolBar.qml @@ -39,9 +39,10 @@ Rectangle { property bool _controllerValid: missionController != undefined property bool _manualUpload: QGroundControl.settingsManager.appSettings.automaticMissionUpload.rawValue == 0 - property real _dataFontSize: ScreenTools.isMobile ? ScreenTools.smallFontPointSize : ScreenTools.defaultFontPointSize + property real _dataFontSize: ScreenTools.defaultFontPointSize property real _largeValueWidth: ScreenTools.defaultFontPixelWidth * 8 - property real _smallValueWidth: ScreenTools.defaultFontPixelWidth * 4 + property real _mediumValueWidth: ScreenTools.defaultFontPixelWidth * 4 + property real _smallValueWidth: ScreenTools.defaultFontPixelWidth * 3 property real _labelToValueSpacing: ScreenTools.defaultFontPixelWidth property real _rowSpacing: ScreenTools.isMobile ? 1 : 0 property real _distance: _statusValid ? currentMissionItem.distance : NaN @@ -49,6 +50,7 @@ Rectangle { property real _gradient: _statusValid && currentMissionItem.distance > 0 ? Math.atan(currentMissionItem.altDifference / currentMissionItem.distance) : NaN property real _gradientPercent: isNaN(_gradient) ? NaN : _gradient * 100 property real _azimuth: _statusValid ? currentMissionItem.azimuth : NaN + property real _heading: _statusValid ? currentMissionItem.missionVehicleYaw : NaN property real _missionDistance: _missionValid ? missionDistance : NaN property real _missionMaxTelemetry: _missionValid ? missionMaxTelemetry : NaN property real _missionTime: _missionValid ? missionTime : NaN @@ -57,8 +59,9 @@ Rectangle { property string _distanceText: isNaN(_distance) ? "-.-" : QGroundControl.metersToAppSettingsDistanceUnits(_distance).toFixed(1) + " " + QGroundControl.appSettingsDistanceUnitsString property string _altDifferenceText: isNaN(_altDifference) ? "-.-" : QGroundControl.metersToAppSettingsDistanceUnits(_altDifference).toFixed(1) + " " + QGroundControl.appSettingsDistanceUnitsString - property string _gradientText: isNaN(_gradient) ? "-.-" : _gradientPercent.toFixed(0) + "%" + property string _gradientText: isNaN(_gradient) ? "-.-" : _gradientPercent.toFixed(0) + " %" property string _azimuthText: isNaN(_azimuth) ? "-.-" : Math.round(_azimuth) + property string _headingText: isNaN(_azimuth) ? "-.-" : Math.round(_heading) property string _missionDistanceText: isNaN(_missionDistance) ? "-.-" : QGroundControl.metersToAppSettingsDistanceUnits(_missionDistance).toFixed(0) + " " + QGroundControl.appSettingsDistanceUnitsString property string _missionMaxTelemetryText: isNaN(_missionMaxTelemetry) ? "-.-" : QGroundControl.metersToAppSettingsDistanceUnits(_missionMaxTelemetry).toFixed(0) + " " + QGroundControl.appSettingsDistanceUnitsString property string _batteryChangePointText: _batteryChangePoint < 0 ? "N/A" : _batteryChangePoint @@ -120,50 +123,55 @@ Rectangle { GridLayout { anchors.verticalCenter: parent.verticalCenter - columns: 5 + columns: 8 rowSpacing: _rowSpacing columnSpacing: _labelToValueSpacing QGCLabel { text: qsTr("Selected Waypoint") - Layout.columnSpan: 5 + Layout.columnSpan: 8 font.pointSize: ScreenTools.smallFontPointSize } - QGCLabel { text: qsTr("Distance:"); font.pointSize: _dataFontSize; } + QGCLabel { text: qsTr("Alt diff:"); font.pointSize: _dataFontSize; } QGCLabel { - text: _distanceText + text: _altDifferenceText font.pointSize: _dataFontSize - Layout.minimumWidth: _largeValueWidth - horizontalAlignment: Text.AlignRight + Layout.minimumWidth: _mediumValueWidth } Item { width: 1; height: 1 } - QGCLabel { text: qsTr("Gradient:"); font.pointSize: _dataFontSize; } + QGCLabel { text: qsTr("Azimuth:"); font.pointSize: _dataFontSize; } QGCLabel { - text: _gradientText + text: _azimuthText font.pointSize: _dataFontSize Layout.minimumWidth: _smallValueWidth - horizontalAlignment: Text.AlignRight } - QGCLabel { text: qsTr("Alt diff:"); font.pointSize: _dataFontSize; } + Item { width: 1; height: 1 } + + QGCLabel { text: qsTr("Distance:"); font.pointSize: _dataFontSize; } QGCLabel { - text: _altDifferenceText + text: _distanceText font.pointSize: _dataFontSize Layout.minimumWidth: _largeValueWidth - horizontalAlignment: Text.AlignRight + } + + QGCLabel { text: qsTr("Gradient:"); font.pointSize: _dataFontSize; } + QGCLabel { + text: _gradientText + font.pointSize: _dataFontSize + Layout.minimumWidth: _mediumValueWidth } Item { width: 1; height: 1 } - QGCLabel { text: qsTr("Azimuth:"); font.pointSize: _dataFontSize; } + QGCLabel { text: qsTr("Heading:"); font.pointSize: _dataFontSize; } QGCLabel { - text: _azimuthText + text: _headingText font.pointSize: _dataFontSize Layout.minimumWidth: _smallValueWidth - horizontalAlignment: Text.AlignRight } } @@ -184,7 +192,6 @@ Rectangle { text: _missionDistanceText font.pointSize: _dataFontSize Layout.minimumWidth: _largeValueWidth - horizontalAlignment: Text.AlignRight } Item { width: 1; height: 1 } @@ -194,7 +201,6 @@ Rectangle { text: _missionMaxTelemetryText font.pointSize: _dataFontSize Layout.minimumWidth: _largeValueWidth - horizontalAlignment: Text.AlignRight } QGCLabel { text: qsTr("Time:"); font.pointSize: _dataFontSize; } @@ -202,7 +208,6 @@ Rectangle { text: getMissionTime() font.pointSize: _dataFontSize Layout.minimumWidth: _largeValueWidth - horizontalAlignment: Text.AlignRight } } @@ -222,8 +227,7 @@ Rectangle { QGCLabel { text: _batteriesRequiredText font.pointSize: _dataFontSize - horizontalAlignment: Text.AlignRight - Layout.minimumWidth: _smallValueWidth + Layout.minimumWidth: _mediumValueWidth } Item { width: 1; height: 1 } @@ -232,8 +236,7 @@ Rectangle { QGCLabel { text: _batteryChangePointText font.pointSize: _dataFontSize - horizontalAlignment: Text.AlignRight - Layout.minimumWidth: _smallValueWidth + Layout.minimumWidth: _mediumValueWidth } } } @@ -245,7 +248,7 @@ Rectangle { anchors.verticalCenter: parent.verticalCenter text: missionController ? (missionController.dirty ? qsTr("Upload Required") : qsTr("Upload")) : "" enabled: _activeVehicle - visible: _manualUpload + visible: _activeVehicle && _manualUpload onClicked: missionController.upload() PropertyAnimation on opacity { -- 2.22.0