Skip to content

Commit cb0cb50

Browse files
committed
stubbed out climb subsystem
1 parent 09cd8f4 commit cb0cb50

File tree

7 files changed

+105
-85
lines changed

7 files changed

+105
-85
lines changed

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import com.ctre.phoenix6.signals.NeutralModeValue;
1717
import com.ctre.phoenix6.signals.ReverseLimitSourceValue;
1818
import com.ctre.phoenix6.signals.ReverseLimitTypeValue;
19-
2019
import edu.wpi.first.units.measure.Angle;
2120
import edu.wpi.first.units.measure.AngularVelocity;
2221

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,19 @@
22

33
import static edu.wpi.first.units.Units.Rotations;
44

5+
import edu.wpi.first.units.measure.Angle;
56
import org.littletonrobotics.junction.AutoLog;
67
import org.strykeforce.telemetry.TelemetryService;
78

8-
import edu.wpi.first.units.measure.Angle;
9-
109
public interface ClimbArmIO {
11-
12-
@AutoLog static class ClimbArmIOInputs {
13-
public Angle position = Rotations.of(0.0);
14-
}
10+
11+
@AutoLog
12+
static class ClimbArmIOInputs {
13+
public Angle position = Rotations.of(0.0);
14+
}
1515

1616
public default void setPosition(Angle position) {}
17-
17+
1818
public default void updateInputs(ClimbArmIOInputs inputs) {}
1919

2020
public default void zero() {}

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

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

3-
import static edu.wpi.first.units.Units.Degrees;
4-
5-
import org.slf4j.Logger;
6-
import org.slf4j.LoggerFactory;
3+
import static edu.wpi.first.units.Units.Rotations;
74

85
import com.ctre.phoenix6.StatusSignal;
96
import com.ctre.phoenix6.configs.TalonFXConfiguration;
107
import com.ctre.phoenix6.configs.TalonFXConfigurator;
118
import com.ctre.phoenix6.controls.MotionMagicDutyCycle;
129
import com.ctre.phoenix6.hardware.TalonFX;
13-
1410
import edu.wpi.first.units.measure.Angle;
1511
import frc.robot.constants.ClimbConstants;
1612
import frc.robot.constants.ExampleConstants;
13+
import org.slf4j.Logger;
14+
import org.slf4j.LoggerFactory;
1715

1816
public class ClimbArmIOFX implements ClimbArmIO {
1917
private Logger logger;
2018
private TalonFX talonFx;
21-
19+
2220
private final Angle absSensorInitial;
2321
private Angle relSetpointOffset;
2422
private Angle setpoint;
2523

2624
TalonFXConfigurator configurator;
27-
private MotionMagicDutyCycle positionRequest = new MotionMagicDutyCycle(0).withEnableFOC(false).withFeedForward(0).withSlot(0);
28-
StatusSignal<Angle> currPosition;
25+
private MotionMagicDutyCycle positionRequest =
26+
new MotionMagicDutyCycle(0).withEnableFOC(false).withFeedForward(0).withSlot(0);
27+
StatusSignal<Angle> curPosition;
2928

3029
public ClimbArmIOFX() {
3130
logger = LoggerFactory.getLogger(this.getClass());
@@ -37,21 +36,21 @@ public ClimbArmIOFX() {
3736
configurator.apply(new TalonFXConfiguration()); // Factory default motor controller
3837
configurator.apply(ClimbConstants.getArmFxConfig());
3938

40-
currPosition = talonFx.getPosition();
39+
curPosition = talonFx.getPosition();
4140
}
4241

4342
@Override
4443
public void setPosition(Angle position) {
4544
setpoint = position.plus(relSetpointOffset);
4645

47-
logger.info("Setting position to {} degrees", setpoint.in(Degrees));
46+
logger.info("Setting position to {} rotations", setpoint.in(Rotations));
4847

4948
talonFx.setControl(positionRequest.withPosition(setpoint));
5049
}
5150

5251
@Override
5352
public void updateInputs(ClimbArmIOInputs inputs) {
54-
inputs.position = currPosition.refresh().getValue();
53+
inputs.position = curPosition.refresh().getValue();
5554
}
5655

5756
@Override

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

Lines changed: 73 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,39 +2,88 @@
22

33
import static edu.wpi.first.units.Units.Rotations;
44

5-
import org.strykeforce.telemetry.measurable.MeasurableSubsystem;
6-
75
import edu.wpi.first.units.measure.Angle;
6+
import frc.robot.constants.ClimbConstants;
87
import frc.robot.standards.ClosedLoopPosSubsystem;
9-
import frc.robot.subsystems.climb.ClimbArmIO.ClimbArmIOInputs;
10-
import frc.robot.subsystems.example.ExampleIOInputsAutoLogged;
11-
import frc.robot.subsystems.example.ExampleSubsystem.ExampleState;
8+
import java.util.Set;
9+
import org.littletonrobotics.junction.Logger;
10+
import org.strykeforce.telemetry.TelemetryService;
11+
import org.strykeforce.telemetry.measurable.MeasurableSubsystem;
12+
import org.strykeforce.telemetry.measurable.Measure;
1213

1314
public class ClimbSubsystem extends MeasurableSubsystem implements ClosedLoopPosSubsystem {
14-
private final ClimbWheelIO wheelIo;
15-
private final ClimbArmIO armIo;
15+
private final ClimbArmIO io;
16+
private final ClimbWheelIO wheelIo;
1617

17-
private final ClimbWheelIOInputsAutoLogged wheelInputs = new ExampleIOInputsAutoLogged();
18-
private final ClimbArmIOInputsAutoLogged armInputs = new ExampleIOInputsAutoLogged();
18+
private final ClimbArmIOInputsAutoLogged inputs = new ClimbArmIOInputsAutoLogged();
1919

20-
private Angle setpoint = Rotations.of(0.0);
21-
private ClimbState curState = ClimbState.INIT;
20+
private Angle setpoint = Rotations.of(0.0);
21+
private ClimbState curState = ClimbState.INIT;
2222

23-
public ClimbSubsystem(ClimbWheelIO wheelIo, ClimbArmIO armIo) {
24-
this.wheelIo = wheelIo;
25-
this.armIo=armIo;
23+
public ClimbSubsystem(ClimbArmIO io, ClimbWheelIO wheelIo) {
24+
this.io = io;
25+
this.wheelIo = wheelIo;
2626

27-
zero();
28-
}
27+
zero();
28+
}
2929

30-
@Override
31-
public void zero() {
32-
armIo.zero();
33-
curState = ClimbState.ZEROED;
34-
}
30+
@Override
31+
public Angle getPosition() {
32+
return inputs.position;
33+
}
34+
35+
@Override
36+
public void setPosition(Angle position) {
37+
io.setPosition(position);
38+
}
39+
40+
@Override
41+
public boolean isFinished() {
42+
return setpoint.minus(inputs.position).abs(Rotations)
43+
<= ClimbConstants.kArmCloseEnough.in(Rotations);
44+
}
3545

36-
public enum ClimbState {
37-
INIT,
38-
ZEROED
46+
@Override
47+
public void zero() {
48+
io.zero();
49+
50+
curState = ClimbState.ZEROED;
51+
}
52+
53+
@Override
54+
public void periodic() {
55+
// Read Inputs
56+
io.updateInputs(inputs);
57+
58+
// State Machine
59+
switch (curState) {
60+
case INIT:
61+
break;
62+
case ZEROED:
63+
break;
64+
default:
65+
break;
3966
}
67+
68+
// Log Outputs
69+
Logger.recordOutput("Coral/curState", curState.ordinal());
70+
Logger.recordOutput("Coral/setpoint", setpoint.in(Rotations));
71+
}
72+
73+
@Override
74+
public void registerWith(TelemetryService telemetryService) {
75+
super.registerWith(telemetryService);
76+
wheelIo.registerWith(telemetryService);
77+
io.registerWith(telemetryService);
78+
}
79+
80+
@Override
81+
public Set<Measure> getMeasures() {
82+
return Set.of();
83+
}
84+
85+
public enum ClimbState {
86+
INIT,
87+
ZEROED
88+
}
4089
}
Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,10 @@
11
package frc.robot.subsystems.climb;
22

3-
import static edu.wpi.first.units.Units.RotationsPerSecond;
4-
5-
import org.littletonrobotics.junction.AutoLog;
63
import org.strykeforce.telemetry.TelemetryService;
74

8-
import edu.wpi.first.units.measure.AngularVelocity;
9-
105
public interface ClimbWheelIO {
11-
12-
@AutoLog static class ClimbWheelIOInputs {
13-
public AngularVelocity velocity = RotationsPerSecond.of(0.0);
14-
}
156

16-
public default void setVelocity(AngularVelocity velocity) {}
17-
18-
public default void updateInputs(ClimbWheelIOInputs inputs) {}
7+
public default void setPercent(double pct) {}
198

209
public default void registerWith(TelemetryService telemetryService) {}
2110
}
Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,18 @@
11
package frc.robot.subsystems.climb;
22

3-
import static edu.wpi.first.units.Units.DegreesPerSecond;
4-
5-
import org.slf4j.Logger;
6-
import org.slf4j.LoggerFactory;
7-
import org.strykeforce.telemetry.TelemetryService;
8-
9-
import com.ctre.phoenix6.StatusSignal;
103
import com.ctre.phoenix6.configs.TalonFXConfiguration;
114
import com.ctre.phoenix6.configs.TalonFXConfigurator;
12-
import com.ctre.phoenix6.controls.MotionMagicVelocityDutyCycle;
135
import com.ctre.phoenix6.hardware.TalonFX;
14-
15-
import edu.wpi.first.units.measure.AngularVelocity;
166
import frc.robot.constants.ClimbConstants;
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
9+
import org.strykeforce.telemetry.TelemetryService;
1710

1811
public class ClimbWheelIOFX implements ClimbWheelIO {
1912
private Logger logger;
2013
private TalonFX talonFx;
2114

2215
TalonFXConfigurator configurator;
23-
private MotionMagicVelocityDutyCycle velocityRequest = new MotionMagicVelocityDutyCycle(0).withEnableFOC(false).withSlot(0);
24-
StatusSignal<AngularVelocity> curVelocity;
2516

2617
public ClimbWheelIOFX() {
2718
logger = LoggerFactory.getLogger(this.getClass());
@@ -30,24 +21,17 @@ public ClimbWheelIOFX() {
3021
configurator = talonFx.getConfigurator();
3122
configurator.apply(new TalonFXConfiguration()); // Factory default motor controller
3223
configurator.apply(ClimbConstants.getWheelFXConfig());
33-
34-
curVelocity = talonFx.getVelocity();
3524
}
3625

3726
@Override
38-
public void setVelocity(AngularVelocity velocity) {
39-
logger.info("Setting velocity to {} degrees per second", velocity.in(DegreesPerSecond));
27+
public void setPercent(double pct) {
28+
logger.info("Setting percent to {}", pct);
4029

41-
talonFx.setControl(velocityRequest.withVelocity(velocity));
42-
}
43-
44-
@Override
45-
public void updateInputs(ClimbWheelIOInputs inputs) {
46-
inputs.velocity = curVelocity.refresh().getValue();
30+
talonFx.set(pct);
4731
}
4832

4933
@Override
5034
public void registerWith(TelemetryService telemetryService) {
51-
telemetryService.register(talonFx, true);
35+
telemetryService.register(talonFx, true);
5236
}
5337
}

src/main/java/frc/robot/subsystems/example/ExampleIOFX.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ public class ExampleIOFX implements ExampleIO {
2727
TalonFXConfigurator configurator;
2828
private MotionMagicDutyCycle positionRequest =
2929
new MotionMagicDutyCycle(0).withEnableFOC(false).withFeedForward(0).withSlot(0);
30-
StatusSignal<Angle> currPosition;
31-
StatusSignal<AngularVelocity> currVelocity;
30+
StatusSignal<Angle> curPosition;
31+
StatusSignal<AngularVelocity> curVelocity;
3232

3333
public ExampleIOFX() {
3434
logger = LoggerFactory.getLogger(this.getClass());
@@ -42,8 +42,8 @@ public ExampleIOFX() {
4242
configurator.apply(ExampleConstants.getFXConfig());
4343

4444
// Attach status signals
45-
currPosition = talonFx.getPosition();
46-
currVelocity = talonFx.getVelocity();
45+
curPosition = talonFx.getPosition();
46+
curVelocity = talonFx.getVelocity();
4747
}
4848

4949
@Override
@@ -64,9 +64,9 @@ public void setPosition(Angle position) {
6464

6565
@Override
6666
public void updateInputs(ExampleIOInputs inputs) {
67-
BaseStatusSignal.refreshAll(currVelocity, currPosition);
68-
inputs.velocity = currVelocity.getValue();
69-
inputs.position = currPosition.getValue().minus(relSetpointOffset);
67+
BaseStatusSignal.refreshAll(curVelocity, curPosition);
68+
inputs.velocity = curVelocity.getValue();
69+
inputs.position = curPosition.getValue().minus(relSetpointOffset);
7070
}
7171

7272
@Override

0 commit comments

Comments
 (0)