Skip to content

Commit ff567b9

Browse files
committed
sysid testing
1 parent 6ef255e commit ff567b9

File tree

3 files changed

+62
-1
lines changed

3 files changed

+62
-1
lines changed

src/main/java/frc/robot/Robot.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public Robot() {
2525
BuildConstants.MAVEN_NAME,
2626
BuildConstants.GIT_SHA,
2727
BuildConstants.BUILD_DATE,
28+
true,
2829
true
2930
);
3031
m_robotContainer = new RobotContainer();

src/main/java/frc/robot/RobotContainer.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,28 @@
99
import edu.wpi.first.wpilibj2.command.Command;
1010
import edu.wpi.first.wpilibj2.command.Commands;
1111
import edu.wpi.first.wpilibj2.command.button.CommandXboxController;
12+
import edu.wpi.first.wpilibj2.command.sysid.SysIdRoutine;
1213
import frc.robot.subsystems.drivetrain.DriveSubsystem;
14+
import frc.robot.subsystems.lift.LiftSubsystem;
1315

1416
public class RobotContainer {
1517
private final CommandXboxController joystick = new CommandXboxController(0);
1618

1719
private final Telemetry logger = new Telemetry(Constants.Drive.MAX_SPEED.in(MetersPerSecond));
1820

1921
private final DriveSubsystem DRIVE_SUBSYSTEM = new DriveSubsystem(DriveSubsystem.initializeHardware(), logger);
22+
private final LiftSubsystem LIFT_SUBSYSTEM = LiftSubsystem.getInstance(LiftSubsystem.initializeHardware());
2023

2124
public RobotContainer() {
2225
configureBindings();
2326
}
2427

2528
private void configureBindings() {
2629
DRIVE_SUBSYSTEM.bindControls(() -> -joystick.getLeftY(), () -> -joystick.getLeftX(), () -> -joystick.getRightX());
30+
joystick.a().whileTrue(LIFT_SUBSYSTEM.getElevatorSysIDRoutine().dynamic(SysIdRoutine.Direction.kForward));
31+
joystick.b().whileTrue(LIFT_SUBSYSTEM.getElevatorSysIDRoutine().dynamic(SysIdRoutine.Direction.kReverse));
32+
joystick.x().whileTrue(LIFT_SUBSYSTEM.getElevatorSysIDRoutine().quasistatic(SysIdRoutine.Direction.kForward));
33+
joystick.y().whileTrue(LIFT_SUBSYSTEM.getElevatorSysIDRoutine().quasistatic(SysIdRoutine.Direction.kReverse));
2734
}
2835

2936
public Command getAutonomousCommand() {

src/main/java/frc/robot/subsystems/lift/LiftSubsystem.java

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,34 @@
44
import static edu.wpi.first.units.Units.Degrees;
55
import static edu.wpi.first.units.Units.Inches;
66
import static edu.wpi.first.units.Units.Meters;
7+
import static edu.wpi.first.units.Units.Millimeters;
78
import static edu.wpi.first.units.Units.Radians;
89
import static edu.wpi.first.units.Units.Rotations;
9-
import static edu.wpi.first.units.Units.Millimeters;
10+
import static edu.wpi.first.units.Units.Volts;
11+
12+
import java.util.function.Consumer;
1013

1114
import org.lasarobotics.fsm.StateMachine;
1215
import org.lasarobotics.fsm.SystemState;
1316
import org.lasarobotics.hardware.ctre.TalonFX;
1417
import org.lasarobotics.hardware.generic.LimitSwitch;
1518
import org.lasarobotics.hardware.generic.LimitSwitch.SwitchPolarity;
1619

20+
import com.ctre.phoenix6.SignalLogger;
1721
import com.ctre.phoenix6.configs.TalonFXConfiguration;
1822
import com.ctre.phoenix6.controls.DutyCycleOut;
1923
import com.ctre.phoenix6.controls.MotionMagicVoltage;
24+
import com.ctre.phoenix6.controls.VoltageOut;
2025
import com.ctre.phoenix6.signals.FeedbackSensorSourceValue;
2126
import com.ctre.phoenix6.signals.GravityTypeValue;
2227
import com.ctre.phoenix6.signals.InvertedValue;
2328
import com.ctre.phoenix6.signals.NeutralModeValue;
2429

2530
import edu.wpi.first.units.measure.Angle;
2631
import edu.wpi.first.units.measure.Distance;
32+
import edu.wpi.first.wpilibj.sysid.SysIdRoutineLog;
33+
import edu.wpi.first.wpilibj.sysid.SysIdRoutineLog.State;
34+
import edu.wpi.first.wpilibj2.command.sysid.SysIdRoutine;
2735
import frc.robot.Constants;
2836

2937
public class LiftSubsystem extends StateMachine implements AutoCloseable {
@@ -734,6 +742,11 @@ public SystemState nextState() {
734742
private final MotionMagicVoltage m_pivotPositionSetter;
735743
private final MotionMagicVoltage m_elevatorPositionSetter;
736744
private final LimitSwitch m_elevatorHomingBeamBreak;
745+
private final Consumer<SysIdRoutineLog.State> m_elevatorSysIDLogConsumer;
746+
private final Consumer<SysIdRoutineLog.State> m_pivotSysIDLogConsumer;
747+
private static final String ELEVATOR_MOTOR_SYSID_STATE_LOG_ENTRY = "/ElevatorMotorSysIDTestState";
748+
private static final String PIVOT_MOTOR_SYSID_STATE_LOG_ENTRY = "/PivotMotorSysIDTestState";
749+
737750

738751
/** Creates a new LiftSubsystem */
739752
private LiftSubsystem(Hardware liftHardware) {
@@ -809,6 +822,9 @@ private LiftSubsystem(Hardware liftHardware) {
809822
pivotConfig.Slot0.kS = 0;
810823
pivotConfig.Slot0.GravityType = GravityTypeValue.Arm_Cosine;
811824

825+
m_elevatorSysIDLogConsumer = state -> SignalLogger.writeString(getName() + ELEVATOR_MOTOR_SYSID_STATE_LOG_ENTRY, state.toString());
826+
m_pivotSysIDLogConsumer = state -> SignalLogger.writeString(getName() + PIVOT_MOTOR_SYSID_STATE_LOG_ENTRY, state.toString());
827+
812828
// Apply configs for TalonFX motors
813829
m_elevatorMotor.applyConfigs(elevatorConfig);
814830
m_pivotMotor.applyConfigs(pivotConfig);
@@ -919,6 +935,43 @@ public boolean armAt(Angle targetAngle) {
919935
return (currentAngle.isNear(targetAngle, ARM_TOLERANCE));
920936
}
921937

938+
/**
939+
* Gets the SysID routine for the elevator
940+
*/
941+
public SysIdRoutine getElevatorSysIDRoutine() {
942+
return new SysIdRoutine(
943+
new SysIdRoutine.Config(
944+
null,
945+
Volts.of(4),
946+
null,
947+
m_elevatorSysIDLogConsumer
948+
),
949+
new SysIdRoutine.Mechanism(
950+
voltage -> m_elevatorMotor.setControl(new VoltageOut(voltage)),
951+
null, s_liftinstance)
952+
);
953+
}
954+
955+
956+
/**
957+
*
958+
* @return
959+
*/
960+
public SysIdRoutine getPivotSysIDRoutine() {
961+
return new SysIdRoutine(
962+
new SysIdRoutine.Config(
963+
null,
964+
Volts.of(4),
965+
null,
966+
m_pivotSysIDLogConsumer
967+
),
968+
new SysIdRoutine.Mechanism(
969+
voltage -> m_pivotMotor.setControl(new VoltageOut(voltage)),
970+
null, s_liftinstance)
971+
);
972+
}
973+
974+
922975
/**
923976
* Stop the elevator motor
924977
*/

0 commit comments

Comments
 (0)