|
66 | 66 | import org.photonvision.targeting.PnpResult;
|
67 | 67 | import org.photonvision.targeting.TargetCorner;
|
68 | 68 |
|
| 69 | +import com.fasterxml.jackson.core.JsonProcessingException; |
| 70 | +import com.fasterxml.jackson.databind.ObjectMapper; |
| 71 | + |
69 | 72 | class PhotonPoseEstimatorTest {
|
70 | 73 | static AprilTagFieldLayout aprilTags;
|
71 | 74 |
|
@@ -931,42 +934,48 @@ public PhotonPipelineResult getLatestResult() {
|
931 | 934 |
|
932 | 935 |
|
933 | 936 | @Test
|
934 |
| - public void meme() { |
| 937 | + public void meme() throws JsonProcessingException { |
935 | 938 | PhotonCameraInjector cameraOne = new PhotonCameraInjector();
|
936 | 939 |
|
| 940 | + var layout = AprilTagFieldLayout.loadField(AprilTagFields.k2025ReefscapeWelded); |
937 | 941 | List<VisionTargetSim> simTargets =
|
938 |
| - aprilTags.getTags().stream() |
| 942 | + layout.getTags().stream() |
939 | 943 | .map((AprilTag x) -> new VisionTargetSim(x.pose, TargetModel.kAprilTag36h11, x.ID))
|
940 | 944 | .toList();
|
941 | 945 |
|
942 | 946 | /* Compound Rolled + Pitched + Yaw */
|
943 | 947 |
|
944 |
| - Transform3d compoundTestTransform = |
| 948 | + Transform3d robot2camera = |
945 | 949 | new Transform3d(
|
946 | 950 | -Units.inchesToMeters(12),
|
947 | 951 | -Units.inchesToMeters(11),
|
948 |
| - 3, |
| 952 | + 0.5, |
949 | 953 | new Rotation3d(
|
950 |
| - Units.degreesToRadians(37), Units.degreesToRadians(6), Units.degreesToRadians(60))); |
| 954 | + Units.degreesToRadians(0), Units.degreesToRadians(6), Units.degreesToRadians(0))); |
951 | 955 |
|
952 | 956 | var estimator =
|
953 | 957 | new PhotonPoseEstimator(
|
954 |
| - aprilTags, PoseStrategy.CONSTRAINED_SOLVEPNP, compoundTestTransform); |
| 958 | + layout, PoseStrategy.CONSTRAINED_SOLVEPNP, robot2camera); |
955 | 959 |
|
956 | 960 | /* this is the real pose of the robot base we test against */
|
957 |
| - var realPose = new Pose3d(7.3, 4.42, 0, new Rotation3d(0, 0, 2.197)); |
| 961 | + var realPose = new Pose3d(1, 4, 0, new Rotation3d(0, 0, 0)); |
958 | 962 |
|
959 | 963 | PhotonCameraSim cameraOneSim =
|
960 |
| - new PhotonCameraSim(cameraOne, SimCameraProperties.PERFECT_90DEG()); |
| 964 | + new PhotonCameraSim(cameraOne, SimCameraProperties.PERFECT_90DEG(), layout); |
| 965 | + cameraOneSim.setMinTargetAreaPercent(0.01); |
| 966 | + cameraOneSim.enableDrawWireframe(true); |
961 | 967 | PhotonPipelineResult result =
|
962 | 968 | cameraOneSim.process(
|
963 | 969 | 1, realPose.transformBy(estimator.getRobotToCameraTransform()), simTargets);
|
964 | 970 | cameraOneSim.submitProcessedFrame(result);
|
965 | 971 |
|
| 972 | + assertTrue(result.targets.size() > 0); |
| 973 | + |
966 | 974 | estimator.addHeadingData(result.getTimestampSeconds(), realPose.getRotation().toRotation2d());
|
967 | 975 | Optional<EstimatedRobotPose> estimatedPose = estimator.update(result, cameraOne.getCameraMatrix(), cameraOne.getDistCoeffs(), Optional.of(new ConstrainedSolvepnpParams(true, 0)));
|
968 | 976 |
|
969 |
| - System.out.println("Ground truth: " + realPose); |
| 977 | + System.out.println("Ground truth field2robot:\n" + new ObjectMapper().writeValueAsString(realPose.toMatrix().getStorage().getDDRM())); |
| 978 | + System.out.println("Ground truth robot2camera:\n" + new ObjectMapper().writeValueAsString(robot2camera.toMatrix().getStorage().getDDRM())); |
970 | 979 |
|
971 | 980 | System.out.println(estimatedPose);
|
972 | 981 | }
|
|
0 commit comments