From 5e34fe600ada43c09321cc2cd7dbbf477b92f92a Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 18 Feb 2025 14:36:25 +1100 Subject: [PATCH] Plane: auto-deploy landing gear on fixed wing landing if LGR_OPTIONS is set to auto-deploy then deploy --- ArduPlane/Plane.cpp | 18 +++++++++++++++++- ArduPlane/Plane.h | 1 - ArduPlane/servos.cpp | 28 ---------------------------- 3 files changed, 17 insertions(+), 30 deletions(-) diff --git a/ArduPlane/Plane.cpp b/ArduPlane/Plane.cpp index 30a157cedd4..f2601ac80fe 100644 --- a/ArduPlane/Plane.cpp +++ b/ArduPlane/Plane.cpp @@ -558,7 +558,23 @@ void Plane::set_flight_stage(AP_FixedWing::FlightStage fs) return; } - landing.handle_flight_stage_change(fs == AP_FixedWing::FlightStage::LAND); + const bool is_landing = (fs == AP_FixedWing::FlightStage::LAND); + + landing.handle_flight_stage_change(is_landing); + +#if AP_LANDINGGEAR_ENABLED + if (is_landing) { + plane.g2.landing_gear.deploy_for_landing(); + } + + const bool is_takeoff_complete = (flight_stage == AP_FixedWing::FlightStage::TAKEOFF && + fs == AP_FixedWing::FlightStage::NORMAL); + if (is_takeoff_complete && + arming.is_armed_and_safety_off() && + is_flying()) { + g2.landing_gear.retract_after_takeoff(); + } +#endif if (fs == AP_FixedWing::FlightStage::ABORT_LANDING) { gcs().send_text(MAV_SEVERITY_NOTICE, "Landing aborted, climbing to %dm", diff --git a/ArduPlane/Plane.h b/ArduPlane/Plane.h index c686fea5355..37f2912ebfe 100644 --- a/ArduPlane/Plane.h +++ b/ArduPlane/Plane.h @@ -1157,7 +1157,6 @@ private: void set_throttle(void); void set_takeoff_expected(void); void set_servos_flaps(void); - void set_landing_gear(void); void dspoiler_update(void); void airbrake_update(void); void landing_neutral_control_surface_servos(void); diff --git a/ArduPlane/servos.cpp b/ArduPlane/servos.cpp index 81445a9f731..cf1b8d1b514 100644 --- a/ArduPlane/servos.cpp +++ b/ArduPlane/servos.cpp @@ -747,29 +747,6 @@ void Plane::set_servos_flaps(void) flaperon_update(); } -#if AP_LANDINGGEAR_ENABLED -/* - setup landing gear state - */ -void Plane::set_landing_gear(void) -{ - if (control_mode == &mode_auto && arming.is_armed_and_safety_off() && is_flying() && gear.last_flight_stage != flight_stage) { - switch (flight_stage) { - case AP_FixedWing::FlightStage::LAND: - g2.landing_gear.deploy_for_landing(); - break; - case AP_FixedWing::FlightStage::NORMAL: - g2.landing_gear.retract_after_takeoff(); - break; - default: - break; - } - } - gear.last_flight_stage = flight_stage; -} -#endif // AP_LANDINGGEAR_ENABLED - - /* support for twin-engine planes */ @@ -919,11 +896,6 @@ void Plane::set_servos(void) // setup flap outputs set_servos_flaps(); -#if AP_LANDINGGEAR_ENABLED - // setup landing gear output - set_landing_gear(); -#endif - // set airbrake outputs airbrake_update();