Skip to content

Commit 94dcca9

Browse files
committed
fix: made simulations work correctly(?)
1 parent bdc5270 commit 94dcca9

File tree

4 files changed

+30
-24
lines changed

4 files changed

+30
-24
lines changed

src/main/java/org/team1540/robot2024/subsystems/indexer/Indexer.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public void periodic() {
2626
indexerIO.updateInputs(indexerInputs);
2727
Logger.processInputs("Indexer", indexerInputs);
2828
if (TUNING) {
29-
if (kP.hasChanged() || kI.hasChanged() || kD.hasChanged()) {
29+
if (kP.hasChanged(hashCode()) || kI.hasChanged(hashCode()) || kD.hasChanged(hashCode())) {
3030
indexerIO.configurePID(kP.get(), kI.get(), kD.get());
3131
}
3232
}

src/main/java/org/team1540/robot2024/subsystems/indexer/IndexerIO.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ class IndexerIOInputs {
1313
public double feederCurrentAmps;
1414
public double feederVelocityRPM;
1515
public boolean noteInIntake = false;
16-
public double setpoint;
17-
public double feederVelocityRadPerSec;
16+
public double setpointRPM;
1817
public double feederPositionError;
1918
}
2019

src/main/java/org/team1540/robot2024/subsystems/indexer/IndexerIOSim.java

+23-16
Original file line numberDiff line numberDiff line change
@@ -16,44 +16,51 @@ public class IndexerIOSim implements IndexerIO {
1616
private final DCMotorSim feederSim = new DCMotorSim(DCMotor.getNEO(1), FEEDER_GEAR_RATIO,0.025);
1717
// private final SimDeviceSim beamBreakSim = new SimDeviceSim("Indexer Beam Break");
1818
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;
1923

2024
@Override
2125
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);
2231
intakeSim.update(Constants.LOOP_PERIOD_SECS);
2332
feederSim.update(Constants.LOOP_PERIOD_SECS);
2433
inputs.intakeCurrentAmps = intakeSim.getCurrentDrawAmps();
25-
// inputs.intakeVoltage = intakeSim.getBusVoltage() * intakeSim.getAppliedOutput();
34+
inputs.intakeVoltage = intakeVoltage;
2635
inputs.intakeVelocityRPM = intakeSim.getAngularVelocityRPM();
2736
inputs.feederCurrentAmps = feederSim.getCurrentDrawAmps();
28-
// inputs.feederVoltage = feederSim.getBusVoltage() * feederSim.getAppliedOutput();
37+
inputs.feederVoltage = feederVoltage;
2938
inputs.feederVelocityRPM = feederSim.getAngularVelocityRPM();
3039
// inputs.noteInIntake = beamBreakSim.getBoolean("Indexer Beam Break").get();
31-
inputs.setpoint = feederSimPID.getSetpoint();
32-
inputs.feederVelocityRadPerSec = feederSim.getAngularVelocityRadPerSec();
40+
inputs.setpointRPM = feederSimPID.getSetpoint() * 60;
3341
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-
3842
}
3943

4044
@Override
4145
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);
4847
}
4948

5049
@Override
5150
public void configurePID(double p, double i, double d) {
5251
feederSimPID.setPID(p, i, d);
5352
}
5453

55-
@Override
5654
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;
5864
}
65+
5966
}

src/main/java/org/team1540/robot2024/subsystems/indexer/IndexerIOSparkMax.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.revrobotics.*;
44
import edu.wpi.first.math.controller.SimpleMotorFeedforward;
5-
import edu.wpi.first.math.util.Units;
65
import edu.wpi.first.wpilibj.DigitalInput;
76

87
import static org.team1540.robot2024.Constants.Indexer.*;
@@ -14,6 +13,7 @@ public class IndexerIOSparkMax implements IndexerIO {
1413
private final DigitalInput indexerBeamBreak = new DigitalInput(0);
1514
private final SparkPIDController feederPID;
1615
private final SimpleMotorFeedforward feederFF = new SimpleMotorFeedforward(FEEDER_KS, FEEDER_KV);
16+
private double setpointRPM;
1717

1818

1919
public IndexerIOSparkMax() {
@@ -29,9 +29,6 @@ public IndexerIOSparkMax() {
2929
feederPID.setP(FEEDER_KP, 0);
3030
feederPID.setI(FEEDER_KI, 0);
3131
feederPID.setD(FEEDER_KD, 0);
32-
33-
34-
3532
}
3633

3734
@Override
@@ -43,6 +40,8 @@ public void updateInputs(IndexerIOInputs inputs) {
4340
inputs.feederVoltage = feederMotor.getBusVoltage() * feederMotor.getAppliedOutput();
4441
inputs.feederVelocityRPM = feederMotor.getEncoder().getVelocity();
4542
inputs.noteInIntake = indexerBeamBreak.get();
43+
inputs.setpointRPM = setpointRPM;
44+
inputs.feederPositionError = setpointRPM - feederMotor.getEncoder().getVelocity();
4645
}
4746

4847
@Override
@@ -57,8 +56,9 @@ public void setFeederVoltage(double volts) {
5756

5857
@Override
5958
public void setFeederVelocity(double velocity) {
59+
setpointRPM = velocity;
6060
feederPID.setReference(
61-
Units.radiansPerSecondToRotationsPerMinute(velocity) * FEEDER_GEAR_RATIO,
61+
velocity / FEEDER_GEAR_RATIO, // Should this be multiplied?
6262
CANSparkBase.ControlType.kVelocity,
6363
0,
6464
feederFF.calculate(velocity),

0 commit comments

Comments
 (0)