Judge the keep rule against the camera's own target, and aim Mantas at 35 %

configureSettle() read the camera's auto-exposure target, tolerance and
limits before the camera was opened, so it got none of them and judged every
frame against its 50 +- 5 % default until the first profile switch - on
every tower. It now runs again once the camera is open. On the Alviums this
brings their own IntensityControllerTolerance and, at night, the at-limit
verdict from their chunk data into play.

The gige recipe aims at 35 % instead of 50: at 50 the sky over the horizon
burnt out at noon on rietschen, where smoke would rise. The old program ran
these cameras at 23-25. Tests 542/542 (mock).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Peter Bochmann 2026-10-21 12:40:44 +02:00
parent c62d8270b3
commit 7332c47d6d
Signed by: peter.bochmann
GPG Key ID: 94E8C523489B8AC1
3 changed files with 19 additions and 12 deletions

View File

@ -734,11 +734,12 @@ itself when a camera has `ExposureTimeAbs` and no `ExposureTime`: frame trigger
off (the legacy cameras booted with `TriggerMode = On`, `Line1`), `BayerRG8` on 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 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 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 auto-exposure on the frame mean (`ExposureAutoAlg = Mean`) at 35 % +- 5 %, down
to 20 us by day. That last one matters: the keep rule waits for the frame mean to 20 us by day. The keep rule waits for the frame mean to reach the camera's
to reach 50 % +- 5 %. At the cameras' old target of 25 every waypoint ran into own target and tolerance, read once the camera is open. With the RGB camera's
`frame_timeout_ms`, and so it did with the RGB camera's `FitRange` and 10 % `FitRange`, which fits the histogram wherever its mean lands, no waypoint
tolerance, which fit the histogram wherever its mean lands. settled. 35 rather than the Alvium's 50: at 50 the sky over the horizon burnt
out at noon, where smoke would rise; the old program ran these cameras at 23-25.
Give `--camera` the id: with several cameras the first one the SDK lists is 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 not the colour one, and the order changes from run to run. `install.sh

View File

@ -151,15 +151,15 @@ _GIGE_COMMON = [
("ExposureTimeAbs", 1000.0), ("ExposureTimeAbs", 1000.0),
("AcquisitionFrameRateAbs", 1000.0), # clamped to the camera's maximum ("AcquisitionFrameRateAbs", 1000.0), # clamped to the camera's maximum
("ChunkModeActive", False), ("ChunkModeActive", False),
# The keep rule waits for the frame mean to reach the camera's target. The # The keep rule waits for the frame mean to reach the camera's target, +- its
# host starts on its default band of 50 % - rietschen's cameras were set to # tolerance, which it reads from the camera. The camera has to aim at the
# 25, and every waypoint then ran into frame_timeout_ms (7.5 s, 2026-10-20). # mean: the RGB camera came with FitRange (which fits the histogram, wherever
# The camera has to aim at the mean, and stop adjusting only inside the same # the mean lands) and no waypoint settled (2026-10-21). 35 % rather than the
# +-5 %: the RGB camera came with FitRange (which fits the histogram, wherever # Alvium's 50: at 50 the sky over the horizon burnt out at noon, where smoke
# the mean lands) and a 10 % tolerance, and no waypoint settled (2026-10-21). # would rise; the old program ran these cameras at 23-25.
("ExposureAutoAlg", "Mean"), ("ExposureAutoAlg", "Mean"),
("ExposureAutoAdjustTol", 5), ("ExposureAutoAdjustTol", 5),
("ExposureAutoTarget", 50), ("ExposureAutoTarget", 35),
("ExposureAuto", "Continuous"), ("ExposureAuto", "Continuous"),
("GainAuto", "Continuous"), ("GainAuto", "Continuous"),
] ]

View File

@ -3627,6 +3627,12 @@ struct Application::Impl {
return 3; // distinct from the config (1) and lock (2) exits return 3; // distinct from the config (1) and lock (2) exits
} }
// Again, now the camera is open: the keep rule reads the camera's own
// auto-exposure target, tolerance and limits, and before open() it got
// none of them and judged every frame against its 50 +- 5 % default -
// until the first profile switch. Rietschen's cameras aim at 35 %.
configureSettle();
pipeline->start(); pipeline->start();
channel->publishStatus(static_cast<int>(Mode::Manual)); // until [Startup] mode says otherwise channel->publishStatus(static_cast<int>(Mode::Manual)); // until [Startup] mode says otherwise