feat: add passive K1 local surface replay

This commit is contained in:
DCCONSTRUCTIONS
2026-07-25 22:47:12 +03:00
parent cfe17e49bb
commit 04a658b218
16 changed files with 2715 additions and 21 deletions
+45 -19
View File
@@ -2,8 +2,8 @@
Date: 2026-07-25
Status: accepted architecture plan; L0/L1 implemented; L2 diagnostic A/B
complete; full GOOSE and RELLIS qualification complete; K1 local-world-model
gate next
complete; full GOOSE and RELLIS qualification complete; L2.6a K1 replay
local-surface slice 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
@@ -384,28 +384,51 @@ showed that Patchwork++ slightly improved Ground IoU while reducing obstacle
non-ground recall from `80.46%` to `69.70%`; the candidate was rejected.
Dataset expansion is no longer the next gate.
### L2.6 — K1 local world model — next
### L2.6 — K1 local world model — in progress
- [ ] Bind the immutable `RAVNOVES00` source and replay-pack-v2 evidence without
rewriting either generation.
- [ ] Transform each admitted map increment through the nearest compatible
`T_map_from_lidar` and publish pose-binding age explicitly.
- [ ] Estimate a time-varying local surface for ground-vehicle profiles using
- [x] Bind the immutable `RAVNOVES00` E10 source by pack identity and artifact
hash without copying or rewriting the source generation.
- [ ] Mirror the same accepted profile over replay-pack-v2 evidence while
preserving its separate identity and field-retention contract.
- [x] Reject stale pose binding and publish pose-binding age explicitly; keep
map-native processing honest instead of claiming that pose inversion
recreates an original sensor sweep.
- [x] Estimate a time-varying local surface for ground-vehicle profiles using
robust spatial cells and temporal support; do not use the historical
`1.27 m` value.
- [ ] Publish surface height, slope, roughness, step/curb candidates and
confidence separately from semantic classes.
- [ ] Produce short-TTL `occupied` and `unknown` layers from current evidence.
- [x] Publish surface-relative height, slope, roughness and confidence
separately from semantic classes.
- [ ] 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.
- [ ] Keep persistent reconstruction, recent collision evidence and dynamic
observations as separate derivatives of the same source.
- [x] Leave the immutable persistent reconstruction untouched by the local
derivative.
- [ ] Add recent-collision and dynamic-observation layers as separate
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.
- [ ] Measure latency, point age, pose-binding age, temporal stability, obstacle
preservation and memory growth over the complete recording.
- [ ] Complete the qualification report with per-frame latency, point age,
temporal stability, 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.
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.
Exit: one immutable K1 session yields both a persistent reconstruction and a
bounded local world state without hard-coded terrain height or scanner-side
changes.
@@ -487,7 +510,10 @@ natural-ground recall from `51.76%` to `76.22%` and stays below `23.41 ms` p95
across 961 frames. Full RELLIS qualification covers `2,413` validation frames
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 highest-value immediate work is the K1
local world model over `RAVNOVES00`, 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.
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.
+6
View File
@@ -46,6 +46,12 @@ Implemented now:
- count, finite-value and maximum-point safety gates;
- immutable point-aligned arrays;
- a fail-closed K1 `lio_pcl` boundary;
- 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;
- a provider-neutral read-only local-surface view in
**Парк → Диагностика LiDAR**, synchronized to the five existing
RAVNOVES00 scene selectors;
- worker storage admission for `D:\NDC_MISSIONCORE\datasets` and
`/mnt/d/NDC_MISSIONCORE/datasets`;
- a dedicated, honest dataset catalog in **Полигон → Датасеты**;