[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

@@ -5,7 +5,6 @@
package edu.wpi.first.wpilibj.controller;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -22,8 +21,10 @@ class PIDInputOutputTest {
void continuousInputTest() {
m_controller.setP(1);
m_controller.enableContinuousInput(-180, 180);
assertEquals(m_controller.calculate(-179, 179), -2, 1e-5);
assertTrue(m_controller.calculate(-179, 179) < 0.0);
m_controller.enableContinuousInput(0, 360);
assertEquals(m_controller.calculate(1, 359), -2, 1e-5);
}
@Test

View File

@@ -67,6 +67,22 @@ class ProfiledPIDInputOutputTest {
assertTrue(Math.abs(m_controller.getSetpoint().position - kMeasurement) < Math.PI);
}
@Test
void continuousInputTest4() {
m_controller.setP(1);
m_controller.enableContinuousInput(0, 2.0 * Math.PI);
final double kSetpoint = 2.78;
final double kMeasurement = 3.12;
final double kGoal = 2.71;
m_controller.reset(kSetpoint);
assertTrue(m_controller.calculate(kMeasurement, kGoal) < 0.0);
// Error must be less than half the input range at all times
assertTrue(Math.abs(m_controller.getSetpoint().position - kMeasurement) < Math.PI / 2.0);
}
@Test
void proportionalGainOutputTest() {
m_controller.setP(4);