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
        onLoaded: {
            controller.statusLog = statusTextArea
            controller.progressBar = progressBar
82 83 84 85
            controller.compassButton = compassButton
            controller.gyroButton = gyroButton
            controller.accelButton = accelButton
            controller.airspeedButton = airspeedButton
86
        }
Don Gagne's avatar
Don Gagne committed
87 88 89 90 91 92 93
    }

    Column {
        anchors.fill: parent

        QGCLabel {
            text: "SENSORS CONFIG"
94
            font.pointSize: screenTools.fontPointFactor * (20);
Don Gagne's avatar
Don Gagne committed
95 96 97 98
        }

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

99 100 101 102 103
        Row {
            readonly property int buttonWidth: 120

            spacing: 20

104
            QGCLabel { text: "Calibrate:"; anchors.baseline: compassButton.baseline }
105 106

            IndicatorButton {
107 108
                property Fact fact: Fact { name: "CAL_MAG0_ID" }

109
                id:             compassButton
110 111
                width:          parent.buttonWidth
                text:           "Compass"
112
                indicatorGreen: fact.value != 0
113 114 115 116
                onClicked: controller.calibrateCompass()
            }

            IndicatorButton {
117 118
                property Fact fact: Fact { name: "CAL_GYRO0_ID" }

119
                id:             gyroButton
120 121
                width:          parent.buttonWidth
                text:           "Gyroscope"
122
                indicatorGreen: fact.value != 0
123 124 125 126
                onClicked: controller.calibrateGyro()
            }

            IndicatorButton {
127 128
                property Fact fact: Fact { name: "CAL_ACC0_ID" }

129
                id:             accelButton
130
                width:          parent.buttonWidth
Don Gagne's avatar
Don Gagne committed
131
                text:           "Accelerometer"
132
                indicatorGreen: fact.value != 0
133 134 135 136
                onClicked: controller.calibrateAccel()
            }

            IndicatorButton {
137 138
                property Fact fact: Fact { name: "SENS_DPRES_OFF" }

139
                id:             airspeedButton
140 141 142
                width:          parent.buttonWidth
                text:           "Airspeed"
                visible:        controller.fixedWing
143 144
                indicatorGreen: fact.value != 0
                onClicked:      controller.calibrateAirspeed()
145 146 147 148 149 150 151 152 153 154 155 156
            }
        }

        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
157 158
        Item {
            readonly property int calibrationAreaHeight: 300
159
            property int calDisplayAreaWidth: parent.width - rotationColumnWidth
Don Gagne's avatar
Don Gagne committed
160 161

            width:  parent.width
162
            height: parent.height - y
Don Gagne's avatar
Don Gagne committed
163 164 165

            TextArea {
                id:             statusTextArea
166
                width:          parent.calDisplayAreaWidth
Don Gagne's avatar
Don Gagne committed
167 168 169
                height:         parent.height
                readOnly:       true
                frameVisible:   false
170 171 172 173 174 175
                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
176 177 178 179 180 181 182

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

183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206
            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 {
                        calValid:       true
                        calInProgress:  controller.gyroCalInProgress
                        imageSource:    "qrc:///qml/VehicleDown.png"
                    }

                }
            }

            Rectangle {
Don Gagne's avatar
Don Gagne committed
207
                id:         orientationCalArea
208 209
                width:      parent.calDisplayAreaWidth
                height:     parent.height
Don Gagne's avatar
Don Gagne committed
210
                visible:    controller.showOrientationCalArea
211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227
                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 {
Don Gagne's avatar
Don Gagne committed
228 229 230 231
                        calValid:           controller.orientationCalDownSideDone
                        calInProgress:      controller.orientationCalDownSideInProgress
                        calInProgressText:  controller.calInProgressText
                        imageSource:        "qrc:///qml/VehicleDown.png"
232 233
                    }
                    VehicleRotationCal {
Don Gagne's avatar
Don Gagne committed
234 235 236 237
                        calValid:           controller.orientationCalUpsideDownSideDone
                        calInProgress:      controller.orientationCalUpsideDownSideInProgress
                        calInProgressText:  controller.calInProgressText
                        imageSource:        "qrc:///qml/VehicleUpsideDown.png"
238 239
                    }
                    VehicleRotationCal {
Don Gagne's avatar
Don Gagne committed
240 241 242 243
                        calValid:           controller.orientationCalNoseDownSideDone
                        calInProgress:      controller.orientationCalNoseDownSideInProgress
                        calInProgressText:  controller.calInProgressText
                        imageSource:        "qrc:///qml/VehicleNoseDown.png"
244 245
                    }
                    VehicleRotationCal {
Don Gagne's avatar
Don Gagne committed
246 247 248 249
                        calValid:           controller.orientationCalTailDownSideDone
                        calInProgress:      controller.orientationCalTailDownSideInProgress
                        calInProgressText:  controller.calInProgressText
                        imageSource:        "qrc:///qml/VehicleTailDown.png"
250 251
                    }
                    VehicleRotationCal {
Don Gagne's avatar
Don Gagne committed
252 253 254 255
                        calValid:           controller.orientationCalLeftSideDone
                        calInProgress:      controller.orientationCalLeftSideInProgress
                        calInProgressText:  controller.calInProgressText
                        imageSource:        "qrc:///qml/VehicleLeft.png"
256 257
                    }
                    VehicleRotationCal {
Don Gagne's avatar
Don Gagne committed
258 259 260 261
                        calValid:           controller.orientationCalRightSideDone
                        calInProgress:      controller.orientationCalRightSideInProgress
                        calInProgressText:  controller.calInProgressText
                        imageSource:        "qrc:///qml/VehicleRight.png"
262 263 264 265
                    }
                }
            }

