You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
419 lines
18 KiB
419 lines
18 KiB
/*===================================================================== |
|
|
|
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/>. |
|
|
|
======================================================================*/ |
|
|
|
/// @file |
|
/// @brief Battery, propeller and magnetometer settings |
|
/// @author Gus Grubba <mavlink@grubba.com> |
|
|
|
import QtQuick 2.2 |
|
import QtQuick.Controls 1.2 |
|
import QtQuick.Dialogs 1.2 |
|
|
|
import QGroundControl.FactSystem 1.0 |
|
import QGroundControl.FactControls 1.0 |
|
import QGroundControl.Palette 1.0 |
|
import QGroundControl.Controls 1.0 |
|
import QGroundControl.ScreenTools 1.0 |
|
import QGroundControl.Controllers 1.0 |
|
|
|
QGCView { |
|
id: rootQGCView |
|
viewPanel: panel |
|
|
|
property int textEditWidth: ScreenTools.defaultFontPixelWidth * 8 |
|
|
|
property Fact battNumCells: controller.getParameterFact(-1, "BAT_N_CELLS") |
|
property Fact battHighVolt: controller.getParameterFact(-1, "BAT_V_CHARGED") |
|
property Fact battLowVolt: controller.getParameterFact(-1, "BAT_V_EMPTY") |
|
property Fact battVoltLoadDrop: controller.getParameterFact(-1, "BAT_V_LOAD_DROP") |
|
|
|
readonly property string highlightPrefix: "<font color=\"" + qgcPal.warningText + "\">" |
|
readonly property string highlightSuffix: "</font>" |
|
|
|
|
|
function getBatteryImage() |
|
{ |
|
switch(battNumCells.value) { |
|
case 1: return "/qmlimages/PowerComponentBattery_01cell.svg"; |
|
case 2: return "/qmlimages/PowerComponentBattery_02cell.svg" |
|
case 3: return "/qmlimages/PowerComponentBattery_03cell.svg" |
|
case 4: return "/qmlimages/PowerComponentBattery_04cell.svg" |
|
case 5: return "/qmlimages/PowerComponentBattery_05cell.svg" |
|
case 6: return "/qmlimages/PowerComponentBattery_06cell.svg" |
|
default: return "/qmlimages/PowerComponentBattery_01cell.svg"; |
|
} |
|
} |
|
|
|
function drawArrowhead(ctx, x, y, radians) |
|
{ |
|
ctx.save(); |
|
ctx.beginPath(); |
|
ctx.translate(x,y); |
|
ctx.rotate(radians); |
|
ctx.moveTo(0,0); |
|
ctx.lineTo(5,10); |
|
ctx.lineTo(-5,10); |
|
ctx.closePath(); |
|
ctx.restore(); |
|
ctx.fill(); |
|
} |
|
|
|
function drawLineWithArrow(ctx, x1, y1, x2, y2) |
|
{ |
|
ctx.beginPath(); |
|
ctx.moveTo(x1, y1); |
|
ctx.lineTo(x2, y2); |
|
ctx.stroke(); |
|
var rd = Math.atan((y2 - y1) / (x2 - x1)); |
|
rd += ((x2 > x1) ? 90 : -90) * Math.PI/180; |
|
drawArrowhead(ctx, x2, y2, rd); |
|
} |
|
|
|
PowerComponentController { |
|
id: controller |
|
factPanel: panel |
|
|
|
onOldFirmware: showMessage("ESC Calibration", "QGroundControl cannot perform ESC Calibration with this version of firmware. You will need to upgrade to a newer firmware.", StandardButton.Ok) |
|
onNewerFirmware: showMessage("ESC Calibration", "QGroundControl cannot perform ESC Calibration with this version of firmware. You will need to upgrade QGroundControl.", StandardButton.Ok) |
|
onBatteryConnected: showMessage("ESC Calibration", "Performing calibration. This will take a few seconds..", 0) |
|
onCalibrationFailed: showMessage("ESC Calibration failed", errorMessage, StandardButton.Ok) |
|
onCalibrationSuccess: showMessage("ESC Calibration", "Calibration complete. You can disconnect your battery now if you like.", StandardButton.Ok) |
|
onConnectBattery: showMessage("ESC Calibration", highlightPrefix + "WARNING: Props must be removed from vehicle prior to performing ESC calibration." + highlightSuffix + " Connect the battery now and calibration will begin.", 0) |
|
onDisconnectBattery: showMessage("ESC Calibration failed", "You must disconnect the battery prior to performing ESC Calibration. Disconnect your battery and try again.", StandardButton.Ok) |
|
} |
|
|
|
QGCPalette { id: palette; colorGroupEnabled: panel.enabled } |
|
|
|
QGCViewPanel { |
|
id: panel |
|
anchors.fill: parent |
|
|
|
Flickable { |
|
anchors.fill: parent |
|
clip: true |
|
contentHeight: innerColumn.height |
|
contentWidth: panel.width |
|
boundsBehavior: Flickable.StopAtBounds |
|
flickableDirection: Flickable.VerticalFlick |
|
|
|
Column { |
|
id: innerColumn |
|
width: panel.width |
|
spacing: ScreenTools.defaultFontPixelHeight * 0.5 |
|
|
|
QGCLabel { |
|
text: "Battery" |
|
font.weight: Font.DemiBold |
|
} |
|
|
|
Rectangle { |
|
width: parent.width |
|
height: voltageCol.height + ScreenTools.defaultFontPixelHeight |
|
color: palette.windowShade |
|
|
|
Column { |
|
id: voltageCol |
|
anchors.margins: ScreenTools.defaultFontPixelHeight / 2 |
|
anchors.left: parent.left |
|
anchors.top: parent.top |
|
spacing: ScreenTools.defaultFontPixelHeight / 2 |
|
|
|
property real firstColumnWidth: Math.max(Math.max(cellsLabel.contentWidth, battHighLabel.contentWidth), battLowLabel.contentWidth) + ScreenTools.defaultFontPixelWidth |
|
|
|
Row { |
|
spacing: ScreenTools.defaultFontPixelWidth |
|
|
|
QGCLabel { |
|
id: cellsLabel |
|
text: "Number of Cells (in Series)" |
|
anchors.baseline: cellsField.baseline |
|
} |
|
|
|
FactTextField { |
|
id: cellsField |
|
x: voltageCol.firstColumnWidth |
|
width: textEditWidth |
|
fact: battNumCells |
|
showUnits: true |
|
} |
|
} |
|
|
|
Row { |
|
spacing: ScreenTools.defaultFontPixelWidth |
|
|
|
QGCLabel { |
|
id: battHighLabel |
|
text: "Full Voltage (per cell)" |
|
anchors.baseline: battHighField.baseline |
|
} |
|
|
|
FactTextField { |
|
id: battHighField |
|
x: voltageCol.firstColumnWidth |
|
width: textEditWidth |
|
fact: battHighVolt |
|
showUnits: true |
|
} |
|
} |
|
|
|
Row { |
|
spacing: ScreenTools.defaultFontPixelWidth |
|
|
|
QGCLabel { |
|
id: battLowLabel |
|
text: "Empty Voltage (per cell)" |
|
anchors.baseline: battLowField.baseline |
|
} |
|
|
|
FactTextField { |
|
id: battLowField |
|
x: voltageCol.firstColumnWidth |
|
width: textEditWidth |
|
fact: battLowVolt |
|
showUnits: true |
|
} |
|
} |
|
} // Column |
|
|
|
QGCColoredImage { |
|
id: batteryImage |
|
anchors.verticalCenter: voltageCol.verticalCenter |
|
x: voltageCol.firstColumnWidth + textEditWidth + (ScreenTools.defaultFontPixelWidth * 3) |
|
width: height * 0.75 |
|
height: voltageCol.height |
|
fillMode: Image.PreserveAspectFit |
|
smooth: true |
|
color: palette.button |
|
cache: false |
|
source: getBatteryImage(); |
|
} |
|
|
|
Column { |
|
anchors.leftMargin: ScreenTools.defaultFontPixelWidth * 2 |
|
anchors.left: batteryImage.right |
|
anchors.verticalCenter: voltageCol.verticalCenter |
|
spacing: ScreenTools.defaultFontPixelHeight |
|
Row { |
|
QGCLabel { |
|
width: ScreenTools.defaultFontPixelWidth * 12 |
|
text: "Battery Max:" |
|
} |
|
QGCLabel { |
|
text: (battNumCells.value * battHighVolt.value).toFixed(1) + ' V' |
|
} |
|
} |
|
Row { |
|
QGCLabel { |
|
width: ScreenTools.defaultFontPixelWidth * 12 |
|
text: "Battery Min:" |
|
} |
|
QGCLabel { |
|
text: (battNumCells.value * battLowVolt.value).toFixed(1) + ' V' |
|
} |
|
} |
|
} |
|
} // Rectangle - Battery settings |
|
|
|
QGCLabel { |
|
text: "ESC PWM Minimum and Maximum Calibration" |
|
font.weight: Font.DemiBold |
|
} |
|
|
|
Rectangle { |
|
width: parent.width |
|
height: escCalColumn.height + ScreenTools.defaultFontPixelHeight |
|
color: palette.windowShade |
|
|
|
Column { |
|
id : escCalColumn |
|
anchors.margins: ScreenTools.defaultFontPixelHeight / 2 |
|
anchors.left: parent.left |
|
anchors.top: parent.top |
|
spacing: ScreenTools.defaultFontPixelWidth |
|
|
|
QGCLabel { |
|
color: palette.warningText |
|
text: "WARNING: Propellers must be removed from vehicle prior to performing ESC calibration." |
|
} |
|
|
|
QGCLabel { |
|
text: "You must use USB connection for this operation." |
|
} |
|
|
|
QGCButton { |
|
text: "Calibrate" |
|
width: ScreenTools.defaultFontPixelWidth * 20 |
|
onClicked: controller.calibrateEsc() |
|
} |
|
} |
|
} |
|
|
|
QGCCheckBox { |
|
id: showUAVCAN |
|
text: "Show UAVCAN Settings" |
|
} |
|
|
|
QGCLabel { |
|
text: "UAVCAN Bus Configuration" |
|
font.weight: Font.DemiBold |
|
visible: showUAVCAN.checked |
|
} |
|
|
|
Rectangle { |
|
width: parent.width |
|
height: uavCanConfigColumn.height + ScreenTools.defaultFontPixelHeight |
|
color: palette.windowShade |
|
visible: showUAVCAN.checked |
|
|
|
Column { |
|
id: uavCanConfigColumn |
|
anchors.margins: ScreenTools.defaultFontPixelHeight / 2 |
|
anchors.left: parent.left |
|
anchors.top: parent.top |
|
spacing: ScreenTools.defaultFontPixelWidth |
|
|
|
FactCheckBox { |
|
id: uavcanEnabledCheckBox |
|
width: ScreenTools.defaultFontPixelWidth * 20 |
|
fact: controller.getParameterFact(-1, "UAVCAN_ENABLE") |
|
checkedValue: 3 |
|
uncheckedValue: 0 |
|
text: "Enable UAVCAN as the default MAIN output bus (requires autopilot restart)" |
|
} |
|
} |
|
} |
|
|
|
QGCLabel { |
|
text: "UAVCAN Motor Index and Direction Assignment" |
|
font.weight: Font.DemiBold |
|
visible: showUAVCAN.checked |
|
} |
|
|
|
Rectangle { |
|
width: parent.width |
|
height: uavCanEscCalColumn.height + ScreenTools.defaultFontPixelHeight |
|
color: palette.windowShade |
|
visible: showUAVCAN.checked |
|
enabled: uavcanEnabledCheckBox.checked |
|
|
|
Column { |
|
id: uavCanEscCalColumn |
|
anchors.margins: ScreenTools.defaultFontPixelHeight / 2 |
|
anchors.left: parent.left |
|
anchors.top: parent.top |
|
spacing: ScreenTools.defaultFontPixelWidth |
|
|
|
QGCLabel { |
|
color: palette.warningText |
|
text: "WARNING: Propellers must be removed from vehicle prior to performing UAVCAN ESC configuration." |
|
} |
|
|
|
QGCLabel { |
|
text: "ESC parameters will only be accessible in the editor after assignment." |
|
} |
|
|
|
QGCLabel { |
|
text: "Start the process, then turn each motor into its turn direction, in the order of their motor indices." |
|
} |
|
|
|
QGCButton { |
|
text: "Start Assignment" |
|
width: ScreenTools.defaultFontPixelWidth * 20 |
|
onClicked: controller.busConfigureActuators() |
|
} |
|
|
|
QGCButton { |
|
text: "Stop Assignment" |
|
width: ScreenTools.defaultFontPixelWidth * 20 |
|
onClicked: controller.stopBusConfigureActuators() |
|
} |
|
} |
|
} |
|
|
|
QGCCheckBox { |
|
id: showAdvanced |
|
text: "Show Advanced Settings" |
|
} |
|
|
|
QGCLabel { |
|
text: "Advanced Power Settings" |
|
font.weight: Font.DemiBold |
|
visible: showAdvanced.checked |
|
} |
|
|
|
Rectangle { |
|
id: batteryRectangle |
|
width: parent.width |
|
height: advBatteryColumn.height + ScreenTools.defaultFontPixelHeight |
|
color: palette.windowShade |
|
visible: showAdvanced.checked |
|
|
|
Column { |
|
id: advBatteryColumn |
|
anchors.margins: ScreenTools.defaultFontPixelHeight / 2 |
|
anchors.left: parent.left |
|
anchors.right: parent.right |
|
anchors.top: parent.top |
|
spacing: ScreenTools.defaultFontPixelWidth |
|
|
|
Row { |
|
spacing: ScreenTools.defaultFontPixelWidth |
|
|
|
QGCLabel { |
|
text: "Voltage Drop on Full Load (per cell)" |
|
anchors.baseline: battDropField.baseline |
|
} |
|
|
|
FactTextField { |
|
id: battDropField |
|
width: textEditWidth |
|
fact: battVoltLoadDrop |
|
showUnits: true |
|
} |
|
} |
|
|
|
QGCLabel { |
|
width: parent.width |
|
wrapMode: Text.WordWrap |
|
text: "Batteries show less voltage at high throttle. Enter the difference in Volts between idle throttle and full " + |
|
"throttle, divided by the number of battery cells. Leave at the default if unsure. " + |
|
highlightPrefix + "If this value is set too high, the battery might be deep discharged and damaged." + highlightSuffix |
|
} |
|
|
|
Row { |
|
spacing: ScreenTools.defaultFontPixelWidth |
|
|
|
QGCLabel { |
|
text: "Compensated Minimum Voltage:" |
|
} |
|
|
|
QGCLabel { |
|
text: ((battNumCells.value * battLowVolt.value) - (battNumCells.value * battVoltLoadDrop.value)).toFixed(1) + ' V' |
|
} |
|
} |
|
} |
|
} // Rectangle - Advanced power settings |
|
} // Column |
|
} // Flickable |
|
} // QGCViewPanel |
|
} // QGCView
|
|
|