From 100fcf799e9b39dbb8d181a80c9e11d6fb93caa0 Mon Sep 17 00:00:00 2001 From: Leonard Hall Date: Wed, 13 Jan 2016 16:11:01 +0900 Subject: [PATCH] Copter: land sets desired spool state --- ArduCopter/control_land.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/ArduCopter/control_land.cpp b/ArduCopter/control_land.cpp index d3d3359737..452ae6d123 100644 --- a/ArduCopter/control_land.cpp +++ b/ArduCopter/control_land.cpp @@ -56,12 +56,14 @@ void Copter::land_gps_run() float target_yaw_rate = 0; // if not auto armed or landed or motor interlock not enabled set throttle to zero and exit immediately - if(!ap.auto_armed || ap.land_complete || !motors.get_interlock()) { + if (!motors.armed() || !ap.auto_armed || ap.land_complete || !motors.get_interlock()) { #if FRAME_CONFIG == HELI_FRAME // Helicopters always stabilize roll/pitch/yaw // call attitude controller attitude_control.input_euler_angle_roll_pitch_euler_rate_yaw_smooth(0, 0, 0, get_smoothing_gain()); attitude_control.set_throttle_out(0,false,g.throttle_filt); -#else // multicopters do not stabilize roll/pitch/yaw when disarmed +#else + motors.set_desired_spool_state(AP_MotorsMulticopter::DESIRED_SPIN_WHEN_ARMED); + // multicopters do not stabilize roll/pitch/yaw when disarmed attitude_control.set_throttle_out_unstabilized(0,true,g.throttle_filt); #endif wp_nav.init_loiter_target(); @@ -113,6 +115,9 @@ void Copter::land_gps_run() target_yaw_rate = get_pilot_desired_yaw_rate(channel_yaw->control_in); } + // set motors to full range + motors.set_desired_spool_state(AP_MotorsMulticopter::DESIRED_THROTTLE_UNLIMITED); + // process roll, pitch inputs wp_nav.set_pilot_desired_acceleration(roll_control, pitch_control); @@ -175,12 +180,14 @@ void Copter::land_nogps_run() } // if not auto armed or landed or motor interlock not enabled set throttle to zero and exit immediately - if(!ap.auto_armed || ap.land_complete || !motors.get_interlock()) { + if (!motors.armed() || !ap.auto_armed || ap.land_complete || !motors.get_interlock()) { #if FRAME_CONFIG == HELI_FRAME // Helicopters always stabilize roll/pitch/yaw // call attitude controller attitude_control.input_euler_angle_roll_pitch_euler_rate_yaw_smooth(target_roll, target_pitch, target_yaw_rate, get_smoothing_gain()); attitude_control.set_throttle_out(0,false,g.throttle_filt); -#else // multicopters do not stabilize roll/pitch/yaw when disarmed +#else + motors.set_desired_spool_state(AP_MotorsMulticopter::DESIRED_SPIN_WHEN_ARMED); + // multicopters do not stabilize roll/pitch/yaw when disarmed attitude_control.set_throttle_out_unstabilized(0,true,g.throttle_filt); #endif @@ -198,6 +205,9 @@ void Copter::land_nogps_run() return; } + // set motors to full range + motors.set_desired_spool_state(AP_MotorsMulticopter::DESIRED_THROTTLE_UNLIMITED); + // call attitude controller attitude_control.input_euler_angle_roll_pitch_euler_rate_yaw_smooth(target_roll, target_pitch, target_yaw_rate, get_smoothing_gain());