Skip to content

Commit 958bf02

Browse files
committed
add in initial climb test
1 parent 8f901c2 commit 958bf02

File tree

11 files changed

+154
-52
lines changed

11 files changed

+154
-52
lines changed

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

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@
6060
import frc.robot.subsystems.battMon.BattMonSubsystem;
6161
import frc.robot.subsystems.biscuit.BiscuitIOFX;
6262
import frc.robot.subsystems.biscuit.BiscuitSubsystem;
63+
import frc.robot.subsystems.climb.ClimbIO;
64+
import frc.robot.subsystems.climb.ClimbIOServoFX;
6365
import frc.robot.subsystems.climb.ClimbSubsystem;
6466
import frc.robot.subsystems.coral.CoralIO;
6567
import frc.robot.subsystems.coral.CoralIOFX;
@@ -93,6 +95,7 @@ public class RobotContainer {
9395
private final BiscuitIOFX biscuitIO;
9496
private final BiscuitSubsystem biscuitSubsystem;
9597

98+
private final ClimbIO climbIO;
9699
private final ClimbSubsystem climbSubsystem;
97100

98101
private final CoralIO coralIO;
@@ -132,7 +135,8 @@ public RobotContainer() {
132135
biscuitIO = new BiscuitIOFX();
133136
biscuitSubsystem = new BiscuitSubsystem(biscuitIO);
134137

135-
climbSubsystem = new ClimbSubsystem();
138+
climbIO = new ClimbIOServoFX();
139+
climbSubsystem = new ClimbSubsystem(climbIO);
136140

137141
coralIO = new CoralIOFX();
138142
coralSubsystem = new CoralSubsystem(coralIO);
@@ -186,6 +190,7 @@ private void configureTelemetry() {
186190
funnelSubsystem.registerWith(telemetryService);
187191
biscuitSubsystem.registerWith(telemetryService);
188192
ledSubsystem.registerWith(telemetryService);
193+
climbSubsystem.registerWith(telemetryService);
189194
telemetryService.start();
190195
}
191196

@@ -264,6 +269,10 @@ private void configureDriverBindings() {
264269
.onFalse(
265270
new FloorAlgaeCommand(
266271
robotStateSubsystem, elevatorSubsystem, biscuitSubsystem, algaeSubsystem));
272+
273+
// climb
274+
new JoystickButton(driveJoystick, Button.SWA.id)
275+
.onTrue(new InstantCommand(() -> robotStateSubsystem.toClimb()));
267276
}
268277

269278
private void configureOperatorBindings() {
@@ -311,6 +320,10 @@ private void configureOperatorBindings() {
311320
.onTrue(new SetScoreSideRightCommand(robotStateSubsystem));
312321
new JoystickButton(xboxController, XboxController.Button.kLeftStick.value)
313322
.onTrue(new setScoreSideLeftCommand(robotStateSubsystem));
323+
324+
// Prep Climb
325+
new JoystickButton(xboxController, XboxController.Button.kStart.value)
326+
.onTrue(new InstantCommand(() -> robotStateSubsystem.toPrepClimb()));
314327
}
315328

316329
private void configureTestOperatorBindings() {
@@ -473,6 +486,15 @@ public void configurePitDashboard() {
473486
.withPosition(1, 0)
474487
.withSize(1, 1);
475488

489+
Shuffleboard.getTab("Pit")
490+
.add("Prep Climb", new InstantCommand(() -> robotStateSubsystem.toPrepClimb()))
491+
.withPosition(3, 0)
492+
.withSize(1, 1);
493+
Shuffleboard.getTab("Pit")
494+
.add("Climb", new InstantCommand(() -> robotStateSubsystem.toClimb()))
495+
.withPosition(4, 0)
496+
.withSize(1, 1);
497+
476498
// Shuffleboard.getTab("Pit")
477499
// .add(
478500
// "Start Auton",

src/main/java/frc/robot/constants/ClimbConstants.java

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
package frc.robot.constants;
22

33
import static edu.wpi.first.units.Units.Degrees;
4+
import static edu.wpi.first.units.Units.Rotations;
45

56
import com.ctre.phoenix6.configs.CurrentLimitsConfigs;
7+
import com.ctre.phoenix6.configs.FeedbackConfigs;
68
import com.ctre.phoenix6.configs.HardwareLimitSwitchConfigs;
79
import com.ctre.phoenix6.configs.MotionMagicConfigs;
810
import com.ctre.phoenix6.configs.MotorOutputConfigs;
911
import com.ctre.phoenix6.configs.Slot0Configs;
1012
import com.ctre.phoenix6.configs.SoftwareLimitSwitchConfigs;
1113
import com.ctre.phoenix6.configs.TalonFXConfiguration;
14+
import com.ctre.phoenix6.signals.FeedbackSensorSourceValue;
1215
import com.ctre.phoenix6.signals.ForwardLimitSourceValue;
1316
import com.ctre.phoenix6.signals.ForwardLimitTypeValue;
1417
import com.ctre.phoenix6.signals.GravityTypeValue;
@@ -26,22 +29,24 @@ public class ClimbConstants {
2629
public static int kRatchetServoId = 2;
2730
public static int kCageAlignedDIOId = 11;
2831

29-
public static final Angle kPivotArmCloseEnough =
30-
Degrees.of(5.0); // all of these arbitrary numbers
31-
public static final Angle kArmMaxFwd = Degrees.of(100);
32-
public static final Angle kArmMaxRev = Degrees.of(-100);
32+
public static final double kPivotArmCloseEnough = 0.01; // FIXME
33+
public static final double kArmMaxFwd = 0.260;
34+
public static final double kArmMaxRev = 0.03;
3335
public static final Angle kArmZeroTicks = Degrees.of(1530);
3436

3537
// Deploy Servo
36-
public static final double kPinDeployedPosition = 1.0;
37-
public static final double kPinRetractedPosition = 0.0;
38+
public static final double kPinDeployedPosition = 0.75;
39+
public static final double kPinRetractedPosition = 0.18;
3840

3941
// Ratchet Servo
40-
public static final double kRatchetEngatedPos = 1.0;
41-
public static final double kRatchetDisengagedPos = 0.0;
42+
public static final double kRatchetEngagedPos = 0.0;
43+
public static final double kRatchetDisengagedPos = 1.0;
4244

4345
// Climb positions
44-
public static final Angle kClimbCagePos = Degrees.of(3);
46+
public static final Angle kClimbCagePos = Rotations.of(4); // fixme
47+
public static final Double kClimbRatchedEngage = 0.1;
48+
public static final double kFullyClimbed = 0.260;
49+
public static final double kClimbOpenLoopSpeed = 4.0;
4550

4651
public static TalonFXConfiguration getPivotArmFxConfig() {
4752
TalonFXConfiguration armFxConfig = new TalonFXConfiguration();
@@ -50,10 +55,9 @@ public static TalonFXConfiguration getPivotArmFxConfig() {
5055
new CurrentLimitsConfigs()
5156
.withStatorCurrentLimit(10)
5257
.withStatorCurrentLimitEnable(false)
53-
.withStatorCurrentLimit(20)
54-
.withSupplyCurrentLimit(10)
55-
.withSupplyCurrentLowerLimit(8)
56-
.withSupplyCurrentLowerTime(0.02)
58+
.withSupplyCurrentLimit(30)
59+
.withSupplyCurrentLowerLimit(30)
60+
.withSupplyCurrentLowerTime(1)
5761
.withSupplyCurrentLimitEnable(true);
5862
armFxConfig.CurrentLimits = current;
5963

@@ -101,9 +105,15 @@ public static TalonFXConfiguration getPivotArmFxConfig() {
101105
MotorOutputConfigs motorOut =
102106
new MotorOutputConfigs()
103107
.withDutyCycleNeutralDeadband(0.01)
104-
.withNeutralMode(NeutralModeValue.Coast);
108+
.withNeutralMode(NeutralModeValue.Brake);
105109
armFxConfig.MotorOutput = motorOut;
106110

111+
FeedbackConfigs feedbackConfigs =
112+
new FeedbackConfigs()
113+
.withFeedbackSensorSource(FeedbackSensorSourceValue.RemoteCANcoder)
114+
.withFeedbackRemoteSensorID(kCANcoderId);
115+
armFxConfig.Feedback = feedbackConfigs;
116+
107117
return armFxConfig;
108118
}
109119

src/main/java/frc/robot/subsystems/biscuit/BiscuitIOFX.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,9 @@ public BiscuitIOFX() {
5555
velocity = talon.getVelocity();
5656
position = talon.getPosition();
5757
rawQuadrature = talon.getRawQuadraturePosition();
58-
rawQuadrature.setUpdateFrequency(200);
58+
rawQuadrature.setUpdateFrequency(20);
5959
rawPulseWidth = talon.getRawPulseWidthPosition();
60-
rawPulseWidth.setUpdateFrequency(20);
60+
rawPulseWidth.setUpdateFrequency(200);
6161
zero();
6262
}
6363

src/main/java/frc/robot/subsystems/climb/ClimbIO.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package frc.robot.subsystems.climb;
22

3-
import static edu.wpi.first.units.Units.Rotations;
4-
53
import com.ctre.phoenix6.configs.CurrentLimitsConfigs;
64
import edu.wpi.first.units.measure.Angle;
75
import org.littletonrobotics.junction.AutoLog;
@@ -11,7 +9,7 @@ public interface ClimbIO {
119

1210
@AutoLog
1311
static class ClimbIOInputs {
14-
public Angle position = Rotations.of(0.0);
12+
public double position = 0.0;
1513
public double velocity = 0.0;
1614
public double ratchetServoPosition = 0.0;
1715
public double pinServoPosition = 0.0;
@@ -34,4 +32,8 @@ public default void registerWith(TelemetryService telemetryService) {}
3432
public default void setSoftLimitsEnabled(boolean enable) {}
3533

3634
public default void setCurrentLimit(CurrentLimitsConfigs config) {}
35+
36+
public default void setPercent(double percent) {}
37+
38+
public default void setCoastMode(boolean coast) {}
3739
}

src/main/java/frc/robot/subsystems/climb/ClimbIOServoFX.java

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,23 @@
77
import com.ctre.phoenix6.configs.TalonFXConfiguration;
88
import com.ctre.phoenix6.configs.TalonFXConfigurator;
99
import com.ctre.phoenix6.controls.MotionMagicDutyCycle;
10+
import com.ctre.phoenix6.controls.VoltageOut;
11+
import com.ctre.phoenix6.hardware.CANcoder;
1012
import com.ctre.phoenix6.hardware.TalonFX;
13+
import com.ctre.phoenix6.signals.NeutralModeValue;
1114
import edu.wpi.first.units.measure.Angle;
1215
import edu.wpi.first.wpilibj.Servo;
1316
import frc.robot.constants.ClimbConstants;
1417
import frc.robot.subsystems.climb.ClimbIO.ClimbIOInputs;
1518
import org.slf4j.Logger;
1619
import org.slf4j.LoggerFactory;
20+
import org.strykeforce.telemetry.TelemetryService;
1721

1822
public class ClimbIOServoFX implements ClimbIO {
1923
// will prob need healthchecks eventually
2024
private Logger logger;
2125
private TalonFX talonFxPivotArmFront;
22-
private TalonFX talonFxPivotArmBack;
26+
private CANcoder canCoder;
2327
private Servo ratchetServo;
2428
private Servo pinServo;
2529

@@ -28,26 +32,24 @@ public class ClimbIOServoFX implements ClimbIO {
2832
private Angle pivotArmSetpoint;
2933

3034
TalonFXConfigurator configuratorFront;
31-
TalonFXConfigurator configuratorBack;
3235
private MotionMagicDutyCycle positionRequestMain =
3336
new MotionMagicDutyCycle(0).withEnableFOC(false).withFeedForward(0).withSlot(0);
37+
private VoltageOut voltageRequest = new VoltageOut(0).withEnableFOC(false);
3438

3539
StatusSignal<Angle> currPosition;
3640

3741
public ClimbIOServoFX() {
3842
logger = LoggerFactory.getLogger(this.getClass());
3943
talonFxPivotArmFront = new TalonFX(ClimbConstants.kPivotArmFrontFxId);
4044
ratchetServo = new Servo(ClimbConstants.kRatchetServoId);
45+
canCoder = new CANcoder(ClimbConstants.kCANcoderId);
4146
pinServo = new Servo(ClimbConstants.kDeployServoId);
4247

4348
absPivotArmFrontSensorInitial =
4449
talonFxPivotArmFront.getPosition().getValue(); // only for logging
4550
configuratorFront = talonFxPivotArmFront.getConfigurator();
46-
configuratorBack = talonFxPivotArmBack.getConfigurator();
4751
configuratorFront.apply(new TalonFXConfiguration());
4852
configuratorFront.apply(ClimbConstants.getPivotArmFxConfig());
49-
configuratorBack.apply(new TalonFXConfiguration());
50-
configuratorBack.apply(ClimbConstants.getPivotArmFxConfig());
5153

5254
currPosition = talonFxPivotArmFront.getPosition();
5355
}
@@ -81,7 +83,7 @@ public void setPinServoPosition(double position) {
8183

8284
@Override
8385
public void updateInputs(ClimbIOInputs inputs) {
84-
inputs.position = currPosition.refresh().getValue();
86+
inputs.position = currPosition.refresh().getValueAsDouble();
8587
inputs.ratchetServoPosition = ratchetServo.getPosition();
8688
inputs.pinServoPosition = pinServo.getPosition();
8789
}
@@ -99,7 +101,6 @@ public void zero() {
99101
100102
);
101103
*/
102-
talonFxPivotArmBack.setPosition(0.0);
103104
talonFxPivotArmFront.setPosition(0.0);
104105
}
105106

@@ -117,8 +118,26 @@ public void setSoftLimitsEnabled(boolean enable) {
117118
@Override
118119
public void setCurrentLimit(CurrentLimitsConfigs config) {
119120
configuratorFront.apply(config);
120-
configuratorBack.apply(config);
121+
}
122+
123+
@Override
124+
public void setPercent(double percent) {
125+
talonFxPivotArmFront.setControl(voltageRequest.withOutput(percent));
126+
}
127+
128+
@Override
129+
public void setCoastMode(boolean coast) {
130+
configuratorFront.apply(
131+
ClimbConstants.getPivotArmFxConfig()
132+
.MotorOutput
133+
.withNeutralMode(coast ? NeutralModeValue.Coast : NeutralModeValue.Brake));
121134
}
122135

123136
public void goToZero() {}
137+
138+
@Override
139+
public void registerWith(TelemetryService telemetryService) {
140+
telemetryService.register(talonFxPivotArmFront, false);
141+
telemetryService.register(canCoder);
142+
}
124143
}

0 commit comments

Comments
 (0)