@@ -47,6 +47,7 @@ public class VisionSubsystem extends MeasurableSubsystem {
4747 private DigitalInput [][] dios = {diosHigh , diosLow };
4848 private WallEyeResult [][] results = {{}, {}};
4949 private Pose2d [] camPoses = {new Pose2d (), new Pose2d ()};
50+ private Pose2d [] currCamPoses = {new Pose2d (), new Pose2d ()};
5051 private int [] updates = {0 , 0 };
5152 private int [] numTags = {0 , 0 };
5253 private double [] camDelay = {0 , 0 };
@@ -128,7 +129,8 @@ public void periodic() {
128129 for (int j = 0 ; j < numCams [i ]; ++j ) {
129130 numTags [i ] = results [i ][j ].getNumTags ();
130131
131- camPoses [i ] =
132+ // Save current camera pose to temp variable until check that it's valid
133+ currCamPoses [i ] =
132134 new Pose2d (
133135 new Translation2d (
134136 results [i ][j ].getCameraPose ().getX (),
@@ -176,7 +178,9 @@ private void handleCameraFilter(
176178 for (WallEyeResult res : results ) {
177179
178180 if (res .getCameraPose ().getX () > 1000.0 ) continue ;
179-
181+ camPoses =
182+ currCamPoses ; // If current camera pose = valid then overwrite last valid cam pose with
183+ // it
180184 Pose2d camPose =
181185 new Pose2d (
182186 new Translation2d (res .getCameraPose ().getX (), res .getCameraPose ().getY ())
@@ -242,7 +246,7 @@ private void handleCameraFilter(
242246 public void handleVision (WallEyeResult res , int camNum , Pose2d camPose ) {
243247 numUpdateForReset ++;
244248 suppliedCamPose [camNum ] = camPose ;
245- System .out .println (suppliedCamPose [camNum ]);
249+ // System.out.println(suppliedCamPose[camNum]);
246250
247251 driveSubsystem .updateOdometryWithVision (camPose , res .getTimeStamp () / 1000000 );
248252 }
@@ -318,7 +322,8 @@ public void resetOdometry(Pose2d errorCheckPose, boolean isBlueAlliance) {
318322 new Pose2d (
319323 new Translation2d (camPoses [0 ].getX (), camPoses [0 ].getY ()),
320324 driveSubsystem .getGyroRotation2d ()));
321- } else {
325+ } else if (!((camPoses [0 ].getX () == 0 && camPoses [0 ].getY () == 0 )
326+ || (camPoses [0 ].getX () == 2767 && camPoses [0 ].getY () == 2767 ))) {
322327 // double tempX = (driveSubsystem.getPoseMeters().getX() + cameraPose.getX()) / 2;
323328 double tempY = (driveSubsystem .getPoseMeters ().getY () + camPoses [0 ].getY ()) / 2 ;
324329 // logger.info("TempX: {}, TempY: {}", tempX, tempY);
@@ -335,6 +340,8 @@ public void resetOdometry(Pose2d errorCheckPose, boolean isBlueAlliance) {
335340 tempPose ,
336341 driveSubsystem .getPoseMeters ());
337342 driveSubsystem .resetOdometry (tempPose );
343+ } else {
344+ logger .info ("Not resetting odometry, last cam pose: {}" , camPoses [0 ]);
338345 }
339346 }
340347
0 commit comments