Skip to content

Commit 187a3ae

Browse files
committed
finalize arm sim interface
Signed-off-by: Dasun Abeykoon <[email protected]>
1 parent 344cfe3 commit 187a3ae

File tree

1 file changed

+21
-7
lines changed
  • src/main/java/org/frc6423/robot/subsystems/superstructure/arm

1 file changed

+21
-7
lines changed

src/main/java/org/frc6423/robot/subsystems/superstructure/arm/ArmIOSim.java

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import static org.frc6423.robot.subsystems.superstructure.arm.Arm.*;
1313

1414
import edu.wpi.first.math.MathUtil;
15+
import edu.wpi.first.math.controller.ArmFeedforward;
1516
import edu.wpi.first.math.controller.ProfiledPIDController;
1617
import edu.wpi.first.math.system.plant.DCMotor;
1718
import edu.wpi.first.math.trajectory.TrapezoidProfile;
@@ -29,26 +30,31 @@ public class ArmIOSim implements ArmIO {
2930
LENGTH.in(Meters),
3031
MIN_ANGLE.in(Radians),
3132
MAX_ANGLE.in(Radians),
32-
false,
33+
true,
3334
0);
3435

3536
private double setpointAngle;
3637

3738
private double pivotAppliedVolts;
3839

39-
private final ProfiledPIDController pivotFeedback =
40+
private final ArmFeedforward feedforward = new ArmFeedforward(0.0, 0.0, 0.0, 0.0);
41+
private final ProfiledPIDController feedback =
4042
new ProfiledPIDController(20, 0.0, 0.0, new TrapezoidProfile.Constraints(5.5, 17));
4143

4244
public ArmIOSim() {
43-
SmartDashboard.putData(pivotFeedback);
45+
SmartDashboard.putData(feedback);
4446
}
4547

4648
@Override
4749
public void periodic() {
4850
// Calculate fb output
49-
var fbOut = pivotFeedback.calculate(getAngleRads(), setpointAngle);
51+
var currentVel = feedback.getSetpoint().velocity;
52+
var fbOut = feedback.calculate(getAngleRads(), setpointAngle);
5053

51-
setVolts(fbOut);
54+
var nextVel = feedback.getSetpoint().velocity;
55+
var ffOut = feedforward.calculateWithVelocities(getAngleRads(), currentVel, nextVel);
56+
57+
setVolts(fbOut + ffOut);
5258

5359
pivotSim.setInputVoltage(pivotAppliedVolts);
5460
pivotSim.update(0.02);
@@ -61,7 +67,7 @@ public double getAngleRads() {
6167

6268
@Override
6369
public double getSetpointAngleRads() {
64-
return pivotFeedback.getSetpoint().position;
70+
return feedback.getSetpoint().position;
6571
}
6672

6773
@Override
@@ -86,7 +92,15 @@ public void setGains(
8692
double kP,
8793
double kD,
8894
double maxVel,
89-
double maxAccel) {}
95+
double maxAccel) {
96+
feedforward.setKg(kG);
97+
feedforward.setKs(kS);
98+
feedforward.setKv(kV);
99+
feedforward.setKa(kA);
100+
feedback.setP(kP);
101+
feedback.setD(kD);
102+
feedback.setConstraints(new TrapezoidProfile.Constraints(maxVel, maxAccel));
103+
}
90104

91105
@Override
92106
public void setVolts(double volts) {

0 commit comments

Comments
 (0)