Skip to content

Commit 4514204

Browse files
committed
Add tunable elevator setpoints and PID with LoggedTunableNumber
Introduced the LoggedTunableNumber utility for runtime-tunable constants and integrated it into the Elevator subsystem for setpoints and PID gains. Updated ElevatorIO and ElevatorIOTalonFX to support dynamic PID and characterization parameter updates
1 parent ecbccfc commit 4514204

File tree

7 files changed

+340
-105
lines changed

7 files changed

+340
-105
lines changed

build.gradle

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,6 @@ wpi.java.debugJni = false
6363
// Set this to true to enable desktop support.
6464
def includeDesktopSupport = true
6565

66-
// Configuration for AdvantageKit
67-
task(replayWatch, type: JavaExec) {
68-
mainClass = "org.littletonrobotics.junction.ReplayWatch"
69-
classpath = sourceSets.main.runtimeClasspath
70-
}
7166

7267
// Defining my dependencies. In this case, WPILib (+ friends), and vendor libraries.
7368
// Also defines JUnit 4.
@@ -215,4 +210,11 @@ spotless {
215210
indentWithSpaces(2)
216211
endWithNewline()
217212
}
213+
214+
// Configuration for AdvantageKit
215+
task(replayWatch, type: JavaExec) {
216+
mainClass = "org.littletonrobotics.junction.ReplayWatch"
217+
classpath = sourceSets.main.runtimeClasspath
218+
}
219+
218220
}

src/main/java/frc/robot/Constants.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,7 @@ public static enum Mode {
3434
/** Replaying from a log file. */
3535
REPLAY
3636
}
37+
38+
public static final boolean tuningMode = false;
39+
public static final boolean disableHAL = false;
3740
}
Lines changed: 78 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,81 @@
11
package frc.robot.subsystems.elevator;
22

