diff --git a/src/AutoPilotPlugins/PX4/SensorsComponent.qml b/src/AutoPilotPlugins/PX4/SensorsComponent.qml index 74c1d3db4ff1b43fa33ec89028eedff405bc681a..75bf2617834dab58fc3ada05b0e1279b20590ab8 100644 --- a/src/AutoPilotPlugins/PX4/SensorsComponent.qml +++ b/src/AutoPilotPlugins/PX4/SensorsComponent.qml @@ -195,8 +195,6 @@ Rectangle { } VehicleRotationCal { - width: 200 - height: 200 calValid: true calInProgress: controller.gyroCalInProgress imageSource: "qrc:///qml/VehicleDown.png" @@ -206,10 +204,10 @@ Rectangle { } Rectangle { - id: accelCalArea + id: orientationCalArea width: parent.calDisplayAreaWidth height: parent.height - visible: controller.showAccelCalArea + visible: controller.showOrientationCalArea color: qgcPal.windowShade QGCLabel { @@ -227,46 +225,40 @@ Rectangle { spacing: 5 VehicleRotationCal { - width: 200 - height: 200 - calValid: controller.accelCalDownSideDone - calInProgress: controller.accelCalDownSideInProgress - imageSource: "qrc:///qml/VehicleDown.png" + calValid: controller.orientationCalDownSideDone + calInProgress: controller.orientationCalDownSideInProgress + calInProgressText: controller.calInProgressText + imageSource: "qrc:///qml/VehicleDown.png" } VehicleRotationCal { - width: 200 - height: 200 - calValid: controller.accelCalUpsideDownSideDone - calInProgress: controller.accelCalUpsideDownSideInProgress - imageSource: "qrc:///qml/VehicleUpsideDown.png" + calValid: controller.orientationCalUpsideDownSideDone + calInProgress: controller.orientationCalUpsideDownSideInProgress + calInProgressText: controller.calInProgressText + imageSource: "qrc:///qml/VehicleUpsideDown.png" } VehicleRotationCal { - width: 200 - height: 200 - calValid: controller.accelCalNoseDownSideDone - calInProgress: controller.accelCalNoseDownSideInProgress - imageSource: "qrc:///qml/VehicleNoseDown.png" + calValid: controller.orientationCalNoseDownSideDone + calInProgress: controller.orientationCalNoseDownSideInProgress + calInProgressText: controller.calInProgressText + imageSource: "qrc:///qml/VehicleNoseDown.png" } VehicleRotationCal { - width: 200 - height: 200 - calValid: controller.accelCalTailDownSideDone - calInProgress: controller.accelCalTailDownSideInProgress - imageSource: "qrc:///qml/VehicleTailDown.png" + calValid: controller.orientationCalTailDownSideDone + calInProgress: controller.orientationCalTailDownSideInProgress + calInProgressText: controller.calInProgressText + imageSource: "qrc:///qml/VehicleTailDown.png" } VehicleRotationCal { - width: 200 - height: 200 - calValid: controller.accelCalLeftSideDone - calInProgress: controller.accelCalLeftSideInProgress - imageSource: "qrc:///qml/VehicleLeft.png" + calValid: controller.orientationCalLeftSideDone + calInProgress: controller.orientationCalLeftSideInProgress + calInProgressText: controller.calInProgressText + imageSource: "qrc:///qml/VehicleLeft.png" } VehicleRotationCal { - width: 200 - height: 200 - calValid: controller.accelCalRightSideDone - calInProgress: controller.accelCalRightSideInProgress - imageSource: "qrc:///qml/VehicleRight.png" + calValid: controller.orientationCalRightSideDone + calInProgress: controller.orientationCalRightSideInProgress + calInProgressText: controller.calInProgressText + imageSource: "qrc:///qml/VehicleRight.png" } } } diff --git a/src/AutoPilotPlugins/PX4/SensorsComponentController.cc b/src/AutoPilotPlugins/PX4/SensorsComponentController.cc index a95b48fc598917d0a9643f519cfc7594d628805a..9c131282435bced9bb1fe42dc7391ccf0ffb0d8b 100644 --- a/src/AutoPilotPlugins/PX4/SensorsComponentController.cc +++ b/src/AutoPilotPlugins/PX4/SensorsComponentController.cc @@ -37,23 +37,25 @@ SensorsComponentController::SensorsComponentController(AutoPilotPlugin* autopilo _statusLog(NULL), _progressBar(NULL), _showGyroCalArea(false), - _showAccelCalArea(false), + _showOrientationCalArea(false), _showCompass0(false), _showCompass1(false), _showCompass2(false), _gyroCalInProgress(false), - _accelCalDownSideDone(false), - _accelCalUpsideDownSideDone(false), - _accelCalLeftSideDone(false), - _accelCalRightSideDone(false), - _accelCalNoseDownSideDone(false), - _accelCalTailDownSideDone(false), - _accelCalDownSideInProgress(false), - _accelCalUpsideDownSideInProgress(false), - _accelCalLeftSideInProgress(false), - _accelCalRightSideInProgress(false), - _accelCalNoseDownSideInProgress(false), - _accelCalTailDownSideInProgress(false), + _magCalInProgress(false), + _accelCalInProgress(false), + _orientationCalDownSideDone(false), + _orientationCalUpsideDownSideDone(false), + _orientationCalLeftSideDone(false), + _orientationCalRightSideDone(false), + _orientationCalNoseDownSideDone(false), + _orientationCalTailDownSideDone(false), + _orientationCalDownSideInProgress(false), + _orientationCalUpsideDownSideInProgress(false), + _orientationCalLeftSideInProgress(false), + _orientationCalRightSideInProgress(false), + _orientationCalNoseDownSideInProgress(false), + _orientationCalTailDownSideInProgress(false), _textLoggingStarted(false), _autopilot(autopilot) { @@ -95,6 +97,9 @@ void SensorsComponentController::_startCalibration(void) void SensorsComponentController::_stopCalibration(bool failed) { + _magCalInProgress = false; + _accelCalInProgress = false; + _compassButton->setEnabled(true); _gyroButton->setEnabled(true); _accelButton->setEnabled(true); @@ -160,6 +165,7 @@ void SensorsComponentController::_handleUASTextMessage(int uasId, int compId, in { QString startingSidePrefix("Hold still, starting to measure "); QString sideDoneSuffix(" side done, rotate to a different side"); + QString orientationDetectedSuffix(" orientation detected"); Q_UNUSED(compId); Q_UNUSED(severity); @@ -194,83 +200,107 @@ void SensorsComponentController::_handleUASTextMessage(int uasId, int compId, in if (text == "gyro calibration: started") { _updateAndEmitShowGyroCalArea(true); _updateAndEmitGyroCalInProgress(true); - } else if (text == "accel calibration: started") { - _accelCalDownSideDone = false; - _accelCalUpsideDownSideDone = false; - _accelCalLeftSideDone = false; - _accelCalRightSideDone = false; - _accelCalTailDownSideDone = false; - _accelCalNoseDownSideDone = false; - _accelCalDownSideInProgress = false; - _accelCalUpsideDownSideInProgress = false; - _accelCalLeftSideInProgress = false; - _accelCalRightSideInProgress = false; - _accelCalNoseDownSideInProgress = false; - _accelCalTailDownSideInProgress = false; - emit accelCalSidesDoneChanged(); - emit accelCalSidesInProgressChanged(); - _updateAndEmitShowAccelCalArea(true); + } else if (text == "accel calibration: started" || text == "mag calibration: started") { + if (text == "accel calibration: started") { + _accelCalInProgress = true; + _updateAndEmitCalInProgressText("Hold Still"); + } else { + _updateAndEmitCalInProgressText("Rotate"); + _magCalInProgress = true; + } + _orientationCalDownSideDone = false; + _orientationCalUpsideDownSideDone = false; + _orientationCalLeftSideDone = false; + _orientationCalRightSideDone = false; + _orientationCalTailDownSideDone = false; + _orientationCalNoseDownSideDone = false; + _orientationCalDownSideInProgress = false; + _orientationCalUpsideDownSideInProgress = false; + _orientationCalLeftSideInProgress = false; + _orientationCalRightSideInProgress = false; + _orientationCalNoseDownSideInProgress = false; + _orientationCalTailDownSideInProgress = false; + emit orientationCalSidesDoneChanged(); + emit orientationCalSidesInProgressChanged(); + _updateAndEmitShowOrientationCalArea(true); } else if (text.startsWith(startingSidePrefix)) { QString side = text.right(text.length() - startingSidePrefix.length()).section(" ", 0, 0); qDebug() << "Side started" << side; if (side == "down") { - _accelCalDownSideInProgress = true; + _orientationCalDownSideInProgress = true; + } else if (side == "up") { + _orientationCalUpsideDownSideInProgress = true; + } else if (side == "left") { + _orientationCalLeftSideInProgress = true; + } else if (side == "right") { + _orientationCalRightSideInProgress = true; + } else if (side == "front") { + _orientationCalNoseDownSideInProgress = true; + } else if (side == "back") { + _orientationCalTailDownSideInProgress = true; + } + emit orientationCalSidesInProgressChanged(); + } else if (text.endsWith(orientationDetectedSuffix)) { + QString side = text.section(" ", 0, 0); + qDebug() << "Side started" << side; + if (side == "down") { + _orientationCalDownSideInProgress = true; } else if (side == "up") { - _accelCalUpsideDownSideInProgress = true; + _orientationCalUpsideDownSideInProgress = true; } else if (side == "left") { - _accelCalLeftSideInProgress = true; + _orientationCalLeftSideInProgress = true; } else if (side == "right") { - _accelCalRightSideInProgress = true; + _orientationCalRightSideInProgress = true; } else if (side == "front") { - _accelCalNoseDownSideInProgress = true; + _orientationCalNoseDownSideInProgress = true; } else if (side == "back") { - _accelCalTailDownSideInProgress = true; + _orientationCalTailDownSideInProgress = true; } - emit accelCalSidesInProgressChanged(); + emit orientationCalSidesInProgressChanged(); } else if (text.endsWith(sideDoneSuffix)) { QString side = text.section(" ", 0, 0); qDebug() << "Side finished" << side; if (side == "down") { - _accelCalDownSideInProgress = false; - _accelCalDownSideDone = true; + _orientationCalDownSideInProgress = false; + _orientationCalDownSideDone = true; } else if (side == "up") { - _accelCalUpsideDownSideInProgress = false; - _accelCalUpsideDownSideDone = true; + _orientationCalUpsideDownSideInProgress = false; + _orientationCalUpsideDownSideDone = true; } else if (side == "left") { - _accelCalLeftSideInProgress = false; - _accelCalLeftSideDone = true; + _orientationCalLeftSideInProgress = false; + _orientationCalLeftSideDone = true; } else if (side == "right") { - _accelCalRightSideInProgress = false; - _accelCalRightSideDone = true; + _orientationCalRightSideInProgress = false; + _orientationCalRightSideDone = true; } else if (side == "front") { - _accelCalNoseDownSideInProgress = false; - _accelCalNoseDownSideDone = true; + _orientationCalNoseDownSideInProgress = false; + _orientationCalNoseDownSideDone = true; } else if (side == "back") { - _accelCalTailDownSideInProgress = false; - _accelCalTailDownSideDone = true; + _orientationCalTailDownSideInProgress = false; + _orientationCalTailDownSideDone = true; } - emit accelCalSidesInProgressChanged(); - emit accelCalSidesDoneChanged(); - } else if (text == "accel calibration: done") { + emit orientationCalSidesInProgressChanged(); + emit orientationCalSidesDoneChanged(); + } else if (text == "accel calibration: done" || text == "mag calibration: done") { _progressBar->setProperty("value", 1); - _accelCalDownSideDone = true; - _accelCalUpsideDownSideDone = true; - _accelCalLeftSideDone = true; - _accelCalRightSideDone = true; - _accelCalTailDownSideDone = true; - _accelCalNoseDownSideDone = true; - _accelCalDownSideInProgress = false; - _accelCalUpsideDownSideInProgress = false; - _accelCalLeftSideInProgress = false; - _accelCalRightSideInProgress = false; - _accelCalNoseDownSideInProgress = false; - _accelCalTailDownSideInProgress = false; - emit accelCalSidesDoneChanged(); - emit accelCalSidesInProgressChanged(); + _orientationCalDownSideDone = true; + _orientationCalUpsideDownSideDone = true; + _orientationCalLeftSideDone = true; + _orientationCalRightSideDone = true; + _orientationCalTailDownSideDone = true; + _orientationCalNoseDownSideDone = true; + _orientationCalDownSideInProgress = false; + _orientationCalUpsideDownSideInProgress = false; + _orientationCalLeftSideInProgress = false; + _orientationCalRightSideInProgress = false; + _orientationCalNoseDownSideInProgress = false; + _orientationCalTailDownSideInProgress = false; + emit orientationCalSidesDoneChanged(); + emit orientationCalSidesInProgressChanged(); _stopCalibration(false /* success */); } else if (text == "gyro calibration: done") { _stopCalibration(false /* success */); - } else if (text == "mag calibration: done" || text == "dpress calibration: done") { + } else if (text == "dpress calibration: done") { _stopCalibration(false /* success */); } else if (text.endsWith(" calibration: failed")) { _stopCalibration(true /* failed */); @@ -321,14 +351,20 @@ void SensorsComponentController::_updateAndEmitShowGyroCalArea(bool show) emit showGyroCalAreaChanged(); } -void SensorsComponentController::_updateAndEmitShowAccelCalArea(bool show) +void SensorsComponentController::_updateAndEmitShowOrientationCalArea(bool show) { - _showAccelCalArea = show; - emit showAccelCalAreaChanged(); + _showOrientationCalArea = show; + emit showOrientationCalAreaChanged(); } void SensorsComponentController::_hideAllCalAreas(void) { _updateAndEmitShowGyroCalArea(false); - _updateAndEmitShowAccelCalArea(false); + _updateAndEmitShowOrientationCalArea(false); +} + +void SensorsComponentController::_updateAndEmitCalInProgressText(const QString& text) +{ + _calInProgressText = text; + emit calInProgressTextChanged(text); } diff --git a/src/AutoPilotPlugins/PX4/SensorsComponentController.h b/src/AutoPilotPlugins/PX4/SensorsComponentController.h index 6d92cb46c300ee924c5d0cf331cc3ca82b1c5041..57bc493f3ac938abcd16fdfdd91d17188ce79e13 100644 --- a/src/AutoPilotPlugins/PX4/SensorsComponentController.h +++ b/src/AutoPilotPlugins/PX4/SensorsComponentController.h @@ -56,23 +56,25 @@ public: Q_PROPERTY(bool showCompass2 MEMBER _showCompass2 CONSTANT) Q_PROPERTY(bool showGyroCalArea MEMBER _showGyroCalArea NOTIFY showGyroCalAreaChanged) - Q_PROPERTY(bool showAccelCalArea MEMBER _showAccelCalArea NOTIFY showAccelCalAreaChanged) + Q_PROPERTY(bool showOrientationCalArea MEMBER _showOrientationCalArea NOTIFY showOrientationCalAreaChanged) Q_PROPERTY(bool gyroCalInProgress MEMBER _gyroCalInProgress NOTIFY gyroCalInProgressChanged) - Q_PROPERTY(bool accelCalDownSideDone MEMBER _accelCalDownSideDone NOTIFY accelCalSidesDoneChanged) - Q_PROPERTY(bool accelCalUpsideDownSideDone MEMBER _accelCalUpsideDownSideDone NOTIFY accelCalSidesDoneChanged) - Q_PROPERTY(bool accelCalLeftSideDone MEMBER _accelCalLeftSideDone NOTIFY accelCalSidesDoneChanged) - Q_PROPERTY(bool accelCalRightSideDone MEMBER _accelCalRightSideDone NOTIFY accelCalSidesDoneChanged) - Q_PROPERTY(bool accelCalNoseDownSideDone MEMBER _accelCalNoseDownSideDone NOTIFY accelCalSidesDoneChanged) - Q_PROPERTY(bool accelCalTailDownSideDone MEMBER _accelCalTailDownSideDone NOTIFY accelCalSidesDoneChanged) + Q_PROPERTY(QString calInProgressText MEMBER _calInProgressText NOTIFY calInProgressTextChanged) - Q_PROPERTY(bool accelCalDownSideInProgress MEMBER _accelCalDownSideInProgress NOTIFY accelCalSidesInProgressChanged) - Q_PROPERTY(bool accelCalUpsideDownSideInProgress MEMBER _accelCalUpsideDownSideInProgress NOTIFY accelCalSidesInProgressChanged) - Q_PROPERTY(bool accelCalLeftSideInProgress MEMBER _accelCalLeftSideInProgress NOTIFY accelCalSidesInProgressChanged) - Q_PROPERTY(bool accelCalRightSideInProgress MEMBER _accelCalRightSideInProgress NOTIFY accelCalSidesInProgressChanged) - Q_PROPERTY(bool accelCalNoseDownSideInProgress MEMBER _accelCalNoseDownSideInProgress NOTIFY accelCalSidesInProgressChanged) - Q_PROPERTY(bool accelCalTailDownSideInProgress MEMBER _accelCalTailDownSideInProgress NOTIFY accelCalSidesInProgressChanged) + Q_PROPERTY(bool orientationCalDownSideDone MEMBER _orientationCalDownSideDone NOTIFY orientationCalSidesDoneChanged) + Q_PROPERTY(bool orientationCalUpsideDownSideDone MEMBER _orientationCalUpsideDownSideDone NOTIFY orientationCalSidesDoneChanged) + Q_PROPERTY(bool orientationCalLeftSideDone MEMBER _orientationCalLeftSideDone NOTIFY orientationCalSidesDoneChanged) + Q_PROPERTY(bool orientationCalRightSideDone MEMBER _orientationCalRightSideDone NOTIFY orientationCalSidesDoneChanged) + Q_PROPERTY(bool orientationCalNoseDownSideDone MEMBER _orientationCalNoseDownSideDone NOTIFY orientationCalSidesDoneChanged) + Q_PROPERTY(bool orientationCalTailDownSideDone MEMBER _orientationCalTailDownSideDone NOTIFY orientationCalSidesDoneChanged) + + Q_PROPERTY(bool orientationCalDownSideInProgress MEMBER _orientationCalDownSideInProgress NOTIFY orientationCalSidesInProgressChanged) + Q_PROPERTY(bool orientationCalUpsideDownSideInProgress MEMBER _orientationCalUpsideDownSideInProgress NOTIFY orientationCalSidesInProgressChanged) + Q_PROPERTY(bool orientationCalLeftSideInProgress MEMBER _orientationCalLeftSideInProgress NOTIFY orientationCalSidesInProgressChanged) + Q_PROPERTY(bool orientationCalRightSideInProgress MEMBER _orientationCalRightSideInProgress NOTIFY orientationCalSidesInProgressChanged) + Q_PROPERTY(bool orientationCalNoseDownSideInProgress MEMBER _orientationCalNoseDownSideInProgress NOTIFY orientationCalSidesInProgressChanged) + Q_PROPERTY(bool orientationCalTailDownSideInProgress MEMBER _orientationCalTailDownSideInProgress NOTIFY orientationCalSidesInProgressChanged) Q_INVOKABLE void calibrateCompass(void); Q_INVOKABLE void calibrateGyro(void); @@ -83,10 +85,11 @@ public: signals: void showGyroCalAreaChanged(void); - void showAccelCalAreaChanged(void); + void showOrientationCalAreaChanged(void); void gyroCalInProgressChanged(void); - void accelCalSidesDoneChanged(void); - void accelCalSidesInProgressChanged(void); + void orientationCalSidesDoneChanged(void); + void orientationCalSidesInProgressChanged(void); + void calInProgressTextChanged(const QString& newText); private slots: void _handleUASTextMessage(int uasId, int compId, int severity, QString text); @@ -101,8 +104,10 @@ private: void _updateAndEmitGyroCalInProgress(bool inProgress); + void _updateAndEmitCalInProgressText(const QString& text); + void _updateAndEmitShowGyroCalArea(bool show); - void _updateAndEmitShowAccelCalArea(bool show); + void _updateAndEmitShowOrientationCalArea(bool show); QQuickItem* _statusLog; QQuickItem* _progressBar; @@ -112,27 +117,31 @@ private: QQuickItem* _airspeedButton; bool _showGyroCalArea; - bool _showAccelCalArea; + bool _showOrientationCalArea; bool _showCompass0; bool _showCompass1; bool _showCompass2; bool _gyroCalInProgress; - - bool _accelCalDownSideDone; - bool _accelCalUpsideDownSideDone; - bool _accelCalLeftSideDone; - bool _accelCalRightSideDone; - bool _accelCalNoseDownSideDone; - bool _accelCalTailDownSideDone; - - bool _accelCalDownSideInProgress; - bool _accelCalUpsideDownSideInProgress; - bool _accelCalLeftSideInProgress; - bool _accelCalRightSideInProgress; - bool _accelCalNoseDownSideInProgress; - bool _accelCalTailDownSideInProgress; + bool _magCalInProgress; + bool _accelCalInProgress; + + QString _calInProgressText; + + bool _orientationCalDownSideDone; + bool _orientationCalUpsideDownSideDone; + bool _orientationCalLeftSideDone; + bool _orientationCalRightSideDone; + bool _orientationCalNoseDownSideDone; + bool _orientationCalTailDownSideDone; + + bool _orientationCalDownSideInProgress; + bool _orientationCalUpsideDownSideInProgress; + bool _orientationCalLeftSideInProgress; + bool _orientationCalRightSideInProgress; + bool _orientationCalNoseDownSideInProgress; + bool _orientationCalTailDownSideInProgress; bool _textLoggingStarted; diff --git a/src/QmlControls/VehicleRotationCal.qml b/src/QmlControls/VehicleRotationCal.qml index 47b172998d30ba7c34a032acb7d3adea920d213d..4198430a34c568c25df0d5e970a4cfb6c4f50356 100644 --- a/src/QmlControls/VehicleRotationCal.qml +++ b/src/QmlControls/VehicleRotationCal.qml @@ -29,25 +29,28 @@ import QGroundControl.Palette 1.0 import QGroundControl.ScreenTools 1.0 Rectangle { - property var __qgcPal: QGCPalette { colorGroupEnabled: enabled } - property ScreenTools __screenTools: ScreenTools { } - // Indicates whether calibration is valid for this control property bool calValid: false // Indicates whether the control is currently being calibrated property bool calInProgress: false + // Text to show while calibration is in progress + property string calInProgressText: "Hold Still" + // Image source property var imageSource: "" + property var __qgcPal: QGCPalette { colorGroupEnabled: enabled } + property ScreenTools __screenTools: ScreenTools { } + width: 200 height: 200 color: calInProgress ? "yellow" : (calValid ? "green" : "red") Rectangle { readonly property int inset: 5 - property string calText: calInProgress ? "Hold Still" : (calValid ? "Completed" : "Incomplete") + property string calText: calInProgress ? calInProgressText : (calValid ? "Completed" : "Incomplete") x: inset y: inset