diff --git a/ArduCopter/Copter.h b/ArduCopter/Copter.h index 59c55686ee..d064038934 100644 --- a/ArduCopter/Copter.h +++ b/ArduCopter/Copter.h @@ -947,6 +947,7 @@ private: void read_barometer(void); void init_rangefinder(void); int16_t read_rangefinder(void); + bool rangefinder_alt_ok(); void init_compass(); void init_optflow(); void update_optical_flow(void); diff --git a/ArduCopter/control_althold.cpp b/ArduCopter/control_althold.cpp index a9da150e95..0756ed49b4 100644 --- a/ArduCopter/control_althold.cpp +++ b/ArduCopter/control_althold.cpp @@ -159,8 +159,8 @@ void Copter::althold_run() // call attitude controller attitude_control.input_euler_angle_roll_pitch_euler_rate_yaw_smooth(target_roll, target_pitch, target_yaw_rate, get_smoothing_gain()); - // call throttle controller - if (rangefinder_enabled && (rangefinder_alt_health >= RANGEFINDER_HEALTH_MAX)) { + // adjust climb rate using rangefinder + if (rangefinder_alt_ok()) { // if rangefinder is ok, use surface tracking target_climb_rate = get_surface_tracking_climb_rate(target_climb_rate, pos_control.get_alt_target(), G_Dt); } diff --git a/ArduCopter/control_circle.cpp b/ArduCopter/control_circle.cpp index e1a927ef5f..001621b524 100644 --- a/ArduCopter/control_circle.cpp +++ b/ArduCopter/control_circle.cpp @@ -90,8 +90,8 @@ void Copter::circle_run() attitude_control.input_euler_angle_roll_pitch_yaw(circle_nav.get_roll(), circle_nav.get_pitch(), circle_nav.get_yaw(),true); } - // run altitude controller - if (rangefinder_enabled && (rangefinder_alt_health >= RANGEFINDER_HEALTH_MAX)) { + // adjust climb rate using rangefinder + if (rangefinder_alt_ok()) { // if rangefinder is ok, use surface tracking target_climb_rate = get_surface_tracking_climb_rate(target_climb_rate, pos_control.get_alt_target(), G_Dt); } diff --git a/ArduCopter/control_loiter.cpp b/ArduCopter/control_loiter.cpp index 99b3ba63f3..38a22afc43 100644 --- a/ArduCopter/control_loiter.cpp +++ b/ArduCopter/control_loiter.cpp @@ -180,8 +180,8 @@ void Copter::loiter_run() // call attitude controller attitude_control.input_euler_angle_roll_pitch_euler_rate_yaw(wp_nav.get_roll(), wp_nav.get_pitch(), target_yaw_rate); - // run altitude controller - if (rangefinder_enabled && (rangefinder_alt_health >= RANGEFINDER_HEALTH_MAX)) { + // adjust climb rate using rangefinder + if (rangefinder_alt_ok()) { // if rangefinder is ok, use surface tracking target_climb_rate = get_surface_tracking_climb_rate(target_climb_rate, pos_control.get_alt_target(), G_Dt); } diff --git a/ArduCopter/control_poshold.cpp b/ArduCopter/control_poshold.cpp index e4ce12fc24..604a66565e 100644 --- a/ArduCopter/control_poshold.cpp +++ b/ArduCopter/control_poshold.cpp @@ -519,8 +519,8 @@ void Copter::poshold_run() // update attitude controller targets attitude_control.input_euler_angle_roll_pitch_euler_rate_yaw(poshold.roll, poshold.pitch, target_yaw_rate); - // throttle control - if (rangefinder_enabled && (rangefinder_alt_health >= RANGEFINDER_HEALTH_MAX)) { + // adjust climb rate using rangefinder + if (rangefinder_alt_ok()) { // if rangefinder is ok, use surface tracking target_climb_rate = get_surface_tracking_climb_rate(target_climb_rate, pos_control.get_alt_target(), G_Dt); } diff --git a/ArduCopter/control_sport.cpp b/ArduCopter/control_sport.cpp index 3761183aa5..e59730e533 100644 --- a/ArduCopter/control_sport.cpp +++ b/ArduCopter/control_sport.cpp @@ -107,8 +107,8 @@ void Copter::sport_run() // call attitude controller attitude_control.input_euler_rate_roll_pitch_yaw(target_roll_rate, target_pitch_rate, target_yaw_rate); - // call throttle controller - if (rangefinder_enabled && (rangefinder_alt_health >= RANGEFINDER_HEALTH_MAX)) { + // adjust climb rate using rangefinder + if (rangefinder_alt_ok()) { // if rangefinder is ok, use surface tracking target_climb_rate = get_surface_tracking_climb_rate(target_climb_rate, pos_control.get_alt_target(), G_Dt); } diff --git a/ArduCopter/precision_landing.cpp b/ArduCopter/precision_landing.cpp index 377f3a5a8e..5fb594e338 100644 --- a/ArduCopter/precision_landing.cpp +++ b/ArduCopter/precision_landing.cpp @@ -18,7 +18,7 @@ void Copter::update_precland() float final_alt = current_loc.alt; // use range finder altitude if it is valid - if (rangefinder_enabled && (rangefinder_alt_health >= RANGEFINDER_HEALTH_MAX)) { + if (rangefinder_alt_ok()) { final_alt = rangefinder_alt; } diff --git a/ArduCopter/sensors.cpp b/ArduCopter/sensors.cpp index c4cbc0378a..d782153ebf 100644 --- a/ArduCopter/sensors.cpp +++ b/ArduCopter/sensors.cpp @@ -69,6 +69,12 @@ int16_t Copter::read_rangefinder(void) #endif } +// return true if rangefinder_alt can be used +bool Copter::rangefinder_alt_ok() +{ + return (rangefinder_enabled && (rangefinder_alt_health >= RANGEFINDER_HEALTH_MAX)); +} + /* update RPM sensors */