Browse Source

Plane: Don't overwrite the quadplane loiter relax

master
Michael du Breuil 6 years ago committed by Andrew Tridgell
parent
commit
b290148ed0
  1. 16
      ArduPlane/quadplane.cpp
  2. 2
      ArduPlane/quadplane.h

16
ArduPlane/quadplane.cpp

@ -895,7 +895,7 @@ void QuadPlane::init_loiter(void)
last_loiter_ms = AP_HAL::millis(); last_loiter_ms = AP_HAL::millis();
} }
void QuadPlane::init_land(void) void QuadPlane::init_qland(void)
{ {
init_loiter(); init_loiter();
throttle_wait = false; throttle_wait = false;
@ -1750,7 +1750,7 @@ bool QuadPlane::init_mode(void)
init_loiter(); init_loiter();
break; break;
case QLAND: case QLAND:
init_land(); init_qland();
break; break;
case QRTL: case QRTL:
init_qrtl(); init_qrtl();
@ -1877,7 +1877,7 @@ void QuadPlane::vtol_position_controller(void)
case QPOS_POSITION1: { case QPOS_POSITION1: {
Vector2f diff_wp = location_diff(plane.current_loc, loc); Vector2f diff_wp = location_diff(plane.current_loc, loc);
float distance = diff_wp.length(); const float distance = diff_wp.length();
if (poscontrol.speed_scale <= 0) { if (poscontrol.speed_scale <= 0) {
// initialise scaling so we start off targeting our // initialise scaling so we start off targeting our
@ -1986,7 +1986,11 @@ void QuadPlane::vtol_position_controller(void)
pos_control->set_desired_accel_xy(0.0f,0.0f); pos_control->set_desired_accel_xy(0.0f,0.0f);
// set position control target and update // set position control target and update
pos_control->set_xy_target(poscontrol.target.x, poscontrol.target.y); if (should_relax()) {
loiter_nav->soften_for_landing();
} else {
pos_control->set_xy_target(poscontrol.target.x, poscontrol.target.y);
}
pos_control->update_xy_controller(); pos_control->update_xy_controller();
// nav roll and pitch are controller by position controller // nav roll and pitch are controller by position controller
@ -2369,10 +2373,6 @@ bool QuadPlane::verify_vtol_land(void)
plane.set_next_WP(plane.next_WP_loc); plane.set_next_WP(plane.next_WP_loc);
} }
if (should_relax()) {
loiter_nav->soften_for_landing();
}
// at land_final_alt begin final landing // at land_final_alt begin final landing
float height_above_ground = plane.relative_ground_altitude(plane.g.rangefinder_landing); float height_above_ground = plane.relative_ground_altitude(plane.g.rangefinder_landing);
if (poscontrol.state == QPOS_LAND_DESCEND && height_above_ground < land_final_alt) { if (poscontrol.state == QPOS_LAND_DESCEND && height_above_ground < land_final_alt) {

2
ArduPlane/quadplane.h

@ -200,7 +200,7 @@ private:
void control_hover(void); void control_hover(void);
void init_loiter(void); void init_loiter(void);
void init_land(void); void init_qland(void);
void control_loiter(void); void control_loiter(void);
void check_land_complete(void); void check_land_complete(void);

Loading…
Cancel
Save