diff --git a/msg/MissionResult.msg b/msg/MissionResult.msg index e4bfed129f..463232e96f 100644 --- a/msg/MissionResult.msg +++ b/msg/MissionResult.msg @@ -1,6 +1,8 @@ uint64 timestamp # time since system start (microseconds) uint16 mission_update_counter # Counter for the mission for which the result was generated +uint16 geofence_update_counter # Counter for the corresponding geofence for which the result was generated (used for mission feasibility) +uint64 home_position_counter # Counter of the home position for which the result was generated (used for mission feasibility) int32 seq_reached # Sequence of the mission item which has been reached, default -1 uint16 seq_current # Sequence of the current mission item diff --git a/src/modules/navigator/mission_base.cpp b/src/modules/navigator/mission_base.cpp index c95047d1ad..662e50f20e 100644 --- a/src/modules/navigator/mission_base.cpp +++ b/src/modules/navigator/mission_base.cpp @@ -689,17 +689,20 @@ MissionBase::checkMissionRestart() void MissionBase::check_mission_valid() { - if (_navigator->get_mission_result()->mission_update_counter != _mission.mission_update_counter) { - MissionFeasibilityChecker missionFeasibilityChecker(_navigator, _dataman_client); + if ((_navigator->get_mission_result()->mission_update_counter != _mission.mission_update_counter) + || (_navigator->get_mission_result()->geofence_update_counter != _mission.geofence_update_counter) + || (_navigator->get_mission_result()->home_position_counter != _navigator->get_home_position()->update_count)) { - bool is_mission_valid = - missionFeasibilityChecker.checkMissionFeasible(_mission); - - _navigator->get_mission_result()->valid = is_mission_valid; _navigator->get_mission_result()->mission_update_counter = _mission.mission_update_counter; + _navigator->get_mission_result()->geofence_update_counter = _mission.geofence_update_counter; + _navigator->get_mission_result()->home_position_counter = _navigator->get_home_position()->update_count; + + MissionFeasibilityChecker missionFeasibilityChecker(_navigator, _dataman_client); + _navigator->get_mission_result()->valid = missionFeasibilityChecker.checkMissionFeasible(_mission); _navigator->get_mission_result()->seq_total = _mission.count; _navigator->get_mission_result()->seq_reached = -1; _navigator->get_mission_result()->failure = false; + set_mission_result(); } }