1212import static org .frc6423 .robot .subsystems .superstructure .arm .Arm .*;
1313
1414import edu .wpi .first .math .MathUtil ;
15+ import edu .wpi .first .math .controller .ArmFeedforward ;
1516import edu .wpi .first .math .controller .ProfiledPIDController ;
1617import edu .wpi .first .math .system .plant .DCMotor ;
1718import 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