Browse Source

End action only supports RTL

QGC4.4
DonLakeFlyer 8 years ago
parent
commit
6e2efab73a
  1. 8
      src/MissionManager/MissionSettings.FactMetaData.json
  2. 53
      src/MissionManager/MissionSettingsItem.cc
  3. 16
      src/MissionManager/MissionSettingsItem.h
  4. 9
      src/PlanView/MissionSettingsEditor.qml

8
src/MissionManager/MissionSettings.FactMetaData.json

@ -6,13 +6,5 @@
"units": "m", "units": "m",
"decimalPlaces": 1, "decimalPlaces": 1,
"defaultValue": 0 "defaultValue": 0
},
{
"name": "MissionEndAction",
"shortDescription": "The action to take when the mission completed.",
"type": "uint32",
"enumStrings": "No action on mission end,Loiter after mission end,RTL after mission end",
"enumValues": "0,1,2",
"defaultValue": 0
} }
] ]

53
src/MissionManager/MissionSettingsItem.cc

@ -24,14 +24,13 @@ QGC_LOGGING_CATEGORY(MissionSettingsComplexItemLog, "MissionSettingsComplexItemL
const char* MissionSettingsItem::jsonComplexItemTypeValue = "MissionSettings"; const char* MissionSettingsItem::jsonComplexItemTypeValue = "MissionSettings";
const char* MissionSettingsItem::_plannedHomePositionAltitudeName = "PlannedHomePositionAltitude"; const char* MissionSettingsItem::_plannedHomePositionAltitudeName = "PlannedHomePositionAltitude";
const char* MissionSettingsItem::_missionEndActionName = "MissionEndAction";
QMap<QString, FactMetaData*> MissionSettingsItem::_metaDataMap; QMap<QString, FactMetaData*> MissionSettingsItem::_metaDataMap;
MissionSettingsItem::MissionSettingsItem(Vehicle* vehicle, QObject* parent) MissionSettingsItem::MissionSettingsItem(Vehicle* vehicle, QObject* parent)
: ComplexMissionItem (vehicle, parent) : ComplexMissionItem (vehicle, parent)
, _plannedHomePositionAltitudeFact (0, _plannedHomePositionAltitudeName, FactMetaData::valueTypeDouble) , _plannedHomePositionAltitudeFact (0, _plannedHomePositionAltitudeName, FactMetaData::valueTypeDouble)
, _missionEndActionFact (0, _missionEndActionName, FactMetaData::valueTypeUint32) , _missionEndRTL (false)
, _cameraSection (vehicle) , _cameraSection (vehicle)
, _speedSection (vehicle) , _speedSection (vehicle)
, _sequenceNumber (0) , _sequenceNumber (0)
@ -44,21 +43,19 @@ MissionSettingsItem::MissionSettingsItem(Vehicle* vehicle, QObject* parent)
} }
_plannedHomePositionAltitudeFact.setMetaData (_metaDataMap[_plannedHomePositionAltitudeName]); _plannedHomePositionAltitudeFact.setMetaData (_metaDataMap[_plannedHomePositionAltitudeName]);
_missionEndActionFact.setMetaData (_metaDataMap[_missionEndActionName]);
_plannedHomePositionAltitudeFact.setRawValue (_plannedHomePositionAltitudeFact.rawDefaultValue()); _plannedHomePositionAltitudeFact.setRawValue (_plannedHomePositionAltitudeFact.rawDefaultValue());
_missionEndActionFact.setRawValue (_missionEndActionFact.rawDefaultValue());
setHomePositionSpecialCase(true); setHomePositionSpecialCase(true);
connect(this, &MissionSettingsItem::specifyMissionFlightSpeedChanged, this, &MissionSettingsItem::_setDirtyAndUpdateLastSequenceNumber); connect(this, &MissionSettingsItem::specifyMissionFlightSpeedChanged, this, &MissionSettingsItem::_setDirtyAndUpdateLastSequenceNumber);
connect(this, &MissionSettingsItem::missionEndRTLChanged, this, &MissionSettingsItem::_setDirtyAndUpdateLastSequenceNumber);
connect(&_cameraSection, &CameraSection::itemCountChanged, this, &MissionSettingsItem::_setDirtyAndUpdateLastSequenceNumber); connect(&_cameraSection, &CameraSection::itemCountChanged, this, &MissionSettingsItem::_setDirtyAndUpdateLastSequenceNumber);
connect(&_speedSection, &CameraSection::itemCountChanged, this, &MissionSettingsItem::_setDirtyAndUpdateLastSequenceNumber); connect(&_speedSection, &CameraSection::itemCountChanged, this, &MissionSettingsItem::_setDirtyAndUpdateLastSequenceNumber);
connect(&_plannedHomePositionAltitudeFact, &Fact::valueChanged, this, &MissionSettingsItem::_setDirty); connect(&_plannedHomePositionAltitudeFact, &Fact::valueChanged, this, &MissionSettingsItem::_setDirty);
connect(&_plannedHomePositionAltitudeFact, &Fact::valueChanged, this, &MissionSettingsItem::_updateAltitudeInCoordinate);
connect(&_missionEndActionFact, &Fact::valueChanged, this, &MissionSettingsItem::_setDirty); connect(&_plannedHomePositionAltitudeFact, &Fact::valueChanged, this, &MissionSettingsItem::_updateAltitudeInCoordinate);
connect(&_cameraSection, &CameraSection::dirtyChanged, this, &MissionSettingsItem::_sectionDirtyChanged); connect(&_cameraSection, &CameraSection::dirtyChanged, this, &MissionSettingsItem::_sectionDirtyChanged);
connect(&_speedSection, &SpeedSection::dirtyChanged, this, &MissionSettingsItem::_sectionDirtyChanged); connect(&_speedSection, &SpeedSection::dirtyChanged, this, &MissionSettingsItem::_sectionDirtyChanged);
@ -184,23 +181,7 @@ bool MissionSettingsItem::addMissionEndAction(QList<MissionItem*>& items, int se
return false; return false;
} }
switch(_missionEndActionFact.rawValue().toInt()) { if (_missionEndRTL) {
case MissionEndLoiter:
qCDebug(MissionSettingsComplexItemLog) << "Appending end action Loiter seqNum" << seqNum;
item = new MissionItem(seqNum,
MAV_CMD_NAV_LOITER_UNLIM,
lastWaypointFrame,
0, 0, // param 1-2 unused
0, // use default loiter radius
0, // param 4 not used
lastWaypointCoord.latitude(),
lastWaypointCoord.longitude(),
lastWaypointCoord.altitude(),
true, // autoContinue
false, // isCurrentItem
missionItemParent);
break;
case MissionEndRTL:
qCDebug(MissionSettingsComplexItemLog) << "Appending end action RTL seqNum" << seqNum; qCDebug(MissionSettingsComplexItemLog) << "Appending end action RTL seqNum" << seqNum;
item = new MissionItem(seqNum, item = new MissionItem(seqNum,
MAV_CMD_NAV_RETURN_TO_LAUNCH, MAV_CMD_NAV_RETURN_TO_LAUNCH,
@ -209,12 +190,6 @@ bool MissionSettingsItem::addMissionEndAction(QList<MissionItem*>& items, int se
true, // autoContinue true, // autoContinue
false, // isCurrentItem false, // isCurrentItem
missionItemParent); missionItemParent);
break;
default:
break;
}
if (item) {
items.append(item); items.append(item);
return true; return true;
} else { } else {
@ -248,26 +223,12 @@ bool MissionSettingsItem::scanForMissionSettings(QmlObjectListModel* visualItems
if (item) { if (item) {
MissionItem& missionItem = item->missionItem(); MissionItem& missionItem = item->missionItem();
switch ((MAV_CMD)item->command()) { if (item->command() == MAV_CMD_NAV_RETURN_TO_LAUNCH &&
case MAV_CMD_NAV_LOITER_UNLIM: missionItem.param1() == 0 && missionItem.param2() == 0 && missionItem.param3() == 0 && missionItem.param4() == 0 && missionItem.param5() == 0 && missionItem.param6() == 0 && missionItem.param7() == 0) {
if (missionItem.param1() == 0 && missionItem.param2() == 0 && missionItem.param3() == 0 && missionItem.param4() == 0) {
qCDebug(MissionSettingsComplexItemLog) << "Scan: Found end action Loiter";
settingsItem->missionEndAction()->setRawValue(MissionEndLoiter);
visualItems->removeAt(lastIndex)->deleteLater();
}
break;
case MAV_CMD_NAV_RETURN_TO_LAUNCH:
if (missionItem.param1() == 0 && missionItem.param2() == 0 && missionItem.param3() == 0 && missionItem.param4() == 0 && missionItem.param5() == 0 && missionItem.param6() == 0 && missionItem.param7() == 0) {
qCDebug(MissionSettingsComplexItemLog) << "Scan: Found end action RTL"; qCDebug(MissionSettingsComplexItemLog) << "Scan: Found end action RTL";
settingsItem->missionEndAction()->setRawValue(MissionEndRTL); settingsItem->_missionEndRTL = true;
visualItems->removeAt(lastIndex)->deleteLater(); visualItems->removeAt(lastIndex)->deleteLater();
} }
break;
default:
break;
}
} }
return foundSpeedSection || foundCameraSection; return foundSpeedSection || foundCameraSection;

16
src/MissionManager/MissionSettingsItem.h

@ -26,20 +26,12 @@ class MissionSettingsItem : public ComplexMissionItem
public: public:
MissionSettingsItem(Vehicle* vehicle, QObject* parent = NULL); MissionSettingsItem(Vehicle* vehicle, QObject* parent = NULL);
enum MissionEndAction {
MissionEndNoAction,
MissionEndLoiter,
MissionEndRTL
};
Q_ENUMS(MissionEndAction)
Q_PROPERTY(Fact* missionEndAction READ missionEndAction CONSTANT)
Q_PROPERTY(Fact* plannedHomePositionAltitude READ plannedHomePositionAltitude CONSTANT) Q_PROPERTY(Fact* plannedHomePositionAltitude READ plannedHomePositionAltitude CONSTANT)
Q_PROPERTY(bool missionEndRTL MEMBER _missionEndRTL NOTIFY missionEndRTLChanged)
Q_PROPERTY(QObject* cameraSection READ cameraSection CONSTANT) Q_PROPERTY(QObject* cameraSection READ cameraSection CONSTANT)
Q_PROPERTY(QObject* speedSection READ speedSection CONSTANT) Q_PROPERTY(QObject* speedSection READ speedSection CONSTANT)
Fact* plannedHomePositionAltitude (void) { return &_plannedHomePositionAltitudeFact; } Fact* plannedHomePositionAltitude (void) { return &_plannedHomePositionAltitudeFact; }
Fact* missionEndAction (void) { return &_missionEndActionFact; }
QObject* cameraSection(void) { return &_cameraSection; } QObject* cameraSection(void) { return &_cameraSection; }
QObject* speedSection(void) { return &_speedSection; } QObject* speedSection(void) { return &_speedSection; }
@ -93,6 +85,7 @@ public:
signals: signals:
void specifyMissionFlightSpeedChanged (bool specifyMissionFlightSpeed); void specifyMissionFlightSpeedChanged (bool specifyMissionFlightSpeed);
void missionEndRTLChanged (bool missionEndRTL);
private slots: private slots:
void _setDirtyAndUpdateLastSequenceNumber (void); void _setDirtyAndUpdateLastSequenceNumber (void);
@ -101,9 +94,9 @@ private slots:
void _updateAltitudeInCoordinate (QVariant value); void _updateAltitudeInCoordinate (QVariant value);
private: private:
QGeoCoordinate _plannedHomePositionCoordinate; // Does not include altitde QGeoCoordinate _plannedHomePositionCoordinate; // Does not include altitude
Fact _plannedHomePositionAltitudeFact; Fact _plannedHomePositionAltitudeFact;
Fact _missionEndActionFact; bool _missionEndRTL;
CameraSection _cameraSection; CameraSection _cameraSection;
SpeedSection _speedSection; SpeedSection _speedSection;
@ -113,7 +106,6 @@ private:
static QMap<QString, FactMetaData*> _metaDataMap; static QMap<QString, FactMetaData*> _metaDataMap;
static const char* _plannedHomePositionAltitudeName; static const char* _plannedHomePositionAltitudeName;
static const char* _missionEndActionName;
}; };
#endif #endif

9
src/PlanView/MissionSettingsEditor.qml

@ -124,11 +124,10 @@ Rectangle {
} }
} // GridLayout } // GridLayout
FactComboBox { QGCCheckBox {
anchors.left: parent.left text: qsTr("RTL after mission end")
anchors.right: parent.right checked: missionItem.missionEndRTL
fact: missionItem.missionEndAction onClicked: missionItem.missionEndRTL = checked
indexModel: false
} }
} }

Loading…
Cancel
Save