68 lines
3.0 KiB
Markdown
68 lines
3.0 KiB
Markdown
# RGB camera profiles
|
||
|
||
A profile is a **settings XML exported from the VimbaX Viewer**. A profile named
|
||
`X` is `X.xml` in this directory, and `[Camera.rgb] profile = X` in `config.ini`
|
||
selects it.
|
||
|
||
The program hands the XML straight to the Vimba X SDK (`LoadSettings`). Nothing
|
||
else writes camera settings, and there is no fallback — a missing `X.xml` is a
|
||
startup error. That is deliberate: GenICam validity is *stateful*
|
||
(`AcquisitionFrameRate` is only writable once `AcquisitionFrameRateEnable` is
|
||
set, `Width`'s maximum depends on binning, `IntensityAutoPrecedence` takes
|
||
`Minimizenoise` but not `MinimizeNoise`), so a hand-written list can be
|
||
individually plausible and collectively wrong. The Viewer greys out invalid
|
||
combinations as you configure; that is the guardrail this design relies on.
|
||
|
||
## These files live on the device only
|
||
|
||
The XMLs are exported on the LattePanda, because that is where the camera is, so
|
||
they exist nowhere in the repo. `deploy.sh` therefore excludes `*.xml` and
|
||
`*.txt` under this directory from its `rsync --delete` — without that, the next
|
||
deploy erases them. This README does sync; it is repo documentation.
|
||
|
||
Keep a copy somewhere durable if a profile represents real tuning effort: a
|
||
reflash or a rebuilt device starts with an empty directory.
|
||
|
||
## To create or change a profile
|
||
|
||
1. Open the VimbaX Viewer and connect to the camera.
|
||
2. Configure it. The Viewer will not let you pick an invalid combination.
|
||
3. Save the settings XML over `<profile>.xml` here.
|
||
4. Restart. The program notices the file changed, regenerates `<profile>.txt`,
|
||
and logs every setting that moved.
|
||
|
||
## The `.txt` files
|
||
|
||
Beside each `X.xml` the program writes `X.txt`: a generated, human-readable
|
||
record of the same settings, so a profile can be read and diffed without opening
|
||
the Viewer. **It configures nothing.** Editing it changes nothing; it is
|
||
overwritten whenever the XML changes.
|
||
|
||
## Profiles this rig expects
|
||
|
||
`config.ini` ships referencing `standard` and `night`. They were previously
|
||
hand-written; these are the values they used, as a starting point when
|
||
recreating them in the Viewer. Everything not listed was identical.
|
||
|
||
| Setting | `standard` | `night` |
|
||
|---|---|---|
|
||
| `AcquisitionFrameRate` | 10 | 1 |
|
||
| `SensorBitDepth` | Bpp8 | Bpp12 |
|
||
| `ExposureAutoMin` | 200 | 1000 |
|
||
| `ExposureAutoMax` | 20000 | 500000 |
|
||
| `GainAutoMax` | 24 | 48 |
|
||
| `IntensityAutoPrecedence` | Minimizeexposuretime | Minimizenoise |
|
||
| `DeviceIndicatorMode` | Active | Off |
|
||
| `DeviceIndicatorLuminance` | 10 | 0 |
|
||
|
||
Both used 2×2 binning at `RGB8` (2256×2256, 15.3 MB/frame) and a 250 MB/s
|
||
`DeviceLinkThroughputLimit`. **That binning is not optional at 10 Hz**: a
|
||
full-resolution RGB8 frame is 61 MB, which caps out near 4 fps under that limit.
|
||
|
||
The full previous definitions are in git history at
|
||
the hand-written `config/camera_modes/rgb/{standard,night}.ini`, removed in the
|
||
same change that made the XML the only thing applied.
|
||
|
||
`settle_wait_ms` / `frame_timeout_ms` are *not* camera settings and are not in
|
||
the XML — they live in `config.ini` under `[Camera.rgb.<profile>]`.
|