|
|
|
@ -125,12 +125,14 @@ void FlightTaskAuto::_limitYawRate()
@@ -125,12 +125,14 @@ void FlightTaskAuto::_limitYawRate()
|
|
|
|
|
const float dyaw_desired = matrix::wrap_pi(_yaw_setpoint - _yaw_sp_prev); |
|
|
|
|
const float dyaw_max = yawrate_max * _deltatime; |
|
|
|
|
const float dyaw = math::constrain(dyaw_desired, -dyaw_max, dyaw_max); |
|
|
|
|
_yaw_setpoint = _yaw_sp_prev + dyaw; |
|
|
|
|
_yaw_setpoint = matrix::wrap_pi(_yaw_setpoint); |
|
|
|
|
_yaw_sp_prev = _yaw_setpoint; |
|
|
|
|
float yaw_setpoint_sat = _yaw_sp_prev + dyaw; |
|
|
|
|
yaw_setpoint_sat = matrix::wrap_pi(yaw_setpoint_sat); |
|
|
|
|
|
|
|
|
|
// The yaw setpoint is aligned when its rate is not saturated
|
|
|
|
|
_yaw_sp_aligned = fabsf(dyaw_desired) < fabsf(dyaw_max); |
|
|
|
|
// The yaw setpoint is aligned when it is within tolerance
|
|
|
|
|
_yaw_sp_aligned = fabsf(_yaw_setpoint - yaw_setpoint_sat) < math::radians(_param_mis_yaw_err.get()); |
|
|
|
|
|
|
|
|
|
_yaw_setpoint = yaw_setpoint_sat; |
|
|
|
|
_yaw_sp_prev = _yaw_setpoint; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (PX4_ISFINITE(_yawspeed_setpoint)) { |
|
|
|
|