Replace SetOutputRange() with SetIntegratorRange()

If users are attempting to use the output range to limit the controller
action, they should use ProfiledPIDController instead. If they actually
intended to clamp the output, they should use std::clamp().
This commit is contained in:
Tyler Veness
2019-08-26 21:40:30 -07:00
committed by Peter Johnson
parent ff8b8f0a8a
commit 9b6ffc201c
11 changed files with 55 additions and 72 deletions

View File

@@ -64,9 +64,10 @@ void PIDController::EnableContinuousInput(double minimumInput,
void PIDController::DisableContinuousInput() { m_continuous = false; }
void PIDController::SetOutputRange(double minimumOutput, double maximumOutput) {
m_minimumOutput = minimumOutput;
m_maximumOutput = maximumOutput;
void PIDController::SetIntegratorRange(double minimumIntegral,
double maximumIntegral) {
m_minimumIntegral = minimumIntegral;
m_maximumIntegral = maximumIntegral;
}
void PIDController::SetTolerance(double positionTolerance,
@@ -89,12 +90,10 @@ double PIDController::Calculate(double measurement) {
if (m_Ki != 0) {
m_totalError =
std::clamp(m_totalError + m_positionError * m_period.to<double>(),
m_minimumOutput / m_Ki, m_maximumOutput / m_Ki);
m_minimumIntegral / m_Ki, m_maximumIntegral / m_Ki);
}
return std::clamp(
m_Kp * m_positionError + m_Ki * m_totalError + m_Kd * m_velocityError,
m_minimumOutput, m_maximumOutput);
return m_Kp * m_positionError + m_Ki * m_totalError + m_Kd * m_velocityError;
}
double PIDController::Calculate(double measurement, double setpoint) {