3-
public class Elevator {
4-
3+
import edu.wpi.first.math.filter.Debouncer;
4+
import edu.wpi.first.math.filter.Debouncer.DebounceType;
5+
import edu.wpi.first.math.trajectory.TrapezoidProfile;
6+
import edu.wpi.first.wpilibj.Alert;
7+
import edu.wpi.first.wpilibj2.command.SubsystemBase;
8+
import frc.robot.util.LoggedTunableNumber;
9+
import java.util.function.BooleanSupplier;
10+
import java.util.function.Supplier;
11+
import org.littletonrobotics.junction.AutoLogOutput;
12+
13+
public class Elevator extends SubsystemBase {
14+
15+
private static final LoggedTunableNumber L4Setpoint =
16+
new LoggedTunableNumber("Elevator/Setpoints/L4");
17+
private static final LoggedTunableNumber L3Setpoint =
18+
new LoggedTunableNumber("Elevator/Setpoints/L3");
19+
private static final LoggedTunableNumber L2Setpoint =
20+
new LoggedTunableNumber("Elevator/Setpoints/L2");
21+
private static final LoggedTunableNumber L1Setpoint =
22+
new LoggedTunableNumber("Elevator/Setpoints/L1");
23+
private static final LoggedTunableNumber ReefAlgaeTopSetpoint =
24+
new LoggedTunableNumber("Elevator/Setpoints/ReefTop");
25+
private static final LoggedTunableNumber ReefAlgaeBotSetpoint =
26+
new LoggedTunableNumber("Elevator/Setpoints/ReefBot");
27+
private static final LoggedTunableNumber GroundAlgaeSetpoint =
28+
new LoggedTunableNumber("Elevator/Setpoints/Ground");
29+
private static final LoggedTunableNumber ProcessorSetpoint =
30+
new LoggedTunableNumber("Elevator/Setpoints/Processor");
31+
private static final LoggedTunableNumber BalanceAlgaeSetpoint =
32+
new LoggedTunableNumber("Elevator/Setpoints/Balanced");
33+
private static final LoggedTunableNumber PreclimbSetpoint =
34+
new LoggedTunableNumber("Elevator/Setpoints/Preclimb");
35+
36+
private static final LoggedTunableNumber kP = new LoggedTunableNumber("Elevator/PID/P");
37+
private static final LoggedTunableNumber kI = new LoggedTunableNumber("Elevator/PID/I");
38+
private static final LoggedTunableNumber kD = new LoggedTunableNumber("Elevator/PID/D");
39+
private static final LoggedTunableNumber kA = new LoggedTunableNumber("Elevator/PID/A");
40+
private static final LoggedTunableNumber kV = new LoggedTunableNumber("Elevator/PID/V");
41+
private static final LoggedTunableNumber kS = new LoggedTunableNumber("Elevator/PID/S");
42+
private static final LoggedTunableNumber kG = new LoggedTunableNumber("Elevator/PID/G");
43+
44+
private static final LoggedTunableNumber ClimbVoltage =
45+
new LoggedTunableNumber("Elevator/Climbing/ClimbVoltage");
46+
private static final LoggedTunableNumber ZeroVoltage =
47+
new LoggedTunableNumber("Elevator/Climbing/ZeroVoltage");
48+
private static final LoggedTunableNumber AutoZeroVoltage =
49+
new LoggedTunableNumber("Elevator/Climbing/AutoZeroVoltage");
50+
51+
private final ElevatorIOInputsAutoLogged inputs = new ElevatorIOInputsAutoLogged();
52+
53+
private final Debouncer motorConnectedDebouncer = new Debouncer(0.5, DebounceType.kFalling);
54+
private final Debouncer followerMotorConnectedDebouncer =
55+
new Debouncer(0.5, DebounceType.kFalling);
56+
57+
private final Alert motorDisconnectedAlert =
58+
new Alert("Elevator leader motor disconnected!", Alert.AlertType.kWarning);
59+
private final Alert followerDisconnectedAlert =
60+
new Alert("Elevator follower motor disconnected!", Alert.AlertType.kWarning);
61+
private BooleanSupplier coastOverride = () -> false;
62+
private BooleanSupplier disabledOverride = () -> false;
63+
64+
@AutoLogOutput private boolean brakeModeEnabled = true;
65+
66+
private final ElevatorIO io;
67+
68+
public Elevator(ElevatorIO io) {
69+
this.io = io;
70+
}
71+
72+
public void periodic() {
73+
io.updateInputs(inputs);
74+
}
75+
//
76+
// private static final LoggedTunableNumber LimitDIO = new
77+
// LoggedTunableNumber("Elevator/Limit/LimitValue");
78+
// private static final LoggedTunableNumber ServoPosition = new
79+
// LoggedTunableNumber("Elevator/Servo/Position");
80+
581
}

src/main/java/frc/robot/subsystems/elevator/ElevatorIO.java

Lines changed: 43 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -3,58 +3,46 @@
33
import org.littletonrobotics.junction.AutoLog;
44

55
public interface ElevatorIO {
6-
@AutoLog
7-
class ElevatorIOInputs {
8-
public ElevatorIOData data = new ElevatorIOData(
9-
false,
10-
false,
11-
0.0,
12-
0.0,
13-
0.0,
14-
0.0,
15-
0.0,
16-
0.0,
17-
0.0,
18-
0.0,
19-
0.0,
20-
0.0,
21-
0.0,
22-
0.0
23-
);
24-
}
25-
record ElevatorIOData (
26-
boolean masterConnected,
27-
boolean followerConnected,
28-
double masterPositionRad,
29-
double followerPositionRad,
30-
double masterVelocityRadPerSec,
31-
double followerVelocityRadPerSec,
32-
double masterAppliedVolts,
33-
double followerAppliedVolts,
34-
double masterTorqueCurrentAmps,
35-
double followerTorqueCurrentAmps,
36-
double masterSupplyCurrentAmps,
37-
double followerSupplyCurrentAmps,
38-
double masterTemp,
39-
double followerTemp
40-
) {}
41-
42-
default void updateInputs(ElevatorIOInputs inputs) {}
43-
44-
default void runOpenLoop(double output) {}
45-
46-
default void runVolts(double volts) {}
47-
48-
default void MotionMagic(double volts) {}
49-
50-
default void stop() {}
51-
52-
default void runPosition(double positionRad) {}
53-
54-
default void setPID(double kP, double kI, double kD) {}
55-
56-
default void setBrakeMode(boolean enabled) {}
57-
58-
default void coast() {}
59-
60-
}
6+
@AutoLog
7+
class ElevatorIOInputs {
8+
public ElevatorIOData data =
9+
new ElevatorIOData(
10+
false, false, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
11+
}
12+
13+
record ElevatorIOData(
14+
boolean masterConnected,
15+
boolean followerConnected,
16+
double masterPositionRad,
17+
double followerPositionRad,
18+
double masterVelocityRadPerSec,
19+
double followerVelocityRadPerSec,
20+
double masterAppliedVolts,
21+
double followerAppliedVolts,
22+
double masterTorqueCurrentAmps,
23+
double followerTorqueCurrentAmps,
24+
double masterSupplyCurrentAmps,
25+
double followerSupplyCurrentAmps,
26+
double masterTemp,
27+
double followerTemp) {}
28+
29+
default void updateInputs(ElevatorIOInputs inputs) {}
30+
31+
default void runOpenLoop(double output) {}
32+
33+
default void runVolts(double volts) {}
34+
35+
default void MotionMagic(double volts) {}
36+
37+
default void coast() {}
38+
39+
default void stop() {}
40+
41+
default void runPosition(double positionRad) {}
42+
43+
default void setPID(double kP, double kI, double kD) {}
44+
45+
default void setCharacterization(double kA, double kV, double kG, double kS) {}
46+
47+
default void setBrakeMode(boolean enabled) {}
48+
}

0 commit comments

Comments
 (0)