feat: qualify K1 local surface over time

This commit is contained in:
DCCONSTRUCTIONS
2026-07-25 23:22:55 +03:00
parent 04a658b218
commit 3449b2bc3e
13 changed files with 1528 additions and 49 deletions
+40 -16
View File
@@ -2,8 +2,9 @@
Date: 2026-07-25
Status: accepted architecture plan; L0/L1 implemented; L2 diagnostic A/B
complete; full GOOSE and RELLIS qualification complete; L2.6a K1 replay
local-surface slice implemented; operator review and live shadow next
complete; full GOOSE and RELLIS qualification complete; L2.6b K1 replay
local-surface temporal qualification implemented; operator review and live
shadow next
Scope: passively received real-time K1 point/pose evidence, immutable replay and
future live shadow processing
Explicitly out of scope: K1 firmware modification, a new onboard exporter, new
@@ -398,7 +399,7 @@ Dataset expansion is no longer the next gate.
`1.27 m` value.
- [x] Publish surface-relative height, slope, roughness and confidence
separately from semantic classes.
- [ ] Add independently reviewable step/curb candidates; do not derive them
- [x] Add independently reviewable step/curb candidates; do not derive them
from a single global height threshold.
- [x] Produce short-TTL observed-surface, `occupied` and `unknown` evidence.
Do not infer `free` merely because a mapped point is absent.
@@ -408,26 +409,47 @@ Dataset expansion is no longer the next gate.
derivatives with independent decay and provenance.
- [ ] Reuse the accepted camera-to-LiDAR projection as an optional semantic
layer with source, confidence, freshness and conflict fields.
- [ ] Complete the qualification report with per-frame latency, point age,
temporal stability, obstacle preservation and memory growth.
- [x] Qualify next-frame prediction and temporal stability with the evaluated
frame excluded from prediction input.
- [ ] Complete the remaining qualification report with per-frame latency,
point age, obstacle preservation and memory growth.
- [ ] Replay the same profiles through a bounded latest-wins live-shadow queue;
no K1 command, navigation or safety authority is added.
The implemented `missioncore.k1-local-surface/v1` derivative is reproducible
through `experiments/perception/run_k1_local_surface.py` and is exposed
read-only through `GET /api/v1/lidar/local-surfaces` plus the bound frame
endpoint. **Парк → Диагностика LiDAR** reuses the five RAVNOVES00 scene
selectors and shows the selected source frame as observed surface, observed
occupied-above-surface, negative outlier and unclassified evidence. The React
contract is provider-neutral; K1 remains a bound backend source rather than UI
implementation knowledge.
and timeline endpoints. **Парк → Диагностика LiDAR** reuses the five
RAVNOVES00 scene selectors and also exposes a clickable timeline over the
complete recording. The selected source frame shows observed surface, observed
occupied-above-surface, negative outlier, unclassified evidence and yellow
local-discontinuity candidates. The candidates are not semantic curb
recognition or ground truth. The React contract is provider-neutral; K1 remains
a bound backend source rather than UI implementation knowledge.
The complete RAVNOVES00 run covered all `526/526` available LiDAR samples.
There were zero stale-pose, insufficient-surface or failed-fit frames. Observed
diagnostic distributions are: derived sensor-to-surface height `1.295 m` p50,
roughness `0.054 m` p95, slope `3.172°` p95 and pose-binding age `19.113 ms`
p95. These values describe this recording only; they are not calibration,
ground truth or a navigation gate. Free space remains unavailable.
ground truth or a navigation gate.
The L2.6b qualification scores each available frame against a local plane built
only from the preceding TTL window; the frame being scored is excluded from
the prediction input. It produced `525` independent next-frame samples. The
distribution of per-frame median absolute residual has `0.038543 m` p50 and
`0.050398 m` p95. Prediction inlier fraction has `0.96354` p50 and `0.95133`
mean. The temporal comparison detected `12/525` strict-threshold jumps; height
delta is `0.022887 m` p95, slope delta `0.09572°` p95 and roughness delta
`0.003317 m` p95.
The central surface is therefore repeatable at roughly four-centimetre median
error on this replay. The tail is not yet planner evidence: the distribution
of per-frame p95 residual has `0.41496 m` p95 and reaches `1.083 m`. Step/curb
candidates occur in every available frame (`68.5` cells and `83` points p50),
which proves that the review layer is active but also that it is broad and
still requires independent review. Free space remains unavailable; none of
these metrics grants navigation, command or safety authority.
Exit: one immutable K1 session yields both a persistent reconstruction and a
bounded local world state without hard-coded terrain height or scanner-side
@@ -512,8 +534,10 @@ and rejects Patchwork++ because the small Ground-IoU gain came with unacceptable
obstacle loss. Public-dataset ground qualification is therefore complete
enough for the current decision. The first K1 local-surface replay slice now
covers all available `RAVNOVES00` samples and is visible in the operator
interface. The highest-value immediate work is operator review, explicit
step/curb and temporal-stability qualification, followed by bounded live
shadow. Nvblox, raw-scan detectors and alternative SLAM remain optional later
gates because the current report contract does not carry their required
ray/timing semantics.
interface. Leave-current-frame-out temporal qualification now covers `525`
samples: the median surface error is stable, while the p95 tail remains too
large for a free-space claim. The highest-value immediate work is review of the
`12` temporal jumps and worst prediction tails, then a bounded live-shadow
queue and separate dynamic-observation layer. Nvblox, raw-scan detectors and
alternative SLAM remain optional later gates because the current report
contract does not carry their required ray/timing semantics.
+4 -2
View File
@@ -49,9 +49,11 @@ Implemented now:
- a content-addressed `missioncore.k1-local-surface/v1` replay derivative over
immutable `RAVNOVES00`, with dynamic height/slope/roughness/confidence,
explicit pose-binding age and conservative observed occupied/unknown policy;
- leave-current-frame-out next-frame qualification over `525` samples,
temporal jump evidence and unverified local-discontinuity candidates;
- a provider-neutral read-only local-surface view in
**Парк → Диагностика LiDAR**, synchronized to the five existing
RAVNOVES00 scene selectors;
RAVNOVES00 scene selectors and a clickable complete-recording timeline;
- worker storage admission for `D:\NDC_MISSIONCORE\datasets` and
`/mnt/d/NDC_MISSIONCORE/datasets`;
- a dedicated, honest dataset catalog in **Полигон → Датасеты**;
@@ -83,7 +85,7 @@ Not implemented:
- no model training or production promotion;
- no RELLIS ROS bag admission, continuous synchronized playback or production
promotion;
- no rolling-map implementation yet.
- no ray-cleared free-space or planner-authoritative rolling occupancy map.
## Product surface boundary