From d60771d5c26fa0948c345d70657c078fb3319481 Mon Sep 17 00:00:00 2001 From: Matt Date: Sun, 16 Mar 2025 07:36:33 -0700 Subject: [PATCH 1/4] Add OV9281 AE startup quirk --- .../USBCameras/GenericUSBCameraSettables.java | 12 ++++++++++++ photon-server/src/main/resources/web/index.html | 15 ++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/photon-core/src/main/java/org/photonvision/vision/camera/USBCameras/GenericUSBCameraSettables.java b/photon-core/src/main/java/org/photonvision/vision/camera/USBCameras/GenericUSBCameraSettables.java index dcfea72c5f..6ca799410c 100644 --- a/photon-core/src/main/java/org/photonvision/vision/camera/USBCameras/GenericUSBCameraSettables.java +++ b/photon-core/src/main/java/org/photonvision/vision/camera/USBCameras/GenericUSBCameraSettables.java @@ -174,7 +174,19 @@ public void setAutoWhiteBalance(boolean autoWB) { } } + @Override public void setAutoExposure(boolean cameraAutoExposure) { + if (configuration.cameraQuirks.hasQuirk(CameraQuirk.ArduOV9281Controls) + && !cameraAutoExposure) { + // Poke the camera to get it into auto exposure mode + setAutoExposureImpl(true); + setAutoExposureImpl(false); + } else { + setAutoExposureImpl(cameraAutoExposure); + } + } + + public void setAutoExposureImpl(boolean cameraAutoExposure) { logger.debug("Setting auto exposure to " + cameraAutoExposure); if (!cameraAutoExposure) { diff --git a/photon-server/src/main/resources/web/index.html b/photon-server/src/main/resources/web/index.html index 988f55e6a3..7cda984ecb 100644 --- a/photon-server/src/main/resources/web/index.html +++ b/photon-server/src/main/resources/web/index.html @@ -1 +1,14 @@ -

UI has not been copied!

+ + + + + + + Photon Client + + + + +
+ + From 6f57d116b7bf63dc59c4101552ccb22b6d53af76 Mon Sep 17 00:00:00 2001 From: Matt Date: Sun, 16 Mar 2025 07:45:19 -0700 Subject: [PATCH 2/4] Update docs comment --- .../vision/camera/USBCameras/GenericUSBCameraSettables.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/photon-core/src/main/java/org/photonvision/vision/camera/USBCameras/GenericUSBCameraSettables.java b/photon-core/src/main/java/org/photonvision/vision/camera/USBCameras/GenericUSBCameraSettables.java index 6ca799410c..3a48eac20b 100644 --- a/photon-core/src/main/java/org/photonvision/vision/camera/USBCameras/GenericUSBCameraSettables.java +++ b/photon-core/src/main/java/org/photonvision/vision/camera/USBCameras/GenericUSBCameraSettables.java @@ -178,7 +178,8 @@ public void setAutoWhiteBalance(boolean autoWB) { public void setAutoExposure(boolean cameraAutoExposure) { if (configuration.cameraQuirks.hasQuirk(CameraQuirk.ArduOV9281Controls) && !cameraAutoExposure) { - // Poke the camera to get it into auto exposure mode + // OV9281 on Linux seems to sometimes ignore our exposure requests on first boot if we're in + // manual mode. Poking the camera into and out of auto exposure seems to fix it. setAutoExposureImpl(true); setAutoExposureImpl(false); } else { From a0cf05b8c084027ec95b4f619de5f9e470f946c6 Mon Sep 17 00:00:00 2001 From: Matt Date: Sun, 16 Mar 2025 07:47:15 -0700 Subject: [PATCH 3/4] oop --- photon-server/src/main/resources/web/index.html | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/photon-server/src/main/resources/web/index.html b/photon-server/src/main/resources/web/index.html index 7cda984ecb..988f55e6a3 100644 --- a/photon-server/src/main/resources/web/index.html +++ b/photon-server/src/main/resources/web/index.html @@ -1,14 +1 @@ - - - - - - - Photon Client - - - - -
- - +

UI has not been copied!

From a989a9e1a8b1376f9dcab31141caac349bc7854a Mon Sep 17 00:00:00 2001 From: Gold856 <117957790+Gold856@users.noreply.github.com> Date: Sun, 25 Jan 2026 15:13:06 -0500 Subject: [PATCH 4/4] Reorder and add long sleeps --- .../camera/USBCameras/GenericUSBCameraSettables.java | 11 +++++++++-- .../photonvision/vision/processes/VisionModule.java | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/photon-core/src/main/java/org/photonvision/vision/camera/USBCameras/GenericUSBCameraSettables.java b/photon-core/src/main/java/org/photonvision/vision/camera/USBCameras/GenericUSBCameraSettables.java index 1a6bb04c6d..f6ee0ecd01 100644 --- a/photon-core/src/main/java/org/photonvision/vision/camera/USBCameras/GenericUSBCameraSettables.java +++ b/photon-core/src/main/java/org/photonvision/vision/camera/USBCameras/GenericUSBCameraSettables.java @@ -173,8 +173,15 @@ public void setAutoExposure(boolean cameraAutoExposure) { && !cameraAutoExposure) { // OV9281 on Linux seems to sometimes ignore our exposure requests on first boot if we're in // manual mode. Poking the camera into and out of auto exposure seems to fix it. - setAutoExposureImpl(true); - setAutoExposureImpl(false); + try { + setAutoExposureImpl(false); + Thread.sleep(2000); + setAutoExposureImpl(true); + Thread.sleep(2000); + setAutoExposureImpl(false); + } catch (InterruptedException e) { + logger.error("Thread interrupted while setting OV9281 exposure!", e); + } } else { setAutoExposureImpl(cameraAutoExposure); } diff --git a/photon-core/src/main/java/org/photonvision/vision/processes/VisionModule.java b/photon-core/src/main/java/org/photonvision/vision/processes/VisionModule.java index e0843e3919..b57b01d969 100644 --- a/photon-core/src/main/java/org/photonvision/vision/processes/VisionModule.java +++ b/photon-core/src/main/java/org/photonvision/vision/processes/VisionModule.java @@ -465,13 +465,13 @@ boolean setPipeline(int index) { pipelineSettings.cameraExposureRaw = 10; // reasonable default } - settables.setExposureRaw(pipelineSettings.cameraExposureRaw); try { settables.setAutoExposure(pipelineSettings.cameraAutoExposure); } catch (VideoException e) { logger.error("Unable to set camera auto exposure!"); logger.error(e.toString()); } + settables.setExposureRaw(pipelineSettings.cameraExposureRaw); if (cameraQuirks.hasQuirk(CameraQuirk.Gain)) { // If the gain is disabled for some reason, re-enable it if (pipelineSettings.cameraGain == -1) pipelineSettings.cameraGain = 75;