From c62d8270b3c8aa0f4b285cef0c9683d4e77359ee Mon Sep 17 00:00:00 2001 From: Peter Bochmann Date: Wed, 21 Oct 2026 12:03:08 +0200 Subject: [PATCH] Let a Manta aim at the frame mean the keep rule waits for Rietschen's RGB camera came with ExposureAutoAlg = FitRange and a 10 % tolerance. FitRange fits the histogram wherever the mean lands, and the camera stopped adjusting 10 % off its target, so the keep rule's 50 +- 5 % band was never reached: at a 3 s interval every waypoint ran into its 2 s frame_timeout (2026-10-21). The gige recipe now sets Mean and 5 %, as the NIR camera already had. By day the exposure floor goes from 200 to 20 us: at noon the camera sat at 200-600 us with no room to darken a bright view, and without chunk data the host cannot tell a camera at its limit from one still settling. Co-Authored-By: Claude Opus 5.5 --- docs/tower-installation.md | 10 ++++++---- scripts/export_camera_profile.py | 10 +++++++++- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/docs/tower-installation.md b/docs/tower-installation.md index 208182a..edfff4d 100644 --- a/docs/tower-installation.md +++ b/docs/tower-installation.md @@ -733,10 +733,12 @@ and the telemetry work. `export_camera_profile.py` picks its `gige` recipe by itself when a camera has `ExposureTimeAbs` and no `ExposureTime`: frame trigger off (the legacy cameras booted with `TriggerMode = On`, `Line1`), `BayerRG8` on the colour camera and `Mono8` on a mono one, 60 MB/s each, the frame rate at -the camera's maximum (rietschen's RGB camera came set to 0.955 fps), and an -auto-exposure target of 50 %. That last one matters: the keep rule waits for the frame mean -to reach 50 %, and at the cameras' old 25 every waypoint ran into -`frame_timeout_ms`. +the camera's maximum (rietschen's RGB camera came set to 0.955 fps), and +auto-exposure on the frame mean (`ExposureAutoAlg = Mean`) at 50 % +- 5 %, down +to 20 us by day. That last one matters: the keep rule waits for the frame mean +to reach 50 % +- 5 %. At the cameras' old target of 25 every waypoint ran into +`frame_timeout_ms`, and so it did with the RGB camera's `FitRange` and 10 % +tolerance, which fit the histogram wherever its mean lands. Give `--camera` the id: with several cameras the first one the SDK lists is not the colour one, and the order changes from run to run. `install.sh diff --git a/scripts/export_camera_profile.py b/scripts/export_camera_profile.py index 58a8d9e..2b972b4 100755 --- a/scripts/export_camera_profile.py +++ b/scripts/export_camera_profile.py @@ -154,6 +154,11 @@ _GIGE_COMMON = [ # The keep rule waits for the frame mean to reach the camera's target. The # host starts on its default band of 50 % - rietschen's cameras were set to # 25, and every waypoint then ran into frame_timeout_ms (7.5 s, 2026-10-20). + # The camera has to aim at the mean, and stop adjusting only inside the same + # +-5 %: the RGB camera came with FitRange (which fits the histogram, wherever + # the mean lands) and a 10 % tolerance, and no waypoint settled (2026-10-21). + ("ExposureAutoAlg", "Mean"), + ("ExposureAutoAdjustTol", 5), ("ExposureAutoTarget", 50), ("ExposureAuto", "Continuous"), ("GainAuto", "Continuous"), @@ -162,7 +167,10 @@ _GIGE_COMMON = [ GIGE_RECIPES = { "standard": _GIGE_COMMON + [ ("ExposureAutoMax", 20000), - ("ExposureAutoMin", 200), + # Rietschen's RGB camera sat at 200-600 us at noon: a floor of 200 left it + # no room to darken a bright view, and without chunk data the host cannot + # tell a camera at its limit from one still settling. The Manta goes to 16. + ("ExposureAutoMin", 20), ("GainAutoMax", 24.0), ], "night": _GIGE_COMMON + [