mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-19 00:41:43 +00:00
[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:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user