Skip to content

Commit 02835db

Browse files
committed
add fifo; changed to linkedlist
1 parent de1af7c commit 02835db

File tree

1 file changed

+24
-15
lines changed

1 file changed

+24
-15
lines changed

src/main/java/org/steelhawks/subsystems/vision/objdetect/ObjectVision.java

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ public class ObjectVision extends VirtualSubsystem {
2323
new LoggedTunableNumber("ObjectVision/MaxArea", 20.0);
2424
private static final LoggedTunableNumber confidenceThreshold =
2525
new LoggedTunableNumber("ObjectVision/ConfidenceThreshold", 0.3);
26+
private static final LoggedTunableNumber maxDetectableObjects =
27+
new LoggedTunableNumber("ObjectVision/MaxDetectableObjects", 5);
2628

2729
private final ObjectVisionIO[] io;
2830
private final ObjectVisionIOInputsAutoLogged[] inputs;
@@ -33,7 +35,7 @@ record CoralPose(
3335

3436
private final FieldObject2d coralObjects = FieldConstants.FIELD_2D.getObject("Corals");
3537
private final ArrayList<ObjectVisionIO.ObjectObservation> allObservations = new ArrayList<>();
36-
private final Set<CoralPose> coralPoses = new HashSet<>();
38+
private final LinkedList<CoralPose> coralPoses = new LinkedList<>();
3739

3840
public ObjectVision() {
3941
this.io = VisionConstants.getObjIO();
@@ -46,7 +48,7 @@ public ObjectVision() {
4648
private void addCoralObservationToPose(ObjectVisionIO.ObjectObservation observation) {
4749
double now = Timer.getFPGATimestamp();
4850
Optional<Pose2d> oldWheelOdomPose = RobotContainer.s_Swerve.getPoseAtTime(observation.timestamp());
49-
if (Constants.loggedValue("CoralObservation/WheelOdomEmpty", oldWheelOdomPose.isEmpty())) {
51+
if (Constants.loggedValue("CoralProcessing/WheelOdomEmpty", oldWheelOdomPose.isEmpty())) {
5052
return;
5153
}
5254
var estimatedPose = RobotContainer.s_Swerve.getPose();
@@ -60,8 +62,8 @@ private void addCoralObservationToPose(ObjectVisionIO.ObjectObservation observat
6062
double[] txCorners = observation.info().tx(); // degrees
6163
double[] tyCorners = observation.info().ty(); // degrees
6264

63-
Constants.loggedValue("CoralObservation/TxCorners_degrees", txCorners);
64-
Constants.loggedValue("CoralObservation/TyCorners_degrees", tyCorners);
65+
Constants.loggedValue("CoralProcessing/TxCorners_degrees", txCorners);
66+
Constants.loggedValue("CoralProcessing/TyCorners_degrees", tyCorners);
6567

6668
// bounding box center in deg
6769
double minX = Math.min(Math.min(txCorners[0], txCorners[1]),
@@ -77,18 +79,18 @@ private void addCoralObservationToPose(ObjectVisionIO.ObjectObservation observat
7779
double tx = (minX + maxX) / 2.0;
7880
double ty = (minY + maxY) / 2.0;
7981

80-
Constants.loggedValue("CoralObservation/tx_degrees", tx);
81-
Constants.loggedValue("CoralObservation/ty_degrees", ty);
82+
Constants.loggedValue("CoralProcessing/tx_degrees", tx);
83+
Constants.loggedValue("CoralProcessing/ty_degrees", ty);
8284

8385
// trig
8486
double cameraHeight = robotToCamera.getZ();
8587
double cameraPitch = robotToCamera.getRotation().getY(); // radians
86-
Constants.loggedValue("CoralObservation/cameraPitch_radians", cameraPitch);
88+
Constants.loggedValue("CoralProcessing/cameraPitch_radians", cameraPitch);
8789
double tyRadians = Math.toRadians(ty);
8890
double verticalAngleFromHorizontal = cameraPitch + tyRadians;
89-
Constants.loggedValue("CoralObservation/AngleFromHorizontal_radians", verticalAngleFromHorizontal);
90-
Constants.loggedValue("CoralObservation/AngleFromHorizontal_degrees", Math.toDegrees(verticalAngleFromHorizontal));
91-
if (Constants.loggedValue("CoralObservation/VerticalAngleError", verticalAngleFromHorizontal <= 0)) {
91+
Constants.loggedValue("CoralProcessing/AngleFromHorizontal_radians", verticalAngleFromHorizontal);
92+
Constants.loggedValue("CoralProcessing/AngleFromHorizontal_degrees", Math.toDegrees(verticalAngleFromHorizontal));
93+
if (Constants.loggedValue("CoralProcessing/VerticalAngleError", verticalAngleFromHorizontal <= 0)) {
9294
return;
9395
}
9496
double targetHeight = 0.0;
@@ -98,26 +100,33 @@ private void addCoralObservationToPose(ObjectVisionIO.ObjectObservation observat
98100
new Translation2d(
99101
forwardDistance * Math.cos(txRadians),
100102
forwardDistance * Math.sin(txRadians));
101-
Constants.loggedValue("CoralObservation/cameraToCoralInCameraFrame",
103+
Constants.loggedValue("CoralProcessing/cameraToCoralInCameraFrame",
102104
new Pose2d(cameraToCoralInCameraFrame, new Rotation2d()));
103105

104106
Transform2d robotToCamera2d = new Transform2d(
105107
robotToCamera.getTranslation().toTranslation2d(),
106108
robotToCamera.getRotation().toRotation2d());
107109
Pose2d fieldToCamera = fieldToRobot.transformBy(robotToCamera2d);
108110

109-
Constants.loggedValue("CoralObservation/fieldToRobot", fieldToRobot);
110-
Constants.loggedValue("CoralObservation/fieldToCamera", fieldToCamera);
111-
Constants.loggedValue("CoralObservation/forwardDistance", forwardDistance);
111+
Constants.loggedValue("CoralProcessing/fieldToRobot", fieldToRobot);
112+
Constants.loggedValue("CoralProcessing/fieldToCamera", fieldToCamera);
113+
Constants.loggedValue("CoralProcessing/forwardDistance", forwardDistance);
112114

113115
Pose2d fieldToCoral = fieldToCamera
114116
.transformBy(new Transform2d(cameraToCoralInCameraFrame, new Rotation2d()));
115-
Constants.loggedValue("CoralObservation/fieldToCoral", fieldToCoral);
117+
Constants.loggedValue("CoralProcessing/fieldToCoral", fieldToCoral);
116118
CoralPose coralPose = new CoralPose(fieldToCoral.getTranslation(), observation.timestamp());
117119
coralPoses.removeIf(
118120
c -> c.translation.getDistance(fieldToCoral.getTranslation()) <= coralOverlap
119121
|| now - c.timestamp > coralMaxAge);
120122
coralPoses.add(coralPose);
123+
124+
// fifo
125+
while (coralPoses.size() > (int) maxDetectableObjects.get()) {
126+
CoralPose removed = coralPoses.removeFirst();
127+
Logger.recordOutput("CoralProcessing/RemovedOldest",
128+
new Pose2d(removed.translation, new Rotation2d()));
129+
}
121130
}
122131

123132
@Override

0 commit comments

Comments
 (0)