@@ -40,7 +40,7 @@ public class ElevatorSubsystem extends SubsystemBase {
40
40
41
41
private final TelemetryCANSparkMax elevatorMotor =
42
42
new TelemetryCANSparkMax (ELEVATOR_MOTOR_ID , MotorType .kBrushless , "/elevator/motor" , true );
43
- private final TelemetryCANSparkMax elevatorMotorFollower = new TelemetryCANSparkMax (ELEVATOR_FOLLOWER_MOTOR_ID , MotorType .kBrushless , "/elevator/followerMotor" , false );
43
+ private final TelemetryCANSparkMax elevatorMotorFollower = new TelemetryCANSparkMax (ELEVATOR_FOLLOWER_MOTOR_ID , MotorType .kBrushless , "/elevator/followerMotor" , true );
44
44
45
45
46
46
private final TunableTelemetryProfiledPIDController controller =
@@ -50,10 +50,12 @@ public class ElevatorSubsystem extends SubsystemBase {
50
50
private ElevatorFeedforward feedforward = FF_GAINS .createElevatorFeedforward ();
51
51
52
52
private final RelativeEncoder elevatorEncoder = elevatorMotor .getEncoder ();
53
+ private final RelativeEncoder elevatorFollowerEncoder = elevatorMotorFollower .getEncoder ();
53
54
private final DigitalInput bottomLimit = new DigitalInput (ELEVATOR_LIMIT_SWITCH );
54
55
55
56
private final DoubleTelemetryEntry voltageReq =
56
57
new DoubleTelemetryEntry ("/elevator/voltageReq" , MiscConstants .TUNING_MODE );
58
+
57
59
58
60
private final BooleanTelemetryEntry isHomedEntry =
59
61
new BooleanTelemetryEntry ("/elevator/isHomed" , true );
@@ -62,13 +64,15 @@ public class ElevatorSubsystem extends SubsystemBase {
62
64
private final EventTelemetryEntry elevatorEventEntry =
63
65
new EventTelemetryEntry ("/elevator/main/events" );
64
66
private final EventTelemetryEntry elevatorFollowerEventEntry = new EventTelemetryEntry ("elevator/follower/events" );
67
+ private final DoubleTelemetryEntry followerVoltageReq = new DoubleTelemetryEntry ("/elevator/followerReq" , true );
65
68
66
69
private boolean isHomed = false ;
67
70
68
71
public ElevatorSubsystem () {
69
72
configMotors ();
70
73
controller .setTolerance (Units .inchesToMeters (0.5 ));
71
74
setDefaultCommand (setVoltageCommand (0.0 ));
75
+ // elevatorMotorFollower.follow(elevatorMotor);
72
76
}
73
77
74
78
private void configMotors () {
@@ -130,38 +134,55 @@ private void configMotors() {
130
134
131
135
132
136
ConfigurationUtils .applyCheckRecordRev (
133
- () -> elevatorMotorFollower .setCANTimeout (250 ),
134
- () -> true ,
135
- followerFaultRecorder .run ("CAN timeout" ),
136
- MiscConstants .CONFIGURATION_ATTEMPTS );
137
+ () -> elevatorMotorFollower .setCANTimeout (250 ),
138
+ () -> true ,
139
+ faultRecorder .run ("CAN timeout" ),
140
+ MiscConstants .CONFIGURATION_ATTEMPTS );
137
141
ConfigurationUtils .applyCheckRecordRev (
138
- elevatorMotorFollower ::restoreFactoryDefaults ,
139
- () -> true ,
140
- followerFaultRecorder .run ("Factory default" ),
141
- MiscConstants .CONFIGURATION_ATTEMPTS );
142
+ elevatorMotorFollower ::restoreFactoryDefaults ,
143
+ () -> true ,
144
+ faultRecorder .run ("Factory default" ),
145
+ MiscConstants .CONFIGURATION_ATTEMPTS );
142
146
ConfigurationUtils .applyCheckRecord (
143
- () -> elevatorMotorFollower .setInverted (FOLLOWER_INVERTED ),
144
- () -> elevatorMotorFollower .getInverted () == FOLLOWER_INVERTED ,
145
- () -> elevatorFollowerEventEntry .append ("Motor invert" ),
146
- MiscConstants .CONFIGURATION_ATTEMPTS );
147
+ () -> elevatorMotorFollower .setInverted (MAIN_INVERTED ),
148
+ () -> elevatorMotorFollower .getInverted () == MAIN_INVERTED ,
149
+ () -> elevatorEventEntry .append ("Motor invert" ),
150
+ MiscConstants .CONFIGURATION_ATTEMPTS );
151
+ ConfigurationUtils .applyCheckRecordRev (
152
+ () -> elevatorMotorFollower .setSmartCurrentLimit (STALL_MOTOR_CURRENT , FREE_MOTOR_CURRENT ),
153
+ () -> true ,
154
+ faultRecorder .run ("Current limit" ),
155
+ MiscConstants .CONFIGURATION_ATTEMPTS );
156
+ ConfigurationUtils .applyCheckRecordRev (
157
+ () -> elevatorMotorFollower .setIdleMode (IdleMode .kBrake ),
158
+ () -> true ,
159
+ faultRecorder .run ("Idle mode" ),
160
+ MiscConstants .CONFIGURATION_ATTEMPTS );
147
161
ConfigurationUtils .applyCheckRecordRev (
148
- () -> elevatorMotorFollower .setSmartCurrentLimit (STALL_MOTOR_CURRENT , FREE_MOTOR_CURRENT ),
149
- () -> true ,
150
- followerFaultRecorder .run ("Current limit" ),
151
- MiscConstants .CONFIGURATION_ATTEMPTS );
162
+ () -> elevatorFollowerEncoder .setPositionConversionFactor (METERS_PER_REV ),
163
+ () ->
164
+ ConfigurationUtils .fpEqual (
165
+ elevatorFollowerEncoder .getPositionConversionFactor (), METERS_PER_REV ),
166
+ faultRecorder .run ("Position conversion factor" ),
167
+ MiscConstants .CONFIGURATION_ATTEMPTS );
152
168
ConfigurationUtils .applyCheckRecordRev (
153
- () -> elevatorMotorFollower .setIdleMode (IdleMode .kBrake ),
154
- () -> true ,
155
- followerFaultRecorder .run ("Idle mode" ),
156
- MiscConstants .CONFIGURATION_ATTEMPTS );
169
+ () -> elevatorFollowerEncoder .setVelocityConversionFactor (METERS_PER_REV / 60 ),
170
+ () ->
171
+ ConfigurationUtils .fpEqual (
172
+ elevatorFollowerEncoder .getVelocityConversionFactor (), METERS_PER_REV / 60 ),
173
+ faultRecorder .run ("Velocity conversion factor" ),
174
+ MiscConstants .CONFIGURATION_ATTEMPTS );
157
175
ConfigurationUtils .applyCheckRecordRev (
158
- elevatorMotorFollower ::burnFlashWithDelay ,
159
- () -> true ,
160
- followerFaultRecorder .run ("Burn flash" ),
161
- MiscConstants .CONFIGURATION_ATTEMPTS );
176
+ elevatorMotorFollower ::burnFlashWithDelay ,
177
+ () -> true ,
178
+ faultRecorder .run ("Burn flash" ),
179
+ MiscConstants .CONFIGURATION_ATTEMPTS );
180
+
181
+
162
182
163
183
164
- elevatorMotorFollower .follow (elevatorMotor , FOLLOWER_INVERTED );
184
+
185
+ // elevatorMotorFollower.follow(elevatorMotor, FOLLOWER_INVERTED);
165
186
ConfigurationUtils .postDeviceConfig (
166
187
followerFaultRecorder .hasFault (),
167
188
elevatorEventEntry ::append ,
@@ -178,13 +199,20 @@ public boolean atBottomLimit() {
178
199
public boolean atGoal () {
179
200
return controller .atGoal ();
180
201
}
202
+ public Command setFollowerCommand (double voltage ){
203
+ return this .run (() -> elevatorMotorFollower .setVoltage (voltage ));
204
+ }
181
205
182
206
public void setEncoderPosition (double position ) {
183
207
elevatorEncoder .setPosition (position );
208
+ elevatorFollowerEncoder .setPosition (position );
209
+
184
210
}
185
211
186
212
public void setVoltage (double voltage ) {
187
213
elevatorMotor .setVoltage (voltage );
214
+ elevatorMotorFollower .setVoltage (voltage );
215
+ followerVoltageReq .append (voltage );
188
216
voltageReq .append (voltage );
189
217
}
190
218
@@ -194,12 +222,15 @@ public double getPosition() {
194
222
195
223
public void stopMove () {
196
224
elevatorMotor .setVoltage (0 );
225
+ elevatorMotorFollower .setVoltage (0 );
197
226
}
198
227
199
228
public boolean isHomed () {
200
229
return isHomed ;
201
230
}
202
231
232
+
233
+
203
234
public Command setElevatorPositionCommand (double position ) {
204
235
double positionClamped = MathUtil .clamp (position , ELEVATOR_MIN_HEIGHT , ELEVATOR_MAX_HEIGHT );
205
236
return RaiderCommands .ifCondition (this ::isHomed )
@@ -220,7 +251,7 @@ public Command setElevatorPositionCommand(double position) {
220
251
}
221
252
222
253
public Command probeHomeCommand () {
223
- return setVoltageCommand (-0.5 ).unless (this ::isHomed ).until (this ::isHomed );
254
+ return setVoltageCommand (-0.75 ).unless (this ::isHomed ).until (this ::isHomed );
224
255
}
225
256
226
257
public Command setVoltageCommand (double voltage ) {
0 commit comments