2020-03-28 22:45:44 -06:00
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
/* Copyright (c) 2018-2019 FIRST. All Rights Reserved. */
|
|
|
|
|
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
|
|
|
|
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
|
|
|
|
/* the project. */
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
2020-03-28 23:15:45 -06:00
|
|
|
package frc4388.utility;
|
2020-03-28 22:45:44 -06:00
|
|
|
|
|
|
|
|
import static org.junit.Assert.*;
|
|
|
|
|
import static org.mockito.Mockito.*;
|
2020-03-28 23:15:45 -06:00
|
|
|
import org.junit.*;
|
2020-03-28 22:45:44 -06:00
|
|
|
|
|
|
|
|
import edu.wpi.first.wpilibj.*;
|
2020-03-28 23:15:45 -06:00
|
|
|
import com.ctre.phoenix.sensors.PigeonIMU;
|
2020-03-29 00:10:06 -06:00
|
|
|
import com.kauailabs.navx.frc.AHRS;
|
|
|
|
|
|
|
|
|
|
import frc4388.mocks.MockPigeonIMU;
|
|
|
|
|
import frc4388.robot.Constants.DriveConstants;
|
2020-03-28 22:45:44 -06:00
|
|
|
import frc4388.utility.RobotGyro;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Add your docs here.
|
|
|
|
|
*/
|
2020-03-28 23:15:45 -06:00
|
|
|
public class RobotGyroUtilityTest {
|
2020-03-29 00:10:06 -06:00
|
|
|
MockPigeonIMU pigeon = new MockPigeonIMU(DriveConstants.DRIVE_PIGEON_ID);
|
|
|
|
|
RobotGyro gyroPigeon = new RobotGyro(pigeon);
|
|
|
|
|
AHRS navX = mock(AHRS.class);
|
|
|
|
|
RobotGyro gyroNavX = new RobotGyro(navX);
|
2020-04-08 10:27:33 -06:00
|
|
|
RobotTime robotTime = RobotTime.getInstance();
|
2020-03-29 00:10:06 -06:00
|
|
|
|
2020-04-08 10:27:33 -06:00
|
|
|
// TODO UNTESTED: most functions for NavX
|
2020-03-29 00:10:06 -06:00
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testConfig() {
|
2020-04-08 10:27:33 -06:00
|
|
|
// TEST 1
|
2020-03-29 00:10:06 -06:00
|
|
|
assertEquals(true, gyroPigeon.m_isGyroAPigeon);
|
|
|
|
|
assertEquals(pigeon, gyroPigeon.getPigeon());
|
|
|
|
|
assertEquals(null, gyroPigeon.getNavX());
|
2020-04-08 10:27:33 -06:00
|
|
|
|
|
|
|
|
// TEST 2
|
2020-03-29 00:10:06 -06:00
|
|
|
assertEquals(false, gyroNavX.m_isGyroAPigeon);
|
|
|
|
|
assertEquals(navX, gyroNavX.getNavX());
|
|
|
|
|
assertEquals(null, gyroNavX.getPigeon());
|
|
|
|
|
}
|
2020-03-28 22:45:44 -06:00
|
|
|
|
|
|
|
|
@Test
|
2020-03-28 23:15:45 -06:00
|
|
|
public void testHeading() {
|
2020-04-08 10:27:33 -06:00
|
|
|
// TESTS
|
2020-03-29 00:10:06 -06:00
|
|
|
assertEquals(-90, gyroPigeon.getHeading(270), 0.0001);
|
|
|
|
|
assertEquals(-45, gyroPigeon.getHeading(315), 0.0001);
|
|
|
|
|
assertEquals(-60, gyroPigeon.getHeading(-60), 0.0001);
|
|
|
|
|
assertEquals(30, gyroPigeon.getHeading(30), 0.0001);
|
|
|
|
|
assertEquals(0, gyroPigeon.getHeading(0), 0.0001);
|
|
|
|
|
assertEquals(180, gyroPigeon.getHeading(180), 0.0001);
|
|
|
|
|
assertEquals(-180, gyroPigeon.getHeading(-180), 0.0001);
|
|
|
|
|
assertEquals(97, gyroPigeon.getHeading(1537), 0.0001);
|
|
|
|
|
assertEquals(99, gyroPigeon.getHeading(-2781), 0.0001);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
2020-04-08 10:27:33 -06:00
|
|
|
public void testYawPitchRoll() {
|
|
|
|
|
// TEST 1
|
2020-03-29 00:10:06 -06:00
|
|
|
assertEquals(0, gyroPigeon.getAngle(), 0.0001);
|
|
|
|
|
|
2020-04-08 10:27:33 -06:00
|
|
|
// TEST 2
|
2020-03-29 00:10:06 -06:00
|
|
|
pigeon.setYaw(40);
|
|
|
|
|
assertEquals(40, gyroPigeon.getAngle(), 0.0001);
|
|
|
|
|
|
2020-04-08 10:27:33 -06:00
|
|
|
// TEST 3
|
2020-03-29 00:10:06 -06:00
|
|
|
gyroPigeon.reset();
|
|
|
|
|
assertEquals(0, gyroPigeon.getAngle(), 0.0001);
|
|
|
|
|
|
2020-04-08 10:27:33 -06:00
|
|
|
// TEST 4
|
2020-03-29 00:10:06 -06:00
|
|
|
pigeon.setYaw(-1457);
|
|
|
|
|
pigeon.setCurrentPitch(100);
|
|
|
|
|
pigeon.setCurrentRoll(100);
|
|
|
|
|
assertEquals(-1457, gyroPigeon.getAngle(), 0.0001);
|
|
|
|
|
assertEquals(90, gyroPigeon.getPitch(), 0.0001);
|
|
|
|
|
assertEquals(90, gyroPigeon.getRoll(), 0.0001);
|
|
|
|
|
|
2020-04-08 10:27:33 -06:00
|
|
|
// TEST 5
|
2020-03-29 00:10:06 -06:00
|
|
|
pigeon.setCurrentPitch(45);
|
|
|
|
|
pigeon.setCurrentRoll(45);
|
|
|
|
|
assertEquals(45, gyroPigeon.getPitch(), 0.0001);
|
|
|
|
|
assertEquals(45, gyroPigeon.getRoll(), 0.0001);
|
|
|
|
|
|
2020-04-08 10:27:33 -06:00
|
|
|
// TEST 6
|
2020-03-29 00:10:06 -06:00
|
|
|
pigeon.setCurrentPitch(0);
|
|
|
|
|
pigeon.setCurrentRoll(0);
|
|
|
|
|
assertEquals(0, gyroPigeon.getPitch(), 0.0001);
|
|
|
|
|
assertEquals(0, gyroPigeon.getRoll(), 0.0001);
|
|
|
|
|
|
2020-04-08 10:27:33 -06:00
|
|
|
// TEST 7
|
2020-03-29 00:10:06 -06:00
|
|
|
pigeon.setCurrentPitch(-60);
|
|
|
|
|
pigeon.setCurrentRoll(-60);
|
|
|
|
|
assertEquals(-60, gyroPigeon.getPitch(), 0.0001);
|
|
|
|
|
assertEquals(-60, gyroPigeon.getRoll(), 0.0001);
|
|
|
|
|
|
2020-04-08 10:27:33 -06:00
|
|
|
// TEST 8
|
2020-03-29 00:10:06 -06:00
|
|
|
pigeon.setCurrentPitch(-90);
|
|
|
|
|
pigeon.setCurrentRoll(-90);
|
|
|
|
|
assertEquals(-90, gyroPigeon.getPitch(), 0.0001);
|
|
|
|
|
assertEquals(-90, gyroPigeon.getRoll(), 0.0001);
|
|
|
|
|
|
2020-04-08 10:27:33 -06:00
|
|
|
// TEST 9
|
2020-03-29 00:10:06 -06:00
|
|
|
pigeon.setCurrentPitch(-100);
|
|
|
|
|
pigeon.setCurrentRoll(-100);
|
|
|
|
|
assertEquals(-90, gyroPigeon.getPitch(), 0.0001);
|
|
|
|
|
assertEquals(-90, gyroPigeon.getRoll(), 0.0001);
|
2020-03-28 22:45:44 -06:00
|
|
|
}
|
2020-04-08 10:27:33 -06:00
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testRates() {
|
|
|
|
|
// SETUP
|
|
|
|
|
pigeon.setYaw(0);
|
|
|
|
|
gyroPigeon.updatePigeonDeltas();
|
|
|
|
|
|
|
|
|
|
// TEST 1
|
|
|
|
|
robotTime.m_deltaTime = 5;
|
|
|
|
|
pigeon.setYaw(0);
|
|
|
|
|
gyroPigeon.updatePigeonDeltas();
|
|
|
|
|
assertEquals(0, gyroPigeon.getRate(), 1);
|
|
|
|
|
|
|
|
|
|
// TEST 2
|
|
|
|
|
robotTime.m_deltaTime = 5;
|
|
|
|
|
pigeon.setYaw(90);
|
|
|
|
|
gyroPigeon.updatePigeonDeltas();
|
|
|
|
|
assertEquals(18000, gyroPigeon.getRate(), 0.001);
|
|
|
|
|
|
|
|
|
|
// TEST 3
|
|
|
|
|
robotTime.m_deltaTime = 5;
|
|
|
|
|
pigeon.setYaw(90);
|
|
|
|
|
gyroPigeon.updatePigeonDeltas();
|
|
|
|
|
assertEquals(0, gyroPigeon.getRate(), 0.001);
|
|
|
|
|
|
|
|
|
|
// TEST 4
|
|
|
|
|
robotTime.m_deltaTime = 3;
|
|
|
|
|
pigeon.setYaw(-30);
|
|
|
|
|
gyroPigeon.updatePigeonDeltas();
|
|
|
|
|
assertEquals(-40000, gyroPigeon.getRate(), 0.001);
|
|
|
|
|
|
|
|
|
|
// TEST 5
|
|
|
|
|
robotTime.m_deltaTime = 6;
|
|
|
|
|
pigeon.setYaw(690);
|
|
|
|
|
gyroPigeon.updatePigeonDeltas();
|
|
|
|
|
assertEquals(120000, gyroPigeon.getRate(), 0.001);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void wait(int millis) {
|
|
|
|
|
try {
|
|
|
|
|
Thread.sleep(millis);
|
|
|
|
|
} catch (Exception e) {}
|
|
|
|
|
}
|
2020-03-28 22:45:44 -06:00
|
|
|
}
|