lidarslam_ros2 v0.9.1
Release candidate status — HOLD; not published or tagged
v0.9.1 is a reliability and first-map usability release candidate for the supported Humble and Jazzy rosbag2-to-Autoware-compatible-map workflow. It does not claim v1.0 readiness, universal sensor support, or overall superiority to GLIM.
This file becomes the public GitHub Release body verbatim. The tag workflow
therefore refuses this candidate-only banner and the HOLD decision below. A
maintainer must first satisfy the release gates, update this document to the
verified final Release verification state, and commit that review before
creating v0.9.1.
Shortest supported paths
Start at Autoware-Compatible Map Authoring; it keeps the public workflow in task order and separates stable from candidate delivery.
- For the currently published fixed demo, use the pinned
v0.9.0-humbleorv0.9.0-jazzyimage from Getting Started. - To evaluate this exact source candidate, use the six-package source
quickstart, then run
lidarslam-map doctorandlidarslam-map demo. - For an installed own-bag path, run
lidarslam-map doctor /path/to/rosbag2, thenlidarslam-map start /path/to/rosbag2. - Run
lidarslam-mapwith no arguments in an interactive terminal when the first intent is not yet clear. It offers only installation check, demo, own bag, and retained sessions. - Use the Japanese beginner page for the same commands and safety boundaries; it is not a separate execution fork.
Published v0.9.0 images predate the candidate own-bag start contract and are
rejected by its host launcher. Do not present that no-install path as stable
until a version-matched v0.9.1 image has been published and audited.
GLIM-style PPA/package-manager installation is also still unavailable. Source
and the published fixed-demo images remain the honest current routes until the
NDT ownership, rosdistro, and package-manager gates complete.
Reliability and recovery
- All classic scanmatcher PCL VoxelGrid call sites reject unsafe dimensions, absolute-index overflow, invalid leaf sizes, and inconsistent dense clouds before entering PCL. The process and last valid map remain available, and a later safe frame can map normally.
- Mapping outputs retain atomic finalization, repaired ROS-log links, terminal
manifests, diagnosis, verification logs, privacy-bounded first-map receipts,
and a finalization-only
demo --resumepath. - Existing, overlapping, symlinked, incomplete, or unverified output is refused with stable reason codes and one concrete next action.
- The canonical NTU benchmark acquisition now starts with the write- and
network-free
bash scripts/download_ntu_viral_tnp01.sh --dry-run. It reports every remaining multi-gigabyte phase, pins the official archive byte count and checksum, checks conservative destination capacity, and stops before download when the selected filesystem is too small. On Linux it now identifies a sufficiently large attached-but-unmounted USB filesystem, leaves free capacity unverified, selects one authorization- respecting mount action, and emits--dest-devicepreflight/live commands that resolve the actual mount path and recheck free bytes. - RTK-SLAM acquisition now offers the same fail-closed experience for both
blocking Construction profiles. It pins all four official DB3 and metadata
identities, resumes regular partial files, verifies exact SHA-256, fixes the
evaluation assets at one clean commit, and exposes write- and network-free
text/JSON capacity plans with the exact shortage and an external
--destretry. A large attached-but-unmounted hotplug filesystem is now shown as an explicit mount-first candidate, with its free capacity intentionally left unverified until a second dry-run at the actual mount path. The current host remains short of the smallest bag plus evaluation assets, so this improves recovery without claiming profile data.
First-map and map lifecycle
- Docker and source demos share the fixed public MID-360 input, profile, verifier, manifest, diagnosis, and first-map receipt contract.
- After a demo,
lidarslam-map report <session-or-demo-output> --jsonrevalidates the receipt-bound manifest, diagnosis, and verification log and prints the local-only handoff; fixed demo outputs do not needsession.json. - The own-bag path performs sensor/profile review before writes and supports PointCloud2+Imu, PointCloud2+NavSatFix, and VelodyneScan+Applanix inputs.
- Users adapting another PointCloud2 LiDAR are routed through the same
doctorthenstartpath instead of editing tracked launch/YAML files. Topics, frames, fields, timestamps, maintained-profile selection, and calibration review remain explicit; detection alone is not a hardware or accuracy claim. - Bag doctor now separates an Odometry message from its TF contract. It
boundedly checks parent/child consistency, multi-hop connectivity, and the
presence of a dynamic
/tfedge. Preflight v6 also compares PointCloud2 and required dynamic-TF header stamps in bag replay order, reports startup and future-extrapolation gaps with a concrete correction, and still leaves live scheduling, clock, buffer, and interpolation checks totf2_monitor. - The Docker own-bag launcher supports a schema-backed
--dry-run --jsonplan for CI and wrappers; it performs no Docker, network, or filesystem writes and keeps local paths out of issue-reporting guidance. - Completed sessions can be reopened, compared, inspected in the offline 3D viewer, edited through source-preserving plans, merged across visits, and converted into privacy-first support or independent first-map reports.
lidarslam-map inspect --symptomturns five recurring visual map problems into ordered review checks and copy-ready product commands. It records a user report without changing parameters, rerunning mapping, or claiming an automatic root cause or accuracy result.lidarslam-map supportpreserves that report through the maintainer handoff as a fixed symptom code plus the user-reported evidence boundary. It excludes symptom titles, checks, commands, and free text from the ZIP.
Distribution preparation
- Source onboarding detects Humble/Jazzy, verifies exactly six maintained packages, installs repository-only dependencies, builds that fixed list, and prints an absolute launcher that works from a fresh terminal.
- Runtime-image generation removes source and builder content while preserving installed CLI behavior and exact image-size evidence.
- The release pipeline builds a standalone
lidarslam-map-dockerlauncher whose version, source revision, image identity, read-only bag mount, no-network execution, and output boundary are release-audited. - Release bundle rehearsal is bound to the exact candidate head, fetches immutable tags, and refuses release-version reuse before publication.
- The parent v1 live audit preserves every schema-valid package-manager child
state. A missing v0.9.1 source ref now reports actionable
NOT_READYwithSOURCE_REF_MISSINGinstead of aborting the complete audit as malformed; this improves gate operation without creating or authorizing that ref. - The curated bundle carries the standalone NTU and RTK-SLAM acquisition
helpers plus their shared attached-storage support. Regressions execute the
extracted NTU/storage help surfaces and the RTK
--listentrypoint. The measured suites remain bound to an exact source checkout and compatible built ROS workspace instead of pretending that the audit bundle is a complete runtime workspace.
These capabilities do not by themselves authorize a tag, package, image, fixture, launcher, or release publication.
Evidence and project operations
- Humble/Jazzy Docker/source onboarding uses a schema-backed four-row matrix; missing rows and incomplete measurements never count as comparable.
- A neutral six-task
lidarslam_ros2/GLIM usability scorecard records exact public versions, commands, supported matched environments, task-level measurements, and operator order without inferring an overall winner. - The contributor path provides one maintained Python test entrypoint, a fail-closed five-task starter queue, a GET-only live next-action card, and explicit publication authority.
- Growth, issue-triage, fixture, package, and release decisions remain machine-readable and privacy-bounded.
- Draft review is split into four capability lanes over the seven exact technical slices. The two-reviewer target is advisory only; no personal identity is stored and no reviewer request, review submission, mark-ready, or merge authority is inferred.
- Lane outcomes can be retained in an append-only exact-tip local ledger. PASS/BLOCKED events preserve earlier findings without storing a reviewer identity, running checks, or converting local evidence into GitHub review authority.
Release decision: HOLD
The complete maintained Python run at NTU attached-storage validation carrier
b01b251cb8e4b7430d730476977e4c012e091afe reports:
graph_based_slam: 1,477 passed / 13 skipped / 11 existing ImageIO warnings;lidarslam: 1,040 passed;- combined maintained Python gate: 2,517 passed / 13 skipped;
- strict MkDocs and changed-file Jazzy
ament_flake8: PASS; and - last observed public Draft head
39b5e38before this local follow-up: 10 successful / 4 intentional skips / 0 failures / 0 pending.
The clean NTU attached-storage validation carrier
b01b251cb8e4b7430d730476977e4c012e091afe also passes the fail-closed
candidate-bundle rehearsal. Its two independently built and reverified
archives are byte-identical: 267 manifest files, 11,959,011 archive bytes, and
SHA-256
f963391bf76f67e27828bf0c8eadada484ac8b8b9481e5f904fcec72e1c64bad.
The archive executes the documented NTU/storage help surfaces and RTK identity
list. This closes the previously missing NTU bundle entrypoint without granting
tag or publication authority. A later candidate must rerun the gate rather
than reuse this checksum.
For traceability, the earlier bounded visual-symptom carrier
9f8a2058a3c702f69d159079568ced8433ee3377 is retained here.
Historical result: 2,474 passed / 13 skipped. Its candidate bundle SHA-256 was
51c025064de769d1f0c362f51718c52a0beed8492f0881c0e02403b33498e997.
Those values remain historical regression evidence only; they are not the
current Python total or a reusable exact-head bundle identity.
At clean public Draft carrier
4163b8c6f0ebb63504a0de398d9654333bf3919e, the Leo Drive Applanix
cross-validation profile records 0.139152 m aligned APE RMSE and 571 matched
poses against its 1.500 m pass threshold and 0.500 m target, so
leo_drive_applanix_velodyne_cross is TARGET_MET. Its schema-valid
metrics.json has SHA-256
76d6465729a7c48a46919d2b1029996393be6d0e615a893fee28440637963627.
FILE-compressed rosbag2 playback also leaves the source directory unchanged
and removes its private 2,506,907,648-byte decompression view on exit. See the
exact carrier evidence.
The exact-carrier hard profile command with that benchmark root,
bash scripts/run_release_readiness_checks.sh --skip-default-ci
--benchmark-root <exact-root> --fail-on-profiles, correctly exits 2. It
reports four blocking NO_DATA profiles and their tracked remediation:
newer_college_math_hard;ntu_viral_tnp_01;mid360_gt_rtkslam_construction_seq2;mid360_gt_rtkslam_construction_seq1.
The other current product gates also remain intentionally incomplete:
- v1 readiness: 8/10;
- independent accepted first maps: 0/3;
- onboarding matrix: 4/4 present, 0/4 comparable;
- GLIM usability scorecard:
NOT_READY, 0/6 comparable; and - package-manager distribution is blocked on reviewed NDT ownership, rosdistro completion, dependency sync, and Humble/Jazzy main-channel E2E.
Do not copy the Python total, CI result, or benchmark evidence from this
carrier into a later candidate. The final exact commit must rerun
bash scripts/run_product_python_tests.sh, strict MkDocs, the full fixed demo,
bundle reproducibility, and every blocking release profile. Only exact-final-
head PASS evidence may replace this HOLD section and candidate banner.
The G0 product-Draft audit also treats reviewer-facing PR text as exact-head evidence. It hashes the observed description, renders a canonical replacement from the clean candidate and current review/evidence counts, and blocks review when those digests differ. Branch update and description update remain two separate decisions; the local handoff executes neither, keeps the PR Draft, and does not authorize review submission, mark-ready, merge, or release. The canonical body includes clickable P0–P2 compare ranges and a seven-row S1–S7 focus/path/check/gate map. Those links and labels are accepted only when the validated review overview proves contiguous exact lineage, complete commit and path composition, safe Markdown text, and zero command/GitHub authority.
Upgrade boundary
- Product CLI and output-schema compatibility remain on the documented v1 contract.
- Existing map outputs are never overwritten; use a new output directory.
v0.9.0remains immutable. Do not move or recreate its tag.- Package-manager upgrade instructions remain maintainer-only until exact testing and main repository evidence exists for both supported distros.