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 2c9bc4769c..3759f7a2ca 100644 --- a/apriltag/src/main/java/edu/wpi/first/apriltag/AprilTagFieldLayout.java +++ b/apriltag/src/main/java/edu/wpi/first/apriltag/AprilTagFieldLayout.java @@ -199,9 +199,16 @@ public class AprilTagFieldLayout { * @throws IOException If the resource could not be loaded */ public static AprilTagFieldLayout loadFromResource(String resourcePath) throws IOException { - try (InputStream stream = AprilTagFieldLayout.class.getResourceAsStream(resourcePath); - InputStreamReader reader = new InputStreamReader(stream)) { + InputStream stream = AprilTagFieldLayout.class.getResourceAsStream(resourcePath); + if (stream == null) { + // Class.getResourceAsStream() returns null if the resource does not exist. + throw new IOException("Could not locate resource: " + resourcePath); + } + InputStreamReader reader = new InputStreamReader(stream); + try { return new ObjectMapper().readerFor(AprilTagFieldLayout.class).readValue(reader); + } catch (IOException e) { + throw new IOException("Failed to load AprilTagFieldLayout: " + resourcePath); } } 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 be9caecb9e..dda8d343c5 100644 --- a/apriltag/src/main/java/edu/wpi/first/apriltag/AprilTagFields.java +++ b/apriltag/src/main/java/edu/wpi/first/apriltag/AprilTagFields.java @@ -5,6 +5,7 @@ package edu.wpi.first.apriltag; import java.io.IOException; +import java.io.UncheckedIOException; public enum AprilTagFields { k2022RapidReact("2022-rapidreact.json"), @@ -25,9 +26,14 @@ public enum AprilTagFields { * Get a {@link AprilTagFieldLayout} from the resource JSON. * * @return AprilTagFieldLayout of the field - * @throws IOException If the layout does not exist + * @throws UncheckedIOException If the layout does not exist */ - public AprilTagFieldLayout loadAprilTagLayoutField() throws IOException { - return AprilTagFieldLayout.loadFromResource(m_resourceFile); + public AprilTagFieldLayout loadAprilTagLayoutField() { + try { + return AprilTagFieldLayout.loadFromResource(m_resourceFile); + } catch (IOException e) { + throw new UncheckedIOException( + "Could not load AprilTagFieldLayout from " + m_resourceFile, e); + } } } diff --git a/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/differentialdriveposeestimator/Drivetrain.java b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/differentialdriveposeestimator/Drivetrain.java index 2392daf87d..ceceaf3267 100644 --- a/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/differentialdriveposeestimator/Drivetrain.java +++ b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/differentialdriveposeestimator/Drivetrain.java @@ -38,7 +38,6 @@ import edu.wpi.first.wpilibj.simulation.DifferentialDrivetrainSim; import edu.wpi.first.wpilibj.simulation.EncoderSim; import edu.wpi.first.wpilibj.smartdashboard.Field2d; import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; -import java.io.IOException; /** Represents a differential drive style drivetrain. */ public class Drivetrain { @@ -130,13 +129,7 @@ public class Drivetrain { m_cameraToObjectEntry = cameraToObjectTopic.getEntry(m_defaultVal); - try { - m_objectInField = - AprilTagFields.k2022RapidReact.loadAprilTagLayoutField().getTagPose(0).get(); - } catch (IOException e) { - e.printStackTrace(); - throw new RuntimeException(); - } + m_objectInField = AprilTagFields.k2022RapidReact.loadAprilTagLayoutField().getTagPose(0).get(); SmartDashboard.putData("Field", m_fieldSim); SmartDashboard.putData("FieldEstimation", m_fieldApproximation);