2020import edu .wpi .first .units .measure .Voltage ;
2121import edu .wpi .first .wpilibj .simulation .DCMotorSim ;
2222import edu .wpi .first .wpilibj .simulation .RoboRioSim ;
23- import frc .robot .Constants .CANBusPorts .CAN2 ;
2423import frc .robot .Constants .MotorConstants .NEOConstants ;
2524import frc .robot .Constants .RobotConstants ;
2625import frc .robot .Robot ;
@@ -31,84 +30,74 @@ public class IntakeArmIOSimSpark implements IntakeArmIO {
3130
3231 private final DCMotorSim armSim ;
3332
34- private final SparkMax maxRight ;
35- private final SparkMax maxLeft ;
33+ private final SparkMax motor ;
3634 private final SparkClosedLoopController controller ;
37- private final SparkMaxSim maxSim ;
35+ private final SparkMaxSim motorSim ;
3836
39- private final SparkMaxConfig armConfig ;
40- private final SparkMaxConfig followerConfig ;
37+ private final SparkMaxConfig motorConfig ;
4138
42- public IntakeArmIOSimSpark () {
43- maxRight = new SparkMax (CAN2 .INTAKE_ARM_RIGHT , MotorType .kBrushless );
44- maxLeft = new SparkMax (CAN2 .INTAKE_ARM_LEFT , MotorType .kBrushless );
39+ public IntakeArmIOSimSpark (ArmConfig armConfig ) {
40+ motor = new SparkMax (armConfig .port (), MotorType .kBrushless );
4541
46- controller = maxRight .getClosedLoopController ();
42+ controller = motor .getClosedLoopController ();
4743
48- armConfig = new SparkMaxConfig ();
44+ motorConfig = new SparkMaxConfig ();
4945
50- armConfig
51- .inverted (false )
46+ motorConfig
47+ .inverted (armConfig . inverted () )
5248 .idleMode (IdleMode .kBrake )
5349 .smartCurrentLimit (NEOConstants .DEFAULT_SUPPLY_CURRENT_LIMIT )
5450 .voltageCompensation (RobotConstants .NOMINAL_VOLTAGE );
5551
56- armConfig
52+ motorConfig
5753 .encoder
5854 .positionConversionFactor (encoderPositionFactor )
5955 .velocityConversionFactor (encoderVelocityFactor );
6056
61- armConfig .closedLoop .feedbackSensor (FeedbackSensor .kPrimaryEncoder ).pid (kP , 0.0 , kD );
57+ motorConfig .closedLoop .feedbackSensor (FeedbackSensor .kPrimaryEncoder ).pid (kP , 0.0 , kD );
6258
63- armConfig
59+ motorConfig
6460 .softLimit
6561 .forwardSoftLimit (maxPosRad )
6662 .forwardSoftLimitEnabled (true )
6763 .reverseSoftLimit (minPosRad )
6864 .reverseSoftLimitEnabled (true );
6965
70- followerConfig = new SparkMaxConfig ();
71-
72- followerConfig .apply (armConfig ).follow (CAN2 .INTAKE_ARM_RIGHT );
73-
74- maxRight .configure (armConfig , ResetMode .kResetSafeParameters , PersistMode .kPersistParameters );
75- maxSim = new SparkMaxSim (maxRight , gearbox );
66+ motor .configure (motorConfig , ResetMode .kResetSafeParameters , PersistMode .kPersistParameters );
67+ motorSim = new SparkMaxSim (motor , gearbox );
7668
7769 armSim =
7870 new DCMotorSim (LinearSystemId .createDCMotorSystem (gearbox , 0.004 , motorReduction ), gearbox );
7971
8072 armSim .setState (0.0 , 0.0 );
81- maxSim .setPosition (0.0 );
82-
83- maxLeft .configure (
84- followerConfig , ResetMode .kResetSafeParameters , PersistMode .kPersistParameters );
73+ motorSim .setPosition (0.0 );
8574 }
8675
8776 @ Override
8877 public void updateInputs (IntakeArmIOInputs inputs ) {
8978 // Update simulation state
9079 double busVoltage = RoboRioSim .getVInVoltage ();
91- armSim .setInput (maxSim .getAppliedOutput () * busVoltage );
80+ armSim .setInput (motorSim .getAppliedOutput () * busVoltage );
9281 armSim .update (Robot .defaultPeriodSecs );
9382
94- if (maxSim .getPosition () > maxPosRad ) {
83+ if (motorSim .getPosition () > maxPosRad ) {
9584 armSim .setState (maxPosRad , 0.0 );
96- maxSim .setPosition (maxPosRad );
85+ motorSim .setPosition (maxPosRad );
9786 }
9887
99- maxSim .iterate (armSim .getAngularVelocityRadPerSec (), busVoltage , Robot .defaultPeriodSecs );
88+ motorSim .iterate (armSim .getAngularVelocityRadPerSec (), busVoltage , Robot .defaultPeriodSecs );
10089
10190 // Update inputs
10291 inputs .connected = true ;
103- inputs .position = maxSim .getPosition ();
104- inputs .velocityMetersPerSec = maxSim .getVelocity ();
105- inputs .appliedVolts = maxSim .getAppliedOutput () * maxSim .getBusVoltage ();
106- inputs .currentAmps = Math .abs (maxSim .getMotorCurrent ());
92+ inputs .position = motorSim .getPosition ();
93+ inputs .velocityMetersPerSec = motorSim .getVelocity ();
94+ inputs .appliedVolts = motorSim .getAppliedOutput () * motorSim .getBusVoltage ();
95+ inputs .currentAmps = Math .abs (motorSim .getMotorCurrent ());
10796 }
10897
10998 @ Override
11099 public void setOpenLoop (Voltage volts ) {
111- maxSim .setAppliedOutput (volts .in (Volts ) / RobotConstants .NOMINAL_VOLTAGE );
100+ motorSim .setAppliedOutput (volts .in (Volts ) / RobotConstants .NOMINAL_VOLTAGE );
112101 }
113102
114103 @ Override
@@ -123,12 +112,12 @@ public void setPosition(Angle rotation, AngularVelocity velocity) {
123112
124113 @ Override
125114 public void configureSoftLimits (boolean enable ) {
126- armConfig .softLimit .forwardSoftLimitEnabled (enable );
127- armConfig .softLimit .reverseSoftLimitEnabled (enable );
115+ motorConfig .softLimit .forwardSoftLimitEnabled (enable );
116+ motorConfig .softLimit .reverseSoftLimitEnabled (enable );
128117 }
129118
130119 @ Override
131120 public void resetEncoder () {
132- maxSim .setPosition (maxPosRad );
121+ motorSim .setPosition (maxPosRad );
133122 }
134123}
0 commit comments