diff --git a/.github/workflows/gradle-publish.yml b/.github/workflows/gradle-publish.yml index 8ec3ee3..3feef94 100644 --- a/.github/workflows/gradle-publish.yml +++ b/.github/workflows/gradle-publish.yml @@ -10,6 +10,8 @@ name: Gradle Package on: release: types: [created] + push: + branches: ["main"] jobs: build: @@ -22,10 +24,10 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Set up JDK 11 + - name: Set up JDK 17 uses: actions/setup-java@v3 with: - java-version: '11' + java-version: '17' distribution: 'temurin' server-id: github # Value of the distributionManagement/repository/id field of the pom.xml settings-path: ${{ github.workspace }} # location for the settings.xml file diff --git a/lib/publish.gradle b/lib/publish.gradle index bd49a07..58b7f22 100644 --- a/lib/publish.gradle +++ b/lib/publish.gradle @@ -4,7 +4,7 @@ apply plugin: 'maven-publish' ext.licenseFile = files("$rootDir/LICENSE.txt") -def pubVersion = '2023.1.0' +def pubVersion = '2023.1.2' def outputsFolder = file("$buildDir/allOutputs") diff --git a/lib/src/main/java/com/fairportrobotics/frc/poe/CameraTracking/RobotFieldPosition.java b/lib/src/main/java/com/fairportrobotics/frc/poe/CameraTracking/RobotFieldPosition.java index 2c62ef5..5f09614 100644 --- a/lib/src/main/java/com/fairportrobotics/frc/poe/CameraTracking/RobotFieldPosition.java +++ b/lib/src/main/java/com/fairportrobotics/frc/poe/CameraTracking/RobotFieldPosition.java @@ -9,30 +9,51 @@ import org.photonvision.PhotonPoseEstimator.PoseStrategy; import org.photonvision.EstimatedRobotPose; import edu.wpi.first.apriltag.AprilTagFieldLayout; -import edu.wpi.first.math.geometry.Pose2d; +import edu.wpi.first.apriltag.AprilTagFields; import edu.wpi.first.math.geometry.Transform3d; -public class RobotFieldPosition { +public class RobotFieldPosition { AprilTagFieldLayout layout; PhotonPoseEstimator photonPoseEstimator; /* - Example of Transform3d: - - Transform3d robotToCam = new Transform3d(new Translation3d(0.5, 0.0, 0.5), new Rotation3d(0,0,0)); - Cam mounted facing forward, half a meter forward of center, half a meter up from center. - */ + * Example of Transform3d: + * + * Transform3d robotToCam = new Transform3d(new Translation3d(0.5, 0.0, 0.5), + * new Rotation3d(0,0,0)); + * Cam mounted facing forward, half a meter forward of center, half a meter up + * from center. + */ public RobotFieldPosition(String camera, Transform3d robotToCam, String layoutResourceFile) throws IOException { - layout = AprilTagFieldLayout.loadFromResource(layoutResourceFile); - + PhotonCamera cam = new PhotonCamera(camera); photonPoseEstimator = new PhotonPoseEstimator(layout, PoseStrategy.LOWEST_AMBIGUITY, cam, robotToCam); - } + } + + public RobotFieldPosition(String camera, Transform3d robotToCam, String layoutResourceFile, PoseStrategy strategy) throws IOException { + layout = AprilTagFieldLayout.loadFromResource(layoutResourceFile); + + PhotonCamera cam = new PhotonCamera(camera); + photonPoseEstimator = new PhotonPoseEstimator(layout, PoseStrategy.LOWEST_AMBIGUITY, cam, robotToCam); + } + + public RobotFieldPosition(String camera, Transform3d robotToCam, AprilTagFields fields) throws IOException { + layout = AprilTagFieldLayout.loadFromResource(fields.m_resourceFile); + + PhotonCamera cam = new PhotonCamera(camera); + photonPoseEstimator = new PhotonPoseEstimator(layout, PoseStrategy.LOWEST_AMBIGUITY, cam, robotToCam); + } + + public RobotFieldPosition(String camera, Transform3d robotToCam, AprilTagFields fields, PoseStrategy strategy) throws IOException { + layout = AprilTagFieldLayout.loadFromResource(fields.m_resourceFile); + + PhotonCamera cam = new PhotonCamera(camera); + photonPoseEstimator = new PhotonPoseEstimator(layout, PoseStrategy.LOWEST_AMBIGUITY, cam, robotToCam); + } public Optional getEstimatedGlobalPose() { return photonPoseEstimator.update(); } - -} \ No newline at end of file +} \ No newline at end of file diff --git a/lib/src/main/java/com/fairportrobotics/frc/poe/controllers/lighting/ArduinoLightingController.java b/lib/src/main/java/com/fairportrobotics/frc/poe/controllers/lighting/ArduinoLightingController.java new file mode 100644 index 0000000..d42bfcc --- /dev/null +++ b/lib/src/main/java/com/fairportrobotics/frc/poe/controllers/lighting/ArduinoLightingController.java @@ -0,0 +1,62 @@ +package com.fairportrobotics.frc.poe.controllers.lighting; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import edu.wpi.first.wpilibj.SerialPort; + + +public class ArduinoLightingController { + + final SerialPort bus; + final Pattern colorPattern = Pattern.compile("\\d{9}"); + private final String NULL_COLOR = "000000000"; + private final String RAINBOW_VALUE = NULL_COLOR + "254"; + private final String SHIFT_VALUE = NULL_COLOR + "251"; + private final String SHIFT_WRAP_VALUE = NULL_COLOR + "250"; + + public ArduinoLightingController(int baudRate, SerialPort.Port port) { + this.bus = new SerialPort(baudRate, port); + } + + private boolean validateColor(String colorValue) { + Matcher m = colorPattern.matcher(colorValue); + return m.find(); + } + private int executeColor(String colorValue, String command) { + if ( validateColor(colorValue) ) { + return bus.writeString( colorValue + command ); + } + return 0; + } + + public int fillAll(String colorValue) { + return executeColor(colorValue, "255"); + } + + public int fillRainbow() { + return bus.writeString(RAINBOW_VALUE); + } + + public int switchGradient(String colorValue) { + return executeColor(colorValue, "253"); + } + + public int fillShift(String colorValue) { + return executeColor(colorValue, "252"); + } + + public int shift() { + return bus.writeString(SHIFT_VALUE); + } + + public int shiftWrap() { + return bus.writeString(SHIFT_WRAP_VALUE); + } + + public int flash(String colorValue) { + return executeColor(colorValue, "249"); + } + + +}