From 18700f96cfa3156e9775abf75f614fcab5834331 Mon Sep 17 00:00:00 2001 From: ProfessorAtomicManiac <59379639+ProfessorAtomicManiac@users.noreply.github.com> Date: Sun, 23 Jul 2023 10:42:39 -0700 Subject: [PATCH 01/14] update Phoenix library --- vendordeps/{Phoenix.json => Phoenix6.json} | 197 ++++++--------------- 1 file changed, 53 insertions(+), 144 deletions(-) rename vendordeps/{Phoenix.json => Phoenix6.json} (61%) diff --git a/vendordeps/Phoenix.json b/vendordeps/Phoenix6.json similarity index 61% rename from vendordeps/Phoenix.json rename to vendordeps/Phoenix6.json index 282d5367..e51ec442 100644 --- a/vendordeps/Phoenix.json +++ b/vendordeps/Phoenix6.json @@ -1,56 +1,25 @@ { - "fileName": "Phoenix.json", - "name": "CTRE-Phoenix (v5)", - "version": "5.30.4+23.0.12", + "fileName": "Phoenix6.json", + "name": "CTRE-Phoenix (v6)", + "version": "23.2.1", "frcYear": 2023, - "uuid": "ab676553-b602-441f-a38d-f1296eff6537", + "uuid": "e995de00-2c64-4df5-8831-c1441420ff19", "mavenUrls": [ "https://maven.ctr-electronics.com/release/" ], - "jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix/Phoenix5-frc2023-latest.json", + "jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2023-latest.json", "javaDependencies": [ { - "groupId": "com.ctre.phoenix", - "artifactId": "api-java", - "version": "5.30.4" - }, - { - "groupId": "com.ctre.phoenix", + "groupId": "com.ctre.phoenix6", "artifactId": "wpiapi-java", - "version": "5.30.4" + "version": "23.2.1" } ], "jniDependencies": [ { - "groupId": "com.ctre.phoenix", - "artifactId": "cci", - "version": "5.30.4", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix.sim", - "artifactId": "cci-sim", - "version": "5.30.4", - "isJar": false, - "skipInvalidPlatforms": true, - "validPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenixpro", + "groupId": "com.ctre.phoenix6", "artifactId": "tools", - "version": "23.0.12", + "version": "23.2.1", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ @@ -61,9 +30,9 @@ "simMode": "hwsim" }, { - "groupId": "com.ctre.phoenixpro.sim", + "groupId": "com.ctre.phoenix6.sim", "artifactId": "tools-sim", - "version": "23.0.12", + "version": "23.2.1", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ @@ -74,9 +43,9 @@ "simMode": "swsim" }, { - "groupId": "com.ctre.phoenixpro.sim", + "groupId": "com.ctre.phoenix6.sim", "artifactId": "simTalonSRX", - "version": "23.0.12", + "version": "23.2.1", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ @@ -87,9 +56,9 @@ "simMode": "swsim" }, { - "groupId": "com.ctre.phoenixpro.sim", + "groupId": "com.ctre.phoenix6.sim", "artifactId": "simTalonFX", - "version": "23.0.12", + "version": "23.2.1", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ @@ -100,9 +69,9 @@ "simMode": "swsim" }, { - "groupId": "com.ctre.phoenixpro.sim", + "groupId": "com.ctre.phoenix6.sim", "artifactId": "simVictorSPX", - "version": "23.0.12", + "version": "23.2.1", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ @@ -113,9 +82,9 @@ "simMode": "swsim" }, { - "groupId": "com.ctre.phoenixpro.sim", + "groupId": "com.ctre.phoenix6.sim", "artifactId": "simPigeonIMU", - "version": "23.0.12", + "version": "23.2.1", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ @@ -126,9 +95,9 @@ "simMode": "swsim" }, { - "groupId": "com.ctre.phoenixpro.sim", + "groupId": "com.ctre.phoenix6.sim", "artifactId": "simCANCoder", - "version": "23.0.12", + "version": "23.2.1", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ @@ -139,9 +108,9 @@ "simMode": "swsim" }, { - "groupId": "com.ctre.phoenixpro.sim", + "groupId": "com.ctre.phoenix6.sim", "artifactId": "simProTalonFX", - "version": "23.0.12", + "version": "23.2.1", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ @@ -152,9 +121,9 @@ "simMode": "swsim" }, { - "groupId": "com.ctre.phoenixpro.sim", + "groupId": "com.ctre.phoenix6.sim", "artifactId": "simProCANcoder", - "version": "23.0.12", + "version": "23.2.1", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ @@ -165,9 +134,9 @@ "simMode": "swsim" }, { - "groupId": "com.ctre.phoenixpro.sim", + "groupId": "com.ctre.phoenix6.sim", "artifactId": "simProPigeon2", - "version": "23.0.12", + "version": "23.2.1", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ @@ -180,25 +149,10 @@ ], "cppDependencies": [ { - "groupId": "com.ctre.phoenix", + "groupId": "com.ctre.phoenix6", "artifactId": "wpiapi-cpp", - "version": "5.30.4", - "libName": "CTRE_Phoenix_WPI", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenix", - "artifactId": "api-cpp", - "version": "5.30.4", - "libName": "CTRE_Phoenix", + "version": "23.2.1", + "libName": "CTRE_Phoenix6_WPI", "headerClassifier": "headers", "sharedLibrary": true, "skipInvalidPlatforms": true, @@ -210,24 +164,9 @@ "simMode": "hwsim" }, { - "groupId": "com.ctre.phoenix", - "artifactId": "cci", - "version": "5.30.4", - "libName": "CTRE_PhoenixCCI", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "linuxathena" - ], - "simMode": "hwsim" - }, - { - "groupId": "com.ctre.phoenixpro", + "groupId": "com.ctre.phoenix6", "artifactId": "tools", - "version": "23.0.12", + "version": "23.2.1", "libName": "CTRE_PhoenixTools", "headerClassifier": "headers", "sharedLibrary": true, @@ -240,40 +179,10 @@ "simMode": "hwsim" }, { - "groupId": "com.ctre.phoenix.sim", + "groupId": "com.ctre.phoenix6.sim", "artifactId": "wpiapi-cpp-sim", - "version": "5.30.4", - "libName": "CTRE_Phoenix_WPISim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix.sim", - "artifactId": "api-cpp-sim", - "version": "5.30.4", - "libName": "CTRE_PhoenixSim", - "headerClassifier": "headers", - "sharedLibrary": true, - "skipInvalidPlatforms": true, - "binaryPlatforms": [ - "windowsx86-64", - "linuxx86-64", - "osxuniversal" - ], - "simMode": "swsim" - }, - { - "groupId": "com.ctre.phoenix.sim", - "artifactId": "cci-sim", - "version": "5.30.4", - "libName": "CTRE_PhoenixCCISim", + "version": "23.2.1", + "libName": "CTRE_Phoenix6_WPISim", "headerClassifier": "headers", "sharedLibrary": true, "skipInvalidPlatforms": true, @@ -285,9 +194,9 @@ "simMode": "swsim" }, { - "groupId": "com.ctre.phoenixpro.sim", + "groupId": "com.ctre.phoenix6.sim", "artifactId": "tools-sim", - "version": "23.0.12", + "version": "23.2.1", "libName": "CTRE_PhoenixTools_Sim", "headerClassifier": "headers", "sharedLibrary": true, @@ -300,9 +209,9 @@ "simMode": "swsim" }, { - "groupId": "com.ctre.phoenixpro.sim", + "groupId": "com.ctre.phoenix6.sim", "artifactId": "simTalonSRX", - "version": "23.0.12", + "version": "23.2.1", "libName": "CTRE_SimTalonSRX", "headerClassifier": "headers", "sharedLibrary": true, @@ -315,9 +224,9 @@ "simMode": "swsim" }, { - "groupId": "com.ctre.phoenixpro.sim", + "groupId": "com.ctre.phoenix6.sim", "artifactId": "simTalonFX", - "version": "23.0.12", + "version": "23.2.1", "libName": "CTRE_SimTalonFX", "headerClassifier": "headers", "sharedLibrary": true, @@ -330,9 +239,9 @@ "simMode": "swsim" }, { - "groupId": "com.ctre.phoenixpro.sim", + "groupId": "com.ctre.phoenix6.sim", "artifactId": "simVictorSPX", - "version": "23.0.12", + "version": "23.2.1", "libName": "CTRE_SimVictorSPX", "headerClassifier": "headers", "sharedLibrary": true, @@ -345,9 +254,9 @@ "simMode": "swsim" }, { - "groupId": "com.ctre.phoenixpro.sim", + "groupId": "com.ctre.phoenix6.sim", "artifactId": "simPigeonIMU", - "version": "23.0.12", + "version": "23.2.1", "libName": "CTRE_SimPigeonIMU", "headerClassifier": "headers", "sharedLibrary": true, @@ -360,9 +269,9 @@ "simMode": "swsim" }, { - "groupId": "com.ctre.phoenixpro.sim", + "groupId": "com.ctre.phoenix6.sim", "artifactId": "simCANCoder", - "version": "23.0.12", + "version": "23.2.1", "libName": "CTRE_SimCANCoder", "headerClassifier": "headers", "sharedLibrary": true, @@ -375,9 +284,9 @@ "simMode": "swsim" }, { - "groupId": "com.ctre.phoenixpro.sim", + "groupId": "com.ctre.phoenix6.sim", "artifactId": "simProTalonFX", - "version": "23.0.12", + "version": "23.2.1", "libName": "CTRE_SimProTalonFX", "headerClassifier": "headers", "sharedLibrary": true, @@ -390,9 +299,9 @@ "simMode": "swsim" }, { - "groupId": "com.ctre.phoenixpro.sim", + "groupId": "com.ctre.phoenix6.sim", "artifactId": "simProCANcoder", - "version": "23.0.12", + "version": "23.2.1", "libName": "CTRE_SimProCANcoder", "headerClassifier": "headers", "sharedLibrary": true, @@ -405,9 +314,9 @@ "simMode": "swsim" }, { - "groupId": "com.ctre.phoenixpro.sim", + "groupId": "com.ctre.phoenix6.sim", "artifactId": "simProPigeon2", - "version": "23.0.12", + "version": "23.2.1", "libName": "CTRE_SimProPigeon2", "headerClassifier": "headers", "sharedLibrary": true, From a98ca8bcee74fe8726988d06a5770849793d2c31 Mon Sep 17 00:00:00 2001 From: ProfessorAtomicManiac <59379639+ProfessorAtomicManiac@users.noreply.github.com> Date: Sun, 23 Jul 2023 10:56:01 -0700 Subject: [PATCH 02/14] Update ErrorCodeAnswer --- .../java/org/carlmontrobotics/lib199/ErrorCodeAnswer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/carlmontrobotics/lib199/ErrorCodeAnswer.java b/src/main/java/org/carlmontrobotics/lib199/ErrorCodeAnswer.java index c1365989..49867208 100644 --- a/src/main/java/org/carlmontrobotics/lib199/ErrorCodeAnswer.java +++ b/src/main/java/org/carlmontrobotics/lib199/ErrorCodeAnswer.java @@ -1,6 +1,6 @@ package org.carlmontrobotics.lib199; -import com.ctre.phoenix.ErrorCode; +import com.ctre.phoenix6.StatusCode; import org.mockito.internal.stubbing.defaultanswers.ReturnsSmartNulls; import org.mockito.invocation.InvocationOnMock; @@ -11,7 +11,7 @@ public class ErrorCodeAnswer extends ReturnsSmartNulls { @Override public Object answer(InvocationOnMock invocation) throws Throwable { - return invocation.getMethod().getReturnType().equals(ErrorCode.class) ? ErrorCode.OK : super.answer(invocation); + return invocation.getMethod().getReturnType().equals(StatusCode.class) ? StatusCode.OK : super.answer(invocation); } } \ No newline at end of file From da6aceffad870bb73f19db0ba86e30433c203caa Mon Sep 17 00:00:00 2001 From: ProfessorAtomicManiac <59379639+ProfessorAtomicManiac@users.noreply.github.com> Date: Sun, 23 Jul 2023 11:50:40 -0700 Subject: [PATCH 03/14] removal of TalonSRX and VictorSPX --- .../lib199/sim/MockPhoenixController.java | 63 --------- .../lib199/sim/MockTalonSRX.java | 20 --- .../lib199/sim/MockVictorSPX.java | 19 --- .../lib199/sim/MockPheonixControllerTest.java | 126 ------------------ .../lib199/sim/MockTalonSRXTest.java | 12 -- .../lib199/sim/MockVictorSPXTest.java | 12 -- 6 files changed, 252 deletions(-) delete mode 100644 src/main/java/org/carlmontrobotics/lib199/sim/MockPhoenixController.java delete mode 100644 src/main/java/org/carlmontrobotics/lib199/sim/MockTalonSRX.java delete mode 100644 src/main/java/org/carlmontrobotics/lib199/sim/MockVictorSPX.java delete mode 100644 src/test/java/org/carlmontrobotics/lib199/sim/MockPheonixControllerTest.java delete mode 100644 src/test/java/org/carlmontrobotics/lib199/sim/MockTalonSRXTest.java delete mode 100644 src/test/java/org/carlmontrobotics/lib199/sim/MockVictorSPXTest.java diff --git a/src/main/java/org/carlmontrobotics/lib199/sim/MockPhoenixController.java b/src/main/java/org/carlmontrobotics/lib199/sim/MockPhoenixController.java deleted file mode 100644 index af092a76..00000000 --- a/src/main/java/org/carlmontrobotics/lib199/sim/MockPhoenixController.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.carlmontrobotics.lib199.sim; - -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.CopyOnWriteArrayList; - -import com.ctre.phoenix.motorcontrol.ControlMode; -import com.ctre.phoenix.motorcontrol.IMotorController; - -import edu.wpi.first.wpilibj.motorcontrol.PWMMotorController; - -abstract class MockPhoenixController implements AutoCloseable { - private final int portPWM; - private boolean isInverted; - // Assign the CAN port to a PWM port so it works with the simulator. Not a fan of this solution though - // CAN ports should be separate from PWM ports - protected PWMMotorController motorPWM; - // Since we need to keep a record of all the motor's followers - protected static ConcurrentHashMap> followMap = new ConcurrentHashMap<>(); - - public MockPhoenixController(int portPWM) { - this.portPWM = portPWM; - isInverted = false; - } - - public void set(double speed) { - speed = (getInverted() ? -1.0 : 1.0) * speed; - motorPWM.set(speed); - if (followMap.containsKey(getDeviceID())) { - for (PWMMotorController motor : followMap.get(getDeviceID())) motor.set(speed); - } - } - - public double get() { - return motorPWM.get(); - } - - public void follow(IMotorController leader) { - if (!followMap.containsKey(leader.getDeviceID())) { - CopyOnWriteArrayList arr = new CopyOnWriteArrayList(); - arr.add(motorPWM); - followMap.put(leader.getDeviceID(), arr); - } else { - followMap.get(leader.getDeviceID()).add(motorPWM); - } - } - - public void setInverted(boolean invert) { - isInverted = invert; - } - - public boolean getInverted() { - return isInverted; - } - - public int getDeviceID() { return portPWM; } - public ControlMode getControlMode() { return ControlMode.PercentOutput; } - - @Override - public void close() { - motorPWM.close(); - followMap.values().forEach(followList -> followList.remove(motorPWM)); - } -} diff --git a/src/main/java/org/carlmontrobotics/lib199/sim/MockTalonSRX.java b/src/main/java/org/carlmontrobotics/lib199/sim/MockTalonSRX.java deleted file mode 100644 index 991bfb47..00000000 --- a/src/main/java/org/carlmontrobotics/lib199/sim/MockTalonSRX.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.carlmontrobotics.lib199.sim; - -import com.ctre.phoenix.motorcontrol.can.WPI_TalonSRX; - -import org.carlmontrobotics.lib199.ErrorCodeAnswer; -import org.carlmontrobotics.lib199.Mocks; - -import edu.wpi.first.wpilibj.motorcontrol.Talon; - -public class MockTalonSRX extends MockPhoenixController { - - public MockTalonSRX(int portPWM) { - super(portPWM); - motorPWM = new Talon(portPWM); - } - - public static WPI_TalonSRX createMockTalonSRX(int portPWM) { - return Mocks.createMock(WPI_TalonSRX.class, new MockTalonSRX(portPWM), new ErrorCodeAnswer(), AutoCloseable.class); - } -} \ No newline at end of file diff --git a/src/main/java/org/carlmontrobotics/lib199/sim/MockVictorSPX.java b/src/main/java/org/carlmontrobotics/lib199/sim/MockVictorSPX.java deleted file mode 100644 index bb59d10d..00000000 --- a/src/main/java/org/carlmontrobotics/lib199/sim/MockVictorSPX.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.carlmontrobotics.lib199.sim; - -import com.ctre.phoenix.motorcontrol.can.WPI_VictorSPX; - -import org.carlmontrobotics.lib199.ErrorCodeAnswer; -import org.carlmontrobotics.lib199.Mocks; - -import edu.wpi.first.wpilibj.motorcontrol.VictorSP; - -public class MockVictorSPX extends MockPhoenixController { - public MockVictorSPX(int portPWM) { - super(portPWM); - motorPWM = new VictorSP(portPWM); - } - - public static WPI_VictorSPX createMockVictorSPX(int portPWM) { - return Mocks.createMock(WPI_VictorSPX.class, new MockVictorSPX(portPWM), new ErrorCodeAnswer(), AutoCloseable.class); - } -} diff --git a/src/test/java/org/carlmontrobotics/lib199/sim/MockPheonixControllerTest.java b/src/test/java/org/carlmontrobotics/lib199/sim/MockPheonixControllerTest.java deleted file mode 100644 index 717580b2..00000000 --- a/src/test/java/org/carlmontrobotics/lib199/sim/MockPheonixControllerTest.java +++ /dev/null @@ -1,126 +0,0 @@ -package org.carlmontrobotics.lib199.sim; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import com.ctre.phoenix.motorcontrol.can.BaseMotorController; - -import org.carlmontrobotics.lib199.Mocks; -import org.carlmontrobotics.lib199.testUtils.SafelyClosable; -import org.carlmontrobotics.lib199.testUtils.SimDeviceTestRule; -import org.junit.ClassRule; -import org.junit.Rule; -import org.junit.Test; -import org.mockito.Mockito; - -import edu.wpi.first.wpilibj.motorcontrol.MotorController; -import edu.wpi.first.wpilibj.simulation.PWMSim; - -public abstract class MockPheonixControllerTest { - - @ClassRule - public static SimDeviceTestRule.Class simClassRule = new SimDeviceTestRule.Class(); - @Rule - public SimDeviceTestRule.Test simTestRule = new SimDeviceTestRule.Test(); - - protected abstract BaseMotorController createController(int portPWM); - - private SafelyClosable createSafeController(int portPWM) { - BaseMotorController controller = createController(portPWM); - // Turn the controller into a SafelyClosable that calls the defined close() method (if available) - return (SafelyClosable)Mocks.createMock( - // Extend the runtime class type (or superclass if mocked) - (Class)(Mockito.mockingDetails(controller).isMock() ? controller.getClass().getSuperclass() : controller.getClass()), - // Implement all methods with the implementation defined in controller - controller, - // Return null for any methods not defined in the implementation (none of them) - false, - // Implement SafelyClosable - SafelyClosable.class); - } - - @Test - public void testDeviceId() { - assertTestDeviceId(0); - assertTestDeviceId(1); - assertTestDeviceId(2); - } - - private void assertTestDeviceId(int port) { - PWMSim sim = new PWMSim(port); - sim.resetData(); - assertFalse(sim.getInitialized()); - try(SafelyClosable controller = createSafeController(port)) { - BaseMotorController motor = (BaseMotorController)controller; - assertTrue(sim.getInitialized()); - assertEquals(port, motor.getDeviceID()); - } - sim.resetData(); - assertFalse(sim.getInitialized()); - } - - @Test - public void testInverted() { - withControllers((controller, sController, sim) -> { - controller.setInverted(true); - assertTrue(controller.getInverted()); - controller.setInverted(false); - assertFalse(controller.getInverted()); - }); - } - - @Test - public void testSet() { - withControllers((controller, sController, sim) -> { - assertSet(1, sController, sim); - assertSet(0.5, sController, sim); - assertSet(0, sController, sim); - assertSet(-0.5, sController, sim); - assertSet(-1, sController, sim); - }); - } - - private void assertSet(double speed, MotorController controller, PWMSim sim) { - assertSet(speed, controller, controller, sim); - } - - private void assertSet(double speed, MotorController setController, MotorController getController, PWMSim sim) { - setController.set(speed); - assertEquals(speed, getController.get(), 0.01); - assertEquals(speed, sim.getSpeed(), 0.01); - } - - @Test - public void testFollow() { - withControllers((mController, msController, mSim) -> - withController(mController.getDeviceID()+1, (sController, ssController, sSim) -> { - sController.follow(mController); - assertSet(1, msController, ssController, sSim); - assertSet(0.5, msController, ssController, sSim); - assertSet(0, msController, ssController, sSim); - assertSet(-0.5, msController, ssController, sSim); - assertSet(-1, msController, ssController, sSim); - }) - ); - } - - private void withControllers(ControllerTest func) { - withController(0, func); - withController(1, func); - withController(2, func); - } - - private void withController(int port, ControllerTest func) { - try(SafelyClosable controller = createSafeController(port)) { - PWMSim sim = new PWMSim(port); - assertTrue(sim.getInitialized()); - func.test((BaseMotorController)controller, (MotorController)controller, sim); - } - } - - private interface ControllerTest { - public void test(BaseMotorController controller, MotorController sController, PWMSim sim); - } - -} diff --git a/src/test/java/org/carlmontrobotics/lib199/sim/MockTalonSRXTest.java b/src/test/java/org/carlmontrobotics/lib199/sim/MockTalonSRXTest.java deleted file mode 100644 index ac1c08cd..00000000 --- a/src/test/java/org/carlmontrobotics/lib199/sim/MockTalonSRXTest.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.carlmontrobotics.lib199.sim; - -import com.ctre.phoenix.motorcontrol.can.BaseMotorController; - -public class MockTalonSRXTest extends MockPheonixControllerTest { - - @Override - protected BaseMotorController createController(int portPWM) { - return MockTalonSRX.createMockTalonSRX(portPWM); - } - -} diff --git a/src/test/java/org/carlmontrobotics/lib199/sim/MockVictorSPXTest.java b/src/test/java/org/carlmontrobotics/lib199/sim/MockVictorSPXTest.java deleted file mode 100644 index b6fdd307..00000000 --- a/src/test/java/org/carlmontrobotics/lib199/sim/MockVictorSPXTest.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.carlmontrobotics.lib199.sim; - -import com.ctre.phoenix.motorcontrol.can.BaseMotorController; - -public class MockVictorSPXTest extends MockPheonixControllerTest { - - @Override - protected BaseMotorController createController(int portPWM) { - return MockVictorSPX.createMockVictorSPX(portPWM); - } - -} From fb8d4cf051ecf83eb2bec6ea76902dd4bfe09862 Mon Sep 17 00:00:00 2001 From: ProfessorAtomicManiac <59379639+ProfessorAtomicManiac@users.noreply.github.com> Date: Sun, 23 Jul 2023 11:55:29 -0700 Subject: [PATCH 04/14] Error code answer test commented out --- .../lib199/ErrorCodeAnswerTest.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/test/java/org/carlmontrobotics/lib199/ErrorCodeAnswerTest.java b/src/test/java/org/carlmontrobotics/lib199/ErrorCodeAnswerTest.java index 89fce5c7..5016fe37 100644 --- a/src/test/java/org/carlmontrobotics/lib199/ErrorCodeAnswerTest.java +++ b/src/test/java/org/carlmontrobotics/lib199/ErrorCodeAnswerTest.java @@ -1,23 +1,21 @@ package org.carlmontrobotics.lib199; -import static org.junit.Assert.assertEquals; - -import com.ctre.phoenix.ErrorCode; -import com.ctre.phoenix.motorcontrol.can.WPI_TalonSRX; - import org.junit.Test; public class ErrorCodeAnswerTest { @Test public void testResponses() throws Exception { - WPI_TalonSRX talon = Mocks.mock(WPI_TalonSRX.class, new ErrorCodeAnswer()); + // Currently ErrorCodeAnswer is not used since we no longer mock phoenix motors + + // Here is the original test for when we did + // WPI_TalonSRX talon = Mocks.mock(WPI_TalonSRX.class, new ErrorCodeAnswer()); - // Check that primative types return "null" - assertEquals(0, talon.get(), 0.01); + // // Check that primative types return "null" + // assertEquals(0, talon.get(), 0.01); - // Check that ErrorCode functions return ErrorCode.OK - assertEquals(ErrorCode.OK, talon.getLastError()); + // // Check that ErrorCode functions return ErrorCode.OK + // assertEquals(ErrorCode.OK, talon.getLastError()); } } From 15fcdcdab95e891b7713bfc0b9382714ded3d798 Mon Sep 17 00:00:00 2001 From: ProfessorAtomicManiac <59379639+ProfessorAtomicManiac@users.noreply.github.com> Date: Sun, 23 Jul 2023 11:58:44 -0700 Subject: [PATCH 05/14] use StatusCode instead of ErrorCode in MotorErrors --- .../java/org/carlmontrobotics/lib199/MotorErrors.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/carlmontrobotics/lib199/MotorErrors.java b/src/main/java/org/carlmontrobotics/lib199/MotorErrors.java index afc02146..66600c01 100644 --- a/src/main/java/org/carlmontrobotics/lib199/MotorErrors.java +++ b/src/main/java/org/carlmontrobotics/lib199/MotorErrors.java @@ -3,7 +3,7 @@ import java.util.Arrays; import java.util.concurrent.ConcurrentHashMap; -import com.ctre.phoenix.ErrorCode; +import com.ctre.phoenix6.StatusCode; import com.revrobotics.CANSparkMax; import com.revrobotics.CANSparkMax.FaultID; import com.revrobotics.REVLibError; @@ -25,16 +25,16 @@ public final class MotorErrors { Lib199Subsystem.registerAsyncPeriodic(MotorErrors::printSparkMaxErrorMessages); } - public static void reportError(ErrorCode error) { - reportError("CTRE", error, ErrorCode.OK); + public static void reportError(StatusCode error) { + reportError("CTRE", error, StatusCode.OK); } public static void reportError(REVLibError error) { reportError("REV Robotics", error, REVLibError.kOk); } - public static void reportErrors(ErrorCode... errors) { - for(ErrorCode error: errors) { + public static void reportErrors(StatusCode... errors) { + for(StatusCode error: errors) { reportError(error); } } From e76625ac05be8984dfbe7768747aeed0b01c1197 Mon Sep 17 00:00:00 2001 From: ProfessorAtomicManiac <59379639+ProfessorAtomicManiac@users.noreply.github.com> Date: Sun, 23 Jul 2023 12:42:42 -0700 Subject: [PATCH 06/14] remove victors from motorcontrollerfactory --- .../lib199/MotorControllerFactory.java | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java b/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java index 1aeb5c8f..59046364 100644 --- a/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java +++ b/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java @@ -31,24 +31,6 @@ * Add your docs here. */ public class MotorControllerFactory { - public static WPI_VictorSPX createVictor(int port) { - WPI_VictorSPX victor; - if (RobotBase.isReal()) { - victor = new WPI_VictorSPX(port); - } else { - victor = MockVictorSPX.createMockVictorSPX(port); - } - - // Put all configurations for the victor motor controllers in here. - MotorErrors.reportError(victor.configNominalOutputForward(0, 10)); - MotorErrors.reportError(victor.configNominalOutputReverse(0, 10)); - MotorErrors.reportError(victor.configPeakOutputForward(1, 10)); - MotorErrors.reportError(victor.configPeakOutputReverse(-1, 10)); - MotorErrors.reportError(victor.configNeutralDeadband(0.001, 10)); - victor.setNeutralMode(NeutralMode.Brake); - - return victor; - } public static WPI_TalonSRX createTalon(int id) { WPI_TalonSRX talon; From fea91a1daa5c6be3829d0d88d0905b0582031b6e Mon Sep 17 00:00:00 2001 From: ProfessorAtomicManiac <59379639+ProfessorAtomicManiac@users.noreply.github.com> Date: Sun, 23 Jul 2023 12:43:48 -0700 Subject: [PATCH 07/14] use TalonFX instead of TalonSRX in motorcontrollerfactory --- .../lib199/MotorControllerFactory.java | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java b/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java index 59046364..f8b68b4b 100644 --- a/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java +++ b/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java @@ -8,9 +8,8 @@ package org.carlmontrobotics.lib199; import com.ctre.phoenix.motorcontrol.NeutralMode; -import com.ctre.phoenix.motorcontrol.can.WPI_TalonSRX; -import com.ctre.phoenix.motorcontrol.can.WPI_VictorSPX; import com.ctre.phoenix.sensors.CANCoder; +import com.ctre.phoenix6.hardware.TalonFX; import com.revrobotics.CANSparkMax; import com.revrobotics.CANSparkMax.ExternalFollower; import com.revrobotics.CANSparkMax.IdleMode; @@ -18,8 +17,6 @@ import com.revrobotics.SparkMaxPIDController; import org.carlmontrobotics.lib199.sim.MockSparkMax; -import org.carlmontrobotics.lib199.sim.MockTalonSRX; -import org.carlmontrobotics.lib199.sim.MockVictorSPX; import org.carlmontrobotics.lib199.sim.MockedCANCoder; import edu.wpi.first.cameraserver.CameraServer; @@ -32,13 +29,8 @@ */ public class MotorControllerFactory { - public static WPI_TalonSRX createTalon(int id) { - WPI_TalonSRX talon; - if (RobotBase.isReal()) { - talon = new WPI_TalonSRX(id); - } else { - talon = MockTalonSRX.createMockTalonSRX(id); - } + public static TalonFX createTalon(int id) { + TalonFX talon = new TalonFX(id); // Put all configurations for the talon motor controllers in here. // All values are from last year's code. From 23b8c15ad6a6323435c707084dc8d56fdf5c2fcf Mon Sep 17 00:00:00 2001 From: ProfessorAtomicManiac <59379639+ProfessorAtomicManiac@users.noreply.github.com> Date: Sun, 23 Jul 2023 12:46:38 -0700 Subject: [PATCH 08/14] Nominal output is removed, check feature replacements --- .../org/carlmontrobotics/lib199/MotorControllerFactory.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java b/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java index f8b68b4b..df4c784b 100644 --- a/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java +++ b/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java @@ -34,8 +34,6 @@ public static TalonFX createTalon(int id) { // Put all configurations for the talon motor controllers in here. // All values are from last year's code. - MotorErrors.reportError(talon.configNominalOutputForward(0, 10)); - MotorErrors.reportError(talon.configNominalOutputReverse(0, 10)); MotorErrors.reportError(talon.configPeakOutputForward(1, 10)); MotorErrors.reportError(talon.configPeakOutputReverse(-1, 10)); MotorErrors.reportError(talon.configPeakCurrentLimit(0, 0)); From c8fbeaac65ffd7f62322b4d1634467aa8dd0df8b Mon Sep 17 00:00:00 2001 From: ProfessorAtomicManiac <59379639+ProfessorAtomicManiac@users.noreply.github.com> Date: Sun, 23 Jul 2023 12:57:19 -0700 Subject: [PATCH 09/14] configure motor output configs --- .../lib199/MotorControllerFactory.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java b/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java index df4c784b..5db8f6e6 100644 --- a/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java +++ b/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java @@ -9,7 +9,9 @@ import com.ctre.phoenix.motorcontrol.NeutralMode; import com.ctre.phoenix.sensors.CANCoder; +import com.ctre.phoenix6.configs.MotorOutputConfigs; import com.ctre.phoenix6.hardware.TalonFX; +import com.ctre.phoenix6.signals.NeutralModeValue; import com.revrobotics.CANSparkMax; import com.revrobotics.CANSparkMax.ExternalFollower; import com.revrobotics.CANSparkMax.IdleMode; @@ -34,15 +36,17 @@ public static TalonFX createTalon(int id) { // Put all configurations for the talon motor controllers in here. // All values are from last year's code. - MotorErrors.reportError(talon.configPeakOutputForward(1, 10)); - MotorErrors.reportError(talon.configPeakOutputReverse(-1, 10)); + MotorOutputConfigs motorOutputConfigs = new MotorOutputConfigs(); + motorOutputConfigs.PeakForwardDutyCycle = 1; + motorOutputConfigs.PeakReverseDutyCycle = -1; + motorOutputConfigs.NeutralMode = NeutralModeValue.Brake; + motorOutputConfigs.DutyCycleNeutralDeadband = 0.001; + MotorErrors.reportError(talon.getConfigurator().apply(motorOutputConfigs)); MotorErrors.reportError(talon.configPeakCurrentLimit(0, 0)); MotorErrors.reportError(talon.configPeakCurrentDuration(0, 0)); // 40 Amps is the amp limit of a CIM. lThe PDP has 40 amp circuit breakers, MotorErrors.reportError(talon.configContinuousCurrentLimit(30, 0)); talon.enableCurrentLimit(true); - MotorErrors.reportError(talon.configNeutralDeadband(0.001, 10)); - talon.setNeutralMode(NeutralMode.Brake); return talon; } From ce85f53649d56af93affdcb7ce763976909805a5 Mon Sep 17 00:00:00 2001 From: ProfessorAtomicManiac <59379639+ProfessorAtomicManiac@users.noreply.github.com> Date: Sun, 23 Jul 2023 12:59:41 -0700 Subject: [PATCH 10/14] Added current configs to talon --- .../lib199/MotorControllerFactory.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java b/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java index 5db8f6e6..155ba666 100644 --- a/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java +++ b/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java @@ -7,8 +7,8 @@ package org.carlmontrobotics.lib199; -import com.ctre.phoenix.motorcontrol.NeutralMode; import com.ctre.phoenix.sensors.CANCoder; +import com.ctre.phoenix6.configs.CurrentLimitsConfigs; import com.ctre.phoenix6.configs.MotorOutputConfigs; import com.ctre.phoenix6.hardware.TalonFX; import com.ctre.phoenix6.signals.NeutralModeValue; @@ -42,11 +42,16 @@ public static TalonFX createTalon(int id) { motorOutputConfigs.NeutralMode = NeutralModeValue.Brake; motorOutputConfigs.DutyCycleNeutralDeadband = 0.001; MotorErrors.reportError(talon.getConfigurator().apply(motorOutputConfigs)); - MotorErrors.reportError(talon.configPeakCurrentLimit(0, 0)); - MotorErrors.reportError(talon.configPeakCurrentDuration(0, 0)); + + CurrentLimitsConfigs currentLimits = new CurrentLimitsConfigs(); // 40 Amps is the amp limit of a CIM. lThe PDP has 40 amp circuit breakers, - MotorErrors.reportError(talon.configContinuousCurrentLimit(30, 0)); - talon.enableCurrentLimit(true); + currentLimits.SupplyCurrentLimit = 30; + currentLimits.SupplyCurrentThreshold = 0; + currentLimits.StatorCurrentLimitEnable = true; + // Why is the peak current limit 0 amps? + // MotorErrors.reportError(talon.configPeakCurrentLimit(0, 0)); + // MotorErrors.reportError(talon.configPeakCurrentDuration(0, 0)); + MotorErrors.reportError(talon.getConfigurator().apply(currentLimits)); return talon; } From d724e049ac3b60fdfbb4cc5192367223d72fc610 Mon Sep 17 00:00:00 2001 From: ProfessorAtomicManiac <59379639+ProfessorAtomicManiac@users.noreply.github.com> Date: Sun, 23 Jul 2023 13:00:15 -0700 Subject: [PATCH 11/14] removed victors from test --- .../org/carlmontrobotics/lib199/MotorControllerFactoryTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/org/carlmontrobotics/lib199/MotorControllerFactoryTest.java b/src/test/java/org/carlmontrobotics/lib199/MotorControllerFactoryTest.java index d0791dbf..0a3a8997 100644 --- a/src/test/java/org/carlmontrobotics/lib199/MotorControllerFactoryTest.java +++ b/src/test/java/org/carlmontrobotics/lib199/MotorControllerFactoryTest.java @@ -20,7 +20,6 @@ public class MotorControllerFactoryTest extends ErrStreamTest { public void testCreateNoErrors() throws Exception { // Call close to free PWM ports ((AutoCloseable)MotorControllerFactory.createTalon(0)).close(); - ((AutoCloseable)MotorControllerFactory.createVictor(1)).close(); MotorControllerFactory.createSparkMax(2, MotorConfig.NEO); assertEquals(0, errStream.toByteArray().length); } From 1d6da582b98a458dc22d6201b365fc0862db5e77 Mon Sep 17 00:00:00 2001 From: ProfessorAtomicManiac <59379639+ProfessorAtomicManiac@users.noreply.github.com> Date: Sun, 23 Jul 2023 13:01:25 -0700 Subject: [PATCH 12/14] replaced ErrorCode with StatusCode in MotorErrorsTest --- .../carlmontrobotics/lib199/MotorErrorsTest.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/test/java/org/carlmontrobotics/lib199/MotorErrorsTest.java b/src/test/java/org/carlmontrobotics/lib199/MotorErrorsTest.java index 5f37bb59..c363d98d 100644 --- a/src/test/java/org/carlmontrobotics/lib199/MotorErrorsTest.java +++ b/src/test/java/org/carlmontrobotics/lib199/MotorErrorsTest.java @@ -8,8 +8,8 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicBoolean; -import com.ctre.phoenix.ErrorCode; import com.revrobotics.REVLibError; +import com.ctre.phoenix6.StatusCode; import com.revrobotics.CANSparkMax; import com.revrobotics.CANSparkMax.FaultID; @@ -85,21 +85,21 @@ public int getDeviceId() { public void testOkErrors() { errStream.reset(); // Null Status - MotorErrors.reportError((ErrorCode)null); + MotorErrors.reportError((StatusCode)null); assertEquals(0, errStream.toByteArray().length); MotorErrors.reportError((REVLibError)null); assertEquals(0, errStream.toByteArray().length); - MotorErrors.reportErrors((ErrorCode)null, null); + MotorErrors.reportErrors((StatusCode)null, null); assertEquals(0, errStream.toByteArray().length); MotorErrors.reportErrors((REVLibError)null, null); assertEquals(0, errStream.toByteArray().length); // Ok Status - MotorErrors.reportError(ErrorCode.OK); + MotorErrors.reportError(StatusCode.OK); assertEquals(0, errStream.toByteArray().length); MotorErrors.reportError(REVLibError.kOk); assertEquals(0, errStream.toByteArray().length); - MotorErrors.reportErrors(ErrorCode.OK, ErrorCode.OK); + MotorErrors.reportErrors(StatusCode.OK, StatusCode.OK); assertEquals(0, errStream.toByteArray().length); MotorErrors.reportErrors(REVLibError.kOk, REVLibError.kOk); assertEquals(0, errStream.toByteArray().length); @@ -108,12 +108,12 @@ public void testOkErrors() { @Test public void testOtherErrors() { errStream.reset(); - for(ErrorCode code: ErrorCode.values()) { - if(code != ErrorCode.OK) { + for(StatusCode code: StatusCode.values()) { + if(code != StatusCode.OK) { MotorErrors.reportError(code); assertNotEquals(0, errStream.toByteArray().length); errStream.reset(); - MotorErrors.reportErrors(ErrorCode.OK, code); + MotorErrors.reportErrors(StatusCode.OK, code); assertNotEquals(0, errStream.toByteArray().length); errStream.reset(); } From c0a6b23ce7e4fa6133fbbf4d9cefc3b297da5c48 Mon Sep 17 00:00:00 2001 From: ProfessorAtomicManiac <59379639+ProfessorAtomicManiac@users.noreply.github.com> Date: Sun, 23 Jul 2023 13:14:17 -0700 Subject: [PATCH 13/14] replaced CANCoder with CANcoder (BREAKS SWERVE DRIVETRAIN) --- .../lib199/MotorControllerFactory.java | 8 ++-- .../lib199/SensorFactory.java | 10 ++-- .../lib199/sim/MockedCANCoder.java | 48 ------------------- .../lib199/swerve/SwerveModule.java | 24 ++++++---- 4 files changed, 20 insertions(+), 70 deletions(-) delete mode 100644 src/main/java/org/carlmontrobotics/lib199/sim/MockedCANCoder.java diff --git a/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java b/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java index 155ba666..ae34bc03 100644 --- a/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java +++ b/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java @@ -7,9 +7,9 @@ package org.carlmontrobotics.lib199; -import com.ctre.phoenix.sensors.CANCoder; import com.ctre.phoenix6.configs.CurrentLimitsConfigs; import com.ctre.phoenix6.configs.MotorOutputConfigs; +import com.ctre.phoenix6.hardware.CANcoder; import com.ctre.phoenix6.hardware.TalonFX; import com.ctre.phoenix6.signals.NeutralModeValue; import com.revrobotics.CANSparkMax; @@ -19,7 +19,6 @@ import com.revrobotics.SparkMaxPIDController; import org.carlmontrobotics.lib199.sim.MockSparkMax; -import org.carlmontrobotics.lib199.sim.MockedCANCoder; import edu.wpi.first.cameraserver.CameraServer; import edu.wpi.first.cscore.UsbCamera; @@ -129,9 +128,8 @@ public static CANSparkMax createSparkMax(int id, MotorConfig config) { * @deprecated Use {@link SensorFactory#createCANCoder(int)} instead. */ @Deprecated - public static CANCoder createCANCoder(int port) { - CANCoder canCoder = new CANCoder(port); - if(RobotBase.isSimulation()) new MockedCANCoder(canCoder); + public static CANcoder createCANCoder(int port) { + CANcoder canCoder = new CANcoder(port); return canCoder; } diff --git a/src/main/java/org/carlmontrobotics/lib199/SensorFactory.java b/src/main/java/org/carlmontrobotics/lib199/SensorFactory.java index 7b778844..85820a86 100644 --- a/src/main/java/org/carlmontrobotics/lib199/SensorFactory.java +++ b/src/main/java/org/carlmontrobotics/lib199/SensorFactory.java @@ -1,8 +1,6 @@ package org.carlmontrobotics.lib199; -import org.carlmontrobotics.lib199.sim.MockedCANCoder; - -import com.ctre.phoenix.sensors.CANCoder; +import com.ctre.phoenix6.hardware.CANcoder; import edu.wpi.first.cameraserver.CameraServer; import edu.wpi.first.cscore.UsbCamera; @@ -20,10 +18,8 @@ public class SensorFactory { * @param port The CAN ID of the CANCoder * @return The CANCoder object */ - public static CANCoder createCANCoder(int port) { - CANCoder canCoder = new CANCoder(port); - if (RobotBase.isSimulation()) - new MockedCANCoder(canCoder); + public static CANcoder createCANCoder(int port) { + CANcoder canCoder = new CANcoder(port); return canCoder; } diff --git a/src/main/java/org/carlmontrobotics/lib199/sim/MockedCANCoder.java b/src/main/java/org/carlmontrobotics/lib199/sim/MockedCANCoder.java deleted file mode 100644 index 90d1856c..00000000 --- a/src/main/java/org/carlmontrobotics/lib199/sim/MockedCANCoder.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.carlmontrobotics.lib199.sim; - -import java.util.HashMap; - -import com.ctre.phoenix.sensors.CANCoder; -import com.ctre.phoenix.sensors.CANCoderSimCollection; - -import org.carlmontrobotics.lib199.Lib199Subsystem; - -import edu.wpi.first.hal.SimDevice; -import edu.wpi.first.hal.SimDevice.Direction; -import edu.wpi.first.hal.SimDouble; - -public class MockedCANCoder { - - public static final double kCANCoderCPR = 4096; - - private static final HashMap sims = new HashMap<>(); - - private int port; - private SimDevice device; - private SimDouble position; // Rotations - Continuous - private SimDouble gearing; - private CANCoderSimCollection sim; - - public MockedCANCoder(CANCoder canCoder) { - port = canCoder.getDeviceID(); - device = SimDevice.create("CANCoder", port); - position = device.createDouble("count", Direction.kInput, 0); - gearing = device.createDouble("gearing", Direction.kOutput, 1); - sim = canCoder.getSimCollection(); - Lib199Subsystem.registerAsyncSimulationPeriodic(this::update); - sims.put(port, this); - } - - public void update() { - sim.setRawPosition((int) (position.get() * kCANCoderCPR)); - } - - public void setGearing(double gearing) { - this.gearing.set(gearing); - } - - public static void setGearing(int port, double gearing) { - if(sims.containsKey(port)) sims.get(port).setGearing(gearing); - } - -} \ No newline at end of file diff --git a/src/main/java/org/carlmontrobotics/lib199/swerve/SwerveModule.java b/src/main/java/org/carlmontrobotics/lib199/swerve/SwerveModule.java index 0eabe462..24c007af 100644 --- a/src/main/java/org/carlmontrobotics/lib199/swerve/SwerveModule.java +++ b/src/main/java/org/carlmontrobotics/lib199/swerve/SwerveModule.java @@ -2,8 +2,9 @@ import java.util.function.Supplier; -import com.ctre.phoenix.sensors.AbsoluteSensorRange; -import com.ctre.phoenix.sensors.CANCoder; +import com.ctre.phoenix6.configs.MagnetSensorConfigs; +import com.ctre.phoenix6.hardware.CANcoder; +import com.ctre.phoenix6.signals.AbsoluteSensorRangeValue; import com.revrobotics.CANSparkMax; import com.revrobotics.CANSparkMax.IdleMode; @@ -31,7 +32,7 @@ public enum ModuleType {FL, FR, BL, BR}; private SwerveConfig config; private ModuleType type; private CANSparkMax drive, turn; - private CANCoder turnEncoder; + private CANcoder turnEncoder; private PIDController drivePIDController; private ProfiledPIDController turnPIDController; private TrapezoidProfile.Constraints turnConstraints; @@ -42,7 +43,7 @@ public enum ModuleType {FL, FR, BL, BR}; private SimpleMotorFeedforward forwardSimpleMotorFF, backwardSimpleMotorFF, turnSimpleMotorFeedforward; private double desiredSpeed, lastAngle, maxAchievableTurnVelocityDps, maxAchievableTurnAccelerationMps2, turnToleranceDeg, angleDiff; - public SwerveModule(SwerveConfig config, ModuleType type, CANSparkMax drive, CANSparkMax turn, CANCoder turnEncoder, + public SwerveModule(SwerveConfig config, ModuleType type, CANSparkMax drive, CANSparkMax turn, CANcoder turnEncoder, int arrIndex, Supplier pitchDegSupplier, Supplier rollDegSupplier) { //SmartDashboard.putNumber("Target Angle (deg)", 0.0); this.timer = new Timer(); @@ -106,7 +107,10 @@ public SwerveModule(SwerveConfig config, ModuleType type, CANSparkMax drive, CAN turnPIDController.setTolerance(turnToleranceDeg); this.turnEncoder = turnEncoder; - this.turnEncoder.configAbsoluteSensorRange(AbsoluteSensorRange.Signed_PlusMinus180); + MagnetSensorConfigs rangeConfig = new MagnetSensorConfigs(); + // WARNING: Signed_PlusMinusHalf != Signed-PlusMinus180 (Phoenix 6 does not provide PlusMinus180) + rangeConfig.AbsoluteSensorRange = AbsoluteSensorRangeValue.Signed_PlusMinusHalf; + this.turnEncoder.getConfigurator().apply(rangeConfig); this.driveModifier = config.driveModifier; this.reversed = config.reversed[arrIndex]; @@ -230,7 +234,7 @@ private void setAngle(double angle) { * @return module angle in degrees */ public double getModuleAngle() { - return MathUtil.inputModulus(turnEncoder.getAbsolutePosition()-turnZero, -180, 180); + return MathUtil.inputModulus(turnEncoder.getAbsolutePosition().getValue() - turnZero, -180, 180); } /** @@ -266,9 +270,9 @@ public double getCurrentSpeed() { public void updateSmartDashboard() { String moduleString = type.toString(); // Display the position of the quadrature encoder. - SmartDashboard.putNumber(moduleString + " Incremental Position", turnEncoder.getPosition()); + SmartDashboard.putNumber(moduleString + " Incremental Position", turnEncoder.getPosition().getValue()); // Display the position of the analog encoder. - SmartDashboard.putNumber(moduleString + " Absolute Angle (deg)", turnEncoder.getAbsolutePosition()); + SmartDashboard.putNumber(moduleString + " Absolute Angle (deg)", turnEncoder.getAbsolutePosition().getValue()); // Display the module angle as calculated using the absolute encoder. SmartDashboard.putNumber(moduleString + " Turn Measured Pos (deg)", getModuleAngle()); SmartDashboard.putNumber(moduleString + " Encoder Position", drive.getEncoder().getPosition()); @@ -309,8 +313,8 @@ public void initSendable(SendableBuilder builder) { builder.setActuator(true); builder.setSafeState(() -> setSpeed(0)); builder.setSmartDashboardType("SwerveModule"); - builder.addDoubleProperty("Incremental Position", turnEncoder::getPosition, null); - builder.addDoubleProperty("Absolute Angle (deg)", turnEncoder::getAbsolutePosition, null); + builder.addDoubleProperty("Incremental Position", () -> turnEncoder.getPosition().getValue(), null); + builder.addDoubleProperty("Absolute Angle (deg)", () -> turnEncoder.getAbsolutePosition().getValue(), null); builder.addDoubleProperty("Turn Measured Pos (deg)", this::getModuleAngle, null); builder.addDoubleProperty("Encoder Position", drive.getEncoder()::getPosition, null); // Display the speed that the robot thinks it is travelling at. From 501629b726b8bec043fe1a744d393ea5d2b627f7 Mon Sep 17 00:00:00 2001 From: ProfessorAtomicManiac <59379639+ProfessorAtomicManiac@users.noreply.github.com> Date: Sun, 23 Jul 2023 16:19:49 -0700 Subject: [PATCH 14/14] converted to correct units in swerve module --- .../carlmontrobotics/lib199/swerve/SwerveModule.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/carlmontrobotics/lib199/swerve/SwerveModule.java b/src/main/java/org/carlmontrobotics/lib199/swerve/SwerveModule.java index 24c007af..82f1347e 100644 --- a/src/main/java/org/carlmontrobotics/lib199/swerve/SwerveModule.java +++ b/src/main/java/org/carlmontrobotics/lib199/swerve/SwerveModule.java @@ -16,6 +16,7 @@ import edu.wpi.first.math.kinematics.SwerveModulePosition; import edu.wpi.first.math.kinematics.SwerveModuleState; import edu.wpi.first.math.trajectory.TrapezoidProfile; +import edu.wpi.first.math.util.Units; import edu.wpi.first.util.sendable.Sendable; import edu.wpi.first.util.sendable.SendableBuilder; import edu.wpi.first.util.sendable.SendableRegistry; @@ -234,7 +235,7 @@ private void setAngle(double angle) { * @return module angle in degrees */ public double getModuleAngle() { - return MathUtil.inputModulus(turnEncoder.getAbsolutePosition().getValue() - turnZero, -180, 180); + return MathUtil.inputModulus(Units.rotationsToDegrees(turnEncoder.getAbsolutePosition().getValue()) - turnZero, -180, 180); } /** @@ -270,9 +271,9 @@ public double getCurrentSpeed() { public void updateSmartDashboard() { String moduleString = type.toString(); // Display the position of the quadrature encoder. - SmartDashboard.putNumber(moduleString + " Incremental Position", turnEncoder.getPosition().getValue()); + SmartDashboard.putNumber(moduleString + " Incremental Position", Units.rotationsToDegrees(turnEncoder.getPosition().getValue())); // Display the position of the analog encoder. - SmartDashboard.putNumber(moduleString + " Absolute Angle (deg)", turnEncoder.getAbsolutePosition().getValue()); + SmartDashboard.putNumber(moduleString + " Absolute Angle (deg)", Units.rotationsToDegrees(turnEncoder.getAbsolutePosition().getValue())); // Display the module angle as calculated using the absolute encoder. SmartDashboard.putNumber(moduleString + " Turn Measured Pos (deg)", getModuleAngle()); SmartDashboard.putNumber(moduleString + " Encoder Position", drive.getEncoder().getPosition()); @@ -313,8 +314,8 @@ public void initSendable(SendableBuilder builder) { builder.setActuator(true); builder.setSafeState(() -> setSpeed(0)); builder.setSmartDashboardType("SwerveModule"); - builder.addDoubleProperty("Incremental Position", () -> turnEncoder.getPosition().getValue(), null); - builder.addDoubleProperty("Absolute Angle (deg)", () -> turnEncoder.getAbsolutePosition().getValue(), null); + builder.addDoubleProperty("Incremental Position", () -> Units.rotationsToDegrees(turnEncoder.getPosition().getValue()), null); + builder.addDoubleProperty("Absolute Angle (deg)", () -> Units.rotationsToDegrees(turnEncoder.getAbsolutePosition().getValue()), null); builder.addDoubleProperty("Turn Measured Pos (deg)", this::getModuleAngle, null); builder.addDoubleProperty("Encoder Position", drive.getEncoder()::getPosition, null); // Display the speed that the robot thinks it is travelling at.