docs(perception): record gravity-aligned TGS evidence

This commit is contained in:
DCCONSTRUCTIONS
2026-08-26 19:51:50 +03:00
parent 941fb89616
commit 67d5d6fa05
2 changed files with 156 additions and 8 deletions
@@ -0,0 +1,139 @@
# M4.9 gravity-aligned TGS fail-closed evidence — 2026-08-26
Status: **evidence adapter completed**; visual obstacle/traversability quality,
full-source realtime, navigation and actuation remain disabled
## Decision
The TGS-only adapter now produces a complete, fail-closed metric evidence pack
for the ten RAVNOVES00 review anchors. It preserves the SLAM map gravity axis,
applies only a translation into the current local origin, never invokes AOS and
accounts for every point inside TRAVEL's declared `180 m` processing range.
This closes the representation and accounting gate. It does not accept visual
quality. Several anchors still contain a high non-ground share, so the next
gate is a 3D/costmap review of the sealed output rather than threshold tuning or
camera boxes.
## Frozen identity
| Item | Identity |
| --- | --- |
| TRAVEL source | `95dc2fbd66a343efd9060c45a5711b6307a950a4` |
| Mission Core source | `941fb8961693c7e1e122921842d547d9fe9bb94f` |
| Deterministic Worker artifact | `f52ea1995e973872ef4050de03fcef1aafa58a278d16506b05b8378102fd5781` |
| TRAVEL image | `sha256:7b412020f4d8392d1d1ed1b33beadc44140f0ea8f781e62dd69796042334300f` |
| CPU preparation/analysis image | `sha256:ceb13548617e4bd3f619766bfdff00af3fa5160946b367828da6d2233dcdcba0` |
| RAVNOVES00 LiDAR pack | `0685d24219d8236caf8b7f1685e93f6d6b59e7fd015a768d88a92bbe8b154944` |
| Executable profile | [`config/perception/m49-tgs-fail-closed-evidence-v1.json`](../../config/perception/m49-tgs-fail-closed-evidence-v1.json) |
The artifact used a new Worker release root and exact image IDs. The Worker
compiled a bounded TGS-only entrypoint against the pinned upstream headers; no
TRAVEL source file was changed. The entrypoint calls `TravelGroundSeg` and does
not construct or invoke `ObjectCluster`.
## Representation
Two source profiles were prepared for anchors `171`, `306`, `368`, `402`,
`450`, `509`, `525`, `744`, `1122` and `1856`:
- `current_increment`: exact current registered map increment;
- `causal_rolling_1s`: current and preceding one second of positive map
support, bounded to `12 m`, with no future frame.
For both profiles the current map position is subtracted, but the map axes are
not rotated into the handheld LiDAR orientation. This preserves the verified
SLAM gravity axis required by a terrain model. The previous sensor-frame probe
remains valid only for rejecting AOS's scan/ring assumptions; it is not used as
the TGS quality result.
The evidence pack has four explicit cell states:
| State | Meaning |
| --- | --- |
| `GROUND_SUPPORT` | positive TGS ground evidence |
| `NONGROUND_OCCUPIED` | every TGS non-ground point; no instance filter |
| `UNKNOWN_REJECTED` | exact in-range input complement not returned by TGS |
| `UNOBSERVED` | no positive evidence in the bounded local cell; never free by omission |
The local review grid is `0.45 m` with a `12 m` radius. State priority is
non-ground, rejected, ground, then unobserved. This is evidence precedence, not
a robot-footprint collision policy.
## Anchor result
Primary profile: `causal_rolling_1s`.
| Anchor | Ground points | Non-ground points | Rejected points | Ground cells | Non-ground cells | Unobserved cells |
| ---: | ---: | ---: | ---: | ---: | ---: | ---: |
| `171` | `8,304` | `18,479` | `0` | `495` | `413` | `1,336` |
| `306` | `5,646` | `13,821` | `0` | `694` | `265` | `1,285` |
| `368` | `4,323` | `2,482` | `0` | `600` | `196` | `1,448` |
| `402` | `5,782` | `3,190` | `0` | `641` | `260` | `1,343` |
| `450` | `6,933` | `5,058` | `0` | `451` | `304` | `1,489` |
| `509` | `5,941` | `11,460` | `0` | `481` | `287` | `1,476` |
| `525` | `5,797` | `14,441` | `0` | `473` | `270` | `1,501` |
| `744` | `2,900` | `16,754` | `3` | `388` | `324` | `1,532` |
| `1122` | `2,422` | `3,403` | `0` | `599` | `228` | `1,417` |
| `1856` | `4,967` | `2,759` | `0` | `693` | `181` | `1,370` |
All eligible points across both profiles and all twenty anchor/profile records
are represented as ground, non-ground or rejected. A rejected point can share
a cell with higher-priority non-ground evidence; therefore the point count may
be non-zero while the final rejected-cell count is zero.
The gravity-aligned result is materially different from the diagnostic
sensor-frame run. At anchor `171`, rolling ground evidence increases from `626`
to `8,304` points. This confirms that TGS quality must not be judged in the
handheld sensor orientation.
The result is still not visually accepted. Anchors `171`, `509`, `525` and
especially `744` retain large non-ground populations. The 3D review must decide
whether these are correct buildings/vegetation/curbs outside the passage,
terrain-model overclassification inside the passage, or both.
## Timing and resources
| Measurement | Current increment | Causal rolling 1 s |
| --- | ---: | ---: |
| TGS p50 | `0.275 ms` | `1.378 ms` |
| TGS maximum | `0.327 ms` | `3.807 ms` |
- End-to-end Worker wrapper: `12.085689 s`, including source verification,
preparation, one C++ compile, twenty process starts, evidence packing and
analysis.
- Per-process wall p50: `20 ms`; p95: `40 ms`.
- Maximum process RSS: `9,292 KiB`.
- No GPU flag, CUDA/Vulkan context, image build or network access was used.
- Canonical Triton retained the same container ID and stayed
`running/healthy`.
- All exact candidate containers and the one-shot scheduled task were removed;
Worker free memory after cleanup was approximately `52.945 GiB`.
- Frigate, GAUSS/PlayCanvas and port `8000` were not modified.
## Sealed evidence
Worker root:
`D:\NDC_MISSIONCORE\runtime\results\m49-tgs-fail-closed\gravity-anchors-001`
| File | Bytes | SHA-256 |
| --- | ---: | --- |
| `evidence/result.json` | `9,137` | `0cfefcfa7e5e5ba015442446a830c7d0c0c93ac40b0b1e8888686590184c666a` |
| `evidence/evidence.npz` | `1,599,830` | `eaf1cd94cf7d3956e6bfebe4038ea18e6824fb6df5806e4c3b2d5b1c838f3b7b` |
| `worker-summary.json` | `975` | `ad8b2a23a46dd0c8039b07136fdb6e6cfe579fe6d4bbf3696ea2a16089174fbe` |
| `inputs/input-manifest.json` | `13,357` | `7a22e61606e1fa9ab61d47417f941b590a68b29e4529d4c290992ce7eb89a642` |
| `tgs-timing.tsv` | `638` | `a8f439996205286335ac392b37f51b54056d04e9cb07e03648c52c1e8f2f6ae8` |
## Next gate
Import the sealed `evidence.npz` into one laboratory review surface with:
1. 3D points colored by the four evidence states;
2. top-down `0.45 m` costmap cells in the same local coordinate frame;
3. anchor selection and exact counts from `result.json`;
4. no AOS clusters, camera boxes, future frames or physical authority.
The operator review must focus on the mandatory obstacle/gap cases and on the
large non-ground populations listed above. Camera projection follows only if
the metric evidence is accepted.