From 7b2db61ec7004cd374584bec08b2d0760ff493a1 Mon Sep 17 00:00:00 2001 From: andrew-sheu <55634584+andrew-sheu@users.noreply.github.com> Date: Wed, 11 Dec 2019 15:31:06 -0800 Subject: [PATCH 1/7] Update TalonConfig.java I added all the methods to Talon Config. --- .../com/team2813/lib/config/TalonConfig.java | 141 ++++++++++++++++++ 1 file changed, 141 insertions(+) diff --git a/OffSeasonBot2019/src/main/java/com/team2813/lib/config/TalonConfig.java b/OffSeasonBot2019/src/main/java/com/team2813/lib/config/TalonConfig.java index a98c853..87627a5 100644 --- a/OffSeasonBot2019/src/main/java/com/team2813/lib/config/TalonConfig.java +++ b/OffSeasonBot2019/src/main/java/com/team2813/lib/config/TalonConfig.java @@ -1,4 +1,145 @@ package com.team2813.lib.config; +import com.ctre.phoenix.motorcontrol.StatusFrameEnhanced; +import com.ctre.phoenix.motorcontrol.VelocityMeasPeriod; +import com.team2813.lib.talon.BaseMotorControllerWrapper; + public class TalonConfig extends MotorConfig { + @Override + public int getDeviceNumber() { + return deviceNumber; + } + + @Override + public void setDeviceNumber(int deviceNumber) { + this.deviceNumber = deviceNumber; + } + + public int getPeakCurrentDuration() { + return peakCurrentDuration; + } + + public void setPeakCurrentDuration(int peakCurrentDuration) { + this.peakCurrentDuration = peakCurrentDuration; + } + + public int getPeakCurrentLimit() { + return peakCurrentLimit; + } + + public void setPeakCurrentLimit(int peakCurrentLimit) { + this.peakCurrentLimit = peakCurrentLimit; + } + + public boolean isEnableVoltageCompensation() { + return enableVoltageCompensation; + } + + public void setEnableVoltageCompensation(boolean enableVoltageCompensation) { + this.enableVoltageCompensation = enableVoltageCompensation; + } + + public int getCompSaturationVoltage() { + return compSaturationVoltage; + } + + public void setCompSaturationVoltage(int compSaturationVoltage) { + this.compSaturationVoltage = compSaturationVoltage; + } + + public int getContinuousCurrentLimitAmps() { + return continuousCurrentLimitAmps; + } + + public void setContinuousCurrentLimitAmps(int continuousCurrentLimitAmps) { + this.continuousCurrentLimitAmps = continuousCurrentLimitAmps; + } + + public int getMotionAcceleration() { + return motionAcceleration; + } + + public void setMotionAcceleration(int motionAcceleration) { + this.motionAcceleration = motionAcceleration; + } + + public int getMotionCruiseVelocity() { + return motionCruiseVelocity; + } + + public void setMotionCruiseVelocity(int motionCruiseVelocity) { + this.motionCruiseVelocity = motionCruiseVelocity; + } + + public double getClosedLoopRampRate() { + return closedLoopRampRate; + } + + public void setClosedLoopRampRate(double closedLoopRampRate) { + this.closedLoopRampRate = closedLoopRampRate; + } + + public double getOpenLoopRampRate() { + return openLoopRampRate; + } + + public void setOpenLoopRampRate(double openLoopRampRate) { + this.openLoopRampRate = openLoopRampRate; + } + + public boolean isInvertSensorPhase() { + return invertSensorPhase; + } + + public void setInvertSensorPhase(boolean invertSensorPhase) { + this.invertSensorPhase = invertSensorPhase; + } + + public StatusFrameEnhanced getStatusFrame() { + return statusFrame; + } + + public void setStatusFrame(StatusFrameEnhanced statusFrame) { + this.statusFrame = statusFrame; + } + + public int getStatusFramePeriod() { + return statusFramePeriod; + } + + public void setStatusFramePeriod(int statusFramePeriod) { + this.statusFramePeriod = statusFramePeriod; + } + + public VelocityMeasPeriod getVelocityMeasurementPeriod() { + return velocityMeasurementPeriod; + } + + public void setVelocityMeasurementPeriod(VelocityMeasPeriod velocityMeasurementPeriod) { + this.velocityMeasurementPeriod = velocityMeasurementPeriod; + } + + public BaseMotorControllerWrapper.VelocityMeasurementWindow getVelocityMeasurementWindow() { + return velocityMeasurementWindow; + } + + public void setVelocityMeasurementWindow(BaseMotorControllerWrapper.VelocityMeasurementWindow velocityMeasurementWindow) { + this.velocityMeasurementWindow = velocityMeasurementWindow; + } + + private int deviceNumber; + private int peakCurrentDuration; + private int peakCurrentLimit; + private boolean enableVoltageCompensation; + private int compSaturationVoltage; + private int continuousCurrentLimitAmps; + private int motionAcceleration; + private int motionCruiseVelocity; + private double closedLoopRampRate; + private double openLoopRampRate; + private boolean invertSensorPhase; + private StatusFrameEnhanced statusFrame; // cannot serialize into PeriodicFrame (see getStatusFrame) + private int statusFramePeriod = 5; + private VelocityMeasPeriod velocityMeasurementPeriod; + private BaseMotorControllerWrapper.VelocityMeasurementWindow velocityMeasurementWindow; } From 048342f90ea6c81425464648c2794506dad3f91c Mon Sep 17 00:00:00 2001 From: andrew-sheu <55634584+andrew-sheu@users.noreply.github.com> Date: Fri, 13 Dec 2019 17:14:13 -0800 Subject: [PATCH 2/7] Worked on the MotorConfigs Still has errors --- .../com/team2813/lib/config/MotorConfigs.java | 70 +++++++++++++++++++ .../com/team2813/lib/config/TalonConfig.java | 43 +++++++----- .../lib/sparkMax/CANSparkMaxWrapper.java | 5 +- .../lib/talon/BaseMotorControllerWrapper.java | 12 +++- .../com/team2813/lib/talon/TalonWrapper.java | 12 +++- .../lib/talon/options/InvertType.java | 5 ++ 6 files changed, 126 insertions(+), 21 deletions(-) create mode 100644 OffSeasonBot2019/src/main/java/com/team2813/lib/talon/options/InvertType.java diff --git a/OffSeasonBot2019/src/main/java/com/team2813/lib/config/MotorConfigs.java b/OffSeasonBot2019/src/main/java/com/team2813/lib/config/MotorConfigs.java index af1b361..5f700f3 100644 --- a/OffSeasonBot2019/src/main/java/com/team2813/lib/config/MotorConfigs.java +++ b/OffSeasonBot2019/src/main/java/com/team2813/lib/config/MotorConfigs.java @@ -4,8 +4,12 @@ import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import com.team2813.lib.sparkMax.CANSparkMaxWrapper; import com.team2813.lib.sparkMax.SparkMaxException; +import com.team2813.lib.talon.CTREException; +import com.team2813.lib.talon.TalonWrapper; import com.team2813.lib.talon.VictorWrapper; +import com.team2813.lib.talon.options.InvertType; import edu.wpi.first.wpilibj.Filesystem; +import edu.wpi.first.wpilibj.Talon; import java.io.File; import java.io.IOException; @@ -35,6 +39,72 @@ public static void read() throws IOException { System.out.println("Successful!"); } + private static TalonWrapper initializeTalon(TalonConfig config) throws TalonException, CTREException, SparkMaxException { + for (Integer id : ids) + if (id == config.getDeviceNumber()){ + System.err.println("Tried to register talon with already used id"); + } + ids.add(config.getDeviceNumber()); + + System.out.println("Configuring" + config.getSubsystemName()); + + TalonWrapper talon = new TalonWrapper(config.getDeviceNumber(), config.getSubsystemName(), config.getMotorType().getValue()); + + talon.setFactoryDefaults(); + +// talon.setPeakCurrentDuration(config.getPeakCurrentDuration()); + talon.setCurrLimit(config.getPeakCurrentLimit()); + + talon.enableVoltageCompensation(config.setCompSaturationVoltage()); + + talon.setOpenLoopRamp(config.getOpenLoopRampRate()); + talon.setClosedLoopRamp(config.getClosedLoopRampRate()); + + talon.setPeriodicFrame(config.getStatusFrame().getValue(), config.getStatusFramePeriod()); +// talon.setSmartMotionMaxVelocity(config.motionCruiseVelocity()); // FIXME: 09/20/2019 need to change parameters/types +// talon.setSmartMotionMaxAccel(config.motionAcceleration()); // FIXME: 09/20/2019 need to change parameters/types + + talon.setSecondaryCurrLimit(config.getContinuousCurrentLimitAmps());// TODO check this is actually continuous limit + +// for (com.team2813.lib.talon.options.HardLimitSwitch hardLimitSwitch : field.getAnnotationsByType(com.team2813.lib.talon.options.HardLimitSwitch.class)) { +// System.out.println("\tconfiguring hard limit switch " + hardLimitSwitch.direction()); +// // FIXME remake limit switch stuff differently since it is called differently -- Grady 10/30 I'm not sure this is how it works for Spark Maxs +// } +// +// for (com.team2813.lib.talon.options.SoftLimit softLimit : field.getAnnotationsByType(com.team2813.lib.talon.options.SoftLimit.class)) { +// System.out.println("\tconfiguring soft limit " + softLimit.direction()); +// +// //FIXME remake limit switch stuff differently +// } + + + for (PIDControllerConfig pidController : config.getPidControllers()) { + int slotID = config.getPidControllers().indexOf(pidController); + talon.setPIDF(slotID, pidController.getP(), pidController.getI(), + pidController.getD(), pidController.getF()); + talon.getPIDController().setSmartMotionMaxVelocity(pidController.getMaxVelocity(), slotID); + talon.getPIDController().setSmartMotionMaxAccel(pidController.getMaxAcceleration(), slotID); + talon.getPIDController().setSmartMotionMinOutputVelocity(pidController.getMinVelocity(), slotID); + } + + + Inverted inverted = config.getInverted(); + if (inverted != null) + talon.setInverted(inverted == Inverted.INVERTED); + else + talon.setInverted(InvertType.NORMAL.inverted); + + for (FollowerConfig followerConfig : config.getFollowers()) { + System.out.println( + "\tCreating follower w/ id of " + followerConfig.getId() + " on " + config.getSubsystemName() + ); + CANSparkMaxWrapper talonFollower = new CANSparkMaxWrapper(followerConfig.getId(), followerConfig.getType().getValue()); + talonFollower.follow(talon, followerConfig.getInverted().inverted); + } + + return talon; + } + private static CANSparkMaxWrapper initializeSpark(SparkConfig config) { for (Integer id : ids) if (id == config.getDeviceNumber()) { diff --git a/OffSeasonBot2019/src/main/java/com/team2813/lib/config/TalonConfig.java b/OffSeasonBot2019/src/main/java/com/team2813/lib/config/TalonConfig.java index 87627a5..3b4c109 100644 --- a/OffSeasonBot2019/src/main/java/com/team2813/lib/config/TalonConfig.java +++ b/OffSeasonBot2019/src/main/java/com/team2813/lib/config/TalonConfig.java @@ -5,6 +5,23 @@ import com.team2813.lib.talon.BaseMotorControllerWrapper; public class TalonConfig extends MotorConfig { + + private int deviceNumber; + private int peakCurrentDuration; + private int peakCurrentLimit; + private boolean enableVoltageCompensation; + private int compSaturationVoltage; + private int continuousCurrentLimitAmps; + private int motionAcceleration; + private int motionCruiseVelocity; + private double closedLoopRampRate; + private double openLoopRampRate; + private boolean invertSensorPhase; + private StatusFrameEnhanced statusFrame; // cannot serialize into PeriodicFrame (see getStatusFrame) + private int statusFramePeriod = 5; + private VelocityMeasPeriod velocityMeasurementPeriod; + private BaseMotorControllerWrapper.VelocityMeasurementWindow velocityMeasurementWindow; + @Override public int getDeviceNumber() { return deviceNumber; @@ -123,23 +140,15 @@ public BaseMotorControllerWrapper.VelocityMeasurementWindow getVelocityMeasureme return velocityMeasurementWindow; } - public void setVelocityMeasurementWindow(BaseMotorControllerWrapper.VelocityMeasurementWindow velocityMeasurementWindow) { - this.velocityMeasurementWindow = velocityMeasurementWindow; + + public void getPidControllers() { } - private int deviceNumber; - private int peakCurrentDuration; - private int peakCurrentLimit; - private boolean enableVoltageCompensation; - private int compSaturationVoltage; - private int continuousCurrentLimitAmps; - private int motionAcceleration; - private int motionCruiseVelocity; - private double closedLoopRampRate; - private double openLoopRampRate; - private boolean invertSensorPhase; - private StatusFrameEnhanced statusFrame; // cannot serialize into PeriodicFrame (see getStatusFrame) - private int statusFramePeriod = 5; - private VelocityMeasPeriod velocityMeasurementPeriod; - private BaseMotorControllerWrapper.VelocityMeasurementWindow velocityMeasurementWindow; + public Inverted getInverted() { + + } + + public FollowerConfig[] getFollowers() { + + } } diff --git a/OffSeasonBot2019/src/main/java/com/team2813/lib/sparkMax/CANSparkMaxWrapper.java b/OffSeasonBot2019/src/main/java/com/team2813/lib/sparkMax/CANSparkMaxWrapper.java index 70478c8..bd43d23 100644 --- a/OffSeasonBot2019/src/main/java/com/team2813/lib/sparkMax/CANSparkMaxWrapper.java +++ b/OffSeasonBot2019/src/main/java/com/team2813/lib/sparkMax/CANSparkMaxWrapper.java @@ -434,6 +434,9 @@ public void setReverseSoftLimit(double position) throws SparkMaxException { setSoftLimit(false, position); } - //#endregion + public void follow(TalonWrapper talon, boolean inverted) { + } + + //#endregion } diff --git a/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/BaseMotorControllerWrapper.java b/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/BaseMotorControllerWrapper.java index e97561c..e9a553b 100644 --- a/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/BaseMotorControllerWrapper.java +++ b/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/BaseMotorControllerWrapper.java @@ -7,6 +7,7 @@ import com.ctre.phoenix.motion.TrajectoryPoint; import com.ctre.phoenix.motorcontrol.*; import com.ctre.phoenix.motorcontrol.can.BaseMotorController; +import com.team2813.lib.sparkMax.CANSparkMaxWrapper; import com.team2813.lib.talon.options.LimitDirection; import com.team2813.lib.talon.options.PIDProfile; @@ -103,8 +104,9 @@ public void setSensorPhaseInverted(boolean inverted) throws CTREException { * @throws CTREException * @see BaseMotorController#setInverted(InvertType) * @see InvertType + * @param type */ - public void setInverted(InvertType type) throws CTREException { + public void setInverted(boolean type) throws CTREException { invertType = type; motorController.setInverted(type); throwLastError(); @@ -645,7 +647,7 @@ public void setF(PIDProfile.Profile slot, double f) throws CTREException { throwIfNotOk(motorController.config_kF(slot.id, f, timeoutMode.value)); } - public void setPIDF(PIDProfile.Profile slot, double p, double i, double d, double f) throws CTREException { + public void setPIDF(int slot, double p, double i, double d, double f) throws CTREException { setP(slot, p); setI(slot, i); setD(slot, d); @@ -740,6 +742,12 @@ public void setDirectionParameterForLimit(LimitDirection direction, double value } } + public abstract void setCurrLimit(int peakCurrentLimit); + + public abstract void setSecondaryCurrLimit(int continuousCurrentLimitAmps); + + public abstract CANSparkMaxWrapper getPIDController(); + // TODO document public enum TimeoutMode { /** Longer timeout, used for constructors */ diff --git a/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/TalonWrapper.java b/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/TalonWrapper.java index 1f0f998..8e03816 100644 --- a/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/TalonWrapper.java +++ b/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/TalonWrapper.java @@ -5,6 +5,7 @@ import com.ctre.phoenix.motorcontrol.SensorCollection; import com.ctre.phoenix.motorcontrol.StatusFrameEnhanced; import com.ctre.phoenix.motorcontrol.can.TalonSRX; +import com.revrobotics.CANSparkMaxLowLevel; import com.team2813.lib.talon.options.LimitDirection; public class TalonWrapper extends BaseMotorControllerWrapper { @@ -21,7 +22,11 @@ public TalonWrapper(int deviceNumber) { this(deviceNumber, ""); } - public SensorCollection getSensorCollection() throws CTREException { + public TalonWrapper(int deviceNumber, String subsystemName, CANSparkMaxLowLevel.MotorType value) { + super(); + } + + public SensorCollection getSensorCollection() throws CTREException { return throwIfNotOkElseReturn(motorController.getSensorCollection()); } @@ -88,4 +93,9 @@ public void setLimitSwitchSource(LimitDirection direction, LimitSwitchSource typ setReverseLimitSwitchSource(type, normalOpenOrClose); } } + + @Override + public void setCurrLimit(int peakCurrentLimit) { + + } } diff --git a/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/options/InvertType.java b/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/options/InvertType.java new file mode 100644 index 0000000..9bf4cb2 --- /dev/null +++ b/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/options/InvertType.java @@ -0,0 +1,5 @@ +package com.team2813.lib.talon.options; + +public class InvertType { + public static final Object NORMAL = ; +} From b838a37bb762e627355604399ed6691865506ccc Mon Sep 17 00:00:00 2001 From: abhineetpal Date: Sat, 28 Dec 2019 19:23:33 -0800 Subject: [PATCH 3/7] made a bunch of changes to get rid of errors --- .../gradle/wrapper/gradle-wrapper.properties | 5 +++-- .../com/team2813/lib/config/MotorConfigs.java | 4 ++-- .../com/team2813/lib/config/TalonConfig.java | 16 ++++++++++------ .../lib/talon/BaseMotorControllerWrapper.java | 11 +++++++++-- 4 files changed, 24 insertions(+), 12 deletions(-) diff --git a/OffSeasonBot2019/gradle/wrapper/gradle-wrapper.properties b/OffSeasonBot2019/gradle/wrapper/gradle-wrapper.properties index c680a16..c79fd27 100644 --- a/OffSeasonBot2019/gradle/wrapper/gradle-wrapper.properties +++ b/OffSeasonBot2019/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Sat Dec 28 11:57:23 PST 2019 +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip distributionBase=GRADLE_USER_HOME distributionPath=permwrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-bin.zip -zipStoreBase=GRADLE_USER_HOME zipStorePath=permwrapper/dists +zipStoreBase=GRADLE_USER_HOME diff --git a/OffSeasonBot2019/src/main/java/com/team2813/lib/config/MotorConfigs.java b/OffSeasonBot2019/src/main/java/com/team2813/lib/config/MotorConfigs.java index 5f700f3..d65ef5d 100644 --- a/OffSeasonBot2019/src/main/java/com/team2813/lib/config/MotorConfigs.java +++ b/OffSeasonBot2019/src/main/java/com/team2813/lib/config/MotorConfigs.java @@ -39,7 +39,7 @@ public static void read() throws IOException { System.out.println("Successful!"); } - private static TalonWrapper initializeTalon(TalonConfig config) throws TalonException, CTREException, SparkMaxException { + private static TalonWrapper initializeTalon(TalonConfig config) throws TalonException, CTREException, SparkMaxException { for (Integer id : ids) if (id == config.getDeviceNumber()){ System.err.println("Tried to register talon with already used id"); @@ -60,7 +60,7 @@ private static TalonWrapper initializeTalon(TalonConfig config) talon.setOpenLoopRamp(config.getOpenLoopRampRate()); talon.setClosedLoopRamp(config.getClosedLoopRampRate()); - talon.setPeriodicFrame(config.getStatusFrame().getValue(), config.getStatusFramePeriod()); + talon.setPeriodicFrame(config.getStatusFrame(), config.getStatusFramePeriod()); // talon.setSmartMotionMaxVelocity(config.motionCruiseVelocity()); // FIXME: 09/20/2019 need to change parameters/types // talon.setSmartMotionMaxAccel(config.motionAcceleration()); // FIXME: 09/20/2019 need to change parameters/types diff --git a/OffSeasonBot2019/src/main/java/com/team2813/lib/config/TalonConfig.java b/OffSeasonBot2019/src/main/java/com/team2813/lib/config/TalonConfig.java index 3b4c109..1104472 100644 --- a/OffSeasonBot2019/src/main/java/com/team2813/lib/config/TalonConfig.java +++ b/OffSeasonBot2019/src/main/java/com/team2813/lib/config/TalonConfig.java @@ -3,6 +3,8 @@ import com.ctre.phoenix.motorcontrol.StatusFrameEnhanced; import com.ctre.phoenix.motorcontrol.VelocityMeasPeriod; import com.team2813.lib.talon.BaseMotorControllerWrapper; +import java.util.ArrayList; +import java.util.List; public class TalonConfig extends MotorConfig { @@ -17,7 +19,9 @@ public class TalonConfig extends MotorConfig { private double closedLoopRampRate; private double openLoopRampRate; private boolean invertSensorPhase; - private StatusFrameEnhanced statusFrame; // cannot serialize into PeriodicFrame (see getStatusFrame) + private Inverted inverted; + private List followers = new ArrayList<>(); + private PeriodicFrame statusFrame; // cannot serialize into PeriodicFrame (see getStatusFrame) private int statusFramePeriod = 5; private VelocityMeasPeriod velocityMeasurementPeriod; private BaseMotorControllerWrapper.VelocityMeasurementWindow velocityMeasurementWindow; @@ -112,11 +116,11 @@ public void setInvertSensorPhase(boolean invertSensorPhase) { this.invertSensorPhase = invertSensorPhase; } - public StatusFrameEnhanced getStatusFrame() { + public PeriodicFrame getStatusFrame() { return statusFrame; } - public void setStatusFrame(StatusFrameEnhanced statusFrame) { + public void setStatusFrame(PeriodicFrame statusFrame) { this.statusFrame = statusFrame; } @@ -145,10 +149,10 @@ public void getPidControllers() { } public Inverted getInverted() { - + return inverted; } - public FollowerConfig[] getFollowers() { - + public List getFollowers() { + return followers; } } diff --git a/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/BaseMotorControllerWrapper.java b/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/BaseMotorControllerWrapper.java index e9a553b..7f1800f 100644 --- a/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/BaseMotorControllerWrapper.java +++ b/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/BaseMotorControllerWrapper.java @@ -7,9 +7,12 @@ import com.ctre.phoenix.motion.TrajectoryPoint; import com.ctre.phoenix.motorcontrol.*; import com.ctre.phoenix.motorcontrol.can.BaseMotorController; +import com.team2813.lib.config.PeriodicFrame; import com.team2813.lib.sparkMax.CANSparkMaxWrapper; +import com.team2813.lib.sparkMax.options.SparkMaxOptions; import com.team2813.lib.talon.options.LimitDirection; import com.team2813.lib.talon.options.PIDProfile; +import com.team2813.lib.sparkMax.CANSparkMaxWrapper; /** * @author Adrian Guerra @@ -107,7 +110,7 @@ public void setSensorPhaseInverted(boolean inverted) throws CTREException { * @param type */ public void setInverted(boolean type) throws CTREException { - invertType = type; + boolean invertType = type; motorController.setInverted(type); throwLastError(); } @@ -647,7 +650,7 @@ public void setF(PIDProfile.Profile slot, double f) throws CTREException { throwIfNotOk(motorController.config_kF(slot.id, f, timeoutMode.value)); } - public void setPIDF(int slot, double p, double i, double d, double f) throws CTREException { + public void setPIDF(PIDProfile.Profile slot, double p, double i, double d, double f) throws CTREException { setP(slot, p); setI(slot, i); setD(slot, d); @@ -793,5 +796,9 @@ private VelocityMeasurementWindow(int value) { } } + public void setPeriodicFrame(PeriodicFrame frameID, int periodMs){ + + } + // #endregion } From f784e2e94f6a4fddbb5353faf700d6cd55de6fdd Mon Sep 17 00:00:00 2001 From: abhineetpal Date: Mon, 30 Dec 2019 18:44:20 -0800 Subject: [PATCH 4/7] fixing more errors --- .../main/java/com/team2813/lib/config/MotorConfigs.java | 3 ++- .../java/com/team2813/lib/sparkMax/CANSparkMaxWrapper.java | 7 ++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/OffSeasonBot2019/src/main/java/com/team2813/lib/config/MotorConfigs.java b/OffSeasonBot2019/src/main/java/com/team2813/lib/config/MotorConfigs.java index d65ef5d..17cb34a 100644 --- a/OffSeasonBot2019/src/main/java/com/team2813/lib/config/MotorConfigs.java +++ b/OffSeasonBot2019/src/main/java/com/team2813/lib/config/MotorConfigs.java @@ -8,6 +8,7 @@ import com.team2813.lib.talon.TalonWrapper; import com.team2813.lib.talon.VictorWrapper; import com.team2813.lib.talon.options.InvertType; +import com.team2813.lib.talon.options.PIDProfile; import edu.wpi.first.wpilibj.Filesystem; import edu.wpi.first.wpilibj.Talon; @@ -79,7 +80,7 @@ private static TalonWrapper initializeTalon(T for (PIDControllerConfig pidController : config.getPidControllers()) { - int slotID = config.getPidControllers().indexOf(pidController); + PIDProfile.Profile slotID = PIDProfile.Profile(config.getPidControllers().indexOf(pidController)); talon.setPIDF(slotID, pidController.getP(), pidController.getI(), pidController.getD(), pidController.getF()); talon.getPIDController().setSmartMotionMaxVelocity(pidController.getMaxVelocity(), slotID); diff --git a/OffSeasonBot2019/src/main/java/com/team2813/lib/sparkMax/CANSparkMaxWrapper.java b/OffSeasonBot2019/src/main/java/com/team2813/lib/sparkMax/CANSparkMaxWrapper.java index bd43d23..0094d0f 100644 --- a/OffSeasonBot2019/src/main/java/com/team2813/lib/sparkMax/CANSparkMaxWrapper.java +++ b/OffSeasonBot2019/src/main/java/com/team2813/lib/sparkMax/CANSparkMaxWrapper.java @@ -5,6 +5,7 @@ import com.team2813.lib.talon.CTREException; import com.team2813.lib.talon.TalonWrapper; import com.team2813.lib.talon.VictorWrapper; +import com.team2813.lib.talon.options.PIDProfile; import edu.wpi.first.wpilibj.Spark; public class CANSparkMaxWrapper extends CANSparkMax { @@ -362,15 +363,15 @@ public double getPIDOutputMax(int slotID) { return getPIDController().getOutputMax(slotID); } - public void setSmartMotionMaxVelocity(double maxVel, int slotID) throws SparkMaxException { + public void setSmartMotionMaxVelocity(double maxVel, PIDProfile.Profile slotID) throws SparkMaxException { throwIfNotOk(getPIDController().setSmartMotionMaxVelocity(maxVel, slotID)); } - public void setSmartMotionMaxAccel(double maxAccel, int slotID) throws SparkMaxException { + public void setSmartMotionMaxAccel(double maxAccel, PIDProfile.Profile slotID) throws SparkMaxException { throwIfNotOk(getPIDController().setSmartMotionMaxAccel(maxAccel, slotID)); } - public void setSmartMotionMinOutputVelocity(double minVel, int slotID) throws SparkMaxException { + public void setSmartMotionMinOutputVelocity(double minVel, PIDProfile.Profile slotID) throws SparkMaxException { throwIfNotOk(getPIDController().setSmartMotionMinOutputVelocity(minVel, slotID)); } From 8a1f7d369a01a284df340abb1aaed66f033fd32e Mon Sep 17 00:00:00 2001 From: Gear Heads Lab Computer Date: Fri, 3 Jan 2020 16:40:38 -0800 Subject: [PATCH 5/7] fixed errors, more work needed --- .../main/java/com/team2813/lib/config/Inverted.java | 7 ++++++- .../java/com/team2813/lib/config/MotorConfigs.java | 11 +++++------ .../java/com/team2813/lib/config/TalonConfig.java | 4 +++- .../com/team2813/lib/talon/options/PIDProfile.java | 4 ++-- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/OffSeasonBot2019/src/main/java/com/team2813/lib/config/Inverted.java b/OffSeasonBot2019/src/main/java/com/team2813/lib/config/Inverted.java index 88099cd..302cced 100644 --- a/OffSeasonBot2019/src/main/java/com/team2813/lib/config/Inverted.java +++ b/OffSeasonBot2019/src/main/java/com/team2813/lib/config/Inverted.java @@ -1,6 +1,11 @@ package com.team2813.lib.config; +import com.ctre.phoenix.motorcontrol.InvertType; + @SuppressWarnings("unused") public enum Inverted { - NONINVERTED, INVERTED, FOLLOW_LEADER + NONINVERTED(InvertType.None), INVERTED(InvertType.InvertMotorOutput), + FOLLOW_LEADER(InvertType.FollowMaster), OPPOSE_LEADER(InvertType.OpposeMaster); + InvertType value; + Inverted(InvertType value){this.value = value;} } diff --git a/OffSeasonBot2019/src/main/java/com/team2813/lib/config/MotorConfigs.java b/OffSeasonBot2019/src/main/java/com/team2813/lib/config/MotorConfigs.java index 17cb34a..8d865c9 100644 --- a/OffSeasonBot2019/src/main/java/com/team2813/lib/config/MotorConfigs.java +++ b/OffSeasonBot2019/src/main/java/com/team2813/lib/config/MotorConfigs.java @@ -55,8 +55,8 @@ private static TalonWrapper initializeTalon(T // talon.setPeakCurrentDuration(config.getPeakCurrentDuration()); talon.setCurrLimit(config.getPeakCurrentLimit()); + talon.enableVoltageCompensation(); - talon.enableVoltageCompensation(config.setCompSaturationVoltage()); talon.setOpenLoopRamp(config.getOpenLoopRampRate()); talon.setClosedLoopRamp(config.getClosedLoopRampRate()); @@ -72,15 +72,16 @@ private static TalonWrapper initializeTalon(T // // FIXME remake limit switch stuff differently since it is called differently -- Grady 10/30 I'm not sure this is how it works for Spark Maxs // } // -// for (com.team2813.lib.talon.options.SoftLimit softLimit : field.getAnnotationsByType(com.team2813.lib.talon.options.SoftLimit.class)) { +// for (com.team2813.lib.talon.options.SoftLimit softLimit : field.getAnnotationsByType(com.team2813co.lib.talon.options.SoftLimit.class)) { // System.out.println("\tconfiguring soft limit " + softLimit.direction()); // // //FIXME remake limit switch stuff differently // } - for (PIDControllerConfig pidController : config.getPidControllers()) { - PIDProfile.Profile slotID = PIDProfile.Profile(config.getPidControllers().indexOf(pidController)); + for (PIDControllerConfig pidController : config.getPidControllers()) { + PIDProfile.Profile slotID = config.getPidControllers().indexOf(pidController) == 0 ? + PIDProfile.Profile.PRIMARY : PIDProfile.Profile.SECONDARY; talon.setPIDF(slotID, pidController.getP(), pidController.getI(), pidController.getD(), pidController.getF()); talon.getPIDController().setSmartMotionMaxVelocity(pidController.getMaxVelocity(), slotID); @@ -92,8 +93,6 @@ private static TalonWrapper initializeTalon(T Inverted inverted = config.getInverted(); if (inverted != null) talon.setInverted(inverted == Inverted.INVERTED); - else - talon.setInverted(InvertType.NORMAL.inverted); for (FollowerConfig followerConfig : config.getFollowers()) { System.out.println( diff --git a/OffSeasonBot2019/src/main/java/com/team2813/lib/config/TalonConfig.java b/OffSeasonBot2019/src/main/java/com/team2813/lib/config/TalonConfig.java index 1104472..b62c918 100644 --- a/OffSeasonBot2019/src/main/java/com/team2813/lib/config/TalonConfig.java +++ b/OffSeasonBot2019/src/main/java/com/team2813/lib/config/TalonConfig.java @@ -21,6 +21,7 @@ public class TalonConfig extends MotorConfig { private boolean invertSensorPhase; private Inverted inverted; private List followers = new ArrayList<>(); + private List pidControllers; private PeriodicFrame statusFrame; // cannot serialize into PeriodicFrame (see getStatusFrame) private int statusFramePeriod = 5; private VelocityMeasPeriod velocityMeasurementPeriod; @@ -145,7 +146,8 @@ public BaseMotorControllerWrapper.VelocityMeasurementWindow getVelocityMeasureme } - public void getPidControllers() { + public List getPidControllers() { + return pidControllers; } public Inverted getInverted() { diff --git a/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/options/PIDProfile.java b/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/options/PIDProfile.java index 1f8a212..a5f9e6b 100644 --- a/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/options/PIDProfile.java +++ b/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/options/PIDProfile.java @@ -35,13 +35,13 @@ // TODO document - public enum Profile { + enum Profile { PRIMARY(0), SECONDARY(1); public final int id; - private Profile(int id) { + Profile(int id) { this.id = id; } } From 1d774781db5ce1848e18d92de46db0c7c1032c2d Mon Sep 17 00:00:00 2001 From: Gear Heads Lab Computer Date: Fri, 3 Jan 2020 18:21:45 -0800 Subject: [PATCH 6/7] merging master, also fixed errors --- .../java/com/team2813/lib/config/MotorConfigs.java | 10 ++++++---- .../team2813/lib/talon/BaseMotorControllerWrapper.java | 6 ------ .../main/java/com/team2813/lib/talon/PIDProfile.java | 2 +- .../main/java/com/team2813/lib/talon/TalonWrapper.java | 5 ----- 4 files changed, 7 insertions(+), 16 deletions(-) diff --git a/OffSeasonBot2019/src/main/java/com/team2813/lib/config/MotorConfigs.java b/OffSeasonBot2019/src/main/java/com/team2813/lib/config/MotorConfigs.java index f4872e2..eea92cb 100644 --- a/OffSeasonBot2019/src/main/java/com/team2813/lib/config/MotorConfigs.java +++ b/OffSeasonBot2019/src/main/java/com/team2813/lib/config/MotorConfigs.java @@ -8,7 +8,7 @@ import com.team2813.lib.talon.TalonWrapper; import com.team2813.lib.talon.VictorWrapper; import com.team2813.lib.talon.options.InvertType; -import com.team2813.lib.talon.options.PIDProfile; +import com.team2813.lib.talon.PIDProfile; import edu.wpi.first.wpilibj.Filesystem; import edu.wpi.first.wpilibj.Talon; @@ -86,9 +86,11 @@ private static TalonWrapper initializeTalon(T PIDProfile.Profile.PRIMARY : PIDProfile.Profile.SECONDARY; talon.setPIDF(slotID, pidController.getP(), pidController.getI(), pidController.getD(), pidController.getF()); - talon.getPIDController().setSmartMotionMaxVelocity(pidController.getMaxVelocity(), slotID); - talon.getPIDController().setSmartMotionMaxAccel(pidController.getMaxAcceleration(), slotID); - talon.getPIDController().setSmartMotionMinOutputVelocity(pidController.getMinVelocity(), slotID); + talon.setMotionMagicCruiseVelocity((int) pidController.getMaxVelocity()); // FIXME: 1/3/2020 Casting because + // talon uses encoder ticks + // TODO deal with units issue + talon.setMotionMagicAcceleration((int) pidController.getMaxAcceleration()); // FIXME see above + // TODO: 1/3/2020 figure out min velocity with Talons / remove from PID controller so as not to have that attribute } diff --git a/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/BaseMotorControllerWrapper.java b/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/BaseMotorControllerWrapper.java index 1ab2eca..161e185 100644 --- a/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/BaseMotorControllerWrapper.java +++ b/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/BaseMotorControllerWrapper.java @@ -744,12 +744,6 @@ public void setDirectionParameterForLimit(LimitDirection direction, double value } } - public abstract void setCurrLimit(int peakCurrentLimit); - - public abstract void setSecondaryCurrLimit(int continuousCurrentLimitAmps); - - public abstract CANSparkMaxWrapper getPIDController(); - // TODO document public enum TimeoutMode { /** Longer timeout, used for constructors */ diff --git a/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/PIDProfile.java b/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/PIDProfile.java index aa44b42..1d2e6e2 100644 --- a/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/PIDProfile.java +++ b/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/PIDProfile.java @@ -14,7 +14,7 @@ public class PIDProfile { // TODO document - enum Profile { + public enum Profile { PRIMARY(0), SECONDARY(1); diff --git a/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/TalonWrapper.java b/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/TalonWrapper.java index 1b6b178..88d8601 100644 --- a/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/TalonWrapper.java +++ b/OffSeasonBot2019/src/main/java/com/team2813/lib/talon/TalonWrapper.java @@ -93,9 +93,4 @@ public void setLimitSwitchSource(LimitDirection direction, LimitSwitchSource typ setReverseLimitSwitchSource(type, normalOpenOrClose); } } - - @Override - public void setCurrLimit(int peakCurrentLimit) { - - } } From c5f1b770c7cef85903a07fb9748e89161ec9357b Mon Sep 17 00:00:00 2001 From: abhineetpal Date: Mon, 6 Jan 2020 23:06:27 -0800 Subject: [PATCH 7/7] Update MotorConfigs.java --- .../src/main/java/com/team2813/lib/config/MotorConfigs.java | 1 - 1 file changed, 1 deletion(-) diff --git a/OffSeasonBot2019/src/main/java/com/team2813/lib/config/MotorConfigs.java b/OffSeasonBot2019/src/main/java/com/team2813/lib/config/MotorConfigs.java index eea92cb..7e7233c 100644 --- a/OffSeasonBot2019/src/main/java/com/team2813/lib/config/MotorConfigs.java +++ b/OffSeasonBot2019/src/main/java/com/team2813/lib/config/MotorConfigs.java @@ -7,7 +7,6 @@ import com.team2813.lib.talon.CTREException; import com.team2813.lib.talon.TalonWrapper; import com.team2813.lib.talon.VictorWrapper; -import com.team2813.lib.talon.options.InvertType; import com.team2813.lib.talon.PIDProfile; import edu.wpi.first.wpilibj.Filesystem; import edu.wpi.first.wpilibj.Talon;