Skip to content
Closed
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/main/java/frc/robot/RobotContainer.java
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,8 @@ private void configureBindings() {
// While the right trigger is held, we will shoot into the hub or ferry. Binding A to the shaking of the shooter.
gamepad_.rightTrigger().or(operatorGamepad_.rightTrigger())
.whileTrue(RobotCommands.shoot(shooter_, hopper_, intake_, drivebase_));

gamepad_.a().whileTrue(RobotCommands.shootHubInCorner(shooter_, hopper_, intake_, drivebase_));

// When the shooter isnt shooting, get it ready to shoot.
shooter_.setDefaultCommand(shooter_.spinUpVelocityCommand(() -> {
Expand Down
53 changes: 53 additions & 0 deletions src/main/java/frc/robot/commands/robot/RobotCommands.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
package frc.robot.commands.robot;

import static edu.wpi.first.units.Units.Meters;
import static edu.wpi.first.units.Units.MetersPerSecond;
import static edu.wpi.first.units.Units.MetersPerSecondPerSecond;

import java.util.Set;
import java.util.function.BooleanSupplier;
import java.util.function.Supplier;

import org.littletonrobotics.junction.Logger;

import edu.wpi.first.math.geometry.Pose2d;
import edu.wpi.first.math.geometry.Rotation2d;
import edu.wpi.first.math.geometry.Translation2d;
import edu.wpi.first.units.measure.Distance;
Expand Down Expand Up @@ -52,6 +55,56 @@ public static Command shootHub(Shooter shooter, Hopper hopper, IntakeSubsystem i
);
}

public static Command shootHubInCorner(Shooter shooter, Hopper hopper, IntakeSubsystem intake, Drive drive) {
return Commands.defer(() -> {
Supplier<Pose2d> cornerPose = () -> {
Pose2d rightTarget =
DriverStation.getAlliance().orElse(Alliance.Blue) == Alliance.Blue
? ShooterConstants.Positions.blueCornerDepot
: ShooterConstants.Positions.redCornerDepot;

Pose2d leftTarget =
DriverStation.getAlliance().orElse(Alliance.Blue) == Alliance.Blue
? ShooterConstants.Positions.blueCornerOutpost
: ShooterConstants.Positions.redCornerOutpost;

Pose2d target =
drive.getPose().getY() < ShooterConstants.Positions.centerLineY
? rightTarget
: leftTarget;
return target;
};

Supplier<Pose2d> immdPose = () -> {
Pose2d rightTarget =
DriverStation.getAlliance().orElse(Alliance.Blue) == Alliance.Blue
? ShooterConstants.Positions.blueCornerDepotWaypoint
: ShooterConstants.Positions.redCornerDepotWaypoint;

Pose2d leftTarget =
DriverStation.getAlliance().orElse(Alliance.Blue) == Alliance.Blue
? ShooterConstants.Positions.blueCornerOutpostWaypoint
: ShooterConstants.Positions.redCornerOutpostWaypoint;

Pose2d target =
drive.getPose().getY() < ShooterConstants.Positions.centerLineY
? rightTarget
: leftTarget;
return target;
};

Logger.recordOutput("Shooter/CornerDriveTarget", cornerPose.get());

if(Meters.of(drive.getPose().getTranslation().getDistance(cornerPose.get().getTranslation())).lt(ShooterConstants.Positions.distFromCornerToShootInCorner)) {
return DriveCommands.simplePathCommand(drive, cornerPose.get(), immdPose.get(), MetersPerSecond.of(3.0), MetersPerSecondPerSecond.of(3.0))
.andThen(shootHub(shooter, hopper, intake, drive));
}

return shootHub(shooter, hopper, intake, drive);

}, Set.of(shooter, hopper, intake, drive));
}

/**
* Shoots into the hub, without aiming. This should not be used in most situations,
* and only when you need additional flexibility like trying to squeeze
Expand Down
74 changes: 38 additions & 36 deletions src/main/java/frc/robot/subsystems/shooter/ShooterConstants.java

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are a lot of weird github issues that make it seem like it is way more complicated than it is. I only added constants to the positions class, and got a rid of the ferryConstants classes that we were not using and only making things more confusing. I also indented some things correctly because otherwise I was unable to read which code was in what classes.

Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@

import static edu.wpi.first.units.Units.Amps;
import static edu.wpi.first.units.Units.Degrees;
import static edu.wpi.first.units.Units.Inches;
import static edu.wpi.first.units.Units.Meters;
import static edu.wpi.first.units.Units.RotationsPerSecond;
import static edu.wpi.first.units.Units.Seconds;

import edu.wpi.first.math.geometry.Pose2d;
import edu.wpi.first.math.geometry.Rotation2d;
import edu.wpi.first.math.geometry.Translation2d;
import edu.wpi.first.units.measure.Angle;
import edu.wpi.first.units.measure.AngularVelocity;
Expand Down Expand Up @@ -49,11 +52,6 @@ public class ShooterConstants {
public static final Angle hoodMaxAngle = Degrees.of(75.0) ;
public static final Angle hoodMinAngle = Degrees.of(0.0) ;

public class FerryPositions{
public static final Translation2d blueOutpostTarget= new Translation2d(2.135, 1.639);
public static final Translation2d redOutpostTarget= new Translation2d(14.0,6.0);
}

public class PID {
// shooter
public static final double shooterkP = 0.5;
Expand All @@ -63,50 +61,54 @@ public class PID {
public static final double shooterkA = 0.0;
public static final double shooterkG = 0.0;
public static final double shooterkS = 0.0;
}
}

public class MotionMagic {
public class MotionMagic {

// shooter
public static final double shooterkMaxVelocity = 1000.0;
public static final double shooterkMaxAcceleration = 3000.0;
public static final double shooterkJerk = 0.0;
}
// shooter
public static final double shooterkMaxVelocity = 1000.0;
public static final double shooterkMaxAcceleration = 3000.0;
public static final double shooterkJerk = 0.0;
}

public class SoftwareLimits {
public static final double hoodMaxAngle = 0.0;
public static final double hoodMinAngle = 0.0;
}
public class SoftwareLimits {
public static final double hoodMaxAngle = 0.0;
public static final double hoodMinAngle = 0.0;
}

public class Positions {
// Field Positions
public static final Translation2d blueHubPose = new Translation2d(4.5974,4.034536);
public static final Translation2d redHubPose = new Translation2d(11.938,4.034536);

public static final Distance allianceZone = Meters.of(4.5974);
public static final Distance spinUpZone = Meters.of(6.0);

public class Positions {
// Field Positions
public static final Translation2d blueHubPose = new Translation2d(4.5974,4.034536);
public static final Translation2d redHubPose = new Translation2d(11.938,4.034536);
public static final Distance blueAllianceWall = Meters.of(0);
public static final Distance redAllianceWall = Meters.of(FieldConstants.layout.getFieldLength());

public static final Distance allianceZone = Meters.of(4.5974);
public static final Distance spinUpZone = Meters.of(6.0);
public static final Translation2d blueTargetLeft = new Translation2d(2,6);
public static final Translation2d blueTargetRight = new Translation2d(2,2);

public static final Distance blueAllianceWall = Meters.of(0);
public static final Distance redAllianceWall = Meters.of(FieldConstants.layout.getFieldLength());
public static final Translation2d redTargetLeft = new Translation2d(14,6);
public static final Translation2d redTargetRight = new Translation2d(14,2);

public static final Translation2d blueTargetLeft = new Translation2d(2,6);
public static final Translation2d blueTargetRight = new Translation2d(2,2);
public static final double centerLineY = 4.034536;

public static final Translation2d redTargetLeft = new Translation2d(14,6);
public static final Translation2d redTargetRight = new Translation2d(14,2);
public static final Pose2d blueCornerDepot = new Pose2d(Inches.of(23.09), Inches.of(23.429), new Rotation2d(Degrees.of(40.417)));
public static final Pose2d blueCornerDepotWaypoint = new Pose2d(Inches.of(34.511), Inches.of(33.155), new Rotation2d(Degrees.of(40.417)));
public static final Pose2d blueCornerOutpost = new Pose2d(Inches.of(23.09), Inches.of(294.261), new Rotation2d(Degrees.of(-40.417)));
public static final Pose2d blueCornerOutpostWaypoint = new Pose2d(Inches.of(34.511), Inches.of(284.535), new Rotation2d(Degrees.of(-40.417)));
public static final Pose2d redCornerDepot = new Pose2d(Inches.of(628.13), Inches.of(23.429), new Rotation2d(Degrees.of(180.0 - 40.417)));
public static final Pose2d redCornerDepotWaypoint = new Pose2d(Inches.of(616.709), Inches.of(33.155), new Rotation2d(Degrees.of(180.0 - 40.417)));
public static final Pose2d redCornerOutpost = new Pose2d(Inches.of(628.13), Inches.of(294.261), new Rotation2d(Degrees.of(180.0 + 40.417)));
public static final Pose2d redCornerOutpostWaypoint = new Pose2d(Inches.of(616.709), Inches.of(284.535), new Rotation2d(Degrees.of(180.0 + 40.417)));

public static final double centerLineY = 4.034536;
public static final Distance distFromCornerToShootInCorner = Meters.of(2);
}

public class HoodPWMs {
public static final int hoodLeftPWMPort = 2;
public static final int hoodRightPWMPort = 0;
}

public class ferryPositions{
public static final Translation2d blueOutpostFerryTarget= new Translation2d(2.136,1.935); //ferry target for the blue outpost
public static final Translation2d redOutpostFerryTarget= new Translation2d(14.0,6.0); //ferry target for the red outpost
public static final Translation2d blueDepotFerryTarget= new Translation2d(2.0,6.0); //ferry target for the blue depot
public static final Translation2d redDepotFerryTarget= new Translation2d(14.0,2.0); //ferry target for the red depot
}
}
Loading