Browse Source

FlightModeManager: fix integral reset on ground

This information could also be used for yaw and integral
resets of the lower level controllers.
release/1.12
Matthias Grob 4 years ago committed by Daniel Agar
parent
commit
fafbb687d8
  1. 1
      msg/vehicle_constraints.msg
  2. 2
      src/modules/flight_mode_manager/FlightModeManager.cpp
  3. 4
      src/modules/mc_pos_control/MulticopterPositionControl.cpp

1
msg/vehicle_constraints.msg

@ -11,4 +11,5 @@ float32 tilt # in radians [0, PI] @@ -11,4 +11,5 @@ float32 tilt # in radians [0, PI]
float32 min_distance_to_ground # in meters
float32 max_distance_to_ground # in meters
bool want_takeoff # tell the controller to initiate takeoff when idling (ignored during flight)
bool reset_integral # tells controller to reset integrators e.g. since we know the vehicle is not in air
float32 minimum_thrust # tell controller what the minimum collective output thrust should be

2
src/modules/flight_mode_manager/FlightModeManager.cpp

@ -454,7 +454,7 @@ void FlightModeManager::generateTrajectorySetpoint(const float dt, @@ -454,7 +454,7 @@ void FlightModeManager::generateTrajectorySetpoint(const float dt,
// set yaw-sp to current yaw
setpoint.yawspeed = 0.f;
// prevent any integrator windup
// _control.resetIntegral(); TODO
constraints.reset_integral = true;
}
_trajectory_setpoint_pub.publish(setpoint);

4
src/modules/mc_pos_control/MulticopterPositionControl.cpp

@ -254,6 +254,10 @@ void MulticopterPositionControl::Run() @@ -254,6 +254,10 @@ void MulticopterPositionControl::Run()
_control.setConstraints(constraints);
_control.setThrustLimits(constraints.minimum_thrust, _param_mpc_thr_max.get());
if (constraints.reset_integral) {
_control.resetIntegral();
}
// Run position control
if (_control.update(dt)) {
_failsafe_land_hysteresis.set_state_and_update(false, time_stamp_now);

Loading…
Cancel
Save