From 65800bfdf9fe280bd981e17dc49aa40752eff163 Mon Sep 17 00:00:00 2001 From: DonLakeFlyer Date: Tue, 6 Feb 2018 16:05:38 -0800 Subject: [PATCH] applyNewAltitude support Plus various bug fixes from flight testing --- src/MissionManager/CorridorScanComplexItem.cc | 39 ++++++++++++++++++--------- src/PlanView/CorridorScanEditor.qml | 9 ------- 2 files changed, 27 insertions(+), 21 deletions(-) diff --git a/src/MissionManager/CorridorScanComplexItem.cc b/src/MissionManager/CorridorScanComplexItem.cc index bcb69fc..6d558fd 100644 --- a/src/MissionManager/CorridorScanComplexItem.cc +++ b/src/MissionManager/CorridorScanComplexItem.cc @@ -36,6 +36,11 @@ CorridorScanComplexItem::CorridorScanComplexItem(Vehicle* vehicle, QObject* pare { _editorQml = "qrc:/qml/CorridorScanEditor.qml"; + // We override the altitude to the mission default + if (_cameraCalc.isManualCamera() || !_cameraCalc.valueSetIsDistance()->rawValue().toBool()) { + _cameraCalc.distanceToSurface()->setRawValue(qgcApp()->toolbox()->settingsManager()->appSettings()->defaultMissionItemAltitude()->rawValue()); + } + connect(&_corridorWidthFact, &Fact::valueChanged, this, &CorridorScanComplexItem::_setDirty); connect(&_corridorPolyline, &QGCMapPolyline::pathChanged, this, &CorridorScanComplexItem::_setDirty); @@ -110,7 +115,9 @@ bool CorridorScanComplexItem::load(const QJsonObject& complexObject, int sequenc return false; } - _corridorPolyline.clear(); + if (!_corridorPolyline.loadFromJson(complexObject, true, errorString)) { + return false; + } QString itemType = complexObject[VisualMissionItem::jsonTypeKey].toString(); QString complexType = complexObject[ComplexMissionItem::jsonComplexItemTypeKey].toString(); @@ -159,7 +166,7 @@ void CorridorScanComplexItem::appendMissionItems(QList& items, QOb bool imagesEverywhere = _cameraTriggerInTurnAroundFact.rawValue().toDouble(); while (pointIndex < _transectPoints.count()) { - if (pointIndex != 0 && _hasTurnaround()) { + if (_hasTurnaround()) { QGeoCoordinate vertexCoord = _transectPoints[pointIndex++].value(); MissionItem* item = new MissionItem(seqNum++, MAV_CMD_NAV_WAYPOINT, @@ -175,9 +182,22 @@ void CorridorScanComplexItem::appendMissionItems(QList& items, QOb false, // isCurrentItem missionItemParent); items.append(item); + if (imagesEverywhere) { + item = new MissionItem(seqNum++, + MAV_CMD_DO_SET_CAM_TRIGG_DIST, + MAV_FRAME_MISSION, + _cameraCalc.adjustedFootprintFrontal()->rawValue().toDouble(), // trigger distance + 0, // shutter integration (ignore) + 1, // trigger immediately when starting + 0, 0, 0, 0, // param 4-7 unused + true, // autoContinue + false, // isCurrentItem + missionItemParent); + items.append(item); + } } - bool addTrigger = imagesEverywhere ? pointIndex == 0 : true; + bool addTrigger = imagesEverywhere ? false : true; for (int i=0; i<_corridorPolyline.count(); i++) { QGeoCoordinate vertexCoord = _transectPoints[pointIndex++].value(); MissionItem* item = new MissionItem(seqNum++, @@ -225,7 +245,7 @@ void CorridorScanComplexItem::appendMissionItems(QList& items, QOb items.append(item); } - if (_hasTurnaround() && pointIndex < _transectPoints.count()) { + if (_hasTurnaround()) { QGeoCoordinate vertexCoord = _transectPoints[pointIndex++].value(); MissionItem* item = new MissionItem(seqNum++, MAV_CMD_NAV_WAYPOINT, @@ -261,9 +281,9 @@ void CorridorScanComplexItem::appendMissionItems(QList& items, QOb void CorridorScanComplexItem::applyNewAltitude(double newAltitude) { - Q_UNUSED(newAltitude); - // FIXME: NYI - //_altitudeFact.setRawValue(newAltitude); + _cameraCalc.valueSetIsDistance()->setRawValue(true); + _cameraCalc.distanceToSurface()->setRawValue(newAltitude); + _cameraCalc.setDistanceToSurfaceRelative(true); } void CorridorScanComplexItem::_polylineDirtyChanged(bool dirty) @@ -415,11 +435,6 @@ void CorridorScanComplexItem::_rebuildTransects(void) normalizedTransectPosition += transectSpacing; } - - // At this point _transectPoints has an extra turnaround segment at the beginning and end. - // These must be remove for the correcvt flight pattern. - _transectPoints.takeFirst(); - _transectPoints.takeLast(); } // Calculate distance flown for complex item diff --git a/src/PlanView/CorridorScanEditor.qml b/src/PlanView/CorridorScanEditor.qml index 94f38ef..72cd5d3 100644 --- a/src/PlanView/CorridorScanEditor.qml +++ b/src/PlanView/CorridorScanEditor.qml @@ -59,15 +59,6 @@ Rectangle { QGCLabel { anchors.left: parent.left anchors.right: parent.right - text: qsTr("WARNING WORK IN PROGRESS: BE VERY CAREFUL WHEN FLYING") - wrapMode: Text.WordWrap - color: qgcPal.warningText - font.pointSize: ScreenTools.smallFontPointSize - } - - QGCLabel { - anchors.left: parent.left - anchors.right: parent.right text: qsTr("WARNING: Photo interval is below minimum interval (%1 secs) supported by camera.").arg(missionItem.cameraMinTriggerInterval.toFixed(1)) wrapMode: Text.WordWrap color: qgcPal.warningText