Skip to content

Commit 5210129

Browse files
committed
Foobar
1 parent 79ad238 commit 5210129

File tree

3 files changed

+35
-13
lines changed

3 files changed

+35
-13
lines changed

photon-lib/src/main/java/org/photonvision/simulation/PhotonCameraSim.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import org.opencv.core.RotatedRect;
4848
import org.opencv.core.Scalar;
4949
import org.opencv.core.Size;
50+
import org.opencv.imgcodecs.Imgcodecs;
5051
import org.opencv.imgproc.Imgproc;
5152
import org.photonvision.PhotonCamera;
5253
import org.photonvision.PhotonTargetSortMode;
@@ -522,6 +523,7 @@ public PhotonPipelineResult process(
522523
}
523524
}
524525
videoSimRaw.putFrame(videoSimFrameRaw);
526+
Imgcodecs.imwrite("videoSimFrameRaw.png", videoSimFrameRaw);
525527
} else videoSimRaw.setConnectionStrategy(ConnectionStrategy.kForceClose);
526528
// draw/annotate target detection outline on processed view
527529
if (videoSimProcEnabled) {
@@ -558,6 +560,7 @@ public PhotonPipelineResult process(
558560
}
559561
}
560562
videoSimProcessed.putFrame(videoSimFrameProcessed);
563+
Imgcodecs.imwrite("videoSimFrameProcessed.png", videoSimFrameProcessed);
561564
} else videoSimProcessed.setConnectionStrategy(ConnectionStrategy.kForceClose);
562565

563566
// calculate multitag results

photon-lib/src/test/java/org/photonvision/PhotonPoseEstimatorTest.java

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@
6666
import org.photonvision.targeting.PnpResult;
6767
import org.photonvision.targeting.TargetCorner;
6868

69+
import com.fasterxml.jackson.core.JsonProcessingException;
70+
import com.fasterxml.jackson.databind.ObjectMapper;
71+
6972
class PhotonPoseEstimatorTest {
7073
static AprilTagFieldLayout aprilTags;
7174

@@ -931,42 +934,48 @@ public PhotonPipelineResult getLatestResult() {
931934

932935

933936
@Test
934-
public void meme() {
937+
public void meme() throws JsonProcessingException {
935938
PhotonCameraInjector cameraOne = new PhotonCameraInjector();
936939

940+
var layout = AprilTagFieldLayout.loadField(AprilTagFields.k2025ReefscapeWelded);
937941
List<VisionTargetSim> simTargets =
938-
aprilTags.getTags().stream()
942+
layout.getTags().stream()
939943
.map((AprilTag x) -> new VisionTargetSim(x.pose, TargetModel.kAprilTag36h11, x.ID))
940944
.toList();
941945

942946
/* Compound Rolled + Pitched + Yaw */
943947

944-
Transform3d compoundTestTransform =
948+
Transform3d robot2camera =
945949
new Transform3d(
946950
-Units.inchesToMeters(12),
947951
-Units.inchesToMeters(11),
948-
3,
952+
0.5,
949953
new Rotation3d(
950-
Units.degreesToRadians(37), Units.degreesToRadians(6), Units.degreesToRadians(60)));
954+
Units.degreesToRadians(0), Units.degreesToRadians(6), Units.degreesToRadians(0)));
951955

952956
var estimator =
953957
new PhotonPoseEstimator(
954-
aprilTags, PoseStrategy.CONSTRAINED_SOLVEPNP, compoundTestTransform);
958+
layout, PoseStrategy.CONSTRAINED_SOLVEPNP, robot2camera);
955959

956960
/* 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));
958962

959963
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);
961967
PhotonPipelineResult result =
962968
cameraOneSim.process(
963969
1, realPose.transformBy(estimator.getRobotToCameraTransform()), simTargets);
964970
cameraOneSim.submitProcessedFrame(result);
965971

972+
assertTrue(result.targets.size() > 0);
973+
966974
estimator.addHeadingData(result.getTimestampSeconds(), realPose.getRotation().toRotation2d());
967975
Optional<EstimatedRobotPose> estimatedPose = estimator.update(result, cameraOne.getCameraMatrix(), cameraOne.getDistCoeffs(), Optional.of(new ConstrainedSolvepnpParams(true, 0)));
968976

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()));
970979

971980
System.out.println(estimatedPose);
972981
}

photon-targeting/src/main/java/org/photonvision/estimation/VisionEstimation.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,13 @@
3030
import edu.wpi.first.math.geometry.Translation3d;
3131
import edu.wpi.first.math.numbers.*;
3232
import java.util.ArrayList;
33+
import java.util.Arrays;
3334
import java.util.List;
3435
import java.util.Objects;
3536
import java.util.Optional;
3637
import java.util.stream.Collectors;
38+
39+
import org.ejml.data.DMatrixRMaj;
3740
import org.ejml.simple.SimpleMatrix;
3841
import org.opencv.calib3d.Calib3d;
3942
import org.opencv.core.MatOfDouble;
@@ -150,13 +153,19 @@ public static Optional<PnpResult> estimateCamPosePNP(
150153

151154
private static class DebugData {
152155
public double[] cameraCal;
153-
public SimpleMatrix field2points;
154-
public SimpleMatrix point_observations;
156+
public DMatrixRMaj field2points;
157+
public DMatrixRMaj point_observations;
155158

156159
public DebugData(double[] cameraCal, SimpleMatrix field2points, SimpleMatrix point_observations) {
157160
this.cameraCal = cameraCal;
158-
this.field2points = field2points;
159-
this.point_observations = point_observations;
161+
this.field2points = field2points.getDDRM();
162+
this.point_observations = point_observations.getDDRM();
163+
}
164+
165+
@Override
166+
public String toString() {
167+
return "DebugData [cameraCal=" + Arrays.toString(cameraCal) + ", field2points=" + field2points
168+
+ ", point_observations=" + point_observations + "]";
160169
}
161170
}
162171

@@ -282,6 +291,7 @@ public static Optional<PnpResult> estimateRobotPoseConstrainedSolvepnp(
282291
} catch (JsonProcessingException e) {
283292
System.err.println("Failed to serialize debug data: " + e.getMessage());
284293
}
294+
System.out.println(debugData);
285295

286296
var ret =
287297
ConstrainedSolvepnpJni.do_optimization(

0 commit comments

Comments
 (0)