SensorsComponent.qml 12.9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/*=====================================================================

 QGroundControl Open Source Ground Control Station

 (c) 2009 - 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>

 This file is part of the QGROUNDCONTROL project

 QGROUNDCONTROL is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 QGROUNDCONTROL is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.

 ======================================================================*/

Don Gagne's avatar
Don Gagne committed
24 25 26 27 28 29 30 31
import QtQuick 2.2
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2

import QGroundControl.FactSystem 1.0
import QGroundControl.FactControls 1.0
import QGroundControl.Palette 1.0
import QGroundControl.Controls 1.0
32
import QGroundControl.ScreenTools 1.0
Don Gagne's avatar
Don Gagne committed
33 34 35

Rectangle {
    property QGCPalette qgcPal: QGCPalette { colorGroupEnabled: true }
36
    property ScreenTools screenTools: ScreenTools { }
Don Gagne's avatar
Don Gagne committed
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78

    readonly property int rotationColumnWidth: 200
    readonly property var rotations: [
        "ROTATION_NONE",
        "ROTATION_YAW_45",
        "ROTATION_YAW_90",
        "ROTATION_YAW_135",
        "ROTATION_YAW_180",
        "ROTATION_YAW_225",
        "ROTATION_YAW_270",
        "ROTATION_YAW_315",
        "ROTATION_ROLL_180",
        "ROTATION_ROLL_180_YAW_45",
        "ROTATION_ROLL_180_YAW_90",
        "ROTATION_ROLL_180_YAW_135",
        "ROTATION_PITCH_180",
        "ROTATION_ROLL_180_YAW_225",
        "ROTATION_ROLL_180_YAW_270",
        "ROTATION_ROLL_180_YAW_315",
        "ROTATION_ROLL_90",
        "ROTATION_ROLL_90_YAW_45",
        "ROTATION_ROLL_90_YAW_90",
        "ROTATION_ROLL_90_YAW_135",
        "ROTATION_ROLL_270",
        "ROTATION_ROLL_270_YAW_45",
        "ROTATION_ROLL_270_YAW_90",
        "ROTATION_ROLL_270_YAW_135",
        "ROTATION_PITCH_90",
        "ROTATION_PITCH_270",
        "ROTATION_ROLL_270_YAW_270"
    ]

    color: qgcPal.window

    // We use this bogus loader just so we can get an onLoaded signal to hook to in order to
    // finish controller initialization.
    Component {
        id: loadSignal;
        Item { }
    }
    Loader {
        sourceComponent: loadSignal
79 80 81 82
        onLoaded: {
            controller.statusLog = statusTextArea
            controller.progressBar = progressBar
        }
Don Gagne's avatar
Don Gagne committed
83 84 85 86 87 88 89
    }

    Column {
        anchors.fill: parent

        QGCLabel {
            text: "SENSORS CONFIG"
90
            font.pointSize: screenTools.dpiAdjustedPointSize(20);
Don Gagne's avatar
Don Gagne committed
91 92 93 94
        }

        Item { height: 20; width: 10 } // spacer

95 96 97 98 99 100 101 102
        Row {
            readonly property int buttonWidth: 120

            spacing: 20

            QGCLabel { text: "Calibrate:"; anchors.baseline: firstButton.baseline }

            IndicatorButton {
103 104
                property Fact fact: Fact { name: "CAL_MAG0_ID" }

105 106 107
                id:             firstButton
                width:          parent.buttonWidth
                text:           "Compass"
108
                indicatorGreen: fact.value != 0
109 110 111 112
                onClicked: controller.calibrateCompass()
            }

            IndicatorButton {
113 114
                property Fact fact: Fact { name: "CAL_GYRO0_ID" }

115 116
                width:          parent.buttonWidth
                text:           "Gyroscope"
117
                indicatorGreen: fact.value != 0
118 119 120 121
                onClicked: controller.calibrateGyro()
            }

            IndicatorButton {
122 123
                property Fact fact: Fact { name: "CAL_ACC0_ID" }

124
                width:          parent.buttonWidth
Don Gagne's avatar
Don Gagne committed
125
                text:           "Accelerometer"
126
                indicatorGreen: fact.value != 0
127 128 129 130
                onClicked: controller.calibrateAccel()
            }

            IndicatorButton {
131 132
                property Fact fact: Fact { name: "SENS_DPRES_OFF" }

133 134 135
                width:          parent.buttonWidth
                text:           "Airspeed"
                visible:        controller.fixedWing
136 137
                indicatorGreen: fact.value != 0
                onClicked:      controller.calibrateAirspeed()
138 139 140 141 142 143 144 145 146 147 148 149
            }
        }

        Item { height: 20; width: 10 } // spacer

        ProgressBar {
            id: progressBar
            width: parent.width - rotationColumnWidth
        }

        Item { height: 10; width: 10 } // spacer

Don Gagne's avatar
Don Gagne committed
150 151
        Item {
            readonly property int calibrationAreaHeight: 300
152
            property int calDisplayAreaWidth: parent.width - rotationColumnWidth
Don Gagne's avatar
Don Gagne committed
153 154

            width:  parent.width
155
            height: parent.height - y
Don Gagne's avatar
Don Gagne committed
156 157 158

            TextArea {
                id:             statusTextArea
159
                width:          parent.calDisplayAreaWidth
Don Gagne's avatar
Don Gagne committed
160 161 162
                height:         parent.height
                readOnly:       true
                frameVisible:   false
163 164 165 166 167 168
                text:           "Sensor config is a work in progress. Not all visuals for all calibration types fully implemented.\n\n" +
                                "For Compass calibration you will need to rotate your vehicle through a number of positions. For this calibration is is best " +
                                "to be connected to you vehicle via radio instead of USB since the USB cable will likely get in the way.\n\n" +
                                "For Gyroscope calibration you will need to place your vehicle right side up on solid surface and leave it still.\n\n" +
                                "For Accelerometer calibration you will need to place your vehicle on all six sides and hold it there for a few seconds.\n\n" +
                                "For Airspeed calibration you will need to keep your airspeed sensor out of any wind.\n\n"
Don Gagne's avatar
Don Gagne committed
169 170 171 172 173 174 175

                style: TextAreaStyle {
                    textColor: qgcPal.text
                    backgroundColor: qgcPal.windowShade
                }
            }

176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266
            Rectangle {
                id:         gyroCalArea
                width:      parent.calDisplayAreaWidth
                height:     parent.height
                visible:    controller.showGyroCalArea
                color:      qgcPal.windowShade

                Column {
                    width: parent.width

                    QGCLabel {
                        text: "Place your vehicle upright on a solid surface and hold it still."
                    }

                    VehicleRotationCal {
                        width:          200
                        height:         200
                        calValid:       true
                        calInProgress:  controller.gyroCalInProgress
                        imageSource:    "qrc:///qml/VehicleDown.png"
                    }

                }
            }

            Rectangle {
                id:         accelCalArea
                width:      parent.calDisplayAreaWidth
                height:     parent.height
                visible:    controller.showAccelCalArea
                color:      qgcPal.windowShade

                QGCLabel {
                    id:         calAreaLabel
                    width:      parent.width
                    wrapMode:   Text.WordWrap

                    text: "Place your vehicle into each of the positions below and hold still. Once that position is completed you can move to another."
                }

                Flow {
                    y:          calAreaLabel.height
                    width:      parent.width
                    height:     parent.height - calAreaLabel.implicitHeight
                    spacing:    5

                    VehicleRotationCal {
                        width:          200
                        height:         200
                        calValid:       controller.accelCalDownSideDone
                        calInProgress:  controller.accelCalDownSideInProgress
                        imageSource:    "qrc:///qml/VehicleDown.png"
                    }
                    VehicleRotationCal {
                        width:          200
                        height:         200
                        calValid:       controller.accelCalUpsideDownSideDone
                        calInProgress:  controller.accelCalUpsideDownSideInProgress
                        imageSource:    "qrc:///qml/VehicleUpsideDown.png"
                    }
                    VehicleRotationCal {
                        width:          200
                        height:         200
                        calValid:       controller.accelCalNoseDownSideDone
                        calInProgress:  controller.accelCalNoseDownSideInProgress
                        imageSource:    "qrc:///qml/VehicleNoseDown.png"
                    }
                    VehicleRotationCal {
                        width:          200
                        height:         200
                        calValid:       controller.accelCalTailDownSideDone
                        calInProgress:  controller.accelCalTailDownSideInProgress
                        imageSource:    "qrc:///qml/VehicleTailDown.png"
                    }
                    VehicleRotationCal {
                        width:          200
                        height:         200
                        calValid:       controller.accelCalLeftSideDone
                        calInProgress:  controller.accelCalLeftSideInProgress
                        imageSource:    "qrc:///qml/VehicleLeft.png"
                    }
                    VehicleRotationCal {
                        width:          200
                        height:         200
                        calValid:       controller.accelCalRightSideDone
                        calInProgress:  controller.accelCalRightSideInProgress
                        imageSource:    "qrc:///qml/VehicleRight.png"
                    }
                }
            }

Don Gagne's avatar
Don Gagne committed
267
            Column {
268 269 270 271
                property Fact cal_mag0_rot: Fact { name: "CAL_MAG0_ROT" }
                property Fact cal_mag1_rot: Fact { name: "CAL_MAG1_ROT" }
                property Fact cal_mag2_rot: Fact { name: "CAL_MAG2_ROT" }

Don Gagne's avatar
Don Gagne committed
272 273
                // Compass rotation parameter < 0 indicates either internal compass, or no compass. So in
                // both those cases we do not show a rotation combo.
274 275 276
                property bool showCompass0: cal_mag0_rot.value >= 0
                property bool showCompass1: cal_mag1_rot.value >= 0
                property bool showCompass2: cal_mag2_rot.value >= 0
Don Gagne's avatar
Don Gagne committed
277 278 279 280 281 282 283 284

                x: parent.width - rotationColumnWidth

                QGCLabel { text: "Autpilot Orientation" }

                FactComboBox {
                    width:  rotationColumnWidth;
                    model:  rotations
285
                    fact:   Fact { name: "SENS_BOARD_ROT" }
Don Gagne's avatar
Don Gagne committed
286 287 288 289 290 291 292 293 294 295 296 297 298 299
                }

                // Compass 0 rotation
                Component {
                    id: compass0ComponentLabel

                    QGCLabel { text: "Compass Orientation" }
                }
                Component {
                    id: compass0ComponentCombo

                    FactComboBox {
                        width:  rotationColumnWidth
                        model:  rotations
300
                        fact:   Fact { name: "CAL_MAG0_ROT" }
Don Gagne's avatar
Don Gagne committed
301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317
                    }
                }
                Loader { sourceComponent: parent.showCompass0 ? compass0ComponentLabel : null }
                Loader { sourceComponent: parent.showCompass0 ? compass0ComponentCombo : null }

                // Compass 1 rotation
                Component {
                    id: compass1ComponentLabel

                    QGCLabel { text: "Compass 1 Orientation" }
                }
                Component {
                    id: compass1ComponentCombo

                    FactComboBox {
                        width:  rotationColumnWidth
                        model:  rotations
318
                        fact:   Fact { name: "CAL_MAG1_ROT" }
Don Gagne's avatar
Don Gagne committed
319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335
                    }
                }
                Loader { sourceComponent: parent.showCompass1 ? compass1ComponentLabel : null }
                Loader { sourceComponent: parent.showCompass1 ? compass1ComponentCombo : null }

                // Compass 2 rotation
                Component {
                    id: compass2ComponentLabel

                    QGCLabel { text: "Compass 2 Orientation" }
                }
                Component {
                    id: compass2ComponentCombo

                    FactComboBox {
                        width:  rotationColumnWidth
                        model:  rotations
336
                        fact:   Fact { name: "CAL_MAG2_ROT" }
Don Gagne's avatar
Don Gagne committed
337 338 339 340 341 342 343 344 345
                    }
                }
                Loader { sourceComponent: parent.showCompass2 ? compass2ComponentLabel : null }
                Loader { sourceComponent: parent.showCompass2 ? compass2ComponentCombo : null }
            }
        }
    }
}