Skip to content

Commit d6dcbff

Browse files
committed
Convert shooting method
1 parent 168f80a commit d6dcbff

5 files changed

Lines changed: 35 additions & 9 deletions

File tree

src/main/java/frc/robot/Constants.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ public class FLYWHEEL {
4545
public static final double peakReverseOutput = -0.35; // Placeholder value
4646
public static final double kInertia = 0.01;
4747
public static final double kStatorCurrentLimit = 120;
48+
public static final double kVelocityErrorThreshold = 35;
4849

4950
// These worked on wood bot. Change jerk later if further optimization is needed
5051
public static double motionMagicCruiseVelocity = 60.0; // target cruise velocity of 60 rps
@@ -414,6 +415,7 @@ public class UPTAKE {
414415
public static final double peakForwardOutput = 0.5;
415416
public static final double peakReverseOutput = -0.5;
416417
public static final double kInertia = 0.01;
418+
public static final double kVelocityErrorThreshold = 50.0;
417419

418420
public static final double kMotionMagicAcceleration = 30.0;
419421
public static final double kMotionMagicCruiseVelocity = 60.0;

src/main/java/frc/robot/commands/shooter/Shoot.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package frc.robot.commands.shooter;
22

33
import static edu.wpi.first.units.Units.Meters;
4+
import static edu.wpi.first.units.Units.RPM;
45
import static edu.wpi.first.units.Units.Volts;
56

67
import edu.wpi.first.math.geometry.Translation2d;
@@ -60,7 +61,7 @@ public void initialize() {
6061
@Override
6162
public void execute() {
6263
Shot shot = distanceToShotMap.get(m_vision.getDistanceToHub());
63-
m_flywheel.setRPMOutputFOC(shot.shooterRPM);
64+
m_flywheel.setRPMOutputFOC(RPM.of(shot.shooterRPM));
6465
// m_shooterHood.setPosition(shot.hoodPosition);
6566
}
6667

src/main/java/frc/robot/commands/shooter/ShootManualFlywheel.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package frc.robot.commands.shooter;
22

3+
import static edu.wpi.first.units.Units.RPM;
34
import static edu.wpi.first.units.Units.Volts;
45

56
import edu.wpi.first.wpilibj2.command.Command;
@@ -22,7 +23,7 @@ public void initialize() {}
2223
// Called every time the scheduler runs while the command is scheduled.
2324
@Override
2425
public void execute() {
25-
m_flywheel.setRPMOutputFOC(m_flywheel.getRPMSetpoint());
26+
m_flywheel.setRPMOutputFOC(RPM.of(m_flywheel.getRPMSetpoint()));
2627
}
2728

2829
// Called once the command ends or is interrupted.

src/main/java/frc/robot/subsystems/Flywheel.java

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import static edu.wpi.first.units.Units.*;
88

99
import com.ctre.phoenix6.configs.TalonFXConfiguration;
10+
import com.ctre.phoenix6.controls.DutyCycleOut;
1011
import com.ctre.phoenix6.controls.MotionMagicVelocityTorqueCurrentFOC;
1112
import com.ctre.phoenix6.controls.TorqueCurrentFOC;
1213
import com.ctre.phoenix6.hardware.TalonFX;
@@ -20,6 +21,7 @@
2021
import edu.wpi.first.networktables.NetworkTableInstance;
2122
import edu.wpi.first.units.measure.AngularVelocity;
2223
import edu.wpi.first.units.measure.Voltage;
24+
import edu.wpi.first.wpilibj.DutyCycle;
2325
import edu.wpi.first.wpilibj.RobotController;
2426
import edu.wpi.first.wpilibj.simulation.FlywheelSim;
2527
import edu.wpi.first.wpilibj.sysid.SysIdRoutineLog;
@@ -48,7 +50,8 @@ public class Flywheel extends SubsystemBase {
4850

4951
private final MotionMagicVelocityTorqueCurrentFOC m_request =
5052
new MotionMagicVelocityTorqueCurrentFOC(0);
51-
private final TorqueCurrentFOC m_TorqueCurrentFOC = new TorqueCurrentFOC(0);
53+
private final DutyCycleOut m_DutyCycleOut = new DutyCycleOut(0);
54+
private final TorqueCurrentFOC m_TorqueCurrentFOC = new TorqueCurrentFOC(0.0);
5255
private static AngularVelocity m_rpmSetpoint = MANUAL_RPM.IDLE.getRPM();
5356

5457
public final DoubleSubscriber m_rpmSubscriber;
@@ -79,7 +82,7 @@ public Flywheel() {
7982
config.MotorOutput.NeutralMode = m_neutralMode;
8083
config.Feedback.SensorToMechanismRatio = FLYWHEEL.gearRatio;
8184
config.CurrentLimits.StatorCurrentLimit = FLYWHEEL.kStatorCurrentLimit;
82-
config.CurrentLimits.StatorCurrentLimitEnable = true;
85+
config.CurrentLimits.StatorCurrentLimitEnable = false;
8386

8487
config.MotionMagic.MotionMagicCruiseVelocity = FLYWHEEL.motionMagicCruiseVelocity;
8588
config.MotionMagic.MotionMagicAcceleration = FLYWHEEL.motionMagicAcceleration;
@@ -107,9 +110,8 @@ public void changeNeutralMode(NeutralModeValue neutralmode) {
107110
m_neutralMode = neutralmode;
108111
}
109112

110-
public void setRPMOutputFOC(double rpm) {
111-
m_rpmSetpoint = RPM.of(rpm);
112-
m_motor1.setControl(m_request.withVelocity(m_rpmSetpoint.abs(RotationsPerSecond)));
113+
public void setRPMOutputFOC(AngularVelocity rpm) {
114+
m_rpmSetpoint = rpm;
113115
}
114116

115117
public void setTorqueCurrentOutputFOC(Voltage voltage) {
@@ -168,8 +170,18 @@ public void testPeriodic() {
168170
m_rpmSetpoint = RPM.of(m_rpmSubscriber.get());
169171
}
170172

173+
public double getRPMerror(){
174+
return getRPMSetpoint() - getMotorSpeedRPM();
175+
}
176+
171177
@Override
172-
public void periodic() {}
178+
public void periodic() {
179+
if (Math.abs(getRPMerror()) > FLYWHEEL.kVelocityErrorThreshold){
180+
m_motor1.setControl(m_DutyCycleOut.withOutput(Math.signum(getRPMerror())));
181+
} else {
182+
m_motor1.setControl(m_request.withVelocity(m_rpmSetpoint.abs(RPM)));
183+
}
184+
}
173185

174186
@Override
175187
public void simulationPeriodic() {

src/main/java/frc/robot/subsystems/Uptake.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import static edu.wpi.first.units.Units.RotationsPerSecond;
1010

1111
import com.ctre.phoenix6.configs.TalonFXConfiguration;
12+
import com.ctre.phoenix6.controls.DutyCycleOut;
1213
import com.ctre.phoenix6.controls.MotionMagicVelocityTorqueCurrentFOC;
1314
import com.ctre.phoenix6.hardware.TalonFX;
1415
import com.ctre.phoenix6.signals.InvertedValue;
@@ -43,6 +44,7 @@ public class Uptake extends SubsystemBase {
4344

4445
private MotionMagicVelocityTorqueCurrentFOC m_request =
4546
new MotionMagicVelocityTorqueCurrentFOC(0.0);
47+
private DutyCycleOut m_DutyCycleOut = new DutyCycleOut(0.0);
4648

4749
private static AngularVelocity m_velocitySetpoint = RPM.of(0.0);
4850

@@ -97,6 +99,10 @@ public double getPercentOutput() {
9799
return m_motor.get();
98100
}
99101

102+
public double getRPMerror(){
103+
return getRPMsetpoint() - getMotorSpeedRPM();
104+
}
105+
100106
@Logged(name = "Motor Velocity RPM", importance = Logged.Importance.INFO)
101107
public double getMotorSpeedRPM() {
102108
return m_motor.getVelocity().refresh().getValue().in(RPM);
@@ -112,7 +118,11 @@ public void testPeriodic() {
112118

113119
@Override
114120
public void periodic() {
115-
m_motor.setControl(m_request.withVelocity(m_velocitySetpoint.abs(RotationsPerSecond)));
121+
if (Math.abs(getRPMerror()) > UPTAKE.kVelocityErrorThreshold){
122+
m_motor.setControl(m_DutyCycleOut.withOutput(Math.signum(getRPMerror())));
123+
} else {
124+
m_motor.setControl(m_request.withVelocity(m_velocitySetpoint.abs(RotationsPerSecond)));
125+
}
116126
}
117127

118128
@Override

0 commit comments

Comments
 (0)