From 3b084ecbe0f14f9bd3e25cef57746677a41e17d8 Mon Sep 17 00:00:00 2001 From: Brennen Puth <99607748+brennenputh@users.noreply.github.com> Date: Wed, 18 Jan 2023 23:42:39 -0500 Subject: [PATCH] [apriltag] AprilTagFieldLayout: Improve API shape for loading builtin JSONs (#4949) --- .../edu/wpi/first/apriltag/AprilTagFieldLayout.java | 5 ++++- .../java/edu/wpi/first/apriltag/AprilTagFields.java | 12 ++++++++++++ .../java/edu/wpi/first/apriltag/LoadConfigTest.java | 7 ++----- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/apriltag/src/main/java/edu/wpi/first/apriltag/AprilTagFieldLayout.java b/apriltag/src/main/java/edu/wpi/first/apriltag/AprilTagFieldLayout.java index 821bd9591a..2c9bc4769c 100644 --- a/apriltag/src/main/java/edu/wpi/first/apriltag/AprilTagFieldLayout.java +++ b/apriltag/src/main/java/edu/wpi/first/apriltag/AprilTagFieldLayout.java @@ -189,7 +189,10 @@ public class AprilTagFieldLayout { } /** - * Deserializes a field layout from a resource within a jar file. + * Deserializes a field layout from a resource within a internal jar file. + * + *

Users should use {@link AprilTagFields#loadAprilTagLayoutField()} to load official layouts + * and {@link #AprilTagFieldLayout(String)} for custom layouts. * * @param resourcePath The absolute path of the resource * @return The deserialized layout diff --git a/apriltag/src/main/java/edu/wpi/first/apriltag/AprilTagFields.java b/apriltag/src/main/java/edu/wpi/first/apriltag/AprilTagFields.java index 6143920eab..be9caecb9e 100644 --- a/apriltag/src/main/java/edu/wpi/first/apriltag/AprilTagFields.java +++ b/apriltag/src/main/java/edu/wpi/first/apriltag/AprilTagFields.java @@ -4,6 +4,8 @@ package edu.wpi.first.apriltag; +import java.io.IOException; + public enum AprilTagFields { k2022RapidReact("2022-rapidreact.json"), k2023ChargedUp("2023-chargedup.json"); @@ -18,4 +20,14 @@ public enum AprilTagFields { AprilTagFields(String resourceFile) { m_resourceFile = kBaseResourceDir + resourceFile; } + + /** + * Get a {@link AprilTagFieldLayout} from the resource JSON. + * + * @return AprilTagFieldLayout of the field + * @throws IOException If the layout does not exist + */ + public AprilTagFieldLayout loadAprilTagLayoutField() throws IOException { + return AprilTagFieldLayout.loadFromResource(m_resourceFile); + } } diff --git a/apriltag/src/test/java/edu/wpi/first/apriltag/LoadConfigTest.java b/apriltag/src/test/java/edu/wpi/first/apriltag/LoadConfigTest.java index ab15994657..901c72bd89 100644 --- a/apriltag/src/test/java/edu/wpi/first/apriltag/LoadConfigTest.java +++ b/apriltag/src/test/java/edu/wpi/first/apriltag/LoadConfigTest.java @@ -23,16 +23,13 @@ class LoadConfigTest { @ParameterizedTest @EnumSource(AprilTagFields.class) void testLoad(AprilTagFields field) { - AprilTagFieldLayout layout = - Assertions.assertDoesNotThrow( - () -> AprilTagFieldLayout.loadFromResource(field.m_resourceFile)); + AprilTagFieldLayout layout = Assertions.assertDoesNotThrow(field::loadAprilTagLayoutField); assertNotNull(layout); } @Test void test2022RapidReact() throws IOException { - AprilTagFieldLayout layout = - AprilTagFieldLayout.loadFromResource(AprilTagFields.k2022RapidReact.m_resourceFile); + AprilTagFieldLayout layout = AprilTagFields.k2022RapidReact.loadAprilTagLayoutField(); // Blue Hangar Truss - Hub Pose3d expectedPose =