Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
152 changes: 2 additions & 150 deletions src/main/java/frc/game/Field.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,9 @@
import static edu.wpi.first.units.Units.*;

import edu.wpi.first.math.geometry.Pose2d;
import edu.wpi.first.math.geometry.Pose3d;
import edu.wpi.first.math.geometry.Rectangle2d;
import edu.wpi.first.math.geometry.Rotation2d;
import edu.wpi.first.math.geometry.Rotation3d;
import edu.wpi.first.math.geometry.Translation2d;
import edu.wpi.first.math.geometry.Translation3d;
import edu.wpi.first.units.measure.Distance;
import java.util.List;
import org.littletonrobotics.junction.Logger;
Expand All @@ -17,147 +14,15 @@ public class Field {
// Measured
public static final Distance centerField_x_pos = Inches.of(325.06);
public static final Distance centerField_y_pos = Inches.of(158.32);
private static final Distance hub_x_centerPos = Inches.of(181.56);
private static final Distance hub_x_len = Inches.of(47);
private static final Distance hub_y_len = Inches.of(47);
private static final Distance hub_z_len = Inches.of(72);
private static final Distance trench_y_len = Inches.of(49.86);
private static final Distance bump_y_len = Inches.of(73);
private static final Distance depot_y_centerPos = centerField_y_pos.plus(Inches.of(75.93));
private static final Distance depot_x_len = Inches.of(27);
private static final Distance depot_y_len = Inches.of(42);
private static final Distance tower_y_centerPos = centerField_y_pos.minus(Inches.of(11.46));
private static final Distance tower_x_len = Inches.of(43.8);
private static final Distance tower_y_len = Inches.of(47);
private static final Distance fuel_x_len = Inches.of(35.95 * 2);
private static final Distance fuel_y_len = Inches.of(90.95 * 2);

// Constructed
public static final Distance field_x_len = centerField_x_pos.times(2);
public static final Distance field_y_len = centerField_y_pos.times(2);
private static final Distance allianceZone_x_len = hub_x_centerPos.minus(hub_x_len.div(2));
private static final Distance neutralZone_x_len =
(centerField_x_pos.minus(hub_x_centerPos.plus(hub_x_len.div(2)))).times(2);
private static final Pose2d fieldCenter =
new Pose2d(new Translation2d(centerField_x_pos, centerField_y_pos), Rotation2d.kZero);
public static final Pose3d blueHubCenter =
new Pose3d(hub_x_centerPos, centerField_y_pos, hub_z_len, Rotation3d.kZero);
public static final Pose3d redHubCenter =
new Pose3d(
field_x_len.minus(hub_x_centerPos), centerField_y_pos, hub_z_len, Rotation3d.kZero);

public static final Pose3d redRightTarget =
new Pose3d(
new Translation3d(Inches.of(651.2), Inches.of(49.86), Inches.of(0)), Rotation3d.kZero);

public static final Pose3d blueLeftTarget =
new Pose3d(
new Translation3d(Inches.of(0), Inches.of(200.86), Inches.of(0)), Rotation3d.kZero);

public static final Pose3d redLeftTarget =
new Pose3d(
new Translation3d(Inches.of(651.2), Inches.of(200.86), Inches.of(0)), Rotation3d.kZero);

public static final Pose3d blueRightTarget =
new Pose3d(new Translation3d(Inches.of(0), Inches.of(49.86), Inches.of(0)), Rotation3d.kZero);
// private static final Pose2d fieldCenter =
// new Pose2d(new Translation2d(centerField_x_pos, centerField_y_pos), Rotation2d.kZero);

enum Region {
BlueZone(
new Rectangle2d(
new Translation2d(0, 0), new Translation2d(allianceZone_x_len, field_y_len))),
RightNeutralZone(
new Rectangle2d(
new Translation2d(centerField_x_pos.minus(neutralZone_x_len.div(2.0)), Inches.of(0)),
new Translation2d(
centerField_x_pos.plus(neutralZone_x_len.div(2.0)), centerField_y_pos))),
LeftNeutralZone(
new Rectangle2d(
new Translation2d(
centerField_x_pos.minus(neutralZone_x_len.div(2.0)), centerField_y_pos),
new Translation2d(centerField_x_pos.plus(neutralZone_x_len.div(2.0)), field_y_len))),
RedZone(
new Rectangle2d(
new Translation2d(field_x_len.minus(allianceZone_x_len), Inches.of(0)),
new Translation2d(field_x_len, field_y_len))),
BlueHub(new Rectangle2d(blueHubCenter.toPose2d(), hub_x_len, hub_y_len)),
RedHub(new Rectangle2d(redHubCenter.toPose2d(), hub_x_len, hub_y_len)),
RedLeftTrench(
new Rectangle2d(
new Translation2d(
field_x_len.minus(hub_x_centerPos).minus(hub_x_len.div(2)), Inches.of(0)),
new Translation2d(
field_x_len.minus(hub_x_centerPos).plus(hub_x_len.div(2)), trench_y_len))),
RedRightTrench(
new Rectangle2d(
new Translation2d(
field_x_len.minus(hub_x_centerPos).minus(hub_x_len.div(2)),
field_y_len.minus(trench_y_len)),
new Translation2d(
field_x_len.minus(hub_x_centerPos).plus(hub_x_len.div(2)), field_y_len))),
BlueLeftTrench(
new Rectangle2d(
new Translation2d(
hub_x_centerPos.minus(hub_x_len.div(2)), field_y_len.minus(trench_y_len)),
new Translation2d(hub_x_centerPos.plus(hub_x_len.div(2)), field_y_len))),
BlueRightTrench(
new Rectangle2d(
new Translation2d(hub_x_centerPos.minus(hub_x_len.div(2)), Inches.of(0)),
new Translation2d(hub_x_centerPos.plus(hub_x_len.div(2)), trench_y_len))),
RedLeftBump(
new Rectangle2d(
new Translation2d(
field_x_len.minus(hub_x_centerPos).minus(hub_x_len.div(2)),
centerField_y_pos.minus(hub_y_len.div(2)).minus(bump_y_len)),
new Translation2d(
field_x_len.minus(hub_x_centerPos).plus(hub_x_len.div(2)),
centerField_y_pos.minus(hub_y_len.div(2))))),
RedRightBump(
new Rectangle2d(
new Translation2d(
field_x_len.minus(hub_x_centerPos).minus(hub_x_len.div(2)),
centerField_y_pos.plus(hub_y_len.div(2))),
new Translation2d(
field_x_len.minus(hub_x_centerPos).plus(hub_x_len.div(2)),
centerField_y_pos.plus(hub_y_len.div(2)).plus(bump_y_len)))),
BlueLeftBump(
new Rectangle2d(
new Translation2d(
hub_x_centerPos.minus(hub_x_len.div(2)), centerField_y_pos.plus(hub_y_len.div(2))),
new Translation2d(
hub_x_centerPos.plus(hub_x_len.div(2)),
centerField_y_pos.plus(hub_y_len.div(2)).plus(bump_y_len)))),
BlueRightBump(
new Rectangle2d(
new Translation2d(
hub_x_centerPos.minus(hub_x_len.div(2)),
centerField_y_pos.minus(hub_y_len.div(2)).minus(bump_y_len)),
new Translation2d(
hub_x_centerPos.plus(hub_x_len.div(2)),
centerField_y_pos.minus(hub_y_len.div(2))))),
BlueDepot(
new Rectangle2d(
new Translation2d(Inches.of(0), depot_y_centerPos.minus(depot_y_len.div(2))),
new Translation2d(depot_x_len, depot_y_centerPos.plus(depot_y_len.div(2))))),
RedDepot(
new Rectangle2d(
new Translation2d(
field_x_len.minus(depot_x_len),
field_y_len.minus(depot_y_centerPos).minus(depot_y_len.div(2))),
new Translation2d(
field_x_len, field_y_len.minus(depot_y_centerPos).plus(depot_y_len.div(2))))),
BlueTower(
new Rectangle2d(
new Translation2d(Inches.of(0), tower_y_centerPos.minus(tower_y_len.div(2))),
new Translation2d(tower_x_len, tower_y_centerPos.plus(tower_y_len.div(2))))),
RedTower(
new Rectangle2d(
new Translation2d(
field_x_len.minus(tower_x_len),
field_y_len.minus(tower_y_centerPos).minus(tower_y_len.div(2))),
new Translation2d(
field_x_len, field_y_len.minus(tower_y_centerPos).plus(tower_y_len.div(2))))),

FuelArrangement(new Rectangle2d(fieldCenter, fuel_x_len, fuel_y_len)),
Field(new Rectangle2d(new Translation2d(0, 0), new Translation2d(field_x_len, field_y_len)));

private final Rectangle2d rect;
Expand All @@ -175,19 +40,6 @@ public Pose2d getCenter() {
}
}

public static Region getZone(Pose2d pose) {
if (Region.BlueZone.contains(pose)) {
return Region.BlueZone;
}
if (Region.RedZone.contains(pose)) {
return Region.RedZone;
}
if (Region.LeftNeutralZone.contains(pose)) {
return Region.LeftNeutralZone;
}
return Region.RightNeutralZone;
}

public static void plotRegions() {
for (Region region : Region.values()) {
Logger.recordOutput(
Expand Down
67 changes: 2 additions & 65 deletions src/main/java/frc/game/GameState.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package frc.game;

import edu.wpi.first.math.geometry.Pose2d;
import edu.wpi.first.math.geometry.Pose3d;
import edu.wpi.first.wpilibj.DriverStation;
import edu.wpi.first.wpilibj.DriverStation.Alliance;
import frc.robot.Robot;
Expand All @@ -14,15 +12,10 @@ public class GameState {
public enum GamePhase {
None("0:00 - 0:00"),
Autonomous("0:20 - 0:00"),
Transition("2:20 - 2:10"),
Shift1("2:10 - 1:45"),
Shift2("1:45 - 1:20"),
Shift3("1:20 - 0:55"),
Shift4("0:55 - 0:30"),
MidGame("2:20 - 0:30"),
EndGame("0:30 - 0:00");

public static final List<GamePhase> TELEOP =
List.of(Transition, Shift1, Shift2, Shift3, Shift4, EndGame);
public static final List<GamePhase> TELEOP = List.of(MidGame, EndGame);

final double countDownFrom;
final double countDownUntil;
Expand All @@ -47,7 +40,6 @@ private static int parseSeconds(String time) {
}
}

private static Alliance autoWinner;
private static Alliance myAlliance;

public static GamePhase getCurrentPhase() {
Expand Down Expand Up @@ -75,39 +67,6 @@ public static Alliance getMyAlliance() {
return myAlliance;
}

public static Optional<Alliance> getAutoWinner() {
if (autoWinner == null) {
var gameData = DriverStation.getGameSpecificMessage();
if (gameData.length() > 0) {
autoWinner =
switch (gameData.charAt(0)) {
case 'B' -> Alliance.Blue;
case 'R' -> Alliance.Red;
default -> null;
};
}
}
return Optional.ofNullable(autoWinner);
}

public static boolean isMyHubActive() {
switch (getCurrentPhase()) {
case None:
case Autonomous:
case Transition:
case EndGame:
return true;
case Shift1:
case Shift3:
return autoWinner != null && myAlliance != null && autoWinner != myAlliance;
case Shift2:
case Shift4:
return autoWinner != null && myAlliance != null && autoWinner == myAlliance;
default:
return false;
}
}

public static double getMatchTime() {
return DriverStation.getMatchTime();
}
Expand All @@ -118,35 +77,13 @@ public static Optional<Alliance> getAlliance() {

public static void logValues() {
getMyAlliance();
getAutoWinner();
Logger.recordOutput("GameState/IsDSAttached", DriverStation.isDSAttached());
Logger.recordOutput("GameState/IsFMSAttached", DriverStation.isFMSAttached());
Logger.recordOutput("GameState/MatchType", DriverStation.getMatchType());
Logger.recordOutput("GameState/IsAutonomus", DriverStation.isAutonomous());
Logger.recordOutput("GameState/MatchTime", DriverStation.getMatchTime());
Logger.recordOutput("GameState/AutoWinner", autoWinner);
Logger.recordOutput("GameState/Alliance", myAlliance);
Logger.recordOutput("GameState/GameData", DriverStation.getGameSpecificMessage());
Logger.recordOutput("GameState/CurrentPhase", getCurrentPhase());
Logger.recordOutput("GameState/IsMyHubActive", isMyHubActive());
}

public static Pose3d getTarget(Pose2d robotPose) {
if (Robot.getAlliance() == Alliance.Red) {
if (robotPose.getMeasureX().gt(Field.redHubCenter.getMeasureX())) {
return Field.redHubCenter;
}
if (robotPose.getMeasureY().gt(Field.centerField_y_pos)) {
return Field.redLeftTarget;
}
return Field.redRightTarget;
}
if (robotPose.getMeasureX().lt(Field.blueHubCenter.getMeasureX())) {
return Field.blueHubCenter;
}
if (robotPose.getMeasureY().gt(Field.centerField_y_pos)) {
return Field.blueLeftTarget;
}
return Field.blueRightTarget;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
// license that can be found in the LICENSE file
// at the root directory of this project.

package frc.robot;
package frc.lib;

import edu.wpi.first.wpilibj.DoubleSolenoid;
import edu.wpi.first.wpilibj.DriverStation;
Expand Down
30 changes: 2 additions & 28 deletions src/main/java/frc/robot/Constants.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ public static final class FeatureFlags {
/** Enable to print loop timing when total exceeds 20ms. */
public static final boolean PROFILING_ENABLED = false;

/** Set to false to disable the hopper subsystem entirely. */
public static final boolean HOPPER_ENABLED = false;
public static final boolean LEDS_ENABLED = false;
public static final boolean VISION_ENABLED = false;
}

public final class RobotConstants {
Expand Down Expand Up @@ -72,8 +72,6 @@ public static final class DIOPorts {
public static final int[] AUTONOMOUS_MODE_SELECTOR = {0, 1, 2};

public static final int ALLIANCE_COLOR_SELECTOR = 3;

public static final int TURRET_ABS_ENCODER = 4;
}

public static final class CANBusPorts {
Expand All @@ -86,20 +84,6 @@ public static final class CAN2 {

// Drivetrain
public static final int GYRO = 0;

// Launcher
public static final int TURRET = 12;
public static final int HOOD = 13;
public static final int FLYWHEEL_LEADER = 14;
public static final int FLYWHEEL_FOLLOWER = 15;

// Feeder
public static final int SPINDEXER = 16;
public static final int KICKER = 17;

// Intake
public static final int INTAKE_ROLLER_LOWER = 22;
public static final int INTAKE_ROLLER_UPPER = 23;
}

public static final class CANHD {
Expand All @@ -124,14 +108,4 @@ public static final class CANHD {
public static final int BACK_LEFT_TURN_ABS_ENC = 45;
}
}

public static final class PneumaticChannels {
// hopper
public static final int HOPPER_FWD = 14;
public static final int HOPPER_REV = 15;

// intake arm
public static final int INTAKE_ARM_FWD = 0;
public static final int INTAKE_ARM_REV = 1;
}
}
Loading
Loading