Browse Source

Merge pull request #6120 from DonLakeFlyer/CorridorScan

Corridor Scan: applyNewAltitude support
QGC4.4
Don Gagne 7 years ago committed by GitHub
parent
commit
4c339fa522
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 45
      src/MissionManager/CorridorScanComplexItem.cc
  2. 4
      src/MissionManager/CorridorScanComplexItemTest.cc
  3. 9
      src/PlanView/CorridorScanEditor.qml

45
src/MissionManager/CorridorScanComplexItem.cc

@ -36,6 +36,11 @@ CorridorScanComplexItem::CorridorScanComplexItem(Vehicle* vehicle, QObject* pare
{ {
_editorQml = "qrc:/qml/CorridorScanEditor.qml"; _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(&_corridorWidthFact, &Fact::valueChanged, this, &CorridorScanComplexItem::_setDirty);
connect(&_corridorPolyline, &QGCMapPolyline::pathChanged, this, &CorridorScanComplexItem::_setDirty); connect(&_corridorPolyline, &QGCMapPolyline::pathChanged, this, &CorridorScanComplexItem::_setDirty);
@ -61,7 +66,7 @@ int CorridorScanComplexItem::lastSequenceNumber(void) const
{ {
int itemCount = _transectPoints.count(); // Each transpect point represents a waypoint item int itemCount = _transectPoints.count(); // Each transpect point represents a waypoint item
if (_cameraTriggerInTurnAroundFact.rawValue().toDouble()) { if (_cameraTriggerInTurnAroundFact.rawValue().toBool()) {
// Only one camera start and on camera stop // Only one camera start and on camera stop
itemCount += 2; itemCount += 2;
} else { } else {
@ -69,7 +74,7 @@ int CorridorScanComplexItem::lastSequenceNumber(void) const
itemCount += _transectCount() * 2; itemCount += _transectCount() * 2;
} }
return _sequenceNumber + itemCount; return _sequenceNumber + itemCount - 1;
} }
void CorridorScanComplexItem::save(QJsonArray& missionItems) void CorridorScanComplexItem::save(QJsonArray& missionItems)
@ -110,7 +115,9 @@ bool CorridorScanComplexItem::load(const QJsonObject& complexObject, int sequenc
return false; return false;
} }
_corridorPolyline.clear(); if (!_corridorPolyline.loadFromJson(complexObject, true, errorString)) {
return false;
}
QString itemType = complexObject[VisualMissionItem::jsonTypeKey].toString(); QString itemType = complexObject[VisualMissionItem::jsonTypeKey].toString();
QString complexType = complexObject[ComplexMissionItem::jsonComplexItemTypeKey].toString(); QString complexType = complexObject[ComplexMissionItem::jsonComplexItemTypeKey].toString();
@ -156,10 +163,10 @@ void CorridorScanComplexItem::appendMissionItems(QList<MissionItem*>& items, QOb
{ {
int seqNum = _sequenceNumber; int seqNum = _sequenceNumber;
int pointIndex = 0; int pointIndex = 0;
bool imagesEverywhere = _cameraTriggerInTurnAroundFact.rawValue().toDouble(); bool imagesEverywhere = _cameraTriggerInTurnAroundFact.rawValue().toBool();
while (pointIndex < _transectPoints.count()) { while (pointIndex < _transectPoints.count()) {
if (pointIndex != 0 && _hasTurnaround()) { if (_hasTurnaround()) {
QGeoCoordinate vertexCoord = _transectPoints[pointIndex++].value<QGeoCoordinate>(); QGeoCoordinate vertexCoord = _transectPoints[pointIndex++].value<QGeoCoordinate>();
MissionItem* item = new MissionItem(seqNum++, MissionItem* item = new MissionItem(seqNum++,
MAV_CMD_NAV_WAYPOINT, MAV_CMD_NAV_WAYPOINT,
@ -175,9 +182,22 @@ void CorridorScanComplexItem::appendMissionItems(QList<MissionItem*>& items, QOb
false, // isCurrentItem false, // isCurrentItem
missionItemParent); missionItemParent);
items.append(item); items.append(item);
if (imagesEverywhere && pointIndex == 1) {
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++) { for (int i=0; i<_corridorPolyline.count(); i++) {
QGeoCoordinate vertexCoord = _transectPoints[pointIndex++].value<QGeoCoordinate>(); QGeoCoordinate vertexCoord = _transectPoints[pointIndex++].value<QGeoCoordinate>();
MissionItem* item = new MissionItem(seqNum++, MissionItem* item = new MissionItem(seqNum++,
@ -225,7 +245,7 @@ void CorridorScanComplexItem::appendMissionItems(QList<MissionItem*>& items, QOb
items.append(item); items.append(item);
} }
if (_hasTurnaround() && pointIndex < _transectPoints.count()) { if (_hasTurnaround()) {
QGeoCoordinate vertexCoord = _transectPoints[pointIndex++].value<QGeoCoordinate>(); QGeoCoordinate vertexCoord = _transectPoints[pointIndex++].value<QGeoCoordinate>();
MissionItem* item = new MissionItem(seqNum++, MissionItem* item = new MissionItem(seqNum++,
MAV_CMD_NAV_WAYPOINT, MAV_CMD_NAV_WAYPOINT,
@ -261,9 +281,9 @@ void CorridorScanComplexItem::appendMissionItems(QList<MissionItem*>& items, QOb
void CorridorScanComplexItem::applyNewAltitude(double newAltitude) void CorridorScanComplexItem::applyNewAltitude(double newAltitude)
{ {
Q_UNUSED(newAltitude); _cameraCalc.valueSetIsDistance()->setRawValue(true);
// FIXME: NYI _cameraCalc.distanceToSurface()->setRawValue(newAltitude);
//_altitudeFact.setRawValue(newAltitude); _cameraCalc.setDistanceToSurfaceRelative(true);
} }
void CorridorScanComplexItem::_polylineDirtyChanged(bool dirty) void CorridorScanComplexItem::_polylineDirtyChanged(bool dirty)
@ -415,11 +435,6 @@ void CorridorScanComplexItem::_rebuildTransects(void)
normalizedTransectPosition += transectSpacing; 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 // Calculate distance flown for complex item

4
src/MissionManager/CorridorScanComplexItemTest.cc

@ -138,12 +138,12 @@ void CorridorScanComplexItemTest::_testItemCount(void)
_corridorItem->cameraTriggerInTurnAround()->setRawValue(false); _corridorItem->cameraTriggerInTurnAround()->setRawValue(false);
_corridorItem->appendMissionItems(items, this); _corridorItem->appendMissionItems(items, this);
QCOMPARE(items.count(), _corridorItem->lastSequenceNumber()); QCOMPARE(items.count() - 1, _corridorItem->lastSequenceNumber());
items.clear(); items.clear();
_corridorItem->cameraTriggerInTurnAround()->setRawValue(true); _corridorItem->cameraTriggerInTurnAround()->setRawValue(true);
_corridorItem->appendMissionItems(items, this); _corridorItem->appendMissionItems(items, this);
QCOMPARE(items.count(), _corridorItem->lastSequenceNumber()); QCOMPARE(items.count() - 1, _corridorItem->lastSequenceNumber());
items.clear(); items.clear();
} }

9
src/PlanView/CorridorScanEditor.qml

@ -59,15 +59,6 @@ Rectangle {
QGCLabel { QGCLabel {
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right 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)) text: qsTr("WARNING: Photo interval is below minimum interval (%1 secs) supported by camera.").arg(missionItem.cameraMinTriggerInterval.toFixed(1))
wrapMode: Text.WordWrap wrapMode: Text.WordWrap
color: qgcPal.warningText color: qgcPal.warningText

Loading…
Cancel
Save