@@ -25,6 +25,7 @@ public class Arm extends MotorSubsystem {
25
25
ArmConstants .ARM_DEFAULT_MAXIMUM_ACCELERATION ,
26
26
ArmConstants .ARM_DEFAULT_MAXIMUM_JERK
27
27
).withEnableFOC (ArmConstants .FOC_ENABLED );
28
+ public boolean isStateReversed = false ;
28
29
private ArmConstants .ArmState targetState = ArmConstants .ArmState .REST ;
29
30
30
31
public Arm () {
@@ -80,10 +81,24 @@ public void sysIDDrive(double targetVoltage) {
80
81
armMasterMotor .setControl (voltageRequest .withOutput (targetVoltage ));
81
82
}
82
83
84
+ public boolean atState (ArmConstants .ArmState targetState , boolean isStateReversed ) {
85
+ if (isStateReversed )
86
+ return this .targetState == targetState && atTargetAngle (isStateReversed );
87
+ return atState (targetState );
88
+ }
89
+
83
90
public boolean atState (ArmConstants .ArmState targetState ) {
84
91
return this .targetState == targetState && atTargetAngle ();
85
92
}
86
93
94
+ public boolean atTargetAngle (boolean isStateReversed ) {
95
+ if (isStateReversed ) {
96
+ final double currentToTargetStateDifferenceDegrees = Math .abs (ArmConstants .FULL_ROTATION .minus (targetState .targetAngle ).minus (getAngle ()).getDegrees ());
97
+ return currentToTargetStateDifferenceDegrees < ArmConstants .ANGLE_TOLERANCE .getDegrees ();
98
+ }
99
+ return atTargetAngle ();
100
+ }
101
+
87
102
public boolean atTargetAngle () {
88
103
final double currentToTargetStateDifferenceDegrees = Math .abs (targetState .targetAngle .minus (getAngle ()).getDegrees ());
89
104
return currentToTargetStateDifferenceDegrees < ArmConstants .ANGLE_TOLERANCE .getDegrees ();
@@ -93,30 +108,48 @@ public boolean hasGamePiece() {
93
108
return ArmConstants .COLLECTION_DETECTION_BOOLEAN_EVENT .getAsBoolean ();
94
109
}
95
110
111
+ void setTargetState (ArmConstants .ArmState targetState ) {
112
+ this .isStateReversed = false ;
113
+ this .targetState = targetState ;
114
+ setTargetState (targetState , false );
115
+ }
116
+
96
117
void setTargetState (ArmConstants .ArmState targetState , boolean isStateReversed ) {
118
+ this .isStateReversed = isStateReversed ;
119
+ this .targetState = targetState ;
120
+
97
121
if (isStateReversed ) {
98
122
setTargetState (
99
- Rotation2d . fromDegrees ( 360 - targetState .targetAngle . getDegrees () )
123
+ ArmConstants . FULL_ROTATION . minus ( targetState .targetAngle )
100
124
, targetState .targetEndEffectorVoltage
101
125
);
102
126
return ;
103
127
}
104
- setTargetState (targetState );
105
- }
106
-
107
- void setTargetState (ArmConstants .ArmState targetState ) {
108
- this .targetState = targetState ;
109
128
setTargetState (
110
129
targetState .targetAngle ,
111
- targetState .targetEndEffectorVoltage
112
- );
130
+ targetState .targetEndEffectorVoltage );
113
131
}
114
132
115
133
void setTargetState (Rotation2d targetAngle , double targetVoltage ) {
116
134
setTargetAngle (targetAngle );
117
135
setTargetVoltage (targetVoltage );
118
136
}
119
137
138
+ void prepareForState (ArmConstants .ArmState targetState ) {
139
+ prepareForState (targetState , false );
140
+ }
141
+
142
+ void prepareForState (ArmConstants .ArmState targetState , boolean isStateReversed ) {
143
+ this .isStateReversed = isStateReversed ;
144
+ this .targetState = targetState ;
145
+
146
+ if (isStateReversed ) {
147
+ setTargetAngle (ArmConstants .FULL_ROTATION .minus (targetState .targetAngle ));
148
+ return ;
149
+ }
150
+ setTargetAngle (targetState .targetAngle );
151
+ }
152
+
120
153
private Rotation2d getAngle () {
121
154
return Rotation2d .fromRotations (angleEncoder .getSignal (CANcoderSignal .POSITION ));
122
155
}
0 commit comments