Skip to content

Commit cdbfd87

Browse files
committed
Add object detection vision subsystem support
Introduces object detection vision subsystem with new IO classes for Limelight, Photon, and simulation. Updates RobotContainer to instantiate ObjectVision, and VisionConstants to provide configuration and IO selection for object detection cameras.
1 parent 47f3f9c commit cdbfd87

File tree

6 files changed

+82
-5
lines changed

6 files changed

+82
-5
lines changed

src/main/java/org/steelhawks/RobotContainer.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ public RobotContainer() {
7676
s_Vision =
7777
new Vision(
7878
s_Swerve::accept, false);
79+
s_ObjVision =
80+
new ObjectVision();
7981
s_Elevator =
8082
new Elevator(
8183
new ElevatorIOTalonFX());
@@ -153,6 +155,8 @@ public RobotContainer() {
153155
s_Vision =
154156
new Vision(
155157
s_Swerve::accept, true);
158+
s_ObjVision =
159+
new ObjectVision();
156160
s_Elevator =
157161
new Elevator(
158162
new ElevatorIOSim());

src/main/java/org/steelhawks/subsystems/vision/VisionConstants.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
import edu.wpi.first.math.util.Units;
1111
import org.steelhawks.RobotContainer;
1212
import org.steelhawks.subsystems.swerve.Swerve;
13+
import org.steelhawks.subsystems.vision.objdetect.ObjectVisionIO;
14+
import org.steelhawks.subsystems.vision.objdetect.ObjectVisionIOLimelight;
15+
import org.steelhawks.subsystems.vision.objdetect.ObjectVisionIOPhoton;
16+
import org.steelhawks.subsystems.vision.objdetect.ObjectVisionSim;
1317

1418
public class VisionConstants {
1519
// AprilTag layout
@@ -112,6 +116,15 @@ public enum CameraType {
112116
)
113117
};
114118

119+
private static final CameraConfig[] OMEGA_OBJ_DETECT_CONFIG = {
120+
new CameraConfig(
121+
"limelight",
122+
Constants.fromOnshapeCoordinates(4.469, 9.261, 21.578, 15.0, -20.0, 0.0),
123+
0.0,
124+
CameraType.LIMELIGHT
125+
)
126+
};
127+
115128
private static final CameraConfig[] ALPHA_CAMERA_CONFIG = {
116129
new CameraConfig(
117130
"limelight-coral",
@@ -144,6 +157,13 @@ public static CameraConfig[] getCameraConfig() {
144157
};
145158
}
146159

160+
public static CameraConfig[] getObjDetectConfig() {
161+
return switch (Constants.getRobot()) {
162+
case SIMBOT, OMEGABOT -> OMEGA_OBJ_DETECT_CONFIG;
163+
default -> null;
164+
};
165+
}
166+
147167
public static VisionIO[] getIO() {
148168
CameraConfig[] config = getCameraConfig();
149169
VisionIO[] io = new VisionIO[config.length];
@@ -165,6 +185,28 @@ public static VisionIO[] getIO() {
165185
return io;
166186
}
167187

188+
public static ObjectVisionIO[] getObjIO() {
189+
CameraConfig[] config = getObjDetectConfig();
190+
assert config != null;
191+
ObjectVisionIO[] io = new ObjectVisionIO[config.length];
192+
for (int i = 0; i < config.length; i++) {
193+
if (RobotBase.isReal()) {
194+
switch (config[i].cameraType) {
195+
case LIMELIGHT -> io[i] = new ObjectVisionIOLimelight(config[i].name);
196+
case PHOTON -> io[i] = new ObjectVisionIOPhoton(config[i].name, config[i].robotToCamera);
197+
}
198+
} else if (Constants.getRobot() == Constants.RobotType.SIMBOT && !RobotBase.isReal()) {
199+
io[i] = new ObjectVisionSim(
200+
config[i].name,
201+
config[i].robotToCamera,
202+
Swerve.getDriveSimulation()::getSimulatedDriveTrainPose);
203+
} else if (Constants.getRobot() != Constants.RobotType.SIMBOT && !RobotBase.isReal()) {
204+
io[i] = new ObjectVisionIO() {};
205+
}
206+
}
207+
return io;
208+
}
209+
168210
// Basic filtering thresholds
169211
public static double MAX_AMBIGUITY = 0.3;
170212
public static double MAX_ZERROR = 0.75;

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.littletonrobotics.junction.Logger;
88
import org.steelhawks.FieldConstants;
99
import org.steelhawks.RobotContainer;
10+
import org.steelhawks.subsystems.vision.VisionConstants;
1011

1112
import java.util.*;
1213
import java.util.stream.Collectors;
@@ -27,8 +28,8 @@ record CoralPose(
2728
private final ArrayList<ObjectVisionIO.ObjectObservation> allObservations = new ArrayList<>();
2829
private Set<CoralPose> coralPoses = new HashSet<>();
2930

30-
public ObjectVision(ObjectVisionIO... io) {
31-
this.io = io;
31+
public ObjectVision() {
32+
this.io = VisionConstants.getObjIO();
3233
this.inputs = new ObjectVisionIOInputsAutoLogged[io.length];
3334
for (int i = 0; i < inputs.length; i++) {
3435
inputs[i] = new ObjectVisionIOInputsAutoLogged();

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
package org.steelhawks.subsystems.vision.objdetect;
22

3-
import edu.wpi.first.math.geometry.Pose3d;
4-
import edu.wpi.first.math.geometry.Rotation3d;
5-
import edu.wpi.first.networktables.BooleanSubscriber;
63
import edu.wpi.first.networktables.DoubleSubscriber;
74
import edu.wpi.first.networktables.IntegerSubscriber;
85
import edu.wpi.first.networktables.NetworkTableInstance;
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.steelhawks.subsystems.vision.objdetect;
2+
3+
import edu.wpi.first.math.geometry.Transform3d;
4+
5+
public class ObjectVisionIOPhoton implements ObjectVisionIO {
6+
7+
private final String name;
8+
private final Transform3d robotToCamera;
9+
10+
public ObjectVisionIOPhoton(String name, Transform3d robotToCamera) {
11+
this.name = name;
12+
this.robotToCamera = robotToCamera;
13+
}
14+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.steelhawks.subsystems.vision.objdetect;
2+
3+
import edu.wpi.first.math.geometry.Pose2d;
4+
import edu.wpi.first.math.geometry.Transform3d;
5+
6+
import java.util.function.Supplier;
7+
8+
public class ObjectVisionSim implements ObjectVisionIO {
9+
10+
private final String name;
11+
private final Transform3d robotToCamera;
12+
private final Supplier<Pose2d> poseSupplier;
13+
14+
public ObjectVisionSim(String name, Transform3d robotToCamera, Supplier<Pose2d> poseSupplier) {
15+
this.name = name;
16+
this.robotToCamera = robotToCamera;
17+
this.poseSupplier = poseSupplier;
18+
}
19+
}

0 commit comments

Comments
 (0)