Skip to content

Commit 77a335b

Browse files
committed
Switched to multi-tag pnp vision strategy
1 parent 9b933ad commit 77a335b

File tree

7 files changed

+48
-11
lines changed

7 files changed

+48
-11
lines changed

.vscode/settings.json

+1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
"dtheta",
5656
"Holonomic",
5757
"Odometry",
58+
"Reprojection",
5859
"Setpoint",
5960
"Setpoints",
6061
"teleop",

src/main/java/com/team1701/lib/cameras/AprilTagCamera.java src/main/java/com/team1701/lib/drivers/cameras/AprilTagCamera.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
package com.team1701.lib.cameras;
1+
package com.team1701.lib.drivers.cameras;
22

33
import java.util.ArrayList;
44
import java.util.function.Consumer;
55
import java.util.function.Predicate;
66
import java.util.function.Supplier;
77

88
import com.team1701.lib.alerts.Alert;
9-
import com.team1701.lib.cameras.AprilTagCameraIO.PhotonCameraInputs;
9+
import com.team1701.lib.drivers.cameras.AprilTagCameraIO.PhotonCameraInputs;
1010
import edu.wpi.first.apriltag.AprilTagFieldLayout;
1111
import edu.wpi.first.math.geometry.Pose2d;
1212
import edu.wpi.first.math.geometry.Pose3d;
@@ -38,13 +38,14 @@ public AprilTagCamera(
3838
AprilTagCameraIO cameraIO,
3939
Transform3d robotToCamPose,
4040
PoseStrategy poseStrategy,
41+
PoseStrategy fallbackPoseStrategy,
4142
Supplier<AprilTagFieldLayout> fieldLayoutSupplier,
4243
Supplier<Pose3d> robotPoseSupplier) {
4344
mCameraIO = cameraIO;
4445
mCameraInputs = new PhotonCameraInputs();
4546
mLoggingPrefix = "Camera/" + cameraName + "/";
4647
mPoseEstimator = new PhotonPoseEstimator(fieldLayoutSupplier.get(), poseStrategy, null, robotToCamPose);
47-
mPoseEstimator.setMultiTagFallbackStrategy(poseStrategy);
48+
mPoseEstimator.setMultiTagFallbackStrategy(fallbackPoseStrategy);
4849
mRobotToCamPose = robotToCamPose;
4950
mFieldLayoutSupplier = fieldLayoutSupplier;
5051
mRobotPoseSupplier = robotPoseSupplier;

src/main/java/com/team1701/lib/cameras/AprilTagCameraIO.java src/main/java/com/team1701/lib/drivers/cameras/AprilTagCameraIO.java

+32-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
1-
package com.team1701.lib.cameras;
1+
package com.team1701.lib.drivers.cameras;
22

33
import java.util.ArrayList;
44
import java.util.stream.DoubleStream;
5+
import java.util.stream.IntStream;
56

67
import edu.wpi.first.math.geometry.Transform3d;
78
import org.littletonrobotics.junction.LogTable;
89
import org.littletonrobotics.junction.inputs.LoggableInputs;
910
import org.photonvision.simulation.SimCameraProperties;
1011
import org.photonvision.simulation.VisionSystemSim;
12+
import org.photonvision.targeting.MultiTargetPNPResults;
13+
import org.photonvision.targeting.PNPResults;
1114
import org.photonvision.targeting.PhotonPipelineResult;
1215
import org.photonvision.targeting.PhotonTrackedTarget;
1316
import org.photonvision.targeting.TargetCorner;
@@ -53,6 +56,19 @@ public void toLog(LogTable table) {
5356

5457
table.put(targetNamespace + "DetectedCorners", detectedCorners);
5558
}
59+
60+
var multiTagResult = pipelineResult.getMultiTagResult();
61+
table.put("MultiTag/PnpResult/IsPresent", multiTagResult.estimatedPose.isPresent);
62+
table.put("MultiTag/PnpResult/BestPose", multiTagResult.estimatedPose.best);
63+
table.put("MultiTag/PnpResult/BestPoseReprojectionError", multiTagResult.estimatedPose.bestReprojErr);
64+
table.put("MultiTag/PnpResult/AltPose", multiTagResult.estimatedPose.alt);
65+
table.put("MultiTag/PnpResult/AltPoseReprojectionError", multiTagResult.estimatedPose.altReprojErr);
66+
table.put("MultiTag/PnpResult/Ambiguity", multiTagResult.estimatedPose.ambiguity);
67+
table.put(
68+
"MultiTag/TargetIdsUsed",
69+
multiTagResult.fiducialIDsUsed.stream()
70+
.mapToInt(Integer::intValue)
71+
.toArray());
5672
}
5773

5874
@Override
@@ -95,7 +111,21 @@ public void fromLog(LogTable table) {
95111
targets.add(trackedTarget);
96112
}
97113

