diff --git a/ArduCopter/Copter.h b/ArduCopter/Copter.h index 5323dc5fe596d..a359445c993dd 100644 --- a/ArduCopter/Copter.h +++ b/ArduCopter/Copter.h @@ -932,7 +932,7 @@ class Copter : public AP_HAL::HAL::Callbacks { bool rtl_init(bool ignore_checks); void rtl_restart_without_terrain(); - void rtl_run(); + void rtl_run(bool disarm_on_land=true); void rtl_climb_start(); void rtl_return_start(); void rtl_climb_return_run(); @@ -941,7 +941,7 @@ class Copter : public AP_HAL::HAL::Callbacks { void rtl_descent_start(); void rtl_descent_run(); void rtl_land_start(); - void rtl_land_run(); + void rtl_land_run(bool disarm_on_land); void rtl_build_path(bool terrain_following_allowed); void rtl_compute_return_target(bool terrain_following_allowed); bool smart_rtl_init(bool ignore_checks); diff --git a/ArduCopter/control_auto.cpp b/ArduCopter/control_auto.cpp index 0798efc0d9631..2b8df5fcfde7f 100644 --- a/ArduCopter/control_auto.cpp +++ b/ArduCopter/control_auto.cpp @@ -425,7 +425,7 @@ void Copter::auto_rtl_start() void Copter::auto_rtl_run() { // call regular rtl flight mode run function - rtl_run(); + rtl_run(false); } // auto_circle_movetoedge_start - initialise waypoint controller to move to edge of a circle with it's center at the specified location diff --git a/ArduCopter/control_rtl.cpp b/ArduCopter/control_rtl.cpp index 33958a76f4ba9..8303d9f9d948a 100644 --- a/ArduCopter/control_rtl.cpp +++ b/ArduCopter/control_rtl.cpp @@ -35,7 +35,7 @@ void Copter::rtl_restart_without_terrain() // rtl_run - runs the return-to-launch controller // should be called at 100hz or more -void Copter::rtl_run() +void Copter::rtl_run(bool disarm_on_land) { // check if we need to move to next state if (rtl_state_complete) { @@ -82,7 +82,7 @@ void Copter::rtl_run() break; case RTL_Land: - rtl_land_run(); + rtl_land_run(disarm_on_land); break; } } @@ -358,7 +358,7 @@ void Copter::rtl_land_start() // rtl_returnhome_run - return home // called by rtl_run at 100hz or more -void Copter::rtl_land_run() +void Copter::rtl_land_run(bool disarm_on_land) { // if not auto armed or landing completed or motor interlock not enabled set throttle to zero and exit immediately if (!motors->armed() || !ap.auto_armed || ap.land_complete || !motors->get_interlock()) { @@ -375,7 +375,7 @@ void Copter::rtl_land_run() wp_nav->init_loiter_target(); // disarm when the landing detector says we've landed - if (ap.land_complete) { + if (ap.land_complete && disarm_on_land) { init_disarm_motors(); }