Skip to content

Commit f2eddcd

Browse files
committed
feat: add tunable entries for the elevator subsystem
Signed-off-by: Dasun Abeykoon <[email protected]>
1 parent 0c3cfc9 commit f2eddcd

File tree

5 files changed

+71
-0
lines changed

5 files changed

+71
-0
lines changed

src/main/java/org/frc6423/robot/subsystems/superstructure/elevator/Elevator.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,16 @@
1717
import edu.wpi.first.math.filter.LinearFilter;
1818
import edu.wpi.first.math.geometry.Pose3d;
1919
import edu.wpi.first.math.geometry.Rotation3d;
20+
import edu.wpi.first.networktables.DoubleEntry;
2021
import edu.wpi.first.units.measure.Distance;
2122
import edu.wpi.first.units.measure.LinearAcceleration;
2223
import edu.wpi.first.units.measure.LinearVelocity;
2324
import edu.wpi.first.units.measure.Mass;
2425
import edu.wpi.first.wpilibj2.command.Command;
2526
import edu.wpi.first.wpilibj2.command.SubsystemBase;
2627
import java.util.function.DoubleSupplier;
28+
import org.frc6423.lib.utilities.NtUtils;
29+
import org.frc6423.robot.Constants;
2730
import org.frc6423.robot.Robot;
2831

2932
/** Elevator Subsystem */
@@ -91,6 +94,31 @@ public static enum ElevatorExtension {
9194

9295
private boolean isZeroed = false;
9396

97+
private static final String gainTopic = "Tunables/elevator";
98+
private static final DoubleEntry gainKg = NtUtils.createDoubleEntry(gainTopic + "/kG", 0.0);
99+
private static final DoubleEntry gainKs = NtUtils.createDoubleEntry(gainTopic + "/kS", 0.0);
100+
private static final DoubleEntry gainKv = NtUtils.createDoubleEntry(gainTopic + "/kV", 0.0);
101+
private static final DoubleEntry gainKa = NtUtils.createDoubleEntry(gainTopic + "/kA", 0.0);
102+
private static final DoubleEntry gainKp = NtUtils.createDoubleEntry(gainTopic + "/kP", 0.0);
103+
private static final DoubleEntry gainKd = NtUtils.createDoubleEntry(gainTopic + "/kD", 0.0);
104+
105+
static {
106+
if (!Constants.Flags.TUNE_MODE) {
107+
gainKg.unpublish();
108+
gainKs.unpublish();
109+
gainKv.unpublish();
110+
gainKa.unpublish();
111+
gainKp.unpublish();
112+
gainKd.unpublish();
113+
gainKg.close();
114+
gainKs.close();
115+
gainKv.close();
116+
gainKa.close();
117+
gainKp.close();
118+
gainKd.close();
119+
}
120+
}
121+
94122
/**
95123
* @return fake {@link Elevator} subsystem
96124
*/
@@ -120,6 +148,11 @@ public void periodic() {
120148
hardware.periodic();
121149

122150
filteredCurrent = currentFilter.calculate(hardware.getParentStatorCurrentAmps());
151+
152+
if (Constants.Flags.TUNE_MODE) {
153+
hardware.setGains(
154+
gainKg.get(), gainKs.get(), gainKv.get(), gainKa.get(), gainKp.get(), gainKd.get());
155+
}
123156
}
124157

125158
/**

src/main/java/org/frc6423/robot/subsystems/superstructure/elevator/ElevatorIO.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,18 @@ public interface ElevatorIO extends AutoCloseable {
6262
*/
6363
public void resetEncoders(double poseMeters);
6464

65+
/**
66+
* Set elevator gains for onboard feedforward and feedback control
67+
*
68+
* @param kG output to overcome gravity
69+
* @param kS output to overcome static friction
70+
* @param kV output per unit of target velocity (output/mps)
71+
* @param kA output per unit of target acceleration (output/(mps/s))
72+
* @param kP output per unit of error in position (meters)
73+
* @param kD output per unit of error in velocity (mps)
74+
*/
75+
public void setGains(double kG, double kS, double kV, double kA, double kP, double kD);
76+
6577
/**
6678
* Set parent/child motors voltage setpoint
6779
*

src/main/java/org/frc6423/robot/subsystems/superstructure/elevator/ElevatorIONone.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ public double getChildTempCelsius() {
5151
@Override
5252
public void resetEncoders(double poseMeters) {}
5353

54+
@Override
55+
public void setGains(double kG, double kS, double kV, double kA, double kP, double kD) {}
56+
5457
@Override
5558
public void setVolts(double volts) {}
5659

src/main/java/org/frc6423/robot/subsystems/superstructure/elevator/ElevatorIOReal.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,19 @@ public void resetEncoders(double poseMeters) {
134134
parent.setPosition(poseMeters);
135135
}
136136

137+
@Override
138+
public void setGains(double kG, double kS, double kV, double kA, double kP, double kD) {
139+
conf.Slot0.kG = kG;
140+
conf.Slot0.kS = kS;
141+
conf.Slot0.kV = kV;
142+
conf.Slot0.kA = kA;
143+
conf.Slot0.kP = kP;
144+
conf.Slot0.kD = kD;
145+
146+
parent.getConfigurator().apply(conf);
147+
child.getConfigurator().apply(conf);
148+
}
149+
137150
@Override
138151
public void setVolts(double volts) {
139152
parent.setControl(voltReq.withOutput(volts).withEnableFOC(true));

src/main/java/org/frc6423/robot/subsystems/superstructure/elevator/ElevatorIOSim.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,16 @@ public double getChildTempCelsius() {
9999
@Override
100100
public void resetEncoders(double poseMeters) {}
101101

102+
@Override
103+
public void setGains(double kG, double kS, double kV, double kA, double kP, double kD) {
104+
feedforward.setKg(kG);
105+
feedforward.setKs(kS);
106+
feedforward.setKv(kV);
107+
feedforward.setKa(kA);
108+
feedback.setP(kP);
109+
feedback.setD(kD);
110+
}
111+
102112
@Override
103113
public void setVolts(double volts) {
104114
appliedVolts = MathUtil.clamp(volts, -12.0, 12.0);

0 commit comments

Comments
 (0)