Commit 6d28376c authored by Patrick José Pereira's avatar Patrick José Pereira

Add Fall rate percent in Landing Pattern editor

Signed-off-by: 's avatarPatrick José Pereira <patrickelectric@gmail.com>
parent d5592f49
[ [
{ {
"name": "Landing distance", "name": "Landing dist",
"shortDescription": "Distance between landing and loiter points.", "shortDescription": "Distance between landing and loiter points.",
"type": "double", "type": "double",
"units": "m", "units": "m",
...@@ -42,5 +42,15 @@ ...@@ -42,5 +42,15 @@
"units": "m", "units": "m",
"decimalPlaces": 1, "decimalPlaces": 1,
"defaultValue": 0.0 "defaultValue": 0.0
},
{
"name": "Fall rate",
"shortDescription": "Fall rate between landing and loiter altitude.",
"type": "double",
"units": "%",
"min": 0.1,
"max": 100,
"decimalPlaces": 1,
"defaultValue": 12.0
} }
] ]
...@@ -20,11 +20,12 @@ QGC_LOGGING_CATEGORY(FixedWingLandingComplexItemLog, "FixedWingLandingComplexIte ...@@ -20,11 +20,12 @@ QGC_LOGGING_CATEGORY(FixedWingLandingComplexItemLog, "FixedWingLandingComplexIte
const char* FixedWingLandingComplexItem::jsonComplexItemTypeValue = "fwLandingPattern"; const char* FixedWingLandingComplexItem::jsonComplexItemTypeValue = "fwLandingPattern";
const char* FixedWingLandingComplexItem::_loiterToLandDistanceName = "Landing distance"; const char* FixedWingLandingComplexItem::_loiterToLandDistanceName = "Landing dist";
const char* FixedWingLandingComplexItem::_landingHeadingName = "Landing heading"; const char* FixedWingLandingComplexItem::_landingHeadingName = "Landing heading";
const char* FixedWingLandingComplexItem::_loiterAltitudeName = "Loiter altitude"; const char* FixedWingLandingComplexItem::_loiterAltitudeName = "Loiter altitude";
const char* FixedWingLandingComplexItem::_loiterRadiusName = "Loiter radius"; const char* FixedWingLandingComplexItem::_loiterRadiusName = "Loiter radius";
const char* FixedWingLandingComplexItem::_landingAltitudeName = "Landing altitude"; const char* FixedWingLandingComplexItem::_landingAltitudeName = "Landing altitude";
const char* FixedWingLandingComplexItem::_fallRateName = "Fall rate";
const char* FixedWingLandingComplexItem::_jsonLoiterCoordinateKey = "loiterCoordinate"; const char* FixedWingLandingComplexItem::_jsonLoiterCoordinateKey = "loiterCoordinate";
const char* FixedWingLandingComplexItem::_jsonLoiterRadiusKey = "loiterRadius"; const char* FixedWingLandingComplexItem::_jsonLoiterRadiusKey = "loiterRadius";
...@@ -32,6 +33,7 @@ const char* FixedWingLandingComplexItem::_jsonLoiterClockwiseKey = "loi ...@@ -32,6 +33,7 @@ const char* FixedWingLandingComplexItem::_jsonLoiterClockwiseKey = "loi
const char* FixedWingLandingComplexItem::_jsonLoiterAltitudeRelativeKey = "loiterAltitudeRelative"; const char* FixedWingLandingComplexItem::_jsonLoiterAltitudeRelativeKey = "loiterAltitudeRelative";
const char* FixedWingLandingComplexItem::_jsonLandingCoordinateKey = "landCoordinate"; const char* FixedWingLandingComplexItem::_jsonLandingCoordinateKey = "landCoordinate";
const char* FixedWingLandingComplexItem::_jsonLandingAltitudeRelativeKey = "landAltitudeRelative"; const char* FixedWingLandingComplexItem::_jsonLandingAltitudeRelativeKey = "landAltitudeRelative";
const char* FixedWingLandingComplexItem::_jsonFallRateKey = "fallRate";
QMap<QString, FactMetaData*> FixedWingLandingComplexItem::_metaDataMap; QMap<QString, FactMetaData*> FixedWingLandingComplexItem::_metaDataMap;
...@@ -46,6 +48,7 @@ FixedWingLandingComplexItem::FixedWingLandingComplexItem(Vehicle* vehicle, QObje ...@@ -46,6 +48,7 @@ FixedWingLandingComplexItem::FixedWingLandingComplexItem(Vehicle* vehicle, QObje
, _loiterRadiusFact (0, _loiterRadiusName, FactMetaData::valueTypeDouble) , _loiterRadiusFact (0, _loiterRadiusName, FactMetaData::valueTypeDouble)
, _landingHeadingFact (0, _landingHeadingName, FactMetaData::valueTypeDouble) , _landingHeadingFact (0, _landingHeadingName, FactMetaData::valueTypeDouble)
, _landingAltitudeFact (0, _landingAltitudeName, FactMetaData::valueTypeDouble) , _landingAltitudeFact (0, _landingAltitudeName, FactMetaData::valueTypeDouble)
, _fallRateFact (0, _fallRateName, FactMetaData::valueTypeDouble)
, _loiterClockwise(true) , _loiterClockwise(true)
, _loiterAltitudeRelative(true) , _loiterAltitudeRelative(true)
, _landingAltitudeRelative(true) , _landingAltitudeRelative(true)
...@@ -61,12 +64,14 @@ FixedWingLandingComplexItem::FixedWingLandingComplexItem(Vehicle* vehicle, QObje ...@@ -61,12 +64,14 @@ FixedWingLandingComplexItem::FixedWingLandingComplexItem(Vehicle* vehicle, QObje
_loiterRadiusFact.setMetaData (_metaDataMap[_loiterRadiusName]); _loiterRadiusFact.setMetaData (_metaDataMap[_loiterRadiusName]);
_landingHeadingFact.setMetaData (_metaDataMap[_landingHeadingName]); _landingHeadingFact.setMetaData (_metaDataMap[_landingHeadingName]);
_landingAltitudeFact.setMetaData (_metaDataMap[_landingAltitudeName]); _landingAltitudeFact.setMetaData (_metaDataMap[_landingAltitudeName]);
_fallRateFact.setMetaData (_metaDataMap[_fallRateName]);
_landingDistanceFact.setRawValue (_landingDistanceFact.rawDefaultValue()); _landingDistanceFact.setRawValue (_landingDistanceFact.rawDefaultValue());
_loiterAltitudeFact.setRawValue (_loiterAltitudeFact.rawDefaultValue()); _loiterAltitudeFact.setRawValue (_loiterAltitudeFact.rawDefaultValue());
_loiterRadiusFact.setRawValue (_loiterRadiusFact.rawDefaultValue()); _loiterRadiusFact.setRawValue (_loiterRadiusFact.rawDefaultValue());
_landingHeadingFact.setRawValue (_landingHeadingFact.rawDefaultValue()); _landingHeadingFact.setRawValue (_landingHeadingFact.rawDefaultValue());
_landingAltitudeFact.setRawValue (_landingAltitudeFact.rawDefaultValue()); _landingAltitudeFact.setRawValue (_landingAltitudeFact.rawDefaultValue());
_fallRateFact.setRawValue (_fallRateFact.rawDefaultValue());
connect(&_loiterAltitudeFact, &Fact::valueChanged, this, &FixedWingLandingComplexItem::_updateLoiterCoodinateAltitudeFromFact); connect(&_loiterAltitudeFact, &Fact::valueChanged, this, &FixedWingLandingComplexItem::_updateLoiterCoodinateAltitudeFromFact);
connect(&_landingAltitudeFact, &Fact::valueChanged, this, &FixedWingLandingComplexItem::_updateLandingCoodinateAltitudeFromFact); connect(&_landingAltitudeFact, &Fact::valueChanged, this, &FixedWingLandingComplexItem::_updateLandingCoodinateAltitudeFromFact);
......
...@@ -29,6 +29,7 @@ public: ...@@ -29,6 +29,7 @@ public:
Q_PROPERTY(Fact* landingAltitude READ landingAltitude CONSTANT) Q_PROPERTY(Fact* landingAltitude READ landingAltitude CONSTANT)
Q_PROPERTY(Fact* landingDistance READ landingDistance CONSTANT) Q_PROPERTY(Fact* landingDistance READ landingDistance CONSTANT)
Q_PROPERTY(Fact* landingHeading READ landingHeading CONSTANT) Q_PROPERTY(Fact* landingHeading READ landingHeading CONSTANT)
Q_PROPERTY(Fact* fallRate READ fallRate CONSTANT)
Q_PROPERTY(bool loiterClockwise MEMBER _loiterClockwise NOTIFY loiterClockwiseChanged) Q_PROPERTY(bool loiterClockwise MEMBER _loiterClockwise NOTIFY loiterClockwiseChanged)
Q_PROPERTY(bool loiterAltitudeRelative MEMBER _loiterAltitudeRelative NOTIFY loiterAltitudeRelativeChanged) Q_PROPERTY(bool loiterAltitudeRelative MEMBER _loiterAltitudeRelative NOTIFY loiterAltitudeRelativeChanged)
Q_PROPERTY(bool landingAltitudeRelative MEMBER _landingAltitudeRelative NOTIFY landingAltitudeRelativeChanged) Q_PROPERTY(bool landingAltitudeRelative MEMBER _landingAltitudeRelative NOTIFY landingAltitudeRelativeChanged)
...@@ -42,6 +43,7 @@ public: ...@@ -42,6 +43,7 @@ public:
Fact* landingAltitude (void) { return &_landingAltitudeFact; } Fact* landingAltitude (void) { return &_landingAltitudeFact; }
Fact* landingDistance (void) { return &_landingDistanceFact; } Fact* landingDistance (void) { return &_landingDistanceFact; }
Fact* landingHeading (void) { return &_landingHeadingFact; } Fact* landingHeading (void) { return &_landingHeadingFact; }
Fact* fallRate (void) { return &_fallRateFact; }
QGeoCoordinate landingCoordinate (void) const { return _landingCoordinate; } QGeoCoordinate landingCoordinate (void) const { return _landingCoordinate; }
QGeoCoordinate loiterCoordinate (void) const { return _loiterCoordinate; } QGeoCoordinate loiterCoordinate (void) const { return _loiterCoordinate; }
QGeoCoordinate loiterTangentCoordinate (void) const { return _loiterTangentCoordinate; } QGeoCoordinate loiterTangentCoordinate (void) const { return _loiterTangentCoordinate; }
...@@ -124,6 +126,7 @@ private: ...@@ -124,6 +126,7 @@ private:
Fact _loiterRadiusFact; Fact _loiterRadiusFact;
Fact _landingHeadingFact; Fact _landingHeadingFact;
Fact _landingAltitudeFact; Fact _landingAltitudeFact;
Fact _fallRateFact;
bool _loiterClockwise; bool _loiterClockwise;
bool _loiterAltitudeRelative; bool _loiterAltitudeRelative;
...@@ -136,6 +139,7 @@ private: ...@@ -136,6 +139,7 @@ private:
static const char* _loiterRadiusName; static const char* _loiterRadiusName;
static const char* _landingHeadingName; static const char* _landingHeadingName;
static const char* _landingAltitudeName; static const char* _landingAltitudeName;
static const char* _fallRateName;
static const char* _jsonLoiterCoordinateKey; static const char* _jsonLoiterCoordinateKey;
static const char* _jsonLoiterRadiusKey; static const char* _jsonLoiterRadiusKey;
...@@ -143,6 +147,7 @@ private: ...@@ -143,6 +147,7 @@ private:
static const char* _jsonLoiterAltitudeRelativeKey; static const char* _jsonLoiterAltitudeRelativeKey;
static const char* _jsonLandingCoordinateKey; static const char* _jsonLandingCoordinateKey;
static const char* _jsonLandingAltitudeRelativeKey; static const char* _jsonLandingAltitudeRelativeKey;
static const char* _jsonFallRateKey;
}; };
#endif #endif
...@@ -39,6 +39,7 @@ Rectangle { ...@@ -39,6 +39,7 @@ Rectangle {
anchors.margins: _margin anchors.margins: _margin
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
spacing: _margin
visible: missionItem.landingCoordSet visible: missionItem.landingCoordSet
SectionHeader { SectionHeader {
...@@ -79,7 +80,63 @@ Rectangle { ...@@ -79,7 +80,63 @@ Rectangle {
FactTextFieldGrid { FactTextFieldGrid {
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
factList: [ missionItem.landingAltitude, missionItem.landingDistance, missionItem.landingHeading ] factList: [ missionItem.landingHeading, missionItem.landingAltitude]
}
GridLayout {
anchors.left: parent.left
anchors.right: parent.right
columns: 2
QGCRadioButton {
id: useLandingDistance
text: missionItem.landingDistance.name
checked: !useFallRate.checked
onClicked: {
useFallRate.checked = false
missionItem.fallRate.value = parseFloat(missionItem.loiterAltitude.value)*100/parseFloat (missionItem.landingDistance.value)
}
Layout.fillWidth: true
}
FactTextField {
fact: missionItem.landingDistance
enabled: useLandingDistance.checked
Layout.fillWidth: true
}
QGCRadioButton {
id: useFallRate
text: missionItem.fallRate.name
checked: !useLandingDistance.checked
onClicked: {
useLandingDistance.checked = false
missionItem.landingDistance.value = parseFloat(missionItem.loiterAltitude.value)*100/parseFloat (missionItem.fallRate.value)
}
Layout.fillWidth: true
}
FactTextField {
fact: missionItem.fallRate
enabled: useFallRate.checked
Layout.fillWidth: true
}
Connections {
target: missionItem.landingDistance
onValueChanged: {
missionItem.fallRate.value = parseFloat(missionItem.loiterAltitude.value)*100/parseFloat (missionItem.landingDistance.value)
}
}
Connections {
target: missionItem.fallRate
onValueChanged: {
missionItem.landingDistance.value = parseFloat(missionItem.loiterAltitude.value)*100/parseFloat (missionItem.fallRate.value)
}
}
} }
Item { width: 1; height: _spacer } Item { width: 1; height: _spacer }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment