Skip to content

Commit e755e95

Browse files
committed
add demo shooting
1 parent 88c899e commit e755e95

File tree

3 files changed

+67
-27
lines changed

3 files changed

+67
-27
lines changed

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

+3
Original file line numberDiff line numberDiff line change
@@ -575,6 +575,9 @@ public static final class ScoringConstants {
575575
public static final double hoodMaxVelocity = 0.5;
576576
public static final double hoodMaxAcceleration = 0.5;
577577

578+
public static final double demoShooterRPM = 1000;
579+
public static final double demoAimAngle = 0.1;
580+
578581
// NOTE - This should be monotonically increasing
579582
// Key - Distance in meters
580583
// Value - Aimer angle in radians

src/main/java/frc/robot/RobotContainer.java

+6
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,9 @@ public void configureSubsystems() {
135135
if (FeatureFlags.runDrive) {
136136
driveTelemetry =
137137
new Telemetry(DriveConstants.MaxSpeedMetPerSec, new TelemetryIOLive());
138+
if (FeatureFlags.demoMode) {
139+
drivetrain.setDemo(true);
140+
}
138141
}
139142

140143
if (FeatureFlags.runScoring) {
@@ -143,6 +146,9 @@ public void configureSubsystems() {
143146
new ShooterIOTalon(),
144147
new AimerIORoboRio(),
145148
new HoodIOSparkFlex());
149+
if (FeatureFlags.demoMode) {
150+
scoringSubsystem.setDemo(true);
151+
}
146152
}
147153

148154
if (FeatureFlags.runEndgame) {

src/main/java/frc/robot/subsystems/scoring/ScoringSubsystem.java

+58-27
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ public class ScoringSubsystem extends SubsystemBase implements Tunable {
6464
private boolean overrideShoot = false;
6565
private boolean overrideStageAvoidance = false;
6666
private boolean overrideBeamBreak = false;
67+
private boolean demo = false;
6768

6869
private boolean hoodForced = false;
6970

@@ -240,31 +241,53 @@ private void spit() {
240241
}
241242

242243
private void prime() {
244+
double shooterRPM;
245+
double aimAngle;
243246
double distanceToGoal = findDistanceToGoal();
244-
Logger.recordOutput("scoring/aimGoal", getAimerAngle(distanceToGoal));
245-
shooterIo.setShooterVelocityRPM(shooterInterpolated.getValue(distanceToGoal));
246-
aimerIo.setAimAngleRad(getAimerAngle(distanceToGoal), false);
247+
if (demo) {
248+
shooterRPM = ScoringConstants.demoShooterRPM;
249+
aimAngle = ScoringConstants.demoAimAngle;
250+
} else {
251+
shooterRPM = shooterInterpolated.getValue(distanceToGoal);
252+
aimAngle = getAimerAngle(distanceToGoal);
253+
}
254+
Logger.recordOutput("scoring/aimGoal", aimAngle);
255+
shooterIo.setShooterVelocityRPM(shooterRPM);
256+
aimerIo.setAimAngleRad(aimAngle, false);
247257
if (!overrideBeamBreak) {
248258
shooterIo.setKickerVolts(hasNote() ? 0.0 : ScoringConstants.kickerIntakeVolts);
249259
}
250-
251-
boolean shooterReady =
252-
shooterInputs.shooterLeftVelocityRPM
253-
< (shooterInputs.shooterLeftGoalVelocityRPM
254-
+ ScoringConstants.shooterUpperVelocityMarginRPM)
255-
&& shooterInputs.shooterLeftVelocityRPM
256-
> (shooterInputs.shooterLeftGoalVelocityRPM
257-
- ScoringConstants.shooterLowerVelocityMarginRPM);
258-
boolean aimReady =
259-
Math.abs(aimerInputs.aimAngleRad - aimerInputs.aimGoalAngleRad)
260-
< aimerAngleTolerance.getValue(distanceToGoal)
261-
&& Math.abs(aimerInputs.aimVelocityErrorRadPerSec)
262-
< ScoringConstants.aimAngleVelocityMargin;
263-
boolean driveReady = driveAllignedSupplier.get();
260+
boolean shooterReady;
261+
boolean aimReady;
262+
if (demo) {
263+
shooterReady =
264+
shooterInputs.shooterLeftVelocityRPM
265+
< ScoringConstants.shooterUpperVelocityMarginRPM
266+
&& shooterInputs.shooterLeftVelocityRPM
267+
> ScoringConstants.shooterLowerVelocityMarginRPM;
268+
aimReady =
269+
Math.abs(aimerInputs.aimAngleRad - aimerInputs.aimGoalAngleRad) < 0.1
270+
&& Math.abs(aimerInputs.aimVelocityErrorRadPerSec)
271+
< ScoringConstants.aimAngleVelocityMargin;
272+
} else {
273+
shooterReady =
274+
shooterInputs.shooterLeftVelocityRPM
275+
< (shooterInputs.shooterLeftGoalVelocityRPM
276+
+ ScoringConstants.shooterUpperVelocityMarginRPM)
277+
&& shooterInputs.shooterLeftVelocityRPM
278+
> (shooterInputs.shooterLeftGoalVelocityRPM
279+
- ScoringConstants.shooterLowerVelocityMarginRPM);
280+
aimReady =
281+
Math.abs(aimerInputs.aimAngleRad - aimerInputs.aimGoalAngleRad)
282+
< aimerAngleTolerance.getValue(distanceToGoal)
283+
&& Math.abs(aimerInputs.aimVelocityErrorRadPerSec)
284+
< ScoringConstants.aimAngleVelocityMargin;
285+
}
286+
boolean driveReady = demo || driveAllignedSupplier.get();
264287
boolean fieldLocationReady = true;
265288
if (!DriverStation.getAlliance().isPresent()) {
266289
fieldLocationReady = true;
267-
} else {
290+
} else if (!demo) {
268291
switch (DriverStation.getAlliance().get()) {
269292
case Blue:
270293
fieldLocationReady =
@@ -322,11 +345,16 @@ private void ampPrime() {
322345
}
323346

324347
private void shoot() {
325-
double distancetoGoal = findDistanceToGoal();
326-
327-
double shootRPM = shooterInterpolated.getValue(distancetoGoal);
328-
shooterIo.setShooterVelocityRPM(shootRPM);
329-
double aimAngleRad = aimerInterpolated.getValue(distancetoGoal);
348+
double shootRPM;
349+
double aimAngleRad;
350+
if (!demo) {
351+
double distancetoGoal = findDistanceToGoal();
352+
shootRPM = shooterInterpolated.getValue(distancetoGoal);
353+
aimAngleRad = aimerInterpolated.getValue(distancetoGoal);
354+
} else {
355+
shootRPM = ScoringConstants.demoShooterRPM;
356+
aimAngleRad = ScoringConstants.demoAimAngle;
357+
}
330358
aimerIo.setAimAngleRad(aimAngleRad, false);
331359

332360
shooterIo.setKickerVolts(10);
@@ -423,7 +451,6 @@ public boolean hasNote() {
423451

424452
public boolean aimerAtIntakePosition() {
425453
return aimerInputs.aimAngleRad > ScoringConstants.intakeAngleToleranceRadians;
426-
// return true;\][]
427454
}
428455

429456
public boolean canIntake() {
@@ -619,6 +646,10 @@ public void setOverrideBeamBrake(boolean overrideBeamBrake) {
619646
this.overrideBeamBreak = overrideBeamBrake;
620647
}
621648

649+
public void setDemo(boolean demo) {
650+
this.demo = demo;
651+
}
652+
622653
public void setArmDisabled(boolean disabled) {
623654
aimerIo.setMotorDisabled(disabled);
624655
}
@@ -688,15 +719,15 @@ public void setVolts(double volts, int slot) {
688719
switch (slot) {
689720
// Aimer
690721
case 0:
691-
aimerIo.setOverrideVolts(volts);
722+
aimerIo.setOverrideVolts(demo ? volts * 0.5 : volts);
692723
break;
693724
// Hood
694725
case 1:
695-
hoodIo.setOverrideVolts(volts);
726+
hoodIo.setOverrideVolts(demo ? volts * 0.5 : volts);
696727
break;
697728
// Shooter
698729
case 2:
699-
shooterIo.setOverrideVolts(volts);
730+
shooterIo.setOverrideVolts(demo ? volts * 0.5 : volts);
700731
break;
701732
default:
702733
throw new IllegalArgumentException("Invalid slot");

0 commit comments

Comments
 (0)