@@ -16,44 +16,51 @@ public class IndexerIOSim implements IndexerIO {
16
16
private final DCMotorSim feederSim = new DCMotorSim (DCMotor .getNEO (1 ), FEEDER_GEAR_RATIO ,0.025 );
17
17
// private final SimDeviceSim beamBreakSim = new SimDeviceSim("Indexer Beam Break");
18
18
private final PIDController feederSimPID = new PIDController (FEEDER_KP , FEEDER_KI ,FEEDER_KD );
19
+ private boolean isClosedLoop = true ;
20
+ private double intakeVoltage = 0.0 ;
21
+ private double feederVoltage = 0.0 ;
22
+ private double feederVelocityRPS = 0.0 ;
19
23
20
24
@ Override
21
25
public void updateInputs (IndexerIOInputs inputs ) {
26
+ if (isClosedLoop ) {
27
+ feederVoltage = MathUtil .clamp (feederSimPID .calculate (feederSim .getAngularVelocityRPM () / 60 , feederVelocityRPS ), -12.0 , 12.0 );
28
+ }
29
+ intakeSim .setInputVoltage (intakeVoltage );
30
+ feederSim .setInputVoltage (feederVoltage );
22
31
intakeSim .update (Constants .LOOP_PERIOD_SECS );
23
32
feederSim .update (Constants .LOOP_PERIOD_SECS );
24
33
inputs .intakeCurrentAmps = intakeSim .getCurrentDrawAmps ();
25
- // inputs.intakeVoltage = intakeSim.getBusVoltage() * intakeSim.getAppliedOutput() ;
34
+ inputs .intakeVoltage = intakeVoltage ;
26
35
inputs .intakeVelocityRPM = intakeSim .getAngularVelocityRPM ();
27
36
inputs .feederCurrentAmps = feederSim .getCurrentDrawAmps ();
28
- // inputs.feederVoltage = feederSim.getBusVoltage() * feederSim.getAppliedOutput() ;
37
+ inputs .feederVoltage = feederVoltage ;
29
38
inputs .feederVelocityRPM = feederSim .getAngularVelocityRPM ();
30
39
// inputs.noteInIntake = beamBreakSim.getBoolean("Indexer Beam Break").get();
31
- inputs .setpoint = feederSimPID .getSetpoint ();
32
- inputs .feederVelocityRadPerSec = feederSim .getAngularVelocityRadPerSec ();
40
+ inputs .setpointRPM = feederSimPID .getSetpoint () * 60 ;
33
41
inputs .feederPositionError = feederSimPID .getPositionError ();
34
-
35
- // this is a very funny line of code, and absolutely does not belong here, but I don't know how to do this otherwise
36
- feederSim .setState (feederSim .getAngularPositionRad (), feederSim .getAngularVelocityRadPerSec () + feederSimPID .calculate (feederSim .getAngularVelocityRadPerSec ()));
37
-
38
42
}
39
43
40
44
@ Override
41
45
public void setIntakeVoltage (double volts ) {
42
- intakeSim .setInputVoltage (MathUtil .clamp (volts , -12 , 12 ));
43
- }
44
-
45
- @ Override
46
- public void setFeederVelocity (double velocity ) {
47
- feederSimPID .setSetpoint (velocity );
46
+ intakeVoltage = MathUtil .clamp (volts , -12.0 , 12.0 );
48
47
}
49
48
50
49
@ Override
51
50
public void configurePID (double p , double i , double d ) {
52
51
feederSimPID .setPID (p , i , d );
53
52
}
54
53
55
- @ Override
56
54
public void setFeederVoltage (double volts ) {
57
- feederSim .setInputVoltage (MathUtil .clamp (volts , -12 , 12 ));
55
+ isClosedLoop = false ;
56
+ feederVoltage = MathUtil .clamp (volts , -12.0 , 12.0 );
57
+ }
58
+
59
+
60
+ public void setFeederVelocity (double velocity ) {
61
+ isClosedLoop = true ;
62
+ feederSimPID .reset ();
63
+ feederVelocityRPS = velocity / 60 ;
58
64
}
65
+
59
66
}
0 commit comments