Don Gagne's avatar
Don Gagne committed
266 267 268 269 270 271
            Column {
                x: parent.width - rotationColumnWidth

                QGCLabel { text: "Autpilot Orientation" }

                FactComboBox {
272
                    id:     boardRotationCombo
Don Gagne's avatar
Don Gagne committed
273 274
                    width:  rotationColumnWidth;
                    model:  rotations
275
                    fact:   Fact { name: "SENS_BOARD_ROT" }
Don Gagne's avatar
Don Gagne committed
276 277 278 279 280 281 282 283 284 285 286 287
                }

                // Compass 0 rotation
                Component {
                    id: compass0ComponentLabel

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

                    FactComboBox {
288
                        id:     compass0RotationCombo
Don Gagne's avatar
Don Gagne committed
289 290
                        width:  rotationColumnWidth
                        model:  rotations
291
                        fact:   Fact { name: "CAL_MAG0_ROT" }
Don Gagne's avatar
Don Gagne committed
292 293
                    }
                }
294 295
                Loader { sourceComponent: controller.showCompass0 ? compass0ComponentLabel : null }
                Loader { sourceComponent: controller.showCompass0 ? compass0ComponentCombo : null }
Don Gagne's avatar
Don Gagne committed
296 297 298 299 300 301 302 303 304 305 306

                // Compass 1 rotation
                Component {
                    id: compass1ComponentLabel

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

                    FactComboBox {
307
                        id:     compass1RotationCombo
Don Gagne's avatar
Don Gagne committed
308 309
                        width:  rotationColumnWidth
                        model:  rotations
310
                        fact:   Fact { name: "CAL_MAG1_ROT" }
Don Gagne's avatar
Don Gagne committed
311 312
                    }
                }
313 314
                Loader { sourceComponent: controller.showCompass1 ? compass1ComponentLabel : null }
                Loader { sourceComponent: controller.showCompass1 ? compass1ComponentCombo : null }
Don Gagne's avatar
Don Gagne committed
315 316 317 318 319 320 321 322 323 324 325

                // Compass 2 rotation
                Component {
                    id: compass2ComponentLabel

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

                    FactComboBox {
326
                        id:     compass1RotationCombo
Don Gagne's avatar
Don Gagne committed
327 328
                        width:  rotationColumnWidth
                        model:  rotations
329
                        fact:   Fact { name: "CAL_MAG2_ROT" }
Don Gagne's avatar
Don Gagne committed
330 331
                    }
                }
332 333
                Loader { sourceComponent: controller.showCompass2 ? compass2ComponentLabel : null }
                Loader { sourceComponent: controller.showCompass2 ? compass2ComponentCombo : null }
Don Gagne's avatar
Don Gagne committed
334 335 336 337 338
            }
        }
    }
}