diff --git a/.github/workflows/gradle-publish.yml b/.github/workflows/gradle-publish.yml
index 4036012..d7b1458 100644
--- a/.github/workflows/gradle-publish.yml
+++ b/.github/workflows/gradle-publish.yml
@@ -39,10 +39,10 @@ jobs:
# The USERNAME and TOKEN need to correspond to the credentials environment variables used in
# the publishing section of your build.gradle
- - name: Publish to GitHub Packages
- uses: gradle/gradle-build-action@0d13054264b0bb894ded474f08ebb30921341cee
- with:
- arguments: -Prelease publish
- env:
- USERNAME: ${{ github.actor }}
- TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ # - name: Publish to GitHub Packages
+ # uses: gradle/gradle-build-action@0d13054264b0bb894ded474f08ebb30921341cee
+ # with:
+ # arguments: -Prelease publish
+ # env:
+ # USERNAME: ${{ github.actor }}
+ # TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.gitignore b/.gitignore
index b7e94a2..e1e30ec 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,9 @@
/build/
/lib/bin
+.vscode
+.settings
+
# Ignore Gradle GUI config
gradle-app.setting
diff --git a/.project b/.project
new file mode 100644
index 0000000..dc4fc5e
--- /dev/null
+++ b/.project
@@ -0,0 +1,28 @@
+
+
+ RoboLib
+ Project RoboLib created by Buildship.
+
+
+
+
+ org.eclipse.buildship.core.gradleprojectbuilder
+
+
+
+
+
+ org.eclipse.buildship.core.gradleprojectnature
+
+
+
+ 1741394171792
+
+ 30
+
+ org.eclipse.core.resources.regexFilterMatcher
+ node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__
+
+
+
+
diff --git a/.vscode/settings.json b/.vscode/settings.json
deleted file mode 100644
index e0f15db..0000000
--- a/.vscode/settings.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "java.configuration.updateBuildConfiguration": "automatic"
-}
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
deleted file mode 100644
index b04baf4..0000000
--- a/gradle.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-wpiVersion = 2025.+
-ctreVersion = 5.+
-photonVisionVersion = v2024.+
-advantageKitVersion = 2.2.1
diff --git a/lib/build.gradle b/lib/build.gradle
index 0c5414d..c0e34dd 100644
--- a/lib/build.gradle
+++ b/lib/build.gradle
@@ -6,10 +6,17 @@
* User Manual available at https://docs.gradle.org/7.4.2/userguide/building_java_projects.html
*/
+import org.gradle.internal.os.OperatingSystem
+
plugins {
// Apply the java-library plugin for API and implementation separation.
id 'java'
- id 'edu.wpi.first.GradleRIO' version "${wpiVersion}"
+ id "edu.wpi.first.GradleRIO" version "${wpiVersion}"
+}
+
+java {
+ sourceCompatibility = JavaVersion.VERSION_17
+ targetCompatibility = JavaVersion.VERSION_17
}
repositories {
@@ -21,49 +28,26 @@ repositories {
maven {url "https://maven.photonvision.org/repository/snapshots"}
maven {url "https://maven.photonvision.org/repository/internal"}
maven {url "https://maven.ctr-electronics.com/release/"}
-
- maven {
- url = uri("https://maven.pkg.github.com/Mechanical-Advantage/AdvantageKit")
- credentials {
- username = "Mechanical-Advantage-Bot"
- password = "\u0067\u0068\u0070\u005f\u006e\u0056\u0051\u006a\u0055\u004f\u004c\u0061\u0079\u0066\u006e\u0078\u006e\u0037\u0051\u0049\u0054\u0042\u0032\u004c\u004a\u006d\u0055\u0070\u0073\u0031\u006d\u0037\u004c\u005a\u0030\u0076\u0062\u0070\u0063\u0051"
- }
- }
}
dependencies {
// Use JUnit Jupiter for testing.
testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1'
- // This dependency is used internally, and not exposed to consumers on their own compile classpath.
- implementation 'com.google.guava:guava:30.1.1-jre'
- implementation "edu.wpi.first.cscore:cscore-java:${wpiVersion}"
- implementation "edu.wpi.first.cameraserver:cameraserver-java:${wpiVersion}"
- implementation "edu.wpi.first.ntcore:ntcore-java:${wpiVersion}"
- implementation "edu.wpi.first.wpilibj:wpilibj-java:${wpiVersion}"
- implementation "edu.wpi.first.wpiutil:wpiutil-java:${wpiVersion}"
- implementation "edu.wpi.first.wpimath:wpimath-java:${wpiVersion}"
- implementation "edu.wpi.first.wpilibNewCommands:wpilibNewCommands-java:${wpiVersion}"
- implementation "edu.wpi.first.hal:hal-java:${wpiVersion}"
- implementation "edu.wpi.first.apriltag:apriltag-java:${wpiVersion}"
- implementation "org.ejml:ejml-simple:0.38"
- implementation "com.fasterxml.jackson.core:jackson-annotations:2.10.0"
- implementation "com.fasterxml.jackson.core:jackson-core:2.10.0"
- implementation "com.fasterxml.jackson.core:jackson-databind:2.10.0"
- implementation 'edu.wpi.first.thirdparty.frc2022.opencv:opencv-java:4.5.2-1'
+ // WPI Lib
+ implementation "edu.wpi.first.cscore:cscore-java:$wpiVersion"
+ implementation "edu.wpi.first.cameraserver:cameraserver-java:$wpiVersion"
+ implementation "edu.wpi.first.ntcore:ntcore-java:$wpiVersion"
+ implementation "edu.wpi.first.wpilibj:wpilibj-java:$wpiVersion"
+ implementation "edu.wpi.first.wpiutil:wpiutil-java:$wpiVersion"
+ implementation "edu.wpi.first.wpimath:wpimath-java:$wpiVersion"
+ implementation "edu.wpi.first.wpiunits:wpiunits-java:$wpiVersion"
+ implementation "edu.wpi.first.hal:hal-java:$wpiVersion"
+ implementation "edu.wpi.first.wpilibNewCommands:wpilibNewCommands-java:$wpiVersion"
- // CTRE Phoenix
- implementation "com.ctre.phoenix:api-java:${ctreVersion}"
- implementation "com.ctre.phoenix:wpiapi-java:${ctreVersion}"
-
- // PhotonVision
- implementation "org.photonvision:photonlib-java:${photonVisionVersion}"
- implementation "org.photonvision:photontargeting-java:${photonVisionVersion}"
+ // CTRE Phoenix 6
+ implementation "com.ctre.phoenix6:wpiapi-java:${ctreVersion}"
- // AdvantageKit
- implementation "org.littletonrobotics.akit.junction:wpilib-shim:${advantageKitVersion}"
- implementation "org.littletonrobotics.akit.junction:junction-core:${advantageKitVersion}"
- implementation "org.littletonrobotics.akit.conduit:conduit-api:${advantageKitVersion}"
}
tasks.named('test') {
diff --git a/lib/src/main/java/com/fairportrobotics/frc/poe/CameraTracking/AprilTags.java b/lib/src/main/java/com/fairportrobotics/frc/poe/CameraTracking/AprilTags.java
deleted file mode 100644
index fc403fe..0000000
--- a/lib/src/main/java/com/fairportrobotics/frc/poe/CameraTracking/AprilTags.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package com.fairportrobotics.frc.poe.CameraTracking;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.photonvision.PhotonCamera;
-import org.photonvision.targeting.PhotonTrackedTarget;
-
-import edu.wpi.first.math.geometry.Transform3d;
-
-public class AprilTags implements Cloneable {
- // an ArrayList to store the cameras
- public final ArrayList cameras = new ArrayList<>();
- public final ArrayList frozenResults = new ArrayList<>();
- public boolean frozen = false;
-
- public AprilTags(String...cameraNames) {
- for(String cameraName : cameraNames) {
- cameras.add(new PhotonCamera(cameraName));
- }
- }
-
- //Method to get a list of all targets without any filtering
- public List getAllTargets() {
- return frozen ? frozenResults : cameras.stream().flatMap((camera) -> camera.getLatestResult().getTargets().stream()).toList();
- }
-
- // Method to get a list of all targets with duplicates removed
- public List getTargets() {
- List targets = new ArrayList<>();
-
- for(PhotonTrackedTarget target : getAllTargets()) {
- boolean toAdd = true;
- List tempTargets = targets;
- // check if the target is already in the list and if it has a higher pose ambiguity
- for(PhotonTrackedTarget arTarget : targets) {
- if(target.getFiducialId() == arTarget.getFiducialId() && target.getPoseAmbiguity() < arTarget.getPoseAmbiguity()) {
- // if it does, remove it from the list
- tempTargets.remove(arTarget);
- break;
- } else if(target.getFiducialId() == arTarget.getFiducialId()) {
- // if the target is already in the list and has the same ID, don't add it
- toAdd = false;
- break;
- }
- }
- if(toAdd) { tempTargets.add(target); }
- targets = tempTargets;
- }
-
-
- return targets;
- }
-
- // method to check if any camera has any targets
- public boolean hasTargets() {
- return getAllTargets().size() != 0;
- }
-
- // method to get the closest target
- public PhotonTrackedTarget getClosestTarget() {
- if(!hasTargets()) { return null; }
- PhotonTrackedTarget closestTarget = null;
- for(PhotonTrackedTarget target : getTargets()) {
- if(closestTarget == null || calculateDistance(closestTarget.getBestCameraToTarget()) > calculateDistance(target.getBestCameraToTarget())) { closestTarget = target; }
- }
- return closestTarget;
- }
-
- // method to get the target with the lowest pose ambiguity
- public PhotonTrackedTarget getLowestAmbiguityTarget() {
- if(!hasTargets()) { return null; }
- PhotonTrackedTarget lowestAmbiguity = null;
- for(PhotonTrackedTarget target : getTargets()) {
- // check if the target has a lower pose ambiguity than the current lowest ambiguity target
- if(lowestAmbiguity == null || lowestAmbiguity.getPoseAmbiguity() > target.getPoseAmbiguity()) { lowestAmbiguity = target; }
- }
- return lowestAmbiguity;
- }
-
- private double calculateDistance(Transform3d t) {
- return Math.sqrt(t.getX()*t.getX() + t.getY()*t.getY());
- }
-
- /*
- * In cases where data needs to be referenced more than once, use this function
- * to keep the data consistent and prevent any errors.
- *
- * Very Important!
- */
- public void freeze() {
- frozenResults.addAll(getAllTargets());
- frozen = true;
- }
-
- //Unfreeze opposite of freeze
- public void unFreeze() {
- frozenResults.clear();
- frozen = false;
- }
-
-
- // There might be a case where you need this so I'm keeping it
- public Object cloneAndFreeze() {
- try{
- AprilTags clone = (AprilTags) super.clone();
- clone.freeze();
- return clone;
- }catch(Exception e){
- return null;
- }
- }
-
-}
\ No newline at end of file
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
deleted file mode 100644
index cf87bf5..0000000
--- a/lib/src/main/java/com/fairportrobotics/frc/poe/CameraTracking/RobotFieldPosition.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package com.fairportrobotics.frc.poe.CameraTracking;
-
-import java.io.IOException;
-import java.util.Optional;
-
-import org.photonvision.PhotonCamera;
-import org.photonvision.PhotonPoseEstimator;
-import org.photonvision.PhotonPoseEstimator.PoseStrategy;
-import org.photonvision.EstimatedRobotPose;
-
-import edu.wpi.first.apriltag.AprilTagFieldLayout;
-import edu.wpi.first.apriltag.AprilTagFields;
-import edu.wpi.first.math.geometry.Pose2d;
-import edu.wpi.first.math.geometry.Transform3d;
-
-public class RobotFieldPosition {
- AprilTagFieldLayout layout;
- PhotonPoseEstimator photonPoseEstimator;
- PhotonCamera camera;
- Optional frozenPose;
- boolean frozen = false;
-
- /*
- * 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, strategy, 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, strategy, cam, robotToCam);
- }
-
- public RobotFieldPosition(String camera, Transform3d robotToCam, AprilTagFieldLayout layout, PoseStrategy strategy) throws IOException {
- this.layout = layout;
-
- PhotonCamera cam = new PhotonCamera(camera);
- photonPoseEstimator = new PhotonPoseEstimator(layout, strategy, cam, robotToCam);
- }
-
- public Optional getEstimatedGlobalPose() {
- return frozen ? frozenPose : photonPoseEstimator.update();
- }
-
- public void setLastPose(Pose2d pose) {
- photonPoseEstimator.setLastPose(pose);
- }
-
- public PhotonPoseEstimator getPhotonPoseEstimator(){
- return photonPoseEstimator;
- }
-
- public PhotonCamera getPhotonCamera(){
- return camera;
- }
-
- // For when you want it to stay the same across lines
- public void freeze() {
- frozen = true;
- frozenPose = photonPoseEstimator.update();
- }
-
- public void unfreeze() {
- frozen = false;
- }
-
-
-}
diff --git a/lib/src/main/java/com/fairportrobotics/frc/poe/CameraTracking/WPILIB/WPI_AprilTagPoseEstimator.java b/lib/src/main/java/com/fairportrobotics/frc/poe/CameraTracking/WPILIB/WPI_AprilTagPoseEstimator.java
deleted file mode 100644
index c275981..0000000
--- a/lib/src/main/java/com/fairportrobotics/frc/poe/CameraTracking/WPILIB/WPI_AprilTagPoseEstimator.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package com.fairportrobotics.frc.poe.CameraTracking.WPILIB;
-
-import java.io.IOException;
-import java.util.Optional;
-
-import org.opencv.core.Mat;
-
-import edu.wpi.first.apriltag.AprilTagDetection;
-import edu.wpi.first.apriltag.AprilTagDetector;
-import edu.wpi.first.apriltag.AprilTagFieldLayout;
-import edu.wpi.first.apriltag.AprilTagFields;
-import edu.wpi.first.apriltag.AprilTagPoseEstimator;
-import edu.wpi.first.apriltag.AprilTagPoseEstimator.Config;
-import edu.wpi.first.cscore.VideoCamera;
-import edu.wpi.first.math.geometry.Pose3d;
-import edu.wpi.first.math.geometry.Transform3d;
-import edu.wpi.first.vision.VisionPipeline;
-import edu.wpi.first.vision.VisionRunner;
-
-public class WPI_AprilTagPoseEstimator {
-
- private final AprilTagDetector aprilTagDetector;
- private final AprilTagPoseEstimator aprilTagPoseEstimator;
- private AprilTagFieldLayout aprilTagFieldLayout;
- private Pose3d estimatedPose = new Pose3d();
-
- private VisionRunner visionRunner;
-
- public WPI_AprilTagPoseEstimator(VideoCamera imageSource) {
- aprilTagDetector = new AprilTagDetector();
- aprilTagDetector.addFamily("tag16h5");
- AprilTagPoseEstimator.Config poseEstimatorConfig = new Config(0.203, 0, 0, 0, 0);
- aprilTagPoseEstimator = new AprilTagPoseEstimator(poseEstimatorConfig);
-
- try {
- aprilTagFieldLayout = new AprilTagFieldLayout(AprilTagFields.kDefaultField.m_resourceFile);
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- visionRunner = new VisionRunner(imageSource, new AprilTagsDetectorPipeline(), new VisionSystemCallback());
- }
-
- public void runDetectorPipeline(){
- new Thread(() -> {
- try{
- visionRunner.runForever();
- } catch (Exception e){
- e.printStackTrace();
- }
- }).start();
- }
-
- public Pose3d getEstimatedGlobalPose() {
- return estimatedPose;
- }
-
- private final class AprilTagsDetectorPipeline implements VisionPipeline {
-
- private Pose3d estPose = new Pose3d();
-
- @Override
- public void process(Mat image) {
- AprilTagDetection[] aprilTags = aprilTagDetector.detect(image);
-
- for (AprilTagDetection aprilTag : aprilTags) {
- Transform3d tagRelativeToRobot = aprilTagPoseEstimator.estimate(aprilTag);
- Optional tagRelativeToFieldOptional = aprilTagFieldLayout.getTagPose(aprilTag.getId());
-
- if (tagRelativeToFieldOptional.isPresent()) {
- Pose3d tagRelativeToFieldPose = tagRelativeToFieldOptional.get();
- Pose3d estimatedFieldPos = tagRelativeToFieldPose.plus(tagRelativeToRobot);
- // Logger.getInstance().recordOutput("April Tag Pose", tagRelativeToFieldPose);
- estPose = estimatedFieldPos;
- }
- }
- }
-
- public Pose3d getEstimatedPose(){
- return estPose;
- }
-
- }
-
- private final class VisionSystemCallback implements VisionRunner.Listener {
- @Override
- public void copyPipelineOutputs(AprilTagsDetectorPipeline pipeline) {
- estimatedPose = pipeline.getEstimatedPose();
- }
- }
-
-}
diff --git a/lib/src/main/java/com/fairportrobotics/frc/poe/Library.java b/lib/src/main/java/com/fairportrobotics/frc/poe/Library.java
deleted file mode 100644
index 12404d0..0000000
--- a/lib/src/main/java/com/fairportrobotics/frc/poe/Library.java
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- * This Java source file was generated by the Gradle 'init' task.
- */
-package com.fairportrobotics.frc.poe;
-
-public class Library {
- public boolean someLibraryMethod() {
- return true;
- }
-}
diff --git a/lib/src/main/java/com/fairportrobotics/frc/poe/DriveSystems/SwerveDrive/SwerveDriveSubsystem.java b/lib/src/main/java/org/fairportrobotics/frc/robolib/DriveSystems/SwerveDrive/SwerveDriveSubsystem.java
similarity index 71%
rename from lib/src/main/java/com/fairportrobotics/frc/poe/DriveSystems/SwerveDrive/SwerveDriveSubsystem.java
rename to lib/src/main/java/org/fairportrobotics/frc/robolib/DriveSystems/SwerveDrive/SwerveDriveSubsystem.java
index a60223f..243bf5f 100644
--- a/lib/src/main/java/com/fairportrobotics/frc/poe/DriveSystems/SwerveDrive/SwerveDriveSubsystem.java
+++ b/lib/src/main/java/org/fairportrobotics/frc/robolib/DriveSystems/SwerveDrive/SwerveDriveSubsystem.java
@@ -1,4 +1,4 @@
-package com.fairportrobotics.frc.poe.DriveSystems.SwerveDrive;
+package org.fairportrobotics.frc.robolib.DriveSystems.SwerveDrive;
import edu.wpi.first.wpilibj2.command.SubsystemBase;
diff --git a/lib/src/main/java/com/fairportrobotics/frc/poe/controllers/lighting/ArduinoLightingController.java b/lib/src/main/java/org/fairportrobotics/frc/robolib/controllers/lighting/ArduinoLightingController.java
similarity index 96%
rename from lib/src/main/java/com/fairportrobotics/frc/poe/controllers/lighting/ArduinoLightingController.java
rename to lib/src/main/java/org/fairportrobotics/frc/robolib/controllers/lighting/ArduinoLightingController.java
index bc3b121..c75cb98 100644
--- a/lib/src/main/java/com/fairportrobotics/frc/poe/controllers/lighting/ArduinoLightingController.java
+++ b/lib/src/main/java/org/fairportrobotics/frc/robolib/controllers/lighting/ArduinoLightingController.java
@@ -1,4 +1,4 @@
-package com.fairportrobotics.frc.poe.controllers.lighting;
+package org.fairportrobotics.frc.robolib.controllers.lighting;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
diff --git a/lib/src/main/java/com/fairportrobotics/frc/poe/sensors/colorsensors/TCS34725.java b/lib/src/main/java/org/fairportrobotics/frc/robolib/sensors/colorsensors/TCS34725.java
similarity index 99%
rename from lib/src/main/java/com/fairportrobotics/frc/poe/sensors/colorsensors/TCS34725.java
rename to lib/src/main/java/org/fairportrobotics/frc/robolib/sensors/colorsensors/TCS34725.java
index 15b34d8..9286893 100644
--- a/lib/src/main/java/com/fairportrobotics/frc/poe/sensors/colorsensors/TCS34725.java
+++ b/lib/src/main/java/org/fairportrobotics/frc/robolib/sensors/colorsensors/TCS34725.java
@@ -1,4 +1,4 @@
-package com.fairportrobotics.frc.poe.sensors.colorsensors;
+package org.fairportrobotics.frc.robolib.sensors.colorsensors;
import edu.wpi.first.wpilibj.I2C;
diff --git a/lib/src/test/java/com/fairportrobotics/frc/poe/LibraryTest.java b/lib/src/test/java/org/fairportrobotics/frc/robolib/LibraryTest.java
similarity index 56%
rename from lib/src/test/java/com/fairportrobotics/frc/poe/LibraryTest.java
rename to lib/src/test/java/org/fairportrobotics/frc/robolib/LibraryTest.java
index 2b0d27e..2f80b17 100644
--- a/lib/src/test/java/com/fairportrobotics/frc/poe/LibraryTest.java
+++ b/lib/src/test/java/org/fairportrobotics/frc/robolib/LibraryTest.java
@@ -1,14 +1,13 @@
/*
* This Java source file was generated by the Gradle 'init' task.
*/
-package com.fairportrobotics.frc.poe;
+package com.fairportrobotics.frc.robolib;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class LibraryTest {
@Test void someLibraryMethodReturnsTrue() {
- Library classUnderTest = new Library();
- assertTrue(classUnderTest.someLibraryMethod(), "someLibraryMethod should return 'true'");
+ assertTrue(true);
}
}