Skip to content

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-humble or v0.9.0-jazzy image from Getting Started.
  • To evaluate this exact source candidate, use the six-package source quickstart, then run lidarslam-map doctor and lidarslam-map demo.
  • For an installed own-bag path, run lidarslam-map doctor /path/to/rosbag2, then lidarslam-map start /path/to/rosbag2.
  • Run lidarslam-map with 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 --resume path.
  • 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-device preflight/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 --dest retry. 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> --json revalidates the receipt-bound manifest, diagnosis, and verification log and prints the local-only handoff; fixed demo outputs do not need session.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 doctor then start path 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 /tf edge. 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 to tf2_monitor.
  • The Docker own-bag launcher supports a schema-backed --dry-run --json plan 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 --symptom turns 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 support preserves 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-docker launcher 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_READY with SOURCE_REF_MISSING instead 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 --list entrypoint. 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 39b5e38 before 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.0 remains 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.