Skip to content

Commit b7dc63d

Browse files
committed
tested multitag
1 parent 2599cd6 commit b7dc63d

File tree

14 files changed

+116
-19
lines changed

14 files changed

+116
-19
lines changed

photon-client/src/components/dashboard/CameraAndPipelineSelectCard.vue

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ const validNewPipelineTypes = computed(() => {
130130
{ name: "Reflective", value: WebsocketPipelineType.Reflective },
131131
{ name: "Colored Shape", value: WebsocketPipelineType.ColoredShape },
132132
{ name: "AprilTag", value: WebsocketPipelineType.AprilTag },
133+
{ name: "AprilTagCuda", value: WebsocketPipelineType.AprilTagCuda },
133134
{ name: "Aruco", value: WebsocketPipelineType.Aruco }
134135
];
135136
if (useSettingsStore().general.supportedBackends.length > 0) {
@@ -168,6 +169,7 @@ const pipelineTypesWrapper = computed<{ name: string; value: number }[]>(() => {
168169
{ name: "Reflective", value: WebsocketPipelineType.Reflective },
169170
{ name: "Colored Shape", value: WebsocketPipelineType.ColoredShape },
170171
{ name: "AprilTag", value: WebsocketPipelineType.AprilTag },
172+
{ name: "AprilTagCuda", value: WebsocketPipelineType.AprilTagCuda },
171173
{ name: "Aruco", value: WebsocketPipelineType.Aruco }
172174
];
173175
if (useSettingsStore().general.supportedBackends.length > 0) {
@@ -224,6 +226,9 @@ useCameraSettingsStore().$subscribe((mutation, state) => {
224226
case PipelineType.AprilTag:
225227
pipelineType.value = WebsocketPipelineType.AprilTag;
226228
break;
229+
case PipelineType.AprilTagCuda:
230+
pipelineType.value = WebsocketPipelineType.AprilTagCuda;
231+
break;
227232
case PipelineType.Aruco:
228233
pipelineType.value = WebsocketPipelineType.Aruco;
229234
break;

photon-client/src/components/dashboard/ConfigOptions.vue

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import InputTab from "@/components/dashboard/tabs/InputTab.vue";
77
import ThresholdTab from "@/components/dashboard/tabs/ThresholdTab.vue";
88
import ContoursTab from "@/components/dashboard/tabs/ContoursTab.vue";
99
import AprilTagTab from "@/components/dashboard/tabs/AprilTagTab.vue";
10+
import AprilTagCudaTab from "@/components/dashboard/tabs/AprilTagCudaTab.vue";
1011
import ArucoTab from "@/components/dashboard/tabs/ArucoTab.vue";
1112
import ObjectDetectionTab from "@/components/dashboard/tabs/ObjectDetectionTab.vue";
1213
import OutputTab from "@/components/dashboard/tabs/OutputTab.vue";
@@ -37,6 +38,10 @@ const allTabs = Object.freeze({
3738
tabName: "AprilTag",
3839
component: AprilTagTab
3940
},
41+
apriltagCudaTab: {
42+
tabName: "AprilTagCuda",
43+
component: AprilTagCudaTab
44+
},
4045
arucoTab: {
4146
tabName: "Aruco",
4247
component: ArucoTab
@@ -79,6 +84,7 @@ const getTabGroups = (): ConfigOption[][] => {
7984
allTabs.thresholdTab,
8085
allTabs.contoursTab,
8186
allTabs.apriltagTab,
87+
allTabs.apriltagCudaTab,
8288
allTabs.arucoTab,
8389
allTabs.objectDetectionTab,
8490
allTabs.outputTab
@@ -92,6 +98,7 @@ const getTabGroups = (): ConfigOption[][] => {
9298
allTabs.thresholdTab,
9399
allTabs.contoursTab,
94100
allTabs.apriltagTab,
101+
allTabs.apriltagCudaTab,
95102
allTabs.arucoTab,
96103
allTabs.objectDetectionTab,
97104
allTabs.outputTab
@@ -102,7 +109,7 @@ const getTabGroups = (): ConfigOption[][] => {
102109
return [
103110
[allTabs.inputTab],
104111
[allTabs.thresholdTab],
105-
[allTabs.contoursTab, allTabs.apriltagTab, allTabs.arucoTab, allTabs.objectDetectionTab, allTabs.outputTab],
112+
[allTabs.contoursTab, allTabs.apriltagTab, allTabs.apriltagCudaTab, allTabs.arucoTab, allTabs.objectDetectionTab, allTabs.outputTab],
106113
[allTabs.targetsTab, allTabs.pnpTab, allTabs.map3dTab]
107114
];
108115
}
@@ -115,6 +122,7 @@ const tabGroups = computed<ConfigOption[][]>(() => {
115122
116123
const allow3d = useCameraSettingsStore().currentPipelineSettings.solvePNPEnabled;
117124
const isAprilTag = useCameraSettingsStore().currentWebsocketPipelineType === WebsocketPipelineType.AprilTag;
125+
const isAprilTagCuda = useCameraSettingsStore().currentWebsocketPipelineType === WebsocketPipelineType.AprilTagCuda;
118126
const isAruco = useCameraSettingsStore().currentWebsocketPipelineType === WebsocketPipelineType.Aruco;
119127
const isObjectDetection =
120128
useCameraSettingsStore().currentWebsocketPipelineType === WebsocketPipelineType.ObjectDetection;
@@ -124,10 +132,11 @@ const tabGroups = computed<ConfigOption[][]>(() => {
124132
tabGroup.filter(
125133
(tabConfig) =>
126134
!(!allow3d && tabConfig.tabName === "3D") && //Filter out 3D tab any time 3D isn't calibrated
127-
!((!allow3d || isAprilTag || isAruco || isObjectDetection) && tabConfig.tabName === "PnP") && //Filter out the PnP config tab if 3D isn't available, or we're doing AprilTags
128-
!((isAprilTag || isAruco || isObjectDetection) && tabConfig.tabName === "Threshold") && //Filter out threshold tab if we're doing AprilTags
129-
!((isAprilTag || isAruco || isObjectDetection) && tabConfig.tabName === "Contours") && //Filter out contours if we're doing AprilTags
135+
!((!allow3d || isAprilTag || isAprilTagCuda || isAruco || isObjectDetection) && tabConfig.tabName === "PnP") && //Filter out the PnP config tab if 3D isn't available, or we're doing AprilTags
136+
!((isAprilTag || isAprilTagCuda || isAruco || isObjectDetection) && tabConfig.tabName === "Threshold") && //Filter out threshold tab if we're doing AprilTags
137+
!((isAprilTag || isAprilTagCuda || isAruco || isObjectDetection) && tabConfig.tabName === "Contours") && //Filter out contours if we're doing AprilTags
130138
!(!isAprilTag && tabConfig.tabName === "AprilTag") && //Filter out apriltag unless we actually are doing AprilTags
139+
!(!isAprilTagCuda && tabConfig.tabName === "AprilTagCuda") && //Filter out apriltag unless we actually are doing AprilTags
131140
!(!isAruco && tabConfig.tabName === "Aruco") &&
132141
!(!isObjectDetection && tabConfig.tabName === "Object Detection") //Filter out aruco unless we actually are doing Aruco
133142
)

photon-client/src/components/dashboard/tabs/OutputTab.vue

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { useStateStore } from "@/stores/StateStore";
1010
const isTagPipeline = computed(
1111
() =>
1212
useCameraSettingsStore().currentPipelineType === PipelineType.AprilTag ||
13+
useCameraSettingsStore().currentPipelineType === PipelineType.AprilTagCuda ||
1314
useCameraSettingsStore().currentPipelineType === PipelineType.Aruco
1415
);
1516
@@ -90,6 +91,7 @@ const interactiveCols = computed(() =>
9091
<pv-switch
9192
v-if="
9293
(currentPipelineSettings.pipelineType === PipelineType.AprilTag ||
94+
currentPipelineSettings.pipelineType === PipelineType.AprilTagCuda ||
9395
currentPipelineSettings.pipelineType === PipelineType.Aruco) &&
9496
useCameraSettingsStore().isCurrentVideoFormatCalibrated &&
9597
useCameraSettingsStore().currentPipelineSettings.solvePNPEnabled
@@ -104,6 +106,7 @@ const interactiveCols = computed(() =>
104106
<pv-switch
105107
v-if="
106108
(currentPipelineSettings.pipelineType === PipelineType.AprilTag ||
109+
currentPipelineSettings.pipelineType === PipelineType.AprilTagCuda ||
107110
currentPipelineSettings.pipelineType === PipelineType.Aruco) &&
108111
useCameraSettingsStore().isCurrentVideoFormatCalibrated &&
109112
useCameraSettingsStore().currentPipelineSettings.solvePNPEnabled

photon-client/src/components/dashboard/tabs/TargetsTab.vue

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ const resetCurrentBuffer = () => {
4242
<th
4343
v-if="
4444
currentPipelineSettings.pipelineType === PipelineType.AprilTag ||
45+
currentPipelineSettings.pipelineType === PipelineType.AprilTagCuda ||
4546
currentPipelineSettings.pipelineType === PipelineType.Aruco
4647
"
4748
class="text-center white--text"
@@ -66,6 +67,7 @@ const resetCurrentBuffer = () => {
6667
<template
6768
v-if="
6869
(currentPipelineSettings.pipelineType === PipelineType.AprilTag ||
70+
currentPipelineSettings.pipelineType === PipelineType.AprilTagCuda ||
6971
currentPipelineSettings.pipelineType === PipelineType.Aruco) &&
7072
useCameraSettingsStore().currentPipelineSettings.solvePNPEnabled
7173
"
@@ -83,6 +85,7 @@ const resetCurrentBuffer = () => {
8385
<td
8486
v-if="
8587
currentPipelineSettings.pipelineType === PipelineType.AprilTag ||
88+
currentPipelineSettings.pipelineType === PipelineType.AprilTagCuda ||
8689
currentPipelineSettings.pipelineType === PipelineType.Aruco
8790
"
8891
class="text-center"
@@ -115,6 +118,7 @@ const resetCurrentBuffer = () => {
115118
<template
116119
v-if="
117120
(currentPipelineSettings.pipelineType === PipelineType.AprilTag ||
121+
currentPipelineSettings.pipelineType === PipelineType.AprilTagCuda ||
118122
currentPipelineSettings.pipelineType === PipelineType.Aruco) &&
119123
useCameraSettingsStore().currentPipelineSettings.solvePNPEnabled
120124
"
@@ -131,6 +135,7 @@ const resetCurrentBuffer = () => {
131135
<v-container
132136
v-if="
133137
(currentPipelineSettings.pipelineType === PipelineType.AprilTag ||
138+
currentPipelineSettings.pipelineType === PipelineType.AprilTagCuda ||
134139
currentPipelineSettings.pipelineType === PipelineType.Aruco) &&
135140
currentPipelineSettings.doMultiTarget &&
136141
useCameraSettingsStore().isCurrentVideoFormatCalibrated &&

photon-client/src/types/PipelineTypes.ts

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ export enum PipelineType {
66
ColoredShape = 3,
77
AprilTag = 4,
88
Aruco = 5,
9-
ObjectDetection = 6
9+
ObjectDetection = 6,
10+
AprilTagCuda = 7
1011
}
1112

1213
export enum AprilTagFamily {
@@ -240,6 +241,46 @@ export const DefaultAprilTagPipelineSettings: AprilTagPipelineSettings = {
240241
doSingleTargetAlways: false
241242
};
242243

244+
export interface AprilTagCudaPipelineSettings extends PipelineSettings {
245+
pipelineType: PipelineType.AprilTagCuda;
246+
hammingDist: number;
247+
numIterations: number;
248+
decimate: number;
249+
blur: number;
250+
decisionMargin: number;
251+
refineEdges: boolean;
252+
debug: boolean;
253+
threads: number;
254+
tagFamily: AprilTagFamily;
255+
doMultiTarget: boolean;
256+
doSingleTargetAlways: boolean;
257+
}
258+
export type ConfigurableAprilTagCudaPipelineSettings = Partial<
259+
Omit<AprilTagCudaPipelineSettings, "pipelineType" | "hammingDist" | "debug">
260+
> &
261+
ConfigurablePipelineSettings;
262+
export const DefaultAprilTagCudaPipelineSettings: AprilTagCudaPipelineSettings = {
263+
...DefaultPipelineSettings,
264+
cameraGain: 75,
265+
targetModel: TargetModel.AprilTag6p5in_36h11,
266+
ledMode: false,
267+
outputShowMultipleTargets: true,
268+
cameraExposureRaw: 20,
269+
pipelineType: PipelineType.AprilTagCuda,
270+
271+
hammingDist: 0,
272+
numIterations: 40,
273+
decimate: 1,
274+
blur: 0,
275+
decisionMargin: 35,
276+
refineEdges: true,
277+
debug: false,
278+
threads: 4,
279+
tagFamily: AprilTagFamily.Family36h11,
280+
doMultiTarget: false,
281+
doSingleTargetAlways: false
282+
};
283+
243284
export interface ArucoPipelineSettings extends PipelineSettings {
244285
pipelineType: PipelineType.Aruco;
245286

@@ -314,11 +355,13 @@ export type ActivePipelineSettings =
314355
| ColoredShapePipelineSettings
315356
| AprilTagPipelineSettings
316357
| ArucoPipelineSettings
317-
| ObjectDetectionPipelineSettings;
358+
| ObjectDetectionPipelineSettings
359+
| AprilTagCudaPipelineSettings;
318360

319361
export type ActiveConfigurablePipelineSettings =
320362
| ConfigurableReflectivePipelineSettings
321363
| ConfigurableColoredShapePipelineSettings
322364
| ConfigurableAprilTagPipelineSettings
323365
| ConfigurableArucoPipelineSettings
324-
| ConfigurableObjectDetectionPipelineSettings;
366+
| ConfigurableObjectDetectionPipelineSettings
367+
| ConfigurableAprilTagCudaPipelineSettings;

photon-client/src/types/WebsocketDataTypes.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,5 +105,6 @@ export enum WebsocketPipelineType {
105105
ColoredShape = 1,
106106
AprilTag = 2,
107107
Aruco = 3,
108-
ObjectDetection = 4
108+
ObjectDetection = 4,
109+
AprilTagCuda = 5
109110
}

photon-core/src/main/java/org/photonvision/vision/camera/QuirkyCamera.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,9 @@ public class QuirkyCamera {
8686
CameraQuirk.ArduCamCamera,
8787
CameraQuirk.Gain,
8888
CameraQuirk.ArduOV9782Controls),
89+
// Innomaker OV9281 Jetson Orin MIPI
90+
new QuirkyCamera(-1, -1, "vi-output, ov9281 10-0060", "vi-output,_ov9821_10-0060", CameraQuirk.Gain),
91+
new QuirkyCamera(-1, -1, "vi-output, ov9281 9-0060", "vi-output,_ov9821_9-0060", CameraQuirk.Gain),
8992
// Innomaker OV9281
9093
new QuirkyCamera(
9194
0x0c45, 0x636d, "USB Camera", "Innomaker OV9281", CameraQuirk.InnoOV9281Controls));

photon-core/src/main/java/org/photonvision/vision/camera/USBCameras/GenericUSBCameraSettables.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,8 @@ public void setExposureRaw(double exposureRaw) {
171171
@Override
172172
public void setBrightness(int brightness) {
173173
try {
174-
camera.setBrightness(brightness);
174+
//camera.setBrightness(brightness);
175+
softSet("brightness", brightness);
175176
this.lastBrightness = brightness;
176177
} catch (VideoException e) {
177178
logger.error("Failed to set camera brightness!", e);
@@ -214,10 +215,10 @@ public HashMap<Integer, VideoMode> getAllVideoModes() {
214215

215216
for (VideoMode videoMode : modes) {
216217
// Filter grey modes
217-
if (videoMode.pixelFormat == PixelFormat.kGray
218-
|| videoMode.pixelFormat == PixelFormat.kUnknown) {
219-
continue;
220-
}
218+
//if (videoMode.pixelFormat == PixelFormat.kGray
219+
// || videoMode.pixelFormat == PixelFormat.kUnknown) {
220+
// continue;
221+
//}
221222

222223
if (configuration.cameraQuirks.hasQuirk(CameraQuirk.FPSCap100)) {
223224
if (videoMode.fps > 100) {

photon-core/src/main/java/org/photonvision/vision/camera/USBCameras/USBCameraSource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public USBCameraSource(CameraConfiguration config) {
6464

6565
if (getCameraConfiguration().cameraQuirks.hasQuirks()) {
6666
logger.info("Quirky camera detected: " + getCameraConfiguration().cameraQuirks.baseName);
67-
}
67+
} else logger.info("no quirks for:" + config.usbVID + ":" + config.usbPID + ":" + config.baseName + ".");
6868

6969
// Aid to the development team - record the properties available for whatever the user plugged
7070
// in

photon-core/src/main/java/org/photonvision/vision/pipeline/CVPipelineSettings.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@
3333
@JsonSubTypes.Type(value = DriverModePipelineSettings.class),
3434
@JsonSubTypes.Type(value = AprilTagPipelineSettings.class),
3535
@JsonSubTypes.Type(value = ArucoPipelineSettings.class),
36-
@JsonSubTypes.Type(value = ObjectDetectionPipelineSettings.class)
36+
@JsonSubTypes.Type(value = ObjectDetectionPipelineSettings.class),
37+
@JsonSubTypes.Type(value = AprilTagCudaPipelineSettings.class)
3738
})
3839
public class CVPipelineSettings implements Cloneable {
3940
public int pipelineIndex = 0;

0 commit comments

Comments
 (0)