From 9ceff1888be40968feabc73769490b0f924d1d75 Mon Sep 17 00:00:00 2001 From: mahima-yoga Date: Wed, 28 May 2025 15:29:34 +0200 Subject: [PATCH] commander: don't reset home position if landed during a mission. --- src/modules/commander/Commander.cpp | 9 ++++++--- src/modules/commander/Commander.hpp | 1 + src/modules/commander/commander_params.c | 3 +++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/modules/commander/Commander.cpp b/src/modules/commander/Commander.cpp index cebc08ae9416..ad5eccafb47d 100644 --- a/src/modules/commander/Commander.cpp +++ b/src/modules/commander/Commander.cpp @@ -613,7 +613,7 @@ transition_result_t Commander::arm(arm_disarm_reason_t calling_reason, bool run_ events::send(events::ID("commander_armed_by"), events::Log::Info, "Armed by {1}", calling_reason); - if (_param_com_home_en.get()) { + if (_param_com_home_en.get() && !_mission_in_progress) { _home_position.setHomePosition(); } @@ -1809,7 +1809,10 @@ void Commander::run() vtolStatusUpdate(); - _home_position.update(_param_com_home_en.get(), !isArmed() && _vehicle_land_detected.landed); + _mission_in_progress = (_vehicle_status.nav_state == vehicle_status_s::NAVIGATION_STATE_AUTO_MISSION) + && !_mission_result_sub.get().finished; + + _home_position.update(_param_com_home_en.get(), !isArmed() && _vehicle_land_detected.landed && !_mission_in_progress); handleAutoDisarm(); @@ -2110,7 +2113,7 @@ void Commander::landDetectorUpdate() } // automatically set or update home position - if (_param_com_home_en.get()) { + if (_param_com_home_en.get() && !_mission_in_progress) { // set the home position when taking off if (!_vehicle_land_detected.landed) { if (was_landed) { diff --git a/src/modules/commander/Commander.hpp b/src/modules/commander/Commander.hpp index af16a7f81d29..1d7841cdc87c 100644 --- a/src/modules/commander/Commander.hpp +++ b/src/modules/commander/Commander.hpp @@ -279,6 +279,7 @@ class Commander : public ModuleBase, public ModuleParams bool _arm_tune_played{false}; bool _have_taken_off_since_arming{false}; bool _status_changed{true}; + bool _mission_in_progress{false}; vehicle_land_detected_s _vehicle_land_detected{}; diff --git a/src/modules/commander/commander_params.c b/src/modules/commander/commander_params.c index c1b77b6721c8..3cd9b95f729a 100644 --- a/src/modules/commander/commander_params.c +++ b/src/modules/commander/commander_params.c @@ -142,6 +142,9 @@ PARAM_DEFINE_FLOAT(COM_RC_LOSS_T, 0.5f); * * Set home position automatically if possible. * + * During missions, the home position is locked and will not reset during intermediate landings. + * It will only update once the mission is complete or landed outside of a mission. + * * @group Commander * @reboot_required true * @boolean