From 3758f88f8cfb6a26edc8a022b93143b33b630011 Mon Sep 17 00:00:00 2001 From: Silvan Date: Wed, 18 Mar 2026 16:33:58 +0100 Subject: [PATCH] feat(navigator): Mission feasibility check: do not require takeoff waypoint when in-air Signed-off-by: Silvan --- .../MissionFeasibility/FeasibilityChecker.cpp | 17 ++++++++++++++--- src/modules/navigator/mission_params.c | 1 + 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/modules/navigator/MissionFeasibility/FeasibilityChecker.cpp b/src/modules/navigator/MissionFeasibility/FeasibilityChecker.cpp index 803f192382..3f5ac69684 100644 --- a/src/modules/navigator/MissionFeasibility/FeasibilityChecker.cpp +++ b/src/modules/navigator/MissionFeasibility/FeasibilityChecker.cpp @@ -540,7 +540,7 @@ bool FeasibilityChecker::checkTakeoffLandAvailable() break; case 1: - result = _has_takeoff; + result = _has_takeoff || !_is_landed; if (!result) { mavlink_log_critical(_mavlink_log_pub, "Mission rejected: Takeoff waypoint required.\t"); @@ -563,7 +563,7 @@ bool FeasibilityChecker::checkTakeoffLandAvailable() break; case 3: - result = _has_takeoff && _landing_valid; + result = (_has_takeoff || !_is_landed) && _landing_valid; if (!result) { mavlink_log_critical(_mavlink_log_pub, "Mission rejected: Takeoff or Landing item missing.\t"); @@ -574,7 +574,18 @@ bool FeasibilityChecker::checkTakeoffLandAvailable() break; case 4: - result = hasMissionBothOrNeitherTakeoffAndLanding(); + if (_is_landed) { + result = hasMissionBothOrNeitherTakeoffAndLanding(); + + } else { + result = _landing_valid; + + if (!result) { + mavlink_log_critical(_mavlink_log_pub, "Mission rejected: Landing waypoint/pattern required."); + events::send(events::ID("feasibility_mis_type_4_in_air"), {events::Log::Error, events::LogInternal::Info}, + "Mission rejected: Landing waypoint/pattern required"); + } + } break; diff --git a/src/modules/navigator/mission_params.c b/src/modules/navigator/mission_params.c index c0bbf5c254..1f59776f16 100644 --- a/src/modules/navigator/mission_params.c +++ b/src/modules/navigator/mission_params.c @@ -62,6 +62,7 @@ PARAM_DEFINE_FLOAT(MIS_TAKEOFF_ALT, 2.5f); * * Specifies if a mission has to contain a takeoff and/or mission landing. * Validity of configured takeoffs/landings is checked independently of the setting here. + * Takeoff requirement is dropped when in-air. * * @value 0 No requirements * @value 1 Require a takeoff