98-
pipelineResult = new PhotonPipelineResult(latency, targets);
114+
var multiTagPnpResultPresent = table.get("MultiTag/PnpResult/IsPresent", false);
115+
var multiTagPnpResult = multiTagPnpResultPresent
116+
? new PNPResults(
117+
table.get("MultiTag/PnpResult/BestPose", new Transform3d()),
118+
table.get("MultiTag/PnpResult/AltPose", new Transform3d()),
119+
table.get("MultiTag/PnpResult/Ambiguity", 0.0),
120+
table.get("MultiTag/PnpResult/BestPoseReprojectionError", 0.0),
121+
table.get("MultiTag/PnpResult/AltPoseReprojectionError", 0.0))
122+
: new PNPResults();
123+
var multiTagTargetIdsUsed = IntStream.of(table.get("MultiTag/TargetIdsUsed", new int[] {}))
124+
.boxed()
125+
.toList();
126+
var multiTargetResult = new MultiTargetPNPResults(multiTagPnpResult, multiTagTargetIdsUsed);
127+
128+
pipelineResult = new PhotonPipelineResult(latency, targets, multiTargetResult);
99129
pipelineResult.setTimestampSeconds(timestamp);
100130

101131
isConnected = table.get("IsConnected", false);

src/main/java/com/team1701/lib/cameras/AprilTagCameraIOPhotonCamera.java src/main/java/com/team1701/lib/drivers/cameras/AprilTagCameraIOPhotonCamera.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.team1701.lib.cameras;
1+
package com.team1701.lib.drivers.cameras;
22

33
import edu.wpi.first.math.geometry.Transform3d;
44
import org.photonvision.PhotonCamera;

src/main/java/com/team1701/robot/Constants.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ public static final class Vision {
166166
new Transform3d(new Translation3d(-0.3, -0.3, 0.2), new Rotation3d(0, 0, Units.degreesToRadians(-135)));
167167

168168
public static final double kMaxPoseAmbiguity = 0.03;
169-
public static final PoseStrategy kPoseStrategy = PoseStrategy.AVERAGE_BEST_TARGETS;
169+
public static final PoseStrategy kPoseStrategy = PoseStrategy.MULTI_TAG_PNP_ON_COPROCESSOR;
170+
public static final PoseStrategy kFallbackPoseStrategy = PoseStrategy.LOWEST_AMBIGUITY;
170171
}
171172
}

src/main/java/com/team1701/robot/RobotContainer.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
import com.pathplanner.lib.auto.AutoBuilder;
77
import com.pathplanner.lib.util.PathPlannerLogging;
88
import com.team1701.lib.alerts.TriggeredAlert;
9-
import com.team1701.lib.cameras.AprilTagCameraIO;
10-
import com.team1701.lib.cameras.AprilTagCameraIOPhotonCamera;
9+
import com.team1701.lib.drivers.cameras.AprilTagCameraIO;
10+
import com.team1701.lib.drivers.cameras.AprilTagCameraIOPhotonCamera;
1111
import com.team1701.lib.drivers.encoders.EncoderIO;
1212
import com.team1701.lib.drivers.encoders.EncoderIOAnalog;
1313
import com.team1701.lib.drivers.gyros.GyroIO;

src/main/java/com/team1701/robot/subsystems/vision/Vision.java

+6-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
import java.util.Optional;
55
import java.util.function.Supplier;
66

7-
import com.team1701.lib.cameras.AprilTagCamera;
8-
import com.team1701.lib.cameras.AprilTagCameraIO;
7+
import com.team1701.lib.drivers.cameras.AprilTagCamera;
8+
import com.team1701.lib.drivers.cameras.AprilTagCameraIO;
99
import com.team1701.robot.Constants;
1010
import com.team1701.robot.Robot;
1111
import com.team1701.robot.estimation.PoseEstimator;
@@ -35,27 +35,31 @@ public Vision(
3535
cameraIOFrontLeft,
3636
Constants.Vision.kRobotToFrontLeftCamPose,
3737
Constants.Vision.kPoseStrategy,
38+
Constants.Vision.kFallbackPoseStrategy,
3839
fieldLayoutSupplier,
3940
mPoseEstimator::getPose3d));
4041
mCameras.add(new AprilTagCamera(
4142
Constants.Vision.kFrontRightCameraName,
4243
cameraIOFrontRight,
4344
Constants.Vision.kRobotToFrontRightCamPose,
4445
Constants.Vision.kPoseStrategy,
46+
Constants.Vision.kFallbackPoseStrategy,
4547
fieldLayoutSupplier,
4648
mPoseEstimator::getPose3d));
4749
mCameras.add(new AprilTagCamera(
4850
Constants.Vision.kBackLeftCameraName,
4951
cameraIOBackLeft,
5052
Constants.Vision.kRobotToBackLeftCamPose,
5153
Constants.Vision.kPoseStrategy,
54+
Constants.Vision.kFallbackPoseStrategy,
5255
fieldLayoutSupplier,
5356
mPoseEstimator::getPose3d));
5457
mCameras.add(new AprilTagCamera(
5558
Constants.Vision.kBackRightCameraName,
5659
cameraIOBackRight,
5760
Constants.Vision.kRobotToBackRightCamPose,
5861
Constants.Vision.kPoseStrategy,
62+
Constants.Vision.kFallbackPoseStrategy,
5963
fieldLayoutSupplier,
6064
mPoseEstimator::getPose3d));
6165

0 commit comments

Comments
 (0)