107 lines
5.2 KiB
Markdown
107 lines
5.2 KiB
Markdown
# ADR 0041: Registered map increment and rolling local occupancy
|
|
|
|
Date: 2026-08-05
|
|
Status: accepted and implemented for M4.5R/M4.6
|
|
|
|
## Context
|
|
|
|
The recorded K1 topic `lixel/application/report/lio_pcl` is post-LIO data in the
|
|
vendor SLAM map frame. In RAVNOVES00 it behaves as a registered map increment:
|
|
one message contains points contributed at that moment, not a complete scan of
|
|
everything currently visible. Therefore a structure can remain physically
|
|
present while its points are absent from a later message.
|
|
|
|
M4.5 originally applied a `0.75 s` temporal object hold directly to those
|
|
increments. M4.6 then rendered the current increment as if it were the complete
|
|
LiDAR scene. At frame `1880` the exact camera frame visibly contains two
|
|
concrete hemispheres, while the current `lio_pcl` increment has no corresponding
|
|
points in the corridor. The old result `m4-threat-replay-78a06d...` consequently
|
|
lost them from 3D. This was a representation error, not evidence that LiDAR had
|
|
measured free space.
|
|
|
|
## Decision
|
|
|
|
Mission Core keeps three distinct products:
|
|
|
|
```text
|
|
current registered increment ──> exact source context
|
|
current occupied components ───> temporal identity and motion evidence
|
|
bounded rolling occupancy ─────> conservative local obstacle presence
|
|
```
|
|
|
|
`RollingLocalObstacleMapProvider` accumulates only qualified current occupied
|
|
cells in the SLAM map frame. It never interprets missing republication as free
|
|
space. Retained cells are evicted only by explicit bounds:
|
|
|
|
- voxel size `0.45 m`;
|
|
- retention `3.0 s`;
|
|
- local radius `12.0 m` around the recorded pose;
|
|
- maximum `65,536` active cells, with fail-closed capacity handling;
|
|
- bounded component size/count and deterministic 26-neighbour connectivity.
|
|
|
|
The provider publishes only cells not present in the current increment as
|
|
`TemporalState.RETAINED`. Current and retained identities cannot overlap.
|
|
Retained components have ephemeral identity, carry their last-hit age and never
|
|
claim current motion. They may assert `threat` when their occupied cells
|
|
intersect the current virtual corridor; outside the corridor they remain
|
|
`unknown`, never `not-threat`.
|
|
|
|
The `0.75 s` temporal object state remains separate. It continues to answer
|
|
whether a current component has enough bounded history for motion reasoning. It
|
|
is not a map-clearing policy.
|
|
|
|
## Evidence and acceptance
|
|
|
|
The current accepted M4.5R result is
|
|
`m4-temporal-replay-81e13d5654ac8d1219f6937dd425f7dbcdbacd5748d23fe653297134f0de6c22`.
|
|
Its frame ledger SHA-256 is
|
|
`e83b80ea06b3462c2d04c5a1b74289a0ec401596c7150ae90f5a1b748b639c3a`.
|
|
Across all `4,489` source frames it records:
|
|
|
|
- `849,650` current increment occupied cells;
|
|
- `70,989` retained component publications and `1,779,135` retained cell
|
|
publications;
|
|
- peak `907` active cells and `35` retained components;
|
|
- `29,720` time evictions, `6,513` radius evictions and zero capacity drops;
|
|
- maximum retained age exactly `3.0 s` and `587` active cells at replay end.
|
|
|
|
The current accepted M4.6 result is
|
|
`m4-threat-replay-2a953c5f27f2a5b1dddc5c658c1de2c323d7796084a099c024987a1da03aa324`.
|
|
All `4,489` frames completed with `28,081` current metric, `70,989` rolling-map,
|
|
`38,025` stale/held and `10,158` camera-only evidence publications assessed
|
|
exactly once. Decisions are `7,606 threat`, `10,769 not-threat` and `128,878
|
|
unknown`. All `10/10` deterministic fixtures pass with zero critical false-safe
|
|
outcomes.
|
|
|
|
Frame `1880` is a mandatory engineering visual regression. It binds two
|
|
separate body-frame regions to two retained components. The near region must
|
|
assert threat; both regions are present in the accepted result. These anchors
|
|
encode a reproducible owner-reviewed visual case, not independent object truth.
|
|
|
|
Frame `2584` is a second mandatory visual regression added after operator
|
|
review found that a compact hemisphere had six valid points in one voxel and
|
|
was discarded by a two-voxel geometry filter. The corrected geometry contract
|
|
retains the four-point minimum but permits one-voxel compact components. At
|
|
`2584` the near hemisphere is a retained threat and occupied cells for the far
|
|
hemisphere are present inside a larger current component. This is still an
|
|
engineering regression window, not independent truth.
|
|
|
|
The common LAB viewer exposes `CURRENT INCREMENT` and `ROLLING MAP` as separate
|
|
layers over the same selected frame. The current point count is not relabelled
|
|
as a complete scan, and retained occupied cells remain independently hideable.
|
|
|
|
## Consequences and limitations
|
|
|
|
- Missing points cannot create free-space or navigation authority.
|
|
- Short-lived obstacle disappearance caused solely by incremental publication
|
|
is removed from the replay decision path.
|
|
- A moving object may leave a conservative ghost for up to `3.0 s`; retained
|
|
occupancy can block but cannot claim motion or clearance.
|
|
- No ray-level free-space clearing is available in this recording. A future raw
|
|
scan/ray provider must add explicit observation and clearing semantics rather
|
|
than weakening this contract.
|
|
- The frame-1880 and frame-2584 anchors are regression evidence, not independent truth,
|
|
detector accuracy or physical collision acceptance.
|
|
- Live K1, measured `T_body_from_sensor`, physical body geometry, navigation,
|
|
commands and actuation remain outside M4.5R/M4.6 authority.
|