diff --git a/config/config.example.ini b/config/config.example.ini index bae976f..c76489a 100644 --- a/config/config.example.ini +++ b/config/config.example.ini @@ -100,7 +100,8 @@ frame_timeout_ms = 5000 ; --- A thermal camera (InfraTec TarisIR mini), beside the colour one --------- ; It takes its picture at the same waypoints and intervals, right after the -; colour camera, and both carry the same timestamp: RGB/.jxl and TIR/.jxl. +; colour camera. Each file and CamEvent has the time its own frame arrived; the +; two of one waypoint share hdg/pit and are at most max_frame_age_ms apart. ; The counts are saved 16-bit and always lossless (jxl_distance must stay 0); ; T[K] = count x 0.01 under profile 0, x 0.02 under profile 1, emissivity 1. ; Its driver, id (the serial) and interface belong in hardware.ini; [Hardware] diff --git a/docs/architecture.md b/docs/architecture.md index fe95cea..5b8d451 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -140,8 +140,9 @@ With a thermal camera the scheduler and the pipeline still see one the one the keep rule reads) and the thermal one after them. Its `trigger()` asks the colour source first; only if that delivered does it ask the thermal source, which hands over its newest frame if it is no older than -`max_frame_age_ms` and otherwise says no at once. Every frame of one trigger -takes the colour frame's timestamp. The colour camera failing stops the run as +`max_frame_age_ms` and otherwise says no at once. Each frame keeps the time it +reached the host, so the two of one waypoint differ by up to that age. The +colour camera failing stops the run as before; the thermal one failing never does (`offline()` says why, Health `cams_offline` names it). Thermal frames are `Mono16` counts: the pipeline rotates them, takes `tmax`/`tmed`/hot spot on the rotated image diff --git a/docs/configuration.md b/docs/configuration.md index 82cade6..1f85a1b 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -1065,9 +1065,9 @@ firmware `ST` lines (per-axis state + encoder counts), parsed by A TarisIR mini beside the colour camera takes its picture at the same waypoints and intervals: the colour camera is asked first, and only once it has delivered -is the thermal one asked for its newest frame. Both frames carry the colour -frame's timestamp, so `RGB/.jxl` and `TIR/.jxl` are a pair (and so are -their CamEvents, see [mqtt-api.md](mqtt-api.md#thermal-camera-cam-tir)). +is the thermal one asked for its newest frame. Each file and CamEvent has the +time its own frame arrived: the two of one waypoint share `hdg`/`pit` and are at +most `max_frame_age_ms` apart (see [mqtt-api.md](mqtt-api.md#thermal-camera-cam-tir)). - **Best effort.** A thermal camera that is missing, unlicensed or has no fresh frame costs that picture its thermal image, nothing more: the scan goes on, the diff --git a/docs/mqtt-api.md b/docs/mqtt-api.md index d47b0aa..598e080 100644 --- a/docs/mqtt-api.md +++ b/docs/mqtt-api.md @@ -153,9 +153,12 @@ their payload is unchanged. | `tmed` | int/null | Median of the image, tenths of a °C (the anchor for a display window) | | `hotx`, `hoty` | number/null | Where the hottest pixel is: its centre, 0..1 across and down the image **as stored** (after `rotation_deg`), as for detection boxes | -- **Same `time` as the colour picture.** The thermal camera is asked right after - the colour one, at the same waypoint, and its event and file take the colour - frame's timestamp: `RGB/