diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e2c3d773c..94a5e5f07 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -106,14 +106,14 @@ jobs: run: | chmod +x gradlew ./gradlew copyPhotonlib -x check - ./gradlew buildAllExamples -x check --max-workers 2 + ./gradlew build -x check --max-workers 2 - name: Build C++ examples working-directory: photonlib-cpp-examples run: | chmod +x gradlew ./gradlew copyPhotonlib -x check - ./gradlew buildAllExamples -x check --max-workers 2 + ./gradlew build -x check --max-workers 2 photon-build-all: # The type of runner that the job will run on. runs-on: ubuntu-22.04 @@ -225,6 +225,7 @@ jobs: include: - os: windows-2022 artifact-name: Win64 + architecture: x64 # Mac builds are broken due to opencv class loading issues -- disable for now # - os: macos-11 # artifact-name: macOS @@ -255,7 +256,7 @@ jobs: fail-fast: false matrix: include: - - container: wpilib/roborio-cross-ubuntu:2023-22.04 + - container: wpilib/roborio-cross-ubuntu:2024-22.04 artifact-name: Athena - container: wpilib/raspbian-cross-ubuntu:bullseye-22.04 artifact-name: Raspbian diff --git a/build.gradle b/build.gradle index cbe84c554..199729e75 100644 --- a/build.gradle +++ b/build.gradle @@ -2,12 +2,12 @@ plugins { id "com.diffplug.spotless" version "6.19.0" id "com.github.johnrengelman.shadow" version "7.1.2" id "com.github.node-gradle.node" version "3.1.1" apply false - id "edu.wpi.first.GradleJni" version "1.0.0" - id "edu.wpi.first.GradleVsCode" version "1.1.0" - id "edu.wpi.first.NativeUtils" version "2023.11.1" apply false + id "edu.wpi.first.GradleJni" version "1.1.0" + id "edu.wpi.first.GradleVsCode" version "1.3.0" + id "edu.wpi.first.NativeUtils" version "2024.2.0" apply false id "edu.wpi.first.wpilib.repositories.WPILibRepositoriesPlugin" version "2020.2" id "org.hidetake.ssh" version "2.10.1" - id 'edu.wpi.first.WpilibTools' version '1.0.0' + id 'edu.wpi.first.WpilibTools' version '1.1.0' } import org.gradle.api.internal.artifacts.dependencies.DefaultExternalModuleDependency; @@ -26,10 +26,12 @@ allprojects { apply from: "versioningHelper.gradle" ext { - wpilibVersion = "2023.4.2" - opencvVersion = "4.6.0-4" + wpilibVersion = "2024.1.1-beta-1" + openCVversion = "4.8.0-1" joglVersion = "2.4.0-rc-20200307" javalinVersion = "5.6.2" + frcYear = "2024" + pubVersion = versionString isDev = pubVersion.startsWith("dev") @@ -61,3 +63,7 @@ spotless { targetExclude("photon-lib/src/main/java/org/photonvision/PhotonVersion.java") } } + +wrapper { + gradleVersion '8.3' +} diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ae04661ee..7f959b087 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip +distributionUrl=https\://services\.gradle\.org/distributions/gradle-8\.3-bin\.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 8bedea1ac..89a57c4df 100755 --- a/gradlew +++ b/gradlew @@ -36,7 +36,8 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit APP_NAME="Gradle" APP_BASE_NAME=${0##*/} diff --git a/photon-core/build.gradle b/photon-core/build.gradle index dc805fff5..5ebef599a 100644 --- a/photon-core/build.gradle +++ b/photon-core/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'edu.wpi.first.WpilibTools' version '1.0.0' + id 'edu.wpi.first.WpilibTools' version '1.1.0' } import java.nio.file.Path diff --git a/photon-core/src/main/java/org/photonvision/vision/aruco/ArucoDetectorParams.java b/photon-core/src/main/java/org/photonvision/vision/aruco/ArucoDetectorParams.java index a4486a104..f6af5d304 100644 --- a/photon-core/src/main/java/org/photonvision/vision/aruco/ArucoDetectorParams.java +++ b/photon-core/src/main/java/org/photonvision/vision/aruco/ArucoDetectorParams.java @@ -17,10 +17,9 @@ package org.photonvision.vision.aruco; -import org.opencv.aruco.Aruco; -import org.opencv.aruco.ArucoDetector; -import org.opencv.aruco.DetectorParameters; -import org.opencv.aruco.Dictionary; +import org.opencv.objdetect.ArucoDetector; +import org.opencv.objdetect.DetectorParameters; +import org.opencv.objdetect.Objdetect; import org.photonvision.common.logging.LogGroup; import org.photonvision.common.logging.Logger; @@ -31,7 +30,7 @@ public class ArucoDetectorParams { private int m_iterations = -1; private double m_accuracy = -1; - DetectorParameters parameters = DetectorParameters.create(); + DetectorParameters parameters = new DetectorParameters(); ArucoDetector detector; public ArucoDetectorParams() { @@ -39,7 +38,9 @@ public class ArucoDetectorParams { setCornerAccuracy(25); setCornerRefinementMaxIterations(100); - detector = new ArucoDetector(Dictionary.get(Aruco.DICT_APRILTAG_16h5), parameters); + detector = + new ArucoDetector( + Objdetect.getPredefinedDictionary(Objdetect.DICT_APRILTAG_16h5), parameters); } public void setDecimation(float decimate) { @@ -56,7 +57,7 @@ public class ArucoDetectorParams { public void setCornerRefinementMaxIterations(int iters) { if (iters == m_iterations || iters <= 0) return; - parameters.set_cornerRefinementMethod(Aruco.CORNER_REFINE_SUBPIX); + parameters.set_cornerRefinementMethod(Objdetect.CORNER_REFINE_SUBPIX); parameters.set_cornerRefinementMaxIterations(iters); // 200 m_iterations = iters; diff --git a/photon-core/src/main/java/org/photonvision/vision/aruco/PhotonArucoDetector.java b/photon-core/src/main/java/org/photonvision/vision/aruco/PhotonArucoDetector.java index b04418059..0963a2812 100644 --- a/photon-core/src/main/java/org/photonvision/vision/aruco/PhotonArucoDetector.java +++ b/photon-core/src/main/java/org/photonvision/vision/aruco/PhotonArucoDetector.java @@ -24,8 +24,8 @@ import edu.wpi.first.math.geometry.Translation3d; import edu.wpi.first.math.util.Units; import java.util.ArrayList; import org.opencv.aruco.Aruco; -import org.opencv.aruco.ArucoDetector; import org.opencv.core.Mat; +import org.opencv.objdetect.ArucoDetector; import org.photonvision.common.logging.LogGroup; import org.photonvision.common.logging.Logger; import org.photonvision.vision.calibration.CameraCalibrationCoefficients; diff --git a/photon-core/src/main/java/org/photonvision/vision/pipe/impl/ArucoDetectionPipe.java b/photon-core/src/main/java/org/photonvision/vision/pipe/impl/ArucoDetectionPipe.java index d5bc76bf5..b18978c91 100644 --- a/photon-core/src/main/java/org/photonvision/vision/pipe/impl/ArucoDetectionPipe.java +++ b/photon-core/src/main/java/org/photonvision/vision/pipe/impl/ArucoDetectionPipe.java @@ -19,8 +19,8 @@ package org.photonvision.vision.pipe.impl; import edu.wpi.first.math.util.Units; import java.util.List; -import org.opencv.aruco.DetectorParameters; import org.opencv.core.Mat; +import org.opencv.objdetect.DetectorParameters; import org.photonvision.vision.aruco.ArucoDetectionResult; import org.photonvision.vision.aruco.PhotonArucoDetector; import org.photonvision.vision.pipe.CVPipe; @@ -45,6 +45,6 @@ public class ArucoDetectionPipe } public DetectorParameters getParameters() { - return params == null ? null : params.detectorParams.get_params(); + return params == null ? null : params.detectorParams.getDetectorParameters(); } } diff --git a/photon-core/src/main/java/org/photonvision/vision/pipe/impl/ArucoDetectionPipeParams.java b/photon-core/src/main/java/org/photonvision/vision/pipe/impl/ArucoDetectionPipeParams.java index 98e9daf41..62d321403 100644 --- a/photon-core/src/main/java/org/photonvision/vision/pipe/impl/ArucoDetectionPipeParams.java +++ b/photon-core/src/main/java/org/photonvision/vision/pipe/impl/ArucoDetectionPipeParams.java @@ -18,7 +18,7 @@ package org.photonvision.vision.pipe.impl; import java.util.Objects; -import org.opencv.aruco.ArucoDetector; +import org.opencv.objdetect.ArucoDetector; import org.photonvision.vision.calibration.CameraCalibrationCoefficients; public class ArucoDetectionPipeParams { diff --git a/photon-lib/build.gradle b/photon-lib/build.gradle index 1536e9b0d..d7952394d 100644 --- a/photon-lib/build.gradle +++ b/photon-lib/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'edu.wpi.first.WpilibTools' version '1.0.0' + id 'edu.wpi.first.WpilibTools' version '1.1.0' } import java.nio.file.Path @@ -50,10 +50,10 @@ dependencies { implementation "com.fasterxml.jackson.core:jackson-core:2.12.4" implementation "com.fasterxml.jackson.core:jackson-databind:2.12.4" - implementation "edu.wpi.first.thirdparty.frc2023.opencv:opencv-java:$opencvVersion" - implementation "edu.wpi.first.thirdparty.frc2023.opencv:opencv-jni:$opencvVersion:$jniPlatform" + implementation "edu.wpi.first.thirdparty.frc2024.opencv:opencv-java:$openCVversion" + implementation "edu.wpi.first.thirdparty.frc2024.opencv:opencv-jni:$openCVversion:$jniPlatform" - implementation "org.ejml:ejml-simple:0.41" + implementation "org.ejml:ejml-simple:0.42" // Junit testImplementation wpilibTools.deps.wpilibJava("cscore") @@ -126,7 +126,9 @@ task generateVendorJson() { if (photonlibFileOutput.exists()) { photonlibFileOutput.delete() } - def read = photonlibFileInput.text.replace('${photon_version}', pubVersion) + def read = photonlibFileInput.text + .replace('${photon_version}', pubVersion) + .replace('${frc_year}', frcYear) photonlibFileOutput.write(read) } diff --git a/photon-lib/publish.gradle b/photon-lib/publish.gradle index 725d47c0e..9967b24ee 100644 --- a/photon-lib/publish.gradle +++ b/photon-lib/publish.gradle @@ -37,8 +37,8 @@ copyAllOutputs.dependsOn outputVersions ext.addTaskToCopyAllOutputs = { task -> copyAllOutputs.dependsOn task - copyAllOutputs.inputs.file task.archivePath - copyAllOutputs.from task.archivePath + copyAllOutputs.inputs.file task.archiveFile + copyAllOutputs.from task.archiveFile } def artifactGroupId = 'org.photonvision' @@ -49,7 +49,7 @@ def javaBaseName = "_GROUP_org_photonvision_photonlib_ID_${baseArtifactId}-java_ task cppHeadersZip(type: Zip) { destinationDirectory = outputsFolder archiveBaseName = zipBaseName - classifier = "headers" + archiveClassifier = "headers" from(licenseFile) { into '/' @@ -67,7 +67,7 @@ task cppHeadersZip(type: Zip) { task cppSourcesZip(type: Zip) { destinationDirectory = outputsFolder archiveBaseName = zipBaseName - classifier = "sources" + archiveClassifier = "sources" from(licenseFile) { into '/' @@ -84,12 +84,12 @@ build.dependsOn cppSourcesZip addTaskToCopyAllOutputs(cppSourcesZip) task sourcesJar(type: Jar, dependsOn: classes) { - classifier = 'sources' + archiveClassifier = 'sources' from sourceSets.main.allSource } task javadocJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' + archiveClassifier = 'javadoc' from javadoc.destinationDir } @@ -102,14 +102,14 @@ task outputJar(type: Jar, dependsOn: classes) { task outputSourcesJar(type: Jar, dependsOn: classes) { archiveBaseName = javaBaseName destinationDirectory = outputsFolder - classifier = 'sources' + archiveClassifier = 'sources' from sourceSets.main.allSource } task outputJavadocJar(type: Jar, dependsOn: javadoc) { archiveBaseName = javaBaseName destinationDirectory = outputsFolder - classifier = 'javadoc' + archiveClassifier = 'javadoc' from javadoc.destinationDir } @@ -198,5 +198,10 @@ model { } } +// So I don't actually know the _right_ way to tell gradle that the vendordep json publish requires generation first, so we're doing this +getTasksByName("publishVendorjsonPublicationToMavenLocal", false).each { + it.mustRunAfter generateVendorJson +} + publishToMavenLocal.dependsOn libraryBuild publish.dependsOn libraryBuild diff --git a/photon-lib/src/generate/photonlib.json.in b/photon-lib/src/generate/photonlib.json.in index dddc1a0e6..9b8f63aaa 100644 --- a/photon-lib/src/generate/photonlib.json.in +++ b/photon-lib/src/generate/photonlib.json.in @@ -2,7 +2,8 @@ "fileName": "photonlib.json", "name": "photonlib", "version": "${photon_version}", - "uuid": "515fe07e-bfc6-11fa-b3de-0242ac130004 ", + "uuid": "515fe07e-bfc6-11fa-b3de-0242ac130004", + "frcYear": "${frc_year}", "mavenUrls": [ "https://maven.photonvision.org/repository/internal", "https://maven.photonvision.org/repository/snapshots" diff --git a/photon-lib/src/main/native/cpp/photonlib/PhotonPoseEstimator.cpp b/photon-lib/src/main/native/cpp/photonlib/PhotonPoseEstimator.cpp index 9282e3bdd..f25e01eba 100644 --- a/photon-lib/src/main/native/cpp/photonlib/PhotonPoseEstimator.cpp +++ b/photon-lib/src/main/native/cpp/photonlib/PhotonPoseEstimator.cpp @@ -33,6 +33,7 @@ #include #include +#include #include #include #include @@ -337,21 +338,17 @@ frc::Pose3d detail::ToPose3d(const cv::Mat& tvec, const cv::Mat& rvec) { R = R.t(); // rotation of inverse cv::Mat tvecI = -R * tvec; // translation of inverse - Vectord<3> tv; + Eigen::Matrix tv; tv[0] = +tvecI.at(2, 0); tv[1] = -tvecI.at(0, 0); tv[2] = -tvecI.at(1, 0); - Vectord<3> rv; + Eigen::Matrix rv; rv[0] = +rvec.at(2, 0); rv[1] = -rvec.at(0, 0); rv[2] = +rvec.at(1, 0); return Pose3d(Translation3d(meter_t{tv[0]}, meter_t{tv[1]}, meter_t{tv[2]}), - Rotation3d( - // radian_t{rv[0]}, - // radian_t{rv[1]}, - // radian_t{rv[2]} - rv, radian_t{rv.norm()})); + Rotation3d(rv)); } std::optional PhotonPoseEstimator::MultiTagPnpStrategy( diff --git a/photon-server/build.gradle b/photon-server/build.gradle index a37e4f3ea..92b50a81b 100644 --- a/photon-server/build.gradle +++ b/photon-server/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'edu.wpi.first.WpilibTools' version '1.0.0' + id 'edu.wpi.first.WpilibTools' version '1.1.0' } apply plugin: "application" diff --git a/photon-targeting/build.gradle b/photon-targeting/build.gradle index 08a8dca19..168ecc981 100644 --- a/photon-targeting/build.gradle +++ b/photon-targeting/build.gradle @@ -4,7 +4,7 @@ apply from: "${rootDir}/shared/common.gradle" dependencies { implementation wpilibTools.deps.wpilibJava("wpimath") - implementation "org.ejml:ejml-simple:0.41" + implementation "org.ejml:ejml-simple:0.42" // Junit testImplementation("org.junit.jupiter:junit-jupiter-api:5.8.2") diff --git a/photonlib-cpp-examples/aimandrange/build.gradle b/photonlib-cpp-examples/aimandrange/build.gradle index 67e4323b4..ecedfafb4 100644 --- a/photonlib-cpp-examples/aimandrange/build.gradle +++ b/photonlib-cpp-examples/aimandrange/build.gradle @@ -1,7 +1,7 @@ plugins { id "cpp" id "google-test-test-suite" - id "edu.wpi.first.GradleRIO" version "2023.4.2" + id "edu.wpi.first.GradleRIO" version "2024.1.1-beta-1" id "com.dorongold.task-tree" version "2.1.0" } diff --git a/photonlib-cpp-examples/aimandrange/gradlew b/photonlib-cpp-examples/aimandrange/gradlew index a69d9cb6c..0ef4c1e86 100755 --- a/photonlib-cpp-examples/aimandrange/gradlew +++ b/photonlib-cpp-examples/aimandrange/gradlew @@ -80,7 +80,8 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit APP_NAME="Gradle" APP_BASE_NAME=${0##*/} diff --git a/photonlib-cpp-examples/aimandrange/settings.gradle b/photonlib-cpp-examples/aimandrange/settings.gradle index e38726018..b9552a3f3 100644 --- a/photonlib-cpp-examples/aimandrange/settings.gradle +++ b/photonlib-cpp-examples/aimandrange/settings.gradle @@ -7,7 +7,7 @@ pluginManagement { mavenLocal() jcenter() gradlePluginPortal() - String frcYear = '2023' + String frcYear = '2024' File frcHome if (OperatingSystem.current().isWindows()) { String publicFolder = System.getenv('PUBLIC') diff --git a/photonlib-cpp-examples/aimandrange/src/main/include/Robot.h b/photonlib-cpp-examples/aimandrange/src/main/include/Robot.h index c8a205c29..26518470c 100644 --- a/photonlib-cpp-examples/aimandrange/src/main/include/Robot.h +++ b/photonlib-cpp-examples/aimandrange/src/main/include/Robot.h @@ -53,11 +53,11 @@ class Robot : public frc::TimedRobot { // PID constants should be tuned per robot const double LINEAR_P = 0.1; const double LINEAR_D = 0.0; - frc2::PIDController forwardController{LINEAR_P, 0.0, LINEAR_D}; + frc::PIDController forwardController{LINEAR_P, 0.0, LINEAR_D}; const double ANGULAR_P = 0.1; const double ANGULAR_D = 0.0; - frc2::PIDController turnController{ANGULAR_P, 0.0, ANGULAR_D}; + frc::PIDController turnController{ANGULAR_P, 0.0, ANGULAR_D}; // Change this to match the name of your camera photonlib::PhotonCamera camera{"photonvision"}; diff --git a/photonlib-cpp-examples/aimattarget/build.gradle b/photonlib-cpp-examples/aimattarget/build.gradle index 67e4323b4..ecedfafb4 100644 --- a/photonlib-cpp-examples/aimattarget/build.gradle +++ b/photonlib-cpp-examples/aimattarget/build.gradle @@ -1,7 +1,7 @@ plugins { id "cpp" id "google-test-test-suite" - id "edu.wpi.first.GradleRIO" version "2023.4.2" + id "edu.wpi.first.GradleRIO" version "2024.1.1-beta-1" id "com.dorongold.task-tree" version "2.1.0" } diff --git a/photonlib-cpp-examples/aimattarget/gradlew b/photonlib-cpp-examples/aimattarget/gradlew index a69d9cb6c..0ef4c1e86 100755 --- a/photonlib-cpp-examples/aimattarget/gradlew +++ b/photonlib-cpp-examples/aimattarget/gradlew @@ -80,7 +80,8 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit APP_NAME="Gradle" APP_BASE_NAME=${0##*/} diff --git a/photonlib-cpp-examples/aimattarget/settings.gradle b/photonlib-cpp-examples/aimattarget/settings.gradle index 2f39cd03a..44fbca751 100644 --- a/photonlib-cpp-examples/aimattarget/settings.gradle +++ b/photonlib-cpp-examples/aimattarget/settings.gradle @@ -7,7 +7,7 @@ pluginManagement { mavenLocal() jcenter() gradlePluginPortal() - String frcYear = '2023' + String frcYear = '2024' File frcHome if (OperatingSystem.current().isWindows()) { String publicFolder = System.getenv('PUBLIC') diff --git a/photonlib-cpp-examples/aimattarget/src/main/include/Robot.h b/photonlib-cpp-examples/aimattarget/src/main/include/Robot.h index 8b5344a26..a639c3400 100644 --- a/photonlib-cpp-examples/aimattarget/src/main/include/Robot.h +++ b/photonlib-cpp-examples/aimattarget/src/main/include/Robot.h @@ -42,7 +42,7 @@ class Robot : public frc::TimedRobot { // Change this to match the name of your camera photonlib::PhotonCamera camera{"photonvision"}; // PID constants should be tuned per robot - frc2::PIDController controller{.1, 0, 0}; + frc::PIDController controller{.1, 0, 0}; frc::XboxController xboxController{0}; diff --git a/photonlib-cpp-examples/apriltagExample/build.gradle b/photonlib-cpp-examples/apriltagExample/build.gradle index 67e4323b4..ecedfafb4 100644 --- a/photonlib-cpp-examples/apriltagExample/build.gradle +++ b/photonlib-cpp-examples/apriltagExample/build.gradle @@ -1,7 +1,7 @@ plugins { id "cpp" id "google-test-test-suite" - id "edu.wpi.first.GradleRIO" version "2023.4.2" + id "edu.wpi.first.GradleRIO" version "2024.1.1-beta-1" id "com.dorongold.task-tree" version "2.1.0" } diff --git a/photonlib-cpp-examples/apriltagExample/gradlew b/photonlib-cpp-examples/apriltagExample/gradlew index a69d9cb6c..0ef4c1e86 100644 --- a/photonlib-cpp-examples/apriltagExample/gradlew +++ b/photonlib-cpp-examples/apriltagExample/gradlew @@ -80,7 +80,8 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit APP_NAME="Gradle" APP_BASE_NAME=${0##*/} diff --git a/photonlib-cpp-examples/apriltagExample/settings.gradle b/photonlib-cpp-examples/apriltagExample/settings.gradle index 2f39cd03a..44fbca751 100644 --- a/photonlib-cpp-examples/apriltagExample/settings.gradle +++ b/photonlib-cpp-examples/apriltagExample/settings.gradle @@ -7,7 +7,7 @@ pluginManagement { mavenLocal() jcenter() gradlePluginPortal() - String frcYear = '2023' + String frcYear = '2024' File frcHome if (OperatingSystem.current().isWindows()) { String publicFolder = System.getenv('PUBLIC') diff --git a/photonlib-cpp-examples/apriltagExample/src/main/include/Drivetrain.h b/photonlib-cpp-examples/apriltagExample/src/main/include/Drivetrain.h index 2799c703d..903256cbe 100644 --- a/photonlib-cpp-examples/apriltagExample/src/main/include/Drivetrain.h +++ b/photonlib-cpp-examples/apriltagExample/src/main/include/Drivetrain.h @@ -109,8 +109,8 @@ class Drivetrain { frc::Encoder m_leftEncoder{0, 1}; frc::Encoder m_rightEncoder{2, 3}; - frc2::PIDController m_leftPIDController{8.5, 0.0, 0.0}; - frc2::PIDController m_rightPIDController{8.5, 0.0, 0.0}; + frc::PIDController m_leftPIDController{8.5, 0.0, 0.0}; + frc::PIDController m_rightPIDController{8.5, 0.0, 0.0}; frc::AnalogGyro m_gyro{0}; diff --git a/photonlib-cpp-examples/build.gradle b/photonlib-cpp-examples/build.gradle index cb4661a3a..0d262a150 100644 --- a/photonlib-cpp-examples/build.gradle +++ b/photonlib-cpp-examples/build.gradle @@ -28,10 +28,3 @@ spotless { } apply from: "examples.gradle" - -// Task that depends on the build task for every example -task buildAllExamples { task -> - exampleFolderNames.each { line -> - task.dependsOn(line + ":build") - } -} diff --git a/photonlib-cpp-examples/getinrange/build.gradle b/photonlib-cpp-examples/getinrange/build.gradle index 67e4323b4..ecedfafb4 100644 --- a/photonlib-cpp-examples/getinrange/build.gradle +++ b/photonlib-cpp-examples/getinrange/build.gradle @@ -1,7 +1,7 @@ plugins { id "cpp" id "google-test-test-suite" - id "edu.wpi.first.GradleRIO" version "2023.4.2" + id "edu.wpi.first.GradleRIO" version "2024.1.1-beta-1" id "com.dorongold.task-tree" version "2.1.0" } diff --git a/photonlib-cpp-examples/getinrange/gradlew b/photonlib-cpp-examples/getinrange/gradlew index a69d9cb6c..0ef4c1e86 100755 --- a/photonlib-cpp-examples/getinrange/gradlew +++ b/photonlib-cpp-examples/getinrange/gradlew @@ -80,7 +80,8 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit APP_NAME="Gradle" APP_BASE_NAME=${0##*/} diff --git a/photonlib-cpp-examples/getinrange/settings.gradle b/photonlib-cpp-examples/getinrange/settings.gradle index 8301f6020..d8802bb46 100644 --- a/photonlib-cpp-examples/getinrange/settings.gradle +++ b/photonlib-cpp-examples/getinrange/settings.gradle @@ -7,7 +7,7 @@ pluginManagement { mavenLocal() jcenter() gradlePluginPortal() - String frcYear = '2023' + String frcYear = '2024' File frcHome if (OperatingSystem.current().isWindows()) { String publicFolder = System.getenv('PUBLIC') diff --git a/photonlib-cpp-examples/getinrange/src/main/include/Robot.h b/photonlib-cpp-examples/getinrange/src/main/include/Robot.h index a67f2122e..08dec6113 100644 --- a/photonlib-cpp-examples/getinrange/src/main/include/Robot.h +++ b/photonlib-cpp-examples/getinrange/src/main/include/Robot.h @@ -53,7 +53,7 @@ class Robot : public frc::TimedRobot { // PID constants should be tuned per robot const double P_GAIN = 0.1; const double D_GAIN = 0.0; - frc2::PIDController controller{P_GAIN, 0.0, D_GAIN}; + frc::PIDController controller{P_GAIN, 0.0, D_GAIN}; // Change this to match the name of your camera photonlib::PhotonCamera camera{"photonvision"}; diff --git a/photonlib-cpp-examples/gradle/wrapper/gradle-wrapper.properties b/photonlib-cpp-examples/gradle/wrapper/gradle-wrapper.properties index ae04661ee..7f959b087 100644 --- a/photonlib-cpp-examples/gradle/wrapper/gradle-wrapper.properties +++ b/photonlib-cpp-examples/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip +distributionUrl=https\://services\.gradle\.org/distributions/gradle-8\.3-bin\.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/photonlib-cpp-examples/gradlew b/photonlib-cpp-examples/gradlew index 8bedea1ac..89a57c4df 100755 --- a/photonlib-cpp-examples/gradlew +++ b/photonlib-cpp-examples/gradlew @@ -36,7 +36,8 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit APP_NAME="Gradle" APP_BASE_NAME=${0##*/} diff --git a/photonlib-java-examples/aimandrange/build.gradle b/photonlib-java-examples/aimandrange/build.gradle index fa1a30798..7d6e58895 100644 --- a/photonlib-java-examples/aimandrange/build.gradle +++ b/photonlib-java-examples/aimandrange/build.gradle @@ -1,6 +1,6 @@ plugins { id "java" - id "edu.wpi.first.GradleRIO" version "2023.4.2" + id "edu.wpi.first.GradleRIO" version "2024.1.1-beta-1" } sourceCompatibility = JavaVersion.VERSION_11 diff --git a/photonlib-java-examples/aimandrange/settings.gradle b/photonlib-java-examples/aimandrange/settings.gradle index df32b747b..c48c299f7 100644 --- a/photonlib-java-examples/aimandrange/settings.gradle +++ b/photonlib-java-examples/aimandrange/settings.gradle @@ -6,7 +6,7 @@ pluginManagement { repositories { mavenLocal() gradlePluginPortal() - String frcYear = '2023' + String frcYear = '2024' File frcHome if (OperatingSystem.current().isWindows()) { String publicFolder = System.getenv('PUBLIC') diff --git a/photonlib-java-examples/aimattarget/build.gradle b/photonlib-java-examples/aimattarget/build.gradle index 9feeaeaa4..d98e56b95 100644 --- a/photonlib-java-examples/aimattarget/build.gradle +++ b/photonlib-java-examples/aimattarget/build.gradle @@ -1,6 +1,6 @@ plugins { id "java" - id "edu.wpi.first.GradleRIO" version "2023.4.2" + id "edu.wpi.first.GradleRIO" version "2024.1.1-beta-1" } sourceCompatibility = JavaVersion.VERSION_11 diff --git a/photonlib-java-examples/aimattarget/settings.gradle b/photonlib-java-examples/aimattarget/settings.gradle index 67499c994..df1054244 100644 --- a/photonlib-java-examples/aimattarget/settings.gradle +++ b/photonlib-java-examples/aimattarget/settings.gradle @@ -6,7 +6,7 @@ pluginManagement { repositories { mavenLocal() gradlePluginPortal() - String frcYear = '2023' + String frcYear = '2024' File frcHome if (OperatingSystem.current().isWindows()) { String publicFolder = System.getenv('PUBLIC') diff --git a/photonlib-java-examples/build.gradle b/photonlib-java-examples/build.gradle index 29a90b45f..35f533e69 100644 --- a/photonlib-java-examples/build.gradle +++ b/photonlib-java-examples/build.gradle @@ -28,10 +28,3 @@ spotless { targetExclude("photon-lib/src/main/java/org/photonvision/PhotonVersion.java") } } - -// Task that depends on the build task for every example -task buildAllExamples { task -> - exampleFolderNames.each { line -> - task.dependsOn(line + ":build") - } -} diff --git a/photonlib-java-examples/getinrange/build.gradle b/photonlib-java-examples/getinrange/build.gradle index fa1a30798..7d6e58895 100644 --- a/photonlib-java-examples/getinrange/build.gradle +++ b/photonlib-java-examples/getinrange/build.gradle @@ -1,6 +1,6 @@ plugins { id "java" - id "edu.wpi.first.GradleRIO" version "2023.4.2" + id "edu.wpi.first.GradleRIO" version "2024.1.1-beta-1" } sourceCompatibility = JavaVersion.VERSION_11 diff --git a/photonlib-java-examples/getinrange/settings.gradle b/photonlib-java-examples/getinrange/settings.gradle index f95cb46e5..cfa00c4e1 100644 --- a/photonlib-java-examples/getinrange/settings.gradle +++ b/photonlib-java-examples/getinrange/settings.gradle @@ -6,7 +6,7 @@ pluginManagement { repositories { mavenLocal() gradlePluginPortal() - String frcYear = '2023' + String frcYear = '2024' File frcHome if (OperatingSystem.current().isWindows()) { String publicFolder = System.getenv('PUBLIC') diff --git a/photonlib-java-examples/gradle/wrapper/gradle-wrapper.properties b/photonlib-java-examples/gradle/wrapper/gradle-wrapper.properties index ae04661ee..7f959b087 100644 --- a/photonlib-java-examples/gradle/wrapper/gradle-wrapper.properties +++ b/photonlib-java-examples/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip +distributionUrl=https\://services\.gradle\.org/distributions/gradle-8\.3-bin\.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/photonlib-java-examples/gradlew b/photonlib-java-examples/gradlew index 8bedea1ac..89a57c4df 100755 --- a/photonlib-java-examples/gradlew +++ b/photonlib-java-examples/gradlew @@ -36,7 +36,8 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit APP_NAME="Gradle" APP_BASE_NAME=${0##*/} diff --git a/photonlib-java-examples/simaimandrange/build.gradle b/photonlib-java-examples/simaimandrange/build.gradle index fa1a30798..7d6e58895 100644 --- a/photonlib-java-examples/simaimandrange/build.gradle +++ b/photonlib-java-examples/simaimandrange/build.gradle @@ -1,6 +1,6 @@ plugins { id "java" - id "edu.wpi.first.GradleRIO" version "2023.4.2" + id "edu.wpi.first.GradleRIO" version "2024.1.1-beta-1" } sourceCompatibility = JavaVersion.VERSION_11 diff --git a/photonlib-java-examples/simaimandrange/settings.gradle b/photonlib-java-examples/simaimandrange/settings.gradle index bedc34e6a..464d86e81 100644 --- a/photonlib-java-examples/simaimandrange/settings.gradle +++ b/photonlib-java-examples/simaimandrange/settings.gradle @@ -6,7 +6,7 @@ pluginManagement { repositories { mavenLocal() gradlePluginPortal() - String frcYear = '2023' + String frcYear = '2024' File frcHome if (OperatingSystem.current().isWindows()) { String publicFolder = System.getenv('PUBLIC') diff --git a/photonlib-java-examples/swervedriveposeestsim/build.gradle b/photonlib-java-examples/swervedriveposeestsim/build.gradle index 7610d2a2a..424e9fa54 100644 --- a/photonlib-java-examples/swervedriveposeestsim/build.gradle +++ b/photonlib-java-examples/swervedriveposeestsim/build.gradle @@ -1,6 +1,6 @@ plugins { id "java" - id "edu.wpi.first.GradleRIO" version "2023.4.2" + id "edu.wpi.first.GradleRIO" version "2024.1.1-beta-1" } sourceCompatibility = JavaVersion.VERSION_11 diff --git a/photonlib-java-examples/swervedriveposeestsim/gradle/wrapper/gradle-wrapper.properties b/photonlib-java-examples/swervedriveposeestsim/gradle/wrapper/gradle-wrapper.properties index c23a1b317..d3fb63018 100644 --- a/photonlib-java-examples/swervedriveposeestsim/gradle/wrapper/gradle-wrapper.properties +++ b/photonlib-java-examples/swervedriveposeestsim/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=permwrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip +distributionUrl=https\://services\.gradle\.org/distributions/gradle-8\.3-bin\.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=permwrapper/dists diff --git a/photonlib-java-examples/swervedriveposeestsim/gradlew b/photonlib-java-examples/swervedriveposeestsim/gradlew index a69d9cb6c..0ef4c1e86 100644 --- a/photonlib-java-examples/swervedriveposeestsim/gradlew +++ b/photonlib-java-examples/swervedriveposeestsim/gradlew @@ -80,7 +80,8 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit APP_NAME="Gradle" APP_BASE_NAME=${0##*/} diff --git a/photonlib-java-examples/swervedriveposeestsim/settings.gradle b/photonlib-java-examples/swervedriveposeestsim/settings.gradle index 48c039ed8..091a37a02 100644 --- a/photonlib-java-examples/swervedriveposeestsim/settings.gradle +++ b/photonlib-java-examples/swervedriveposeestsim/settings.gradle @@ -4,7 +4,7 @@ pluginManagement { repositories { mavenLocal() gradlePluginPortal() - String frcYear = '2023' + String frcYear = '2024' File frcHome if (OperatingSystem.current().isWindows()) { String publicFolder = System.getenv('PUBLIC') diff --git a/photonlib-java-examples/swervedriveposeestsim/src/main/java/frc/robot/Constants.java b/photonlib-java-examples/swervedriveposeestsim/src/main/java/frc/robot/Constants.java index 708d87a5b..1cea631e9 100644 --- a/photonlib-java-examples/swervedriveposeestsim/src/main/java/frc/robot/Constants.java +++ b/photonlib-java-examples/swervedriveposeestsim/src/main/java/frc/robot/Constants.java @@ -36,7 +36,6 @@ import edu.wpi.first.math.geometry.Translation3d; import edu.wpi.first.math.numbers.N1; import edu.wpi.first.math.numbers.N3; import edu.wpi.first.math.util.Units; -import java.io.IOException; public class Constants { public static class Vision { @@ -46,16 +45,8 @@ public class Constants { new Transform3d(new Translation3d(0.5, 0.0, 0.5), new Rotation3d(0, 0, 0)); // The layout of the AprilTags on the field - public static final AprilTagFieldLayout kTagLayout; - - static { - try { - kTagLayout = AprilTagFields.kDefaultField.loadAprilTagLayoutField(); - } catch (IOException e) { - e.printStackTrace(); - throw new RuntimeException(e); - } - } + public static final AprilTagFieldLayout kTagLayout = + AprilTagFields.kDefaultField.loadAprilTagLayoutField(); // The standard deviations of our vision estimated poses, which affect correction rate // (Fake values. Experiment and determine estimation noise on an actual robot.) diff --git a/shared/common.gradle b/shared/common.gradle index 684cf24bf..e8181507e 100644 --- a/shared/common.gradle +++ b/shared/common.gradle @@ -36,10 +36,10 @@ dependencies { implementation wpilibTools.deps.wpilibJava("hal") implementation wpilibTools.deps.wpilibJava("wpilibj") - implementation "edu.wpi.first.thirdparty.frc2023.opencv:opencv-java:$opencvVersion" - implementation "edu.wpi.first.thirdparty.frc2023.opencv:opencv-jni:$opencvVersion:$jniPlatform" + implementation "edu.wpi.first.thirdparty.frc2024.opencv:opencv-java:$openCVversion" + implementation "edu.wpi.first.thirdparty.frc2024.opencv:opencv-jni:$openCVversion:$jniPlatform" - implementation "org.ejml:ejml-simple:0.41" + implementation "org.ejml:ejml-simple:0.42" // test stuff testImplementation("org.junit.jupiter:junit-jupiter:5.8.2") @@ -51,6 +51,7 @@ test { events "passed", "skipped", "failed", "standardOut", "standardError" } workingDir = new File("${rootDir}") + finalizedBy jacocoTestReport } task testHeadless(type: Test) { @@ -67,11 +68,19 @@ task generateJavaDocs(type: Javadoc) { destinationDir = file("${projectDir}/build/docs") } + +jacoco { + toolVersion = "0.8.9" + reportsDirectory = layout.buildDirectory.dir('customJacocoReportDir') +} + jacocoTestReport { -// dependsOn testHeadless // Tests are required to run before generating the report + dependsOn testHeadless reports { - xml.enabled true + xml.required = true + csv.required = false + html.outputLocation = layout.buildDirectory.dir('jacocoHtml') } afterEvaluate { diff --git a/shared/config.gradle b/shared/config.gradle index 104faaec0..3d5f91b15 100644 --- a/shared/config.gradle +++ b/shared/config.gradle @@ -6,11 +6,14 @@ nativeUtils.withCrossLinuxArm64() // Configure WPI dependencies. nativeUtils.wpi.configureDependencies { + opencvYear = 'frc2024' + googleTestYear = "frc2023" + wpiVersion = wpilibVersion wpimathVersion = wpilibVersion - niLibVersion = "2023.3.0" - opencvVersion = "4.6.0-4" - googleTestVersion = "1.12.1-1" + niLibVersion = "2024.1.1" + opencvVersion = openCVversion + googleTestVersion = "1.12.1-2" imguiVersion = "1.86-1" } @@ -91,7 +94,7 @@ ext.createComponentZipTasks = { components, names, base, type, project, func -> def task = project.tasks.create(base + "-${key}", type) { description = 'Creates component archive for platform ' + key destinationDirectory = outputsFolder - classifier = key + archiveClassifier = key archiveBaseName = '_M_' + base duplicatesStrategy = 'exclude' @@ -125,7 +128,7 @@ ext.createAllCombined = { list, name, base, type, project -> list.each { if (it.name.endsWith('debug')) return - from project.zipTree(it.archivePath) + from project.zipTree(it.archiveFile) dependsOn it } }