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
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
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.
auto-exposure on the frame mean (`ExposureAutoAlg = Mean`) at 35 % +- 5 %, down
to 20 us by day. The keep rule waits for the frame mean to reach the camera's
own target and tolerance, read once the camera is open. With the RGB camera's
`FitRange`, which fits the histogram wherever its mean lands, no waypoint
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
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),
("AcquisitionFrameRateAbs", 1000.0), # clamped to the camera's maximum
("ChunkModeActive", False),
# 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).
# The keep rule waits for the frame mean to reach the camera's target, +- its
# tolerance, which it reads from the camera. The camera has to aim at the
# mean: the RGB camera came with FitRange (which fits the histogram, wherever
# the mean lands) and no waypoint settled (2026-10-21). 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.
("ExposureAutoAlg", "Mean"),
("ExposureAutoAdjustTol", 5),
("ExposureAutoTarget", 50),
("ExposureAutoTarget", 35),
("ExposureAuto", "Continuous"),
("GainAuto", "Continuous"),
]

View File

@ -3627,6 +3627,12 @@ struct Application::Impl {
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();
channel->publishStatus(static_cast<int>(Mode::Manual)); // until [Startup] mode says otherwise