feat(lidar): qualify Patchwork++ on GOOSE

This commit is contained in:
DCCONSTRUCTIONS
2026-07-25 15:22:28 +03:00
parent 951b40c870
commit 60ba64004b
15 changed files with 1082 additions and 256 deletions
+67 -13
View File
@@ -39,6 +39,12 @@ Implemented now:
`Открыть` action;
- one admitted GOOSE validation frame with source colors, normalized remission
and an independent ground-truth view;
- a published, dimensioned MuCAR-3/VLS-128 Patchwork++ input profile:
sensor frame `x-forward / y-left / z-up`, physical height `2.24 m`, native
one-revolution scan and explicit absence of deskew/full vehicle TF claims;
- a reproducible Current/Patchwork++ A/B artifact with point-aligned masks,
disagreement views, independent-label metrics, latency and exact provider
identities;
- a separate **Парк → Диагностика LiDAR** surface containing only real sensor
recordings and their operational evidence.
@@ -152,11 +158,13 @@ time; TTL/dynamic filtering prevents stale ghosts.
4. [Done] Import one labeled frame and expose it in React as `native-scan`.
5. [Done] Show native remission, the original semantic palette and
ground-truth superclass coloring.
6. Add a declared GOOSE frame/mounting profile and produce `normalized-scan`.
7. [Current baseline done; Patchwork++ blocked on mounting evidence] Run the
current ground heuristic and Patchwork++ against independent labels.
6. [Patchwork-specific profile done; general normalization still pending] Admit
the published VLS-128 axes and physical height without claiming a complete
numeric vehicle TF or deskewed `normalized-scan`.
7. [One-frame A/B done] Run the current ground heuristic and pinned
Patchwork++ against the same native scan and independent labels.
8. Add sensor-degradation profiles for range, FOV, density, noise and dropout.
9. Only after the one-frame contract passes, expand to the validation split and
9. Expand the A/B to the validation split; only after that qualification gate,
add a rolling-map sequence with localization evidence.
## Acceptance checklist
@@ -172,9 +180,11 @@ time; TTL/dynamic filtering prevents stale ghosts.
- [x] Worker D root configured.
- [x] GOOSE validation archive hash recorded.
- [x] First real labeled frame visible in React.
- [ ] Coordinate and mounting profile admitted.
- [x] Patchwork-specific axes and physical-height profile admitted.
- [ ] Complete vehicle transform and general `normalized-scan` admitted.
- [x] Current local-percentile baseline measured against ground truth.
- [ ] Patchwork++ accuracy measured against ground truth.
- [x] Patchwork++ one-frame accuracy measured against ground truth.
- [ ] Current/Patchwork++ validation-split gate qualified.
- [ ] Sensor-degradation matrix qualified.
- [ ] Rolling local map with pose/TTL/dynamic policy qualified.
@@ -229,10 +239,54 @@ previous exact-radius result. This removes the previous all-points scan for
every occupied cell, but the measured latency still classifies it as a
diagnostic baseline rather than an onboard candidate.
Patchwork++ is intentionally not scored yet. The validation ZIP contains XYZI,
labels, mapping, LICENSE and CHANGELOG but no numeric TF/mounting calibration.
GOOSE documents the VLS-128 as a roof LiDAR and publishes a separate MuCAR-3 TF
tree, but the graph image alone is not physical-height evidence. The next gate
is to admit the numeric transform from `base_link_ground` to
`sensor/lidar/vls128_roof`, declare the source axis convention, and only then
run Patchwork++.
## First Patchwork++ A/B result
GOOSE's dimensioned MuCAR-3 schematic provides the two vertical dimensions
needed by this algorithm-specific gate: `base_link` is `0.64 m` above ground
and the VLS-128 optical center is `1.60 m` above `base_link`. The admitted
Patchwork++ height is therefore `2.24 m`. The same published schematic declares
the sensor axes as `x` forward, `y` left and `z` up. An independent fit to
GOOSE-labeled near-field ground observed a `-2.18 .. -2.14 m` intercept; this
was a non-calibrating cross-check, not the source of the height.
This narrowly admits the input required by Patchwork++ on the native
sensor-centric scan. It does **not** claim a complete numeric vehicle transform,
per-point timing, deskew or a general `normalized-scan`.
Official Patchwork++ `v1.4.1`, source commit
`3e6903a1d5537a4cc2ace897b0bbb98a92d6014c`, was run against the same first
frame and independent labels as Current:
| Metric | Current | Patchwork++ |
| --- | ---: | ---: |
| Ground IoU | `49.6165%` | `60.3702%` |
| Precision | `73.5892%` | `72.6612%` |
| Recall | `60.3659%` | `78.1130%` |
| F1 | `66.3249%` | `75.2886%` |
| Artificial-ground recall | `95.2364%` | `98.9688%` |
| Natural-ground recall | `49.4516%` | `71.5853%` |
| Obstacle non-ground recall | `79.6145%` | `92.1729%` |
| Worker latency | `3966.53 ms` | `15.89 ms` |
Reproducibility pins:
- benchmark identity:
`2a6d05f54a9e2ac727d9c850c1133f2fb539bfeddbd97c07cfd198ccb239162c`;
- full point-aligned prediction SHA-256:
`190f455c6e47911921b7f6454913e1bb2d0b8b5814ee2e34d7b63295afddc7ef`;
- bounded browser preview SHA-256:
`e23ca573103faf931523415e6c263248737eb6600f482b63de685b725bbc28c3`;
- Patchwork++ binary SHA-256:
`be8038b2098c83fe53841aa8ae19e362910e9056fe0ee7b9304c1ee5c5941094`.
Patchwork++ wins this frame by `10.75` percentage points of Ground IoU, raises
natural-ground recall by `22.13` points and is roughly `250x` faster in this
run. The result is deliberately `one-frame-diagnostic`: it makes Patchwork++
the candidate for validation-split and degradation qualification, not an
accepted navigation or safety provider.
Primary source evidence:
- [GOOSE MuCAR-3 sensor setup](https://goose-dataset.de/docs/mucar3/);
- [GOOSE paper, Figure 3](https://arxiv.org/pdf/2310.16788);
- [Patchwork++ v1.4.1](https://github.com/url-kaist/patchwork-plusplus/tree/v1.4.1).