mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-21 01:01: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:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user