Skip to content

Commit

Permalink
FlightTasks: do not adjust tilt limit of the position control
Browse files Browse the repository at this point in the history
Adjusting the tilt limit can lead to diverging position control
and should only be used by setting a sanity limit for the controller
and not to adjust during the descent phase of a Land or RTL.
Otherwise it leads to flyaways in important failsafe modes when
there's stronger disturbance e.g. wind.
  • Loading branch information
MaEtUgR authored and LorenzMeier committed Apr 21, 2020
1 parent 95779ea commit 809b45e
Show file tree
Hide file tree
Showing 6 changed files with 4 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -127,14 +127,10 @@ void FlightTaskAutoMapper::_prepareIdleSetpoints()

void FlightTaskAutoMapper::_prepareLandSetpoints()
{
float land_speed = _getLandSpeed();

// Keep xy-position and go down with landspeed
float land_speed = _getLandSpeed();
_position_setpoint = Vector3f(_target(0), _target(1), NAN);
_velocity_setpoint = Vector3f(Vector3f(NAN, NAN, land_speed));

// set constraints
_constraints.tilt = math::radians(_param_mpc_tiltmax_lnd.get());
_gear.landing_gear = landing_gear_s::GEAR_DOWN;
}

Expand Down
2 changes: 1 addition & 1 deletion src/lib/flight_tasks/tasks/FlightTask/FlightTask.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ void FlightTask::_setDefaultConstraints()
_constraints.speed_xy = _param_mpc_xy_vel_max.get();
_constraints.speed_up = _param_mpc_z_vel_max_up.get();
_constraints.speed_down = _param_mpc_z_vel_max_dn.get();
_constraints.tilt = math::radians(_param_mpc_tiltmax_air.get());
_constraints.tilt = NAN;
_constraints.min_distance_to_ground = NAN;
_constraints.max_distance_to_ground = NAN;
_constraints.want_takeoff = false;
Expand Down
3 changes: 1 addition & 2 deletions src/lib/flight_tasks/tasks/FlightTask/FlightTask.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,6 @@ class FlightTask : public ModuleParams
DEFINE_PARAMETERS_CUSTOM_PARENT(ModuleParams,
(ParamFloat<px4::params::MPC_XY_VEL_MAX>) _param_mpc_xy_vel_max,
(ParamFloat<px4::params::MPC_Z_VEL_MAX_DN>) _param_mpc_z_vel_max_dn,
(ParamFloat<px4::params::MPC_Z_VEL_MAX_UP>) _param_mpc_z_vel_max_up,
(ParamFloat<px4::params::MPC_TILTMAX_AIR>) _param_mpc_tiltmax_air
(ParamFloat<px4::params::MPC_Z_VEL_MAX_UP>) _param_mpc_z_vel_max_up
)
};
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,6 @@ bool FlightTaskManualAltitude::activate(vehicle_local_position_setpoint_s last_s
_velocity_setpoint(2) = 0.f;
_setDefaultConstraints();

_constraints.tilt = math::radians(_param_mpc_man_tilt_max.get());

_updateConstraintsFromEstimator();

_max_speed_up = _constraints.speed_up;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,6 @@ bool FlightTaskManualPosition::activate(vehicle_local_position_setpoint_s last_s
// all requirements from altitude-mode still have to hold
bool ret = FlightTaskManualAltitude::activate(last_setpoint);

_constraints.tilt = math::radians(_param_mpc_tiltmax_air.get());

// set task specific constraint
if (_constraints.speed_xy >= _param_mpc_vel_manual.get()) {
_constraints.speed_xy = _param_mpc_vel_manual.get();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ class PositionControl

/**
* Set the maximum tilt angle in radians the output attitude is allowed to have
* @param tilt angle from level orientation in radians
* @param tilt angle in radians from level orientation
*/
void setTiltLimit(const float tilt) { _lim_tilt = tilt; }

Expand Down

0 comments on commit 809b45e

Please sign in to comment.