Browse Source

RTL check alt_max before using

- fixes #8257
sbg
Daniel Agar 7 years ago
parent
commit
98cbd44526
  1. 20
      src/modules/navigator/rtl.cpp
  2. 2
      src/modules/navigator/rtl.h

20
src/modules/navigator/rtl.cpp

@ -73,9 +73,20 @@ RTL::on_inactive()
} }
float float
RTL::get_rtl_altitude() RTL::get_rtl_altitude() const
{ {
return math::min(_param_return_alt.get(), _navigator->get_land_detected()->alt_max); float rtl_alt = _navigator->get_home_position()->alt;
const float alt_max = _navigator->get_land_detected()->alt_max;
if (alt_max > 0) {
rtl_alt += math::min(_param_return_alt.get(), alt_max);
} else {
rtl_alt += _param_return_alt.get();
}
return rtl_alt;
} }
void void
@ -92,8 +103,7 @@ RTL::on_activation()
if (_navigator->get_land_detected()->landed) { if (_navigator->get_land_detected()->landed) {
_rtl_state = RTL_STATE_LANDED; _rtl_state = RTL_STATE_LANDED;
} else if ((_rtl_alt_min } else if (_rtl_alt_min || _navigator->get_global_position()->alt < get_rtl_altitude()) {
|| _navigator->get_global_position()->alt < (_navigator->get_home_position()->alt + get_rtl_altitude()))) {
/* if lower than return altitude, climb up first */ /* if lower than return altitude, climb up first */
_rtl_state = RTL_STATE_CLIMB; _rtl_state = RTL_STATE_CLIMB;
@ -141,7 +151,7 @@ RTL::set_rtl_item()
_navigator->get_global_position()->lat, _navigator->get_global_position()->lon); _navigator->get_global_position()->lat, _navigator->get_global_position()->lon);
// if we are close to home we do not climb as high, otherwise we climb to return alt // if we are close to home we do not climb as high, otherwise we climb to return alt
float climb_alt = _navigator->get_home_position()->alt + get_rtl_altitude(); float climb_alt = get_rtl_altitude();
// we are close to home, limit climb to min // we are close to home, limit climb to min
if (home_dist < _param_rtl_min_dist.get()) { if (home_dist < _param_rtl_min_dist.get()) {

2
src/modules/navigator/rtl.h

@ -79,7 +79,7 @@ private:
/** /**
* Get RTL altitude * Get RTL altitude
*/ */
float get_rtl_altitude(); float get_rtl_altitude() const;
enum RTLState { enum RTLState {

Loading…
Cancel
Save