Commit 8a31bcac authored by Valentin Platzgummer's avatar Valentin Platzgummer
Browse files

wp display in flight view mod

parent 46268575
...@@ -12,8 +12,8 @@ WimaController::WimaController(QObject *parent) ...@@ -12,8 +12,8 @@ WimaController::WimaController(QObject *parent)
, _serviceArea (this) , _serviceArea (this)
, _corridor (this) , _corridor (this)
, _localPlanDataValid (false) , _localPlanDataValid (false)
, _startWaypointIndex (0) , _startWaypointIndex (1)
, _endWaypointIndex (0) , _endWaypointIndex (1)
{ {
} }
...@@ -97,6 +97,12 @@ void WimaController::setDataContainer(WimaDataContainer *container) ...@@ -97,6 +97,12 @@ void WimaController::setDataContainer(WimaDataContainer *container)
} }
} }
void WimaController::nextPhase()
{
updateCurrentMissionItems();
updateCurrentPath();
}
void WimaController::startMission() void WimaController::startMission()
{ {
...@@ -293,9 +299,18 @@ void WimaController::containerDataValidChanged(bool valid) ...@@ -293,9 +299,18 @@ void WimaController::containerDataValidChanged(bool valid)
// create mission items // create mission items
_missionController->removeAll(); _missionController->removeAll();
QmlObjectListModel* missionControllerVisualItems = _missionController->visualItems(); QmlObjectListModel* missionControllerVisualItems = _missionController->visualItems();
for ( int i = 1; i < tempMissionItems.size(); i++) { bool copyON = false;
for ( int i = 0; i < tempMissionItems.size(); i++) {
const MissionItem *missionItem = tempMissionItems[i]; const MissionItem *missionItem = tempMissionItems[i];
_missionController->insertSimpleMissionItem(*missionItem, missionControllerVisualItems->count()); if (copyON || missionItem->command() == MAV_CMD_NAV_VTOL_TAKEOFF
|| missionItem->command() == MAV_CMD_NAV_TAKEOFF) {
_missionController->insertSimpleMissionItem(*missionItem, missionControllerVisualItems->count());
copyON = true;
}
if ( missionItem->command() == MAV_CMD_NAV_VTOL_LAND
|| missionItem->command() == MAV_CMD_NAV_LAND)
break;
} }
...@@ -318,6 +333,8 @@ void WimaController::containerDataValidChanged(bool valid) ...@@ -318,6 +333,8 @@ void WimaController::containerDataValidChanged(bool valid)
} }
updateWaypointPath(); updateWaypointPath();
_startWaypointIndex = 1;
updateCurrentMissionItems(); updateCurrentMissionItems();
updateCurrentPath(); updateCurrentPath();
...@@ -342,28 +359,30 @@ void WimaController::containerDataValidChanged(bool valid) ...@@ -342,28 +359,30 @@ void WimaController::containerDataValidChanged(bool valid)
void WimaController::updateCurrentMissionItems() void WimaController::updateCurrentMissionItems()
{ {
int numberWaypoints = 30; // the number of waypoints currentMissionItems must not exceed int numberWaypoints = 30; // the number of waypoints currentMissionItems must not exceed
int overlapping = 2; // number of overlapping waypoints of consecutive mission phases
SimpleMissionItem *homeItem = _missionItems.value<SimpleMissionItem *>(0); SimpleMissionItem *homeItem = _missionItems.value<SimpleMissionItem *>(0);
if (homeItem == nullptr) { if (homeItem == nullptr) {
qWarning("WimaController::updateCurrentMissionItems(): nullptr"); qWarning("WimaController::updateCurrentMissionItems(): nullptr");
_currentMissionItems.clear();
return; return;
} }
QGeoCoordinate homeCoordinate(homeItem->coordinate()); QGeoCoordinate homeCoordinate(homeItem->coordinate());
QList<QGeoCoordinate> geoCoordinateList; // list with potential waypoints (from _missionItems), for _currentMissionItems QList<QGeoCoordinate> geoCoordinateList; // list with potential waypoints (from _missionItems), for _currentMissionItems
if (!extractCoordinateList(_missionItems, geoCoordinateList, _startWaypointIndex, _endWaypointIndex = std::min(_startWaypointIndex + numberWaypoints - 1, _missionItems.count()-2); // -2 -> last item is land item
std::min(_startWaypointIndex + numberWaypoints - 1, _missionItems.count()-2))) // -2 -> last item is land item if (!extractCoordinateList(_missionItems, geoCoordinateList, _startWaypointIndex, _endWaypointIndex)) {
{
qWarning("WimaController::updateCurrentMissionItems(): error on waypoint extraction."); qWarning("WimaController::updateCurrentMissionItems(): error on waypoint extraction.");
_currentMissionItems.clear();
return; return;
} }
_startWaypointIndex = _endWaypointIndex + 1 - overlapping;
_currentMissionItems.clear();
// calculate path from home to first waypoint // calculate path from home to first waypoint
QList<QGeoCoordinate> path; QList<QGeoCoordinate> path;
if ( !calcShortestPath(homeCoordinate, geoCoordinateList[0], path) ) { if ( !calcShortestPath(homeCoordinate, geoCoordinateList[0], path) ) {
qWarning("WimaController::updateCurrentMissionItems(): Not able to calc path from home to first waypoint."); qWarning("WimaController::updateCurrentMissionItems(): Not able to calc path from home to first waypoint.");
_currentMissionItems.clear();
return; return;
} }
// prepend to geoCoordinateList // prepend to geoCoordinateList
...@@ -374,6 +393,7 @@ void WimaController::updateCurrentMissionItems() ...@@ -374,6 +393,7 @@ void WimaController::updateCurrentMissionItems()
path.clear(); path.clear();
if ( !calcShortestPath(geoCoordinateList.last(), homeCoordinate, path) ) { if ( !calcShortestPath(geoCoordinateList.last(), homeCoordinate, path) ) {
qWarning("WimaController::updateCurrentMissionItems(): Not able to calc path from home to first waypoint."); qWarning("WimaController::updateCurrentMissionItems(): Not able to calc path from home to first waypoint.");
_currentMissionItems.clear();
return; return;
} }
path.removeFirst(); // first coordinate already in geoCoordinateList path.removeFirst(); // first coordinate already in geoCoordinateList
...@@ -389,6 +409,7 @@ void WimaController::updateCurrentMissionItems() ...@@ -389,6 +409,7 @@ void WimaController::updateCurrentMissionItems()
SimpleMissionItem *landItem = missionControllerVisuals->value<SimpleMissionItem*>(missionControllerVisuals->count()-1); SimpleMissionItem *landItem = missionControllerVisuals->value<SimpleMissionItem*>(missionControllerVisuals->count()-1);
if (landItem == nullptr) { if (landItem == nullptr) {
qWarning("WimaController::updateCurrentMissionItems(): nullptr"); qWarning("WimaController::updateCurrentMissionItems(): nullptr");
_currentMissionItems.clear();
return; return;
} }
// check vehicle type, before setting land command // check vehicle type, before setting land command
...@@ -396,8 +417,10 @@ void WimaController::updateCurrentMissionItems() ...@@ -396,8 +417,10 @@ void WimaController::updateCurrentMissionItems()
MAV_CMD landCmd = controllerVehicle->vtol() ? MAV_CMD_NAV_VTOL_LAND : MAV_CMD_NAV_LAND; MAV_CMD landCmd = controllerVehicle->vtol() ? MAV_CMD_NAV_VTOL_LAND : MAV_CMD_NAV_LAND;
if (controllerVehicle->firmwarePlugin()->supportedMissionCommands().contains(landCmd)) { if (controllerVehicle->firmwarePlugin()->supportedMissionCommands().contains(landCmd)) {
landItem->setCommand(landCmd); landItem->setCommand(landCmd);
} else } else {
_currentMissionItems.clear();
return; return;
}
// copy mission items to _currentMissionItems // copy mission items to _currentMissionItems
// MissionSettingsItem *settingsItem = qobject_cast<MissionSettingsItem *>((*missionControllerVisuals)[0]); // MissionSettingsItem *settingsItem = qobject_cast<MissionSettingsItem *>((*missionControllerVisuals)[0]);
...@@ -407,10 +430,12 @@ void WimaController::updateCurrentMissionItems() ...@@ -407,10 +430,12 @@ void WimaController::updateCurrentMissionItems()
// } // }
// _missionItems.append(settingsItem); // _missionItems.append(settingsItem);
_currentMissionItems.clear();
for ( int i = 1; i < missionControllerVisuals->count(); i++) { for ( int i = 1; i < missionControllerVisuals->count(); i++) {
SimpleMissionItem *visualItem = missionControllerVisuals->value<SimpleMissionItem*>(i); SimpleMissionItem *visualItem = missionControllerVisuals->value<SimpleMissionItem*>(i);
if (visualItem == nullptr) { if (visualItem == nullptr) {
qWarning("WimaController::updateCurrentMissionItems(): Nullptr at SimpleMissionItem!"); qWarning("WimaController::updateCurrentMissionItems(): Nullptr at SimpleMissionItem!");
_currentMissionItems.clear();
return; return;
} }
SimpleMissionItem *visualItemCopy = new SimpleMissionItem(*visualItem, true, this); SimpleMissionItem *visualItemCopy = new SimpleMissionItem(*visualItem, true, this);
...@@ -423,14 +448,16 @@ void WimaController::updateCurrentMissionItems() ...@@ -423,14 +448,16 @@ void WimaController::updateCurrentMissionItems()
void WimaController::updateWaypointPath() void WimaController::updateWaypointPath()
{ {
_waypointPath.clear(); _waypointPath.clear();
extractCoordinateList(_missionItems, _waypointPath, 0, _missionItems.count()-1); if (!extractCoordinateList(_missionItems, _waypointPath, 0, _missionItems.count()-1))
return;
emit waypointPathChanged(); emit waypointPathChanged();
} }
void WimaController::updateCurrentPath() void WimaController::updateCurrentPath()
{ {
_currentWaypointPath.clear(); _currentWaypointPath.clear();
extractCoordinateList(_currentMissionItems, _currentWaypointPath, 0, _currentMissionItems.count()-1); if (!extractCoordinateList(_currentMissionItems, _currentWaypointPath, 0, _currentMissionItems.count()-1))
return;
emit currentWaypointPathChanged(); emit currentWaypointPathChanged();
} }
......
...@@ -68,11 +68,11 @@ public: ...@@ -68,11 +68,11 @@ public:
void setDataContainer (WimaDataContainer* container); void setDataContainer (WimaDataContainer* container);
// Member Methodes // Member Methodes
Q_INVOKABLE void nextPhase();
Q_INVOKABLE void startMission(); Q_INVOKABLE void startMission();
Q_INVOKABLE void abortMission(); Q_INVOKABLE void abortMission();
Q_INVOKABLE void pauseMission(); Q_INVOKABLE void pauseMission();
Q_INVOKABLE void resumeMission(); Q_INVOKABLE void resumeMission();
Q_INVOKABLE bool updateMission();
Q_INVOKABLE void saveToCurrent (); Q_INVOKABLE void saveToCurrent ();
Q_INVOKABLE void saveToFile (const QString& filename); Q_INVOKABLE void saveToFile (const QString& filename);
......
Supports Markdown
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