[wpilib] Fix PIDController continuous range error calculations (#3170)

The inputs should all be errors, so the range should be symmetric.

Fixes #3168.
Fixes #3304.
This commit is contained in:
Tyler Veness
2021-05-21 23:52:30 -07:00
committed by GitHub
parent 04dae799a2
commit 87384ea684
8 changed files with 55 additions and 23 deletions

View File

@@ -76,8 +76,9 @@ double PIDController::GetSetpoint() const {
bool PIDController::AtSetpoint() const {
double positionError;
if (m_continuous) {
positionError = frc::InputModulus(m_setpoint - m_measurement,
m_minimumInput, m_maximumInput);
double errorBound = (m_maximumInput - m_minimumInput) / 2.0;
positionError =
frc::InputModulus(m_setpoint - m_measurement, -errorBound, errorBound);
} else {
positionError = m_setpoint - m_measurement;
}
@@ -128,8 +129,9 @@ double PIDController::Calculate(double measurement) {
m_prevError = m_positionError;
if (m_continuous) {
m_positionError = frc::InputModulus(m_setpoint - measurement,
m_minimumInput, m_maximumInput);
double errorBound = (m_maximumInput - m_minimumInput) / 2.0;
m_positionError =
frc::InputModulus(m_setpoint - m_measurement, -errorBound, errorBound);
} else {
m_positionError = m_setpoint - measurement;
}