No version for distro humble showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/rsasaki0109/lidarslam_ros2.git
VCS Type git
VCS Version develop
Last Updated 2026-10-23
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

README

lidar_slam_ros2

CI License: BSD-2-Clause ROS 2: Humble | Jazzy GitHub stars

Live map building on a handheld outdoor walk, coloured by when each part was mapped Camera-coloured SLAM point-cloud map of a park Handheld Ouster OS1-64 going down one stairwell and up another UGV with an Ouster OS1-64 mapping a metro tunnel

Outdoor walk, APE 0.55 m (Koide, CC BY 4.0) · camera-coloured park (RTK-SLAM, CC BY 4.0) · stairs, ATE 0.24 m on development data · held-out metro tunnel, 0.38 m like BIEVR-LIO and FAST-LIO2 (GEODE). How these were made.

Turn a rosbag into a map you can actually drive on. ROS 2 LiDAR SLAM that writes an Autoware-compatible map bundle: pointcloud_map/, map_projector_info.yaml and lanelet2. RKO-LIO (MIT) + graph_based_slam (BSD-2), no GPL on the default workflow. 日本語クイックスタート · release notes v0.10.0 · next v0.10.1

Quickstart

Choose your shortest path

Goal Start here Safety and cost boundary
See a verified map, no build Default if unsure: Docker demo Stable v0.10.0-humble; needs Docker; host writes stay in ./lidarslam_output.
Map my own rosbag Own-bag route: lidarslam-map doctor /path/to/rosbag2 Read-only diagnosis first; then lidarslam-map start /path/to/rosbag2 writes a new output.
Build from source or contribute Source quickstart: bash scripts/source_quickstart.sh --dry-run Release v0.10.0; needs ROS 2, 8 GiB, and roughly 30 minutes.

Try it with Docker (one command, no build)

docker run --rm -e LIDARSLAM_HOST_UID="$(id -u)" -e LIDARSLAM_HOST_GID="$(id -g)" \
  -v "$PWD/lidarslam_output:/lidarslam_ws/output" \
  ghcr.io/rsasaki0109/lidar_slam_ros2:v0.10.0-humble

The 517 MB MID-360 demo writes lidarslam_output/mid360_demo/ as your user. Other platforms: Getting Started.

Map your own bag (one command after install)

lidarslam-map start /path/to/rosbag2

Run lidarslam-map with no arguments for a guided start, or lidarslam-map doctor first: it uses no network and writes no files. See supported inputs.

Build + verified demo from source (one helper)

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone --recursive https://github.com/rsasaki0109/lidar_slam_ros2.git
cd lidar_slam_ros2
bash scripts/source_quickstart.sh

The helper detects Humble/Jazzy, installs the dependencies, builds the six maintained packages and runs the verified demo (--dry-run, --build-only). It prints a lidarslam-map path that auto-activates this build. Needs ROS 2, 8 GiB and about 30 minutes. Before handoff: python3 scripts/check_first_map_verification_package.py --json, continue only on READY.

Use your own bag

For an Ouster, Velodyne, RoboSense or other PointCloud2 bag, do not edit this package’s launch files or YAML first: run lidarslam-map doctor, then lidarslam-map start. It checks topics, frames, fields, timestamps, a maintained profile and calibration, and stops unsafe inputs with a stable reason code and one next action. Maintained inputs: PointCloud2+Imu, PointCloud2+NavSatFix, VelodyneScan+Applanix GSOF49.

  • Docker, no ROS: bash scripts/docker_map_bag.sh /absolute/path/to/rosbag2 mounts the bag read-only (Docker Own-Bag Map).
  • After a run: lidarslam-map view, lidarslam-map sessions, lidarslam-map compare day1 day2, lidarslam-map support day1, lidarslam-map merge day1 day2 --output-dir site_project.
  • Report on a fixed output: lidarslam-map report /path/to/output/mid360_demo --json (first-map validation guide).
  • Automation: lidarslam-map run (Operator workflows). Localization: Localize On The Map.

Why lidarslam_ros2

  • Autoware-compatible output: verify_autoware_map.py prints map_verify: PASS on every saved bundle.
  • lanelet2 auto-generation from the SLAM trajectory, validated for Autoware routing.
  • Surveyed ground truth: per-dataset APE thresholds gate every release in CI (accuracy).
  • Loop closure, GPL-free: Scan Context, BEV / SOLiD / Triangle descriptors and 3D-BBS verification (opt-in).
  • Tunnels and fog: radar fusion maps a ~500 m tunnel; without radar, an Ouster preset holds all ten ENWIDE sequences; on GEODE’s 13 held-out tunnel bags, no failure but not the most accurate (comparison, guide).
  • Deterministic offline mapping: byte-identical trajectories, loop edges and submaps.
  • Refined maps: plane bundle adjustment under holdout-validated thresholds (evidence).
flowchart LR
    bag(["rosbag2"]) --> rko["RKO-LIO<br/>LiDAR-inertial odometry"]
    rko --> gbs["graph_based_slam<br/>loop closure + graph optimization"]
    gbs --> bundle["Autoware map bundle<br/>pointcloud_map · lanelet2 · projector info"]

Camera-coloured point-cloud maps

The pipeline refines each camera pose against the LiDAR map, then projects the pixels onto it. On the park walk at the top (RTK-SLAM Stadtgarten 2; MP4 · GIF) the refinement cuts the held-out epipolar error from 4.02 to 0.67 px (tool, release reference).

python3 tools/colored_map/colored_map_pipeline.py \
  <bag> output/<run>/traj_corrected.tum output/<run>/colored_map \
  --raw-traj output/<run>/traj_raw.tum \
  --extrinsic configs/gaussian_splatting/<lidar_camera_extrinsic>.yaml

Moving rigs: --refine-spatiotemporal-calibration (design). Regression gates: Benchmarking.

Open-source benchmark results

On the same HILTI 2022 exp04 LiDAR/IMU input and CPU-only host, the competitive

File truncated at 100 lines see the full file

CONTRIBUTING

Contributing

Thanks for contributing to lidarslam_ros2.

This repository is trying to be a practical default for ROS 2 LiDAR SLAM and Autoware pointcloud-map generation. Contributions are most useful when they are easy to reproduce, easy to compare, and clearly scoped.

Participation is governed by the Code of Conduct. The Governance, Support, and Security policies explain decisions, help routes, and private vulnerability reporting.

What To Send

Useful contributions include:

  • bug fixes in the default permissive workflow
  • Autoware pointcloud-map integration fixes
  • benchmark results with reproducible commands and artifacts
  • parameter improvements backed by logs and trajectory metrics
  • documentation improvements that reduce setup time

Default Workflow Policy

The default and recommended workflow in this repository is permissive-license only. Contributions that change the default path should preserve that property.

Current default path:

  • RKO-LIO + graph_based_slam
  • local Scan Context implementation
  • Autoware-compatible pointcloud map output

Research frontends with other licenses can still be discussed, but they should not silently become the default path.

Repository Layout

Keep the repository root limited to project metadata and primary entry-point documents. Place commands under scripts/, incident-specific utilities under scripts/recovery/, offline libraries under tools/, and small research outputs under docs/research/artifacts/. Do not commit colcon manifests or other generated build products. See the repository layout guide for the complete map.

Autoware Naming And Trademark Guidance

Keep Autoware references descriptive.

Preferred wording:

  • Autoware-compatible pointcloud map
  • pointcloud-map workflow for Autoware
  • works with Autoware
  • built on Autoware

Avoid branding this repository or a derived product as if it were an official Autoware product or a Foundation-approved distribution.

Avoid wording such as:

  • Autoware-ready as a product tag line
  • official Autoware
  • Autoware <product-name>
  • certified by Autoware
  • endorsed by the Autoware Foundation

If in doubt, prefer compatibility language over product-name language.

Before Opening An Issue

Please collect the smallest reproducible case you can. Use the structured bug, feature, sensor-support, benchmark, or Autoware issue form that best matches the request. Usage questions must include the diagnostic bundle listed in SUPPORT.md.

If you completed a first map from the public docs without live maintainer guidance, use the independent first-map validation form. Passing reports may count toward the v1.0 three-user gate; failed attempts are recorded as onboarding findings and are just as valuable.

For bug reports, keep ordinary doctor <bag> --json output local because it contains the bag path and local commands. Instead run and review:

lidarslam-map doctor <rosbag2_dir> --public-json

Paste that complete public-doctor-evidence-v1 path-free JSON, a redacted command shape, expected/observed behavior, and either one reviewed support ZIP from an existing session or an explicit no-session/no-ZIP statement with the first finding code. Never attach a bag, map, trajectory, raw log/data, parameter file, terminal history, or private-site image.

For Autoware-related reports, include:

  • projector type and whether an origin exists, with every coordinate and MGRS/grid identifier and precise origin value replaced by REDACTED

File truncated at 100 lines see the full file

# Contributing Thanks for contributing to `lidarslam_ros2`. This repository is trying to be a practical default for ROS 2 LiDAR SLAM and Autoware pointcloud-map generation. Contributions are most useful when they are easy to reproduce, easy to compare, and clearly scoped. Participation is governed by the [Code of Conduct](CODE_OF_CONDUCT.md). The [Governance](GOVERNANCE.md), [Support](SUPPORT.md), and [Security](SECURITY.md) policies explain decisions, help routes, and private vulnerability reporting. ## What To Send Useful contributions include: - bug fixes in the default permissive workflow - Autoware pointcloud-map integration fixes - benchmark results with reproducible commands and artifacts - parameter improvements backed by logs and trajectory metrics - documentation improvements that reduce setup time ## Default Workflow Policy The default and recommended workflow in this repository is permissive-license only. Contributions that change the default path should preserve that property. Current default path: - `RKO-LIO + graph_based_slam` - local Scan Context implementation - Autoware-compatible pointcloud map output Research frontends with other licenses can still be discussed, but they should not silently become the default path. ## Repository Layout Keep the repository root limited to project metadata and primary entry-point documents. Place commands under `scripts/`, incident-specific utilities under `scripts/recovery/`, offline libraries under `tools/`, and small research outputs under `docs/research/artifacts/`. Do not commit colcon manifests or other generated build products. See the [repository layout guide](docs/repository-layout.md) for the complete map. ## Autoware Naming And Trademark Guidance Keep Autoware references descriptive. Preferred wording: - `Autoware-compatible pointcloud map` - `pointcloud-map workflow for Autoware` - `works with Autoware` - `built on Autoware` Avoid branding this repository or a derived product as if it were an official Autoware product or a Foundation-approved distribution. Avoid wording such as: - `Autoware-ready` as a product tag line - `official Autoware` - `Autoware ` - `certified by Autoware` - `endorsed by the Autoware Foundation` If in doubt, prefer compatibility language over product-name language. ## Before Opening An Issue Please collect the smallest reproducible case you can. Use the structured bug, feature, sensor-support, benchmark, or Autoware issue form that best matches the request. Usage questions must include the diagnostic bundle listed in [SUPPORT.md](SUPPORT.md). If you completed a first map from the public docs without live maintainer guidance, use the [independent first-map validation](docs/external-first-map-validation.md) form. Passing reports may count toward the v1.0 three-user gate; failed attempts are recorded as onboarding findings and are just as valuable. For bug reports, keep ordinary `doctor --json` output local because it contains the bag path and local commands. Instead run and review: ```bash lidarslam-map doctor --public-json ``` Paste that complete `public-doctor-evidence-v1` path-free JSON, a redacted command shape, expected/observed behavior, and either one reviewed support ZIP from an existing session or an explicit no-session/no-ZIP statement with the first finding code. Never attach a bag, map, trajectory, raw log/data, parameter file, terminal history, or private-site image. For Autoware-related reports, include: - projector type and whether an origin exists, with every coordinate and MGRS/grid identifier and precise origin value replaced by `REDACTED` File truncated at 100 lines [see the full file](https://github.com/rsasaki0109/lidarslam_ros2/tree/develop/CONTRIBUTING.md)
No version for distro jazzy showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/rsasaki0109/lidarslam_ros2.git
VCS Type git
VCS Version develop
Last Updated 2026-10-23
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

README

lidar_slam_ros2

CI License: BSD-2-Clause ROS 2: Humble | Jazzy GitHub stars

Live map building on a handheld outdoor walk, coloured by when each part was mapped Camera-coloured SLAM point-cloud map of a park Handheld Ouster OS1-64 going down one stairwell and up another UGV with an Ouster OS1-64 mapping a metro tunnel

Outdoor walk, APE 0.55 m (Koide, CC BY 4.0) · camera-coloured park (RTK-SLAM, CC BY 4.0) · stairs, ATE 0.24 m on development data · held-out metro tunnel, 0.38 m like BIEVR-LIO and FAST-LIO2 (GEODE). How these were made.

Turn a rosbag into a map you can actually drive on. ROS 2 LiDAR SLAM that writes an Autoware-compatible map bundle: pointcloud_map/, map_projector_info.yaml and lanelet2. RKO-LIO (MIT) + graph_based_slam (BSD-2), no GPL on the default workflow. 日本語クイックスタート · release notes v0.10.0 · next v0.10.1

Quickstart

Choose your shortest path

Goal Start here Safety and cost boundary
See a verified map, no build Default if unsure: Docker demo Stable v0.10.0-humble; needs Docker; host writes stay in ./lidarslam_output.
Map my own rosbag Own-bag route: lidarslam-map doctor /path/to/rosbag2 Read-only diagnosis first; then lidarslam-map start /path/to/rosbag2 writes a new output.
Build from source or contribute Source quickstart: bash scripts/source_quickstart.sh --dry-run Release v0.10.0; needs ROS 2, 8 GiB, and roughly 30 minutes.

Try it with Docker (one command, no build)

docker run --rm -e LIDARSLAM_HOST_UID="$(id -u)" -e LIDARSLAM_HOST_GID="$(id -g)" \
  -v "$PWD/lidarslam_output:/lidarslam_ws/output" \
  ghcr.io/rsasaki0109/lidar_slam_ros2:v0.10.0-humble

The 517 MB MID-360 demo writes lidarslam_output/mid360_demo/ as your user. Other platforms: Getting Started.

Map your own bag (one command after install)

lidarslam-map start /path/to/rosbag2

Run lidarslam-map with no arguments for a guided start, or lidarslam-map doctor first: it uses no network and writes no files. See supported inputs.

Build + verified demo from source (one helper)

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone --recursive https://github.com/rsasaki0109/lidar_slam_ros2.git
cd lidar_slam_ros2
bash scripts/source_quickstart.sh

The helper detects Humble/Jazzy, installs the dependencies, builds the six maintained packages and runs the verified demo (--dry-run, --build-only). It prints a lidarslam-map path that auto-activates this build. Needs ROS 2, 8 GiB and about 30 minutes. Before handoff: python3 scripts/check_first_map_verification_package.py --json, continue only on READY.

Use your own bag

For an Ouster, Velodyne, RoboSense or other PointCloud2 bag, do not edit this package’s launch files or YAML first: run lidarslam-map doctor, then lidarslam-map start. It checks topics, frames, fields, timestamps, a maintained profile and calibration, and stops unsafe inputs with a stable reason code and one next action. Maintained inputs: PointCloud2+Imu, PointCloud2+NavSatFix, VelodyneScan+Applanix GSOF49.

  • Docker, no ROS: bash scripts/docker_map_bag.sh /absolute/path/to/rosbag2 mounts the bag read-only (Docker Own-Bag Map).
  • After a run: lidarslam-map view, lidarslam-map sessions, lidarslam-map compare day1 day2, lidarslam-map support day1, lidarslam-map merge day1 day2 --output-dir site_project.
  • Report on a fixed output: lidarslam-map report /path/to/output/mid360_demo --json (first-map validation guide).
  • Automation: lidarslam-map run (Operator workflows). Localization: Localize On The Map.

Why lidarslam_ros2

  • Autoware-compatible output: verify_autoware_map.py prints map_verify: PASS on every saved bundle.
  • lanelet2 auto-generation from the SLAM trajectory, validated for Autoware routing.
  • Surveyed ground truth: per-dataset APE thresholds gate every release in CI (accuracy).
  • Loop closure, GPL-free: Scan Context, BEV / SOLiD / Triangle descriptors and 3D-BBS verification (opt-in).
  • Tunnels and fog: radar fusion maps a ~500 m tunnel; without radar, an Ouster preset holds all ten ENWIDE sequences; on GEODE’s 13 held-out tunnel bags, no failure but not the most accurate (comparison, guide).
  • Deterministic offline mapping: byte-identical trajectories, loop edges and submaps.
  • Refined maps: plane bundle adjustment under holdout-validated thresholds (evidence).
flowchart LR
    bag(["rosbag2"]) --> rko["RKO-LIO<br/>LiDAR-inertial odometry"]
    rko --> gbs["graph_based_slam<br/>loop closure + graph optimization"]
    gbs --> bundle["Autoware map bundle<br/>pointcloud_map · lanelet2 · projector info"]

Camera-coloured point-cloud maps

The pipeline refines each camera pose against the LiDAR map, then projects the pixels onto it. On the park walk at the top (RTK-SLAM Stadtgarten 2; MP4 · GIF) the refinement cuts the held-out epipolar error from 4.02 to 0.67 px (tool, release reference).

python3 tools/colored_map/colored_map_pipeline.py \
  <bag> output/<run>/traj_corrected.tum output/<run>/colored_map \
  --raw-traj output/<run>/traj_raw.tum \
  --extrinsic configs/gaussian_splatting/<lidar_camera_extrinsic>.yaml

Moving rigs: --refine-spatiotemporal-calibration (design). Regression gates: Benchmarking.

Open-source benchmark results

On the same HILTI 2022 exp04 LiDAR/IMU input and CPU-only host, the competitive

File truncated at 100 lines see the full file

CONTRIBUTING

Contributing

Thanks for contributing to lidarslam_ros2.

This repository is trying to be a practical default for ROS 2 LiDAR SLAM and Autoware pointcloud-map generation. Contributions are most useful when they are easy to reproduce, easy to compare, and clearly scoped.

Participation is governed by the Code of Conduct. The Governance, Support, and Security policies explain decisions, help routes, and private vulnerability reporting.

What To Send

Useful contributions include:

  • bug fixes in the default permissive workflow
  • Autoware pointcloud-map integration fixes
  • benchmark results with reproducible commands and artifacts
  • parameter improvements backed by logs and trajectory metrics
  • documentation improvements that reduce setup time

Default Workflow Policy

The default and recommended workflow in this repository is permissive-license only. Contributions that change the default path should preserve that property.

Current default path:

  • RKO-LIO + graph_based_slam
  • local Scan Context implementation
  • Autoware-compatible pointcloud map output

Research frontends with other licenses can still be discussed, but they should not silently become the default path.

Repository Layout

Keep the repository root limited to project metadata and primary entry-point documents. Place commands under scripts/, incident-specific utilities under scripts/recovery/, offline libraries under tools/, and small research outputs under docs/research/artifacts/. Do not commit colcon manifests or other generated build products. See the repository layout guide for the complete map.

Autoware Naming And Trademark Guidance

Keep Autoware references descriptive.

Preferred wording:

  • Autoware-compatible pointcloud map
  • pointcloud-map workflow for Autoware
  • works with Autoware
  • built on Autoware

Avoid branding this repository or a derived product as if it were an official Autoware product or a Foundation-approved distribution.

Avoid wording such as:

  • Autoware-ready as a product tag line
  • official Autoware
  • Autoware <product-name>
  • certified by Autoware
  • endorsed by the Autoware Foundation

If in doubt, prefer compatibility language over product-name language.

Before Opening An Issue

Please collect the smallest reproducible case you can. Use the structured bug, feature, sensor-support, benchmark, or Autoware issue form that best matches the request. Usage questions must include the diagnostic bundle listed in SUPPORT.md.

If you completed a first map from the public docs without live maintainer guidance, use the independent first-map validation form. Passing reports may count toward the v1.0 three-user gate; failed attempts are recorded as onboarding findings and are just as valuable.

For bug reports, keep ordinary doctor <bag> --json output local because it contains the bag path and local commands. Instead run and review:

lidarslam-map doctor <rosbag2_dir> --public-json

Paste that complete public-doctor-evidence-v1 path-free JSON, a redacted command shape, expected/observed behavior, and either one reviewed support ZIP from an existing session or an explicit no-session/no-ZIP statement with the first finding code. Never attach a bag, map, trajectory, raw log/data, parameter file, terminal history, or private-site image.

For Autoware-related reports, include:

  • projector type and whether an origin exists, with every coordinate and MGRS/grid identifier and precise origin value replaced by REDACTED

File truncated at 100 lines see the full file

# Contributing Thanks for contributing to `lidarslam_ros2`. This repository is trying to be a practical default for ROS 2 LiDAR SLAM and Autoware pointcloud-map generation. Contributions are most useful when they are easy to reproduce, easy to compare, and clearly scoped. Participation is governed by the [Code of Conduct](CODE_OF_CONDUCT.md). The [Governance](GOVERNANCE.md), [Support](SUPPORT.md), and [Security](SECURITY.md) policies explain decisions, help routes, and private vulnerability reporting. ## What To Send Useful contributions include: - bug fixes in the default permissive workflow - Autoware pointcloud-map integration fixes - benchmark results with reproducible commands and artifacts - parameter improvements backed by logs and trajectory metrics - documentation improvements that reduce setup time ## Default Workflow Policy The default and recommended workflow in this repository is permissive-license only. Contributions that change the default path should preserve that property. Current default path: - `RKO-LIO + graph_based_slam` - local Scan Context implementation - Autoware-compatible pointcloud map output Research frontends with other licenses can still be discussed, but they should not silently become the default path. ## Repository Layout Keep the repository root limited to project metadata and primary entry-point documents. Place commands under `scripts/`, incident-specific utilities under `scripts/recovery/`, offline libraries under `tools/`, and small research outputs under `docs/research/artifacts/`. Do not commit colcon manifests or other generated build products. See the [repository layout guide](docs/repository-layout.md) for the complete map. ## Autoware Naming And Trademark Guidance Keep Autoware references descriptive. Preferred wording: - `Autoware-compatible pointcloud map` - `pointcloud-map workflow for Autoware` - `works with Autoware` - `built on Autoware` Avoid branding this repository or a derived product as if it were an official Autoware product or a Foundation-approved distribution. Avoid wording such as: - `Autoware-ready` as a product tag line - `official Autoware` - `Autoware ` - `certified by Autoware` - `endorsed by the Autoware Foundation` If in doubt, prefer compatibility language over product-name language. ## Before Opening An Issue Please collect the smallest reproducible case you can. Use the structured bug, feature, sensor-support, benchmark, or Autoware issue form that best matches the request. Usage questions must include the diagnostic bundle listed in [SUPPORT.md](SUPPORT.md). If you completed a first map from the public docs without live maintainer guidance, use the [independent first-map validation](docs/external-first-map-validation.md) form. Passing reports may count toward the v1.0 three-user gate; failed attempts are recorded as onboarding findings and are just as valuable. For bug reports, keep ordinary `doctor --json` output local because it contains the bag path and local commands. Instead run and review: ```bash lidarslam-map doctor --public-json ``` Paste that complete `public-doctor-evidence-v1` path-free JSON, a redacted command shape, expected/observed behavior, and either one reviewed support ZIP from an existing session or an explicit no-session/no-ZIP statement with the first finding code. Never attach a bag, map, trajectory, raw log/data, parameter file, terminal history, or private-site image. For Autoware-related reports, include: - projector type and whether an origin exists, with every coordinate and MGRS/grid identifier and precise origin value replaced by `REDACTED` File truncated at 100 lines [see the full file](https://github.com/rsasaki0109/lidarslam_ros2/tree/develop/CONTRIBUTING.md)
No version for distro kilted showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/rsasaki0109/lidarslam_ros2.git
VCS Type git
VCS Version develop
Last Updated 2026-10-23
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

README

lidar_slam_ros2

CI License: BSD-2-Clause ROS 2: Humble | Jazzy GitHub stars

Live map building on a handheld outdoor walk, coloured by when each part was mapped Camera-coloured SLAM point-cloud map of a park Handheld Ouster OS1-64 going down one stairwell and up another UGV with an Ouster OS1-64 mapping a metro tunnel

Outdoor walk, APE 0.55 m (Koide, CC BY 4.0) · camera-coloured park (RTK-SLAM, CC BY 4.0) · stairs, ATE 0.24 m on development data · held-out metro tunnel, 0.38 m like BIEVR-LIO and FAST-LIO2 (GEODE). How these were made.

Turn a rosbag into a map you can actually drive on. ROS 2 LiDAR SLAM that writes an Autoware-compatible map bundle: pointcloud_map/, map_projector_info.yaml and lanelet2. RKO-LIO (MIT) + graph_based_slam (BSD-2), no GPL on the default workflow. 日本語クイックスタート · release notes v0.10.0 · next v0.10.1

Quickstart

Choose your shortest path

Goal Start here Safety and cost boundary
See a verified map, no build Default if unsure: Docker demo Stable v0.10.0-humble; needs Docker; host writes stay in ./lidarslam_output.
Map my own rosbag Own-bag route: lidarslam-map doctor /path/to/rosbag2 Read-only diagnosis first; then lidarslam-map start /path/to/rosbag2 writes a new output.
Build from source or contribute Source quickstart: bash scripts/source_quickstart.sh --dry-run Release v0.10.0; needs ROS 2, 8 GiB, and roughly 30 minutes.

Try it with Docker (one command, no build)

docker run --rm -e LIDARSLAM_HOST_UID="$(id -u)" -e LIDARSLAM_HOST_GID="$(id -g)" \
  -v "$PWD/lidarslam_output:/lidarslam_ws/output" \
  ghcr.io/rsasaki0109/lidar_slam_ros2:v0.10.0-humble

The 517 MB MID-360 demo writes lidarslam_output/mid360_demo/ as your user. Other platforms: Getting Started.

Map your own bag (one command after install)

lidarslam-map start /path/to/rosbag2

Run lidarslam-map with no arguments for a guided start, or lidarslam-map doctor first: it uses no network and writes no files. See supported inputs.

Build + verified demo from source (one helper)

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone --recursive https://github.com/rsasaki0109/lidar_slam_ros2.git
cd lidar_slam_ros2
bash scripts/source_quickstart.sh

The helper detects Humble/Jazzy, installs the dependencies, builds the six maintained packages and runs the verified demo (--dry-run, --build-only). It prints a lidarslam-map path that auto-activates this build. Needs ROS 2, 8 GiB and about 30 minutes. Before handoff: python3 scripts/check_first_map_verification_package.py --json, continue only on READY.

Use your own bag

For an Ouster, Velodyne, RoboSense or other PointCloud2 bag, do not edit this package’s launch files or YAML first: run lidarslam-map doctor, then lidarslam-map start. It checks topics, frames, fields, timestamps, a maintained profile and calibration, and stops unsafe inputs with a stable reason code and one next action. Maintained inputs: PointCloud2+Imu, PointCloud2+NavSatFix, VelodyneScan+Applanix GSOF49.

  • Docker, no ROS: bash scripts/docker_map_bag.sh /absolute/path/to/rosbag2 mounts the bag read-only (Docker Own-Bag Map).
  • After a run: lidarslam-map view, lidarslam-map sessions, lidarslam-map compare day1 day2, lidarslam-map support day1, lidarslam-map merge day1 day2 --output-dir site_project.
  • Report on a fixed output: lidarslam-map report /path/to/output/mid360_demo --json (first-map validation guide).
  • Automation: lidarslam-map run (Operator workflows). Localization: Localize On The Map.

Why lidarslam_ros2

  • Autoware-compatible output: verify_autoware_map.py prints map_verify: PASS on every saved bundle.
  • lanelet2 auto-generation from the SLAM trajectory, validated for Autoware routing.
  • Surveyed ground truth: per-dataset APE thresholds gate every release in CI (accuracy).
  • Loop closure, GPL-free: Scan Context, BEV / SOLiD / Triangle descriptors and 3D-BBS verification (opt-in).
  • Tunnels and fog: radar fusion maps a ~500 m tunnel; without radar, an Ouster preset holds all ten ENWIDE sequences; on GEODE’s 13 held-out tunnel bags, no failure but not the most accurate (comparison, guide).
  • Deterministic offline mapping: byte-identical trajectories, loop edges and submaps.
  • Refined maps: plane bundle adjustment under holdout-validated thresholds (evidence).
flowchart LR
    bag(["rosbag2"]) --> rko["RKO-LIO<br/>LiDAR-inertial odometry"]
    rko --> gbs["graph_based_slam<br/>loop closure + graph optimization"]
    gbs --> bundle["Autoware map bundle<br/>pointcloud_map · lanelet2 · projector info"]

Camera-coloured point-cloud maps

The pipeline refines each camera pose against the LiDAR map, then projects the pixels onto it. On the park walk at the top (RTK-SLAM Stadtgarten 2; MP4 · GIF) the refinement cuts the held-out epipolar error from 4.02 to 0.67 px (tool, release reference).

python3 tools/colored_map/colored_map_pipeline.py \
  <bag> output/<run>/traj_corrected.tum output/<run>/colored_map \
  --raw-traj output/<run>/traj_raw.tum \
  --extrinsic configs/gaussian_splatting/<lidar_camera_extrinsic>.yaml

Moving rigs: --refine-spatiotemporal-calibration (design). Regression gates: Benchmarking.

Open-source benchmark results

On the same HILTI 2022 exp04 LiDAR/IMU input and CPU-only host, the competitive

File truncated at 100 lines see the full file

CONTRIBUTING

Contributing

Thanks for contributing to lidarslam_ros2.

This repository is trying to be a practical default for ROS 2 LiDAR SLAM and Autoware pointcloud-map generation. Contributions are most useful when they are easy to reproduce, easy to compare, and clearly scoped.

Participation is governed by the Code of Conduct. The Governance, Support, and Security policies explain decisions, help routes, and private vulnerability reporting.

What To Send

Useful contributions include:

  • bug fixes in the default permissive workflow
  • Autoware pointcloud-map integration fixes
  • benchmark results with reproducible commands and artifacts
  • parameter improvements backed by logs and trajectory metrics
  • documentation improvements that reduce setup time

Default Workflow Policy

The default and recommended workflow in this repository is permissive-license only. Contributions that change the default path should preserve that property.

Current default path:

  • RKO-LIO + graph_based_slam
  • local Scan Context implementation
  • Autoware-compatible pointcloud map output

Research frontends with other licenses can still be discussed, but they should not silently become the default path.

Repository Layout

Keep the repository root limited to project metadata and primary entry-point documents. Place commands under scripts/, incident-specific utilities under scripts/recovery/, offline libraries under tools/, and small research outputs under docs/research/artifacts/. Do not commit colcon manifests or other generated build products. See the repository layout guide for the complete map.

Autoware Naming And Trademark Guidance

Keep Autoware references descriptive.

Preferred wording:

  • Autoware-compatible pointcloud map
  • pointcloud-map workflow for Autoware
  • works with Autoware
  • built on Autoware

Avoid branding this repository or a derived product as if it were an official Autoware product or a Foundation-approved distribution.

Avoid wording such as:

  • Autoware-ready as a product tag line
  • official Autoware
  • Autoware <product-name>
  • certified by Autoware
  • endorsed by the Autoware Foundation

If in doubt, prefer compatibility language over product-name language.

Before Opening An Issue

Please collect the smallest reproducible case you can. Use the structured bug, feature, sensor-support, benchmark, or Autoware issue form that best matches the request. Usage questions must include the diagnostic bundle listed in SUPPORT.md.

If you completed a first map from the public docs without live maintainer guidance, use the independent first-map validation form. Passing reports may count toward the v1.0 three-user gate; failed attempts are recorded as onboarding findings and are just as valuable.

For bug reports, keep ordinary doctor <bag> --json output local because it contains the bag path and local commands. Instead run and review:

lidarslam-map doctor <rosbag2_dir> --public-json

Paste that complete public-doctor-evidence-v1 path-free JSON, a redacted command shape, expected/observed behavior, and either one reviewed support ZIP from an existing session or an explicit no-session/no-ZIP statement with the first finding code. Never attach a bag, map, trajectory, raw log/data, parameter file, terminal history, or private-site image.

For Autoware-related reports, include:

  • projector type and whether an origin exists, with every coordinate and MGRS/grid identifier and precise origin value replaced by REDACTED

File truncated at 100 lines see the full file

# Contributing Thanks for contributing to `lidarslam_ros2`. This repository is trying to be a practical default for ROS 2 LiDAR SLAM and Autoware pointcloud-map generation. Contributions are most useful when they are easy to reproduce, easy to compare, and clearly scoped. Participation is governed by the [Code of Conduct](CODE_OF_CONDUCT.md). The [Governance](GOVERNANCE.md), [Support](SUPPORT.md), and [Security](SECURITY.md) policies explain decisions, help routes, and private vulnerability reporting. ## What To Send Useful contributions include: - bug fixes in the default permissive workflow - Autoware pointcloud-map integration fixes - benchmark results with reproducible commands and artifacts - parameter improvements backed by logs and trajectory metrics - documentation improvements that reduce setup time ## Default Workflow Policy The default and recommended workflow in this repository is permissive-license only. Contributions that change the default path should preserve that property. Current default path: - `RKO-LIO + graph_based_slam` - local Scan Context implementation - Autoware-compatible pointcloud map output Research frontends with other licenses can still be discussed, but they should not silently become the default path. ## Repository Layout Keep the repository root limited to project metadata and primary entry-point documents. Place commands under `scripts/`, incident-specific utilities under `scripts/recovery/`, offline libraries under `tools/`, and small research outputs under `docs/research/artifacts/`. Do not commit colcon manifests or other generated build products. See the [repository layout guide](docs/repository-layout.md) for the complete map. ## Autoware Naming And Trademark Guidance Keep Autoware references descriptive. Preferred wording: - `Autoware-compatible pointcloud map` - `pointcloud-map workflow for Autoware` - `works with Autoware` - `built on Autoware` Avoid branding this repository or a derived product as if it were an official Autoware product or a Foundation-approved distribution. Avoid wording such as: - `Autoware-ready` as a product tag line - `official Autoware` - `Autoware ` - `certified by Autoware` - `endorsed by the Autoware Foundation` If in doubt, prefer compatibility language over product-name language. ## Before Opening An Issue Please collect the smallest reproducible case you can. Use the structured bug, feature, sensor-support, benchmark, or Autoware issue form that best matches the request. Usage questions must include the diagnostic bundle listed in [SUPPORT.md](SUPPORT.md). If you completed a first map from the public docs without live maintainer guidance, use the [independent first-map validation](docs/external-first-map-validation.md) form. Passing reports may count toward the v1.0 three-user gate; failed attempts are recorded as onboarding findings and are just as valuable. For bug reports, keep ordinary `doctor --json` output local because it contains the bag path and local commands. Instead run and review: ```bash lidarslam-map doctor --public-json ``` Paste that complete `public-doctor-evidence-v1` path-free JSON, a redacted command shape, expected/observed behavior, and either one reviewed support ZIP from an existing session or an explicit no-session/no-ZIP statement with the first finding code. Never attach a bag, map, trajectory, raw log/data, parameter file, terminal history, or private-site image. For Autoware-related reports, include: - projector type and whether an origin exists, with every coordinate and MGRS/grid identifier and precise origin value replaced by `REDACTED` File truncated at 100 lines [see the full file](https://github.com/rsasaki0109/lidarslam_ros2/tree/develop/CONTRIBUTING.md)
No version for distro lyrical showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/rsasaki0109/lidarslam_ros2.git
VCS Type git
VCS Version develop
Last Updated 2026-10-23
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

README

lidar_slam_ros2

CI License: BSD-2-Clause ROS 2: Humble | Jazzy GitHub stars

Live map building on a handheld outdoor walk, coloured by when each part was mapped Camera-coloured SLAM point-cloud map of a park Handheld Ouster OS1-64 going down one stairwell and up another UGV with an Ouster OS1-64 mapping a metro tunnel

Outdoor walk, APE 0.55 m (Koide, CC BY 4.0) · camera-coloured park (RTK-SLAM, CC BY 4.0) · stairs, ATE 0.24 m on development data · held-out metro tunnel, 0.38 m like BIEVR-LIO and FAST-LIO2 (GEODE). How these were made.

Turn a rosbag into a map you can actually drive on. ROS 2 LiDAR SLAM that writes an Autoware-compatible map bundle: pointcloud_map/, map_projector_info.yaml and lanelet2. RKO-LIO (MIT) + graph_based_slam (BSD-2), no GPL on the default workflow. 日本語クイックスタート · release notes v0.10.0 · next v0.10.1

Quickstart

Choose your shortest path

Goal Start here Safety and cost boundary
See a verified map, no build Default if unsure: Docker demo Stable v0.10.0-humble; needs Docker; host writes stay in ./lidarslam_output.
Map my own rosbag Own-bag route: lidarslam-map doctor /path/to/rosbag2 Read-only diagnosis first; then lidarslam-map start /path/to/rosbag2 writes a new output.
Build from source or contribute Source quickstart: bash scripts/source_quickstart.sh --dry-run Release v0.10.0; needs ROS 2, 8 GiB, and roughly 30 minutes.

Try it with Docker (one command, no build)

docker run --rm -e LIDARSLAM_HOST_UID="$(id -u)" -e LIDARSLAM_HOST_GID="$(id -g)" \
  -v "$PWD/lidarslam_output:/lidarslam_ws/output" \
  ghcr.io/rsasaki0109/lidar_slam_ros2:v0.10.0-humble

The 517 MB MID-360 demo writes lidarslam_output/mid360_demo/ as your user. Other platforms: Getting Started.

Map your own bag (one command after install)

lidarslam-map start /path/to/rosbag2

Run lidarslam-map with no arguments for a guided start, or lidarslam-map doctor first: it uses no network and writes no files. See supported inputs.

Build + verified demo from source (one helper)

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone --recursive https://github.com/rsasaki0109/lidar_slam_ros2.git
cd lidar_slam_ros2
bash scripts/source_quickstart.sh

The helper detects Humble/Jazzy, installs the dependencies, builds the six maintained packages and runs the verified demo (--dry-run, --build-only). It prints a lidarslam-map path that auto-activates this build. Needs ROS 2, 8 GiB and about 30 minutes. Before handoff: python3 scripts/check_first_map_verification_package.py --json, continue only on READY.

Use your own bag

For an Ouster, Velodyne, RoboSense or other PointCloud2 bag, do not edit this package’s launch files or YAML first: run lidarslam-map doctor, then lidarslam-map start. It checks topics, frames, fields, timestamps, a maintained profile and calibration, and stops unsafe inputs with a stable reason code and one next action. Maintained inputs: PointCloud2+Imu, PointCloud2+NavSatFix, VelodyneScan+Applanix GSOF49.

  • Docker, no ROS: bash scripts/docker_map_bag.sh /absolute/path/to/rosbag2 mounts the bag read-only (Docker Own-Bag Map).
  • After a run: lidarslam-map view, lidarslam-map sessions, lidarslam-map compare day1 day2, lidarslam-map support day1, lidarslam-map merge day1 day2 --output-dir site_project.
  • Report on a fixed output: lidarslam-map report /path/to/output/mid360_demo --json (first-map validation guide).
  • Automation: lidarslam-map run (Operator workflows). Localization: Localize On The Map.

Why lidarslam_ros2

  • Autoware-compatible output: verify_autoware_map.py prints map_verify: PASS on every saved bundle.
  • lanelet2 auto-generation from the SLAM trajectory, validated for Autoware routing.
  • Surveyed ground truth: per-dataset APE thresholds gate every release in CI (accuracy).
  • Loop closure, GPL-free: Scan Context, BEV / SOLiD / Triangle descriptors and 3D-BBS verification (opt-in).
  • Tunnels and fog: radar fusion maps a ~500 m tunnel; without radar, an Ouster preset holds all ten ENWIDE sequences; on GEODE’s 13 held-out tunnel bags, no failure but not the most accurate (comparison, guide).
  • Deterministic offline mapping: byte-identical trajectories, loop edges and submaps.
  • Refined maps: plane bundle adjustment under holdout-validated thresholds (evidence).
flowchart LR
    bag(["rosbag2"]) --> rko["RKO-LIO<br/>LiDAR-inertial odometry"]
    rko --> gbs["graph_based_slam<br/>loop closure + graph optimization"]
    gbs --> bundle["Autoware map bundle<br/>pointcloud_map · lanelet2 · projector info"]

Camera-coloured point-cloud maps

The pipeline refines each camera pose against the LiDAR map, then projects the pixels onto it. On the park walk at the top (RTK-SLAM Stadtgarten 2; MP4 · GIF) the refinement cuts the held-out epipolar error from 4.02 to 0.67 px (tool, release reference).

python3 tools/colored_map/colored_map_pipeline.py \
  <bag> output/<run>/traj_corrected.tum output/<run>/colored_map \
  --raw-traj output/<run>/traj_raw.tum \
  --extrinsic configs/gaussian_splatting/<lidar_camera_extrinsic>.yaml

Moving rigs: --refine-spatiotemporal-calibration (design). Regression gates: Benchmarking.

Open-source benchmark results

On the same HILTI 2022 exp04 LiDAR/IMU input and CPU-only host, the competitive

File truncated at 100 lines see the full file

CONTRIBUTING

Contributing

Thanks for contributing to lidarslam_ros2.

This repository is trying to be a practical default for ROS 2 LiDAR SLAM and Autoware pointcloud-map generation. Contributions are most useful when they are easy to reproduce, easy to compare, and clearly scoped.

Participation is governed by the Code of Conduct. The Governance, Support, and Security policies explain decisions, help routes, and private vulnerability reporting.

What To Send

Useful contributions include:

  • bug fixes in the default permissive workflow
  • Autoware pointcloud-map integration fixes
  • benchmark results with reproducible commands and artifacts
  • parameter improvements backed by logs and trajectory metrics
  • documentation improvements that reduce setup time

Default Workflow Policy

The default and recommended workflow in this repository is permissive-license only. Contributions that change the default path should preserve that property.

Current default path:

  • RKO-LIO + graph_based_slam
  • local Scan Context implementation
  • Autoware-compatible pointcloud map output

Research frontends with other licenses can still be discussed, but they should not silently become the default path.

Repository Layout

Keep the repository root limited to project metadata and primary entry-point documents. Place commands under scripts/, incident-specific utilities under scripts/recovery/, offline libraries under tools/, and small research outputs under docs/research/artifacts/. Do not commit colcon manifests or other generated build products. See the repository layout guide for the complete map.

Autoware Naming And Trademark Guidance

Keep Autoware references descriptive.

Preferred wording:

  • Autoware-compatible pointcloud map
  • pointcloud-map workflow for Autoware
  • works with Autoware
  • built on Autoware

Avoid branding this repository or a derived product as if it were an official Autoware product or a Foundation-approved distribution.

Avoid wording such as:

  • Autoware-ready as a product tag line
  • official Autoware
  • Autoware <product-name>
  • certified by Autoware
  • endorsed by the Autoware Foundation

If in doubt, prefer compatibility language over product-name language.

Before Opening An Issue

Please collect the smallest reproducible case you can. Use the structured bug, feature, sensor-support, benchmark, or Autoware issue form that best matches the request. Usage questions must include the diagnostic bundle listed in SUPPORT.md.

If you completed a first map from the public docs without live maintainer guidance, use the independent first-map validation form. Passing reports may count toward the v1.0 three-user gate; failed attempts are recorded as onboarding findings and are just as valuable.

For bug reports, keep ordinary doctor <bag> --json output local because it contains the bag path and local commands. Instead run and review:

lidarslam-map doctor <rosbag2_dir> --public-json

Paste that complete public-doctor-evidence-v1 path-free JSON, a redacted command shape, expected/observed behavior, and either one reviewed support ZIP from an existing session or an explicit no-session/no-ZIP statement with the first finding code. Never attach a bag, map, trajectory, raw log/data, parameter file, terminal history, or private-site image.

For Autoware-related reports, include:

  • projector type and whether an origin exists, with every coordinate and MGRS/grid identifier and precise origin value replaced by REDACTED

File truncated at 100 lines see the full file

# Contributing Thanks for contributing to `lidarslam_ros2`. This repository is trying to be a practical default for ROS 2 LiDAR SLAM and Autoware pointcloud-map generation. Contributions are most useful when they are easy to reproduce, easy to compare, and clearly scoped. Participation is governed by the [Code of Conduct](CODE_OF_CONDUCT.md). The [Governance](GOVERNANCE.md), [Support](SUPPORT.md), and [Security](SECURITY.md) policies explain decisions, help routes, and private vulnerability reporting. ## What To Send Useful contributions include: - bug fixes in the default permissive workflow - Autoware pointcloud-map integration fixes - benchmark results with reproducible commands and artifacts - parameter improvements backed by logs and trajectory metrics - documentation improvements that reduce setup time ## Default Workflow Policy The default and recommended workflow in this repository is permissive-license only. Contributions that change the default path should preserve that property. Current default path: - `RKO-LIO + graph_based_slam` - local Scan Context implementation - Autoware-compatible pointcloud map output Research frontends with other licenses can still be discussed, but they should not silently become the default path. ## Repository Layout Keep the repository root limited to project metadata and primary entry-point documents. Place commands under `scripts/`, incident-specific utilities under `scripts/recovery/`, offline libraries under `tools/`, and small research outputs under `docs/research/artifacts/`. Do not commit colcon manifests or other generated build products. See the [repository layout guide](docs/repository-layout.md) for the complete map. ## Autoware Naming And Trademark Guidance Keep Autoware references descriptive. Preferred wording: - `Autoware-compatible pointcloud map` - `pointcloud-map workflow for Autoware` - `works with Autoware` - `built on Autoware` Avoid branding this repository or a derived product as if it were an official Autoware product or a Foundation-approved distribution. Avoid wording such as: - `Autoware-ready` as a product tag line - `official Autoware` - `Autoware ` - `certified by Autoware` - `endorsed by the Autoware Foundation` If in doubt, prefer compatibility language over product-name language. ## Before Opening An Issue Please collect the smallest reproducible case you can. Use the structured bug, feature, sensor-support, benchmark, or Autoware issue form that best matches the request. Usage questions must include the diagnostic bundle listed in [SUPPORT.md](SUPPORT.md). If you completed a first map from the public docs without live maintainer guidance, use the [independent first-map validation](docs/external-first-map-validation.md) form. Passing reports may count toward the v1.0 three-user gate; failed attempts are recorded as onboarding findings and are just as valuable. For bug reports, keep ordinary `doctor --json` output local because it contains the bag path and local commands. Instead run and review: ```bash lidarslam-map doctor --public-json ``` Paste that complete `public-doctor-evidence-v1` path-free JSON, a redacted command shape, expected/observed behavior, and either one reviewed support ZIP from an existing session or an explicit no-session/no-ZIP statement with the first finding code. Never attach a bag, map, trajectory, raw log/data, parameter file, terminal history, or private-site image. For Autoware-related reports, include: - projector type and whether an origin exists, with every coordinate and MGRS/grid identifier and precise origin value replaced by `REDACTED` File truncated at 100 lines [see the full file](https://github.com/rsasaki0109/lidarslam_ros2/tree/develop/CONTRIBUTING.md)
No version for distro rolling showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/rsasaki0109/lidarslam_ros2.git
VCS Type git
VCS Version develop
Last Updated 2026-10-23
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

README

lidar_slam_ros2

CI License: BSD-2-Clause ROS 2: Humble | Jazzy GitHub stars

Live map building on a handheld outdoor walk, coloured by when each part was mapped Camera-coloured SLAM point-cloud map of a park Handheld Ouster OS1-64 going down one stairwell and up another UGV with an Ouster OS1-64 mapping a metro tunnel

Outdoor walk, APE 0.55 m (Koide, CC BY 4.0) · camera-coloured park (RTK-SLAM, CC BY 4.0) · stairs, ATE 0.24 m on development data · held-out metro tunnel, 0.38 m like BIEVR-LIO and FAST-LIO2 (GEODE). How these were made.

Turn a rosbag into a map you can actually drive on. ROS 2 LiDAR SLAM that writes an Autoware-compatible map bundle: pointcloud_map/, map_projector_info.yaml and lanelet2. RKO-LIO (MIT) + graph_based_slam (BSD-2), no GPL on the default workflow. 日本語クイックスタート · release notes v0.10.0 · next v0.10.1

Quickstart

Choose your shortest path

Goal Start here Safety and cost boundary
See a verified map, no build Default if unsure: Docker demo Stable v0.10.0-humble; needs Docker; host writes stay in ./lidarslam_output.
Map my own rosbag Own-bag route: lidarslam-map doctor /path/to/rosbag2 Read-only diagnosis first; then lidarslam-map start /path/to/rosbag2 writes a new output.
Build from source or contribute Source quickstart: bash scripts/source_quickstart.sh --dry-run Release v0.10.0; needs ROS 2, 8 GiB, and roughly 30 minutes.

Try it with Docker (one command, no build)

docker run --rm -e LIDARSLAM_HOST_UID="$(id -u)" -e LIDARSLAM_HOST_GID="$(id -g)" \
  -v "$PWD/lidarslam_output:/lidarslam_ws/output" \
  ghcr.io/rsasaki0109/lidar_slam_ros2:v0.10.0-humble

The 517 MB MID-360 demo writes lidarslam_output/mid360_demo/ as your user. Other platforms: Getting Started.

Map your own bag (one command after install)

lidarslam-map start /path/to/rosbag2

Run lidarslam-map with no arguments for a guided start, or lidarslam-map doctor first: it uses no network and writes no files. See supported inputs.

Build + verified demo from source (one helper)

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone --recursive https://github.com/rsasaki0109/lidar_slam_ros2.git
cd lidar_slam_ros2
bash scripts/source_quickstart.sh

The helper detects Humble/Jazzy, installs the dependencies, builds the six maintained packages and runs the verified demo (--dry-run, --build-only). It prints a lidarslam-map path that auto-activates this build. Needs ROS 2, 8 GiB and about 30 minutes. Before handoff: python3 scripts/check_first_map_verification_package.py --json, continue only on READY.

Use your own bag

For an Ouster, Velodyne, RoboSense or other PointCloud2 bag, do not edit this package’s launch files or YAML first: run lidarslam-map doctor, then lidarslam-map start. It checks topics, frames, fields, timestamps, a maintained profile and calibration, and stops unsafe inputs with a stable reason code and one next action. Maintained inputs: PointCloud2+Imu, PointCloud2+NavSatFix, VelodyneScan+Applanix GSOF49.

  • Docker, no ROS: bash scripts/docker_map_bag.sh /absolute/path/to/rosbag2 mounts the bag read-only (Docker Own-Bag Map).
  • After a run: lidarslam-map view, lidarslam-map sessions, lidarslam-map compare day1 day2, lidarslam-map support day1, lidarslam-map merge day1 day2 --output-dir site_project.
  • Report on a fixed output: lidarslam-map report /path/to/output/mid360_demo --json (first-map validation guide).
  • Automation: lidarslam-map run (Operator workflows). Localization: Localize On The Map.

Why lidarslam_ros2

  • Autoware-compatible output: verify_autoware_map.py prints map_verify: PASS on every saved bundle.
  • lanelet2 auto-generation from the SLAM trajectory, validated for Autoware routing.
  • Surveyed ground truth: per-dataset APE thresholds gate every release in CI (accuracy).
  • Loop closure, GPL-free: Scan Context, BEV / SOLiD / Triangle descriptors and 3D-BBS verification (opt-in).
  • Tunnels and fog: radar fusion maps a ~500 m tunnel; without radar, an Ouster preset holds all ten ENWIDE sequences; on GEODE’s 13 held-out tunnel bags, no failure but not the most accurate (comparison, guide).
  • Deterministic offline mapping: byte-identical trajectories, loop edges and submaps.
  • Refined maps: plane bundle adjustment under holdout-validated thresholds (evidence).
flowchart LR
    bag(["rosbag2"]) --> rko["RKO-LIO<br/>LiDAR-inertial odometry"]
    rko --> gbs["graph_based_slam<br/>loop closure + graph optimization"]
    gbs --> bundle["Autoware map bundle<br/>pointcloud_map · lanelet2 · projector info"]

Camera-coloured point-cloud maps

The pipeline refines each camera pose against the LiDAR map, then projects the pixels onto it. On the park walk at the top (RTK-SLAM Stadtgarten 2; MP4 · GIF) the refinement cuts the held-out epipolar error from 4.02 to 0.67 px (tool, release reference).

python3 tools/colored_map/colored_map_pipeline.py \
  <bag> output/<run>/traj_corrected.tum output/<run>/colored_map \
  --raw-traj output/<run>/traj_raw.tum \
  --extrinsic configs/gaussian_splatting/<lidar_camera_extrinsic>.yaml

Moving rigs: --refine-spatiotemporal-calibration (design). Regression gates: Benchmarking.

Open-source benchmark results

On the same HILTI 2022 exp04 LiDAR/IMU input and CPU-only host, the competitive

File truncated at 100 lines see the full file

CONTRIBUTING

Contributing

Thanks for contributing to lidarslam_ros2.

This repository is trying to be a practical default for ROS 2 LiDAR SLAM and Autoware pointcloud-map generation. Contributions are most useful when they are easy to reproduce, easy to compare, and clearly scoped.

Participation is governed by the Code of Conduct. The Governance, Support, and Security policies explain decisions, help routes, and private vulnerability reporting.

What To Send

Useful contributions include:

  • bug fixes in the default permissive workflow
  • Autoware pointcloud-map integration fixes
  • benchmark results with reproducible commands and artifacts
  • parameter improvements backed by logs and trajectory metrics
  • documentation improvements that reduce setup time

Default Workflow Policy

The default and recommended workflow in this repository is permissive-license only. Contributions that change the default path should preserve that property.

Current default path:

  • RKO-LIO + graph_based_slam
  • local Scan Context implementation
  • Autoware-compatible pointcloud map output

Research frontends with other licenses can still be discussed, but they should not silently become the default path.

Repository Layout

Keep the repository root limited to project metadata and primary entry-point documents. Place commands under scripts/, incident-specific utilities under scripts/recovery/, offline libraries under tools/, and small research outputs under docs/research/artifacts/. Do not commit colcon manifests or other generated build products. See the repository layout guide for the complete map.

Autoware Naming And Trademark Guidance

Keep Autoware references descriptive.

Preferred wording:

  • Autoware-compatible pointcloud map
  • pointcloud-map workflow for Autoware
  • works with Autoware
  • built on Autoware

Avoid branding this repository or a derived product as if it were an official Autoware product or a Foundation-approved distribution.

Avoid wording such as:

  • Autoware-ready as a product tag line
  • official Autoware
  • Autoware <product-name>
  • certified by Autoware
  • endorsed by the Autoware Foundation

If in doubt, prefer compatibility language over product-name language.

Before Opening An Issue

Please collect the smallest reproducible case you can. Use the structured bug, feature, sensor-support, benchmark, or Autoware issue form that best matches the request. Usage questions must include the diagnostic bundle listed in SUPPORT.md.

If you completed a first map from the public docs without live maintainer guidance, use the independent first-map validation form. Passing reports may count toward the v1.0 three-user gate; failed attempts are recorded as onboarding findings and are just as valuable.

For bug reports, keep ordinary doctor <bag> --json output local because it contains the bag path and local commands. Instead run and review:

lidarslam-map doctor <rosbag2_dir> --public-json

Paste that complete public-doctor-evidence-v1 path-free JSON, a redacted command shape, expected/observed behavior, and either one reviewed support ZIP from an existing session or an explicit no-session/no-ZIP statement with the first finding code. Never attach a bag, map, trajectory, raw log/data, parameter file, terminal history, or private-site image.

For Autoware-related reports, include:

  • projector type and whether an origin exists, with every coordinate and MGRS/grid identifier and precise origin value replaced by REDACTED

File truncated at 100 lines see the full file

# Contributing Thanks for contributing to `lidarslam_ros2`. This repository is trying to be a practical default for ROS 2 LiDAR SLAM and Autoware pointcloud-map generation. Contributions are most useful when they are easy to reproduce, easy to compare, and clearly scoped. Participation is governed by the [Code of Conduct](CODE_OF_CONDUCT.md). The [Governance](GOVERNANCE.md), [Support](SUPPORT.md), and [Security](SECURITY.md) policies explain decisions, help routes, and private vulnerability reporting. ## What To Send Useful contributions include: - bug fixes in the default permissive workflow - Autoware pointcloud-map integration fixes - benchmark results with reproducible commands and artifacts - parameter improvements backed by logs and trajectory metrics - documentation improvements that reduce setup time ## Default Workflow Policy The default and recommended workflow in this repository is permissive-license only. Contributions that change the default path should preserve that property. Current default path: - `RKO-LIO + graph_based_slam` - local Scan Context implementation - Autoware-compatible pointcloud map output Research frontends with other licenses can still be discussed, but they should not silently become the default path. ## Repository Layout Keep the repository root limited to project metadata and primary entry-point documents. Place commands under `scripts/`, incident-specific utilities under `scripts/recovery/`, offline libraries under `tools/`, and small research outputs under `docs/research/artifacts/`. Do not commit colcon manifests or other generated build products. See the [repository layout guide](docs/repository-layout.md) for the complete map. ## Autoware Naming And Trademark Guidance Keep Autoware references descriptive. Preferred wording: - `Autoware-compatible pointcloud map` - `pointcloud-map workflow for Autoware` - `works with Autoware` - `built on Autoware` Avoid branding this repository or a derived product as if it were an official Autoware product or a Foundation-approved distribution. Avoid wording such as: - `Autoware-ready` as a product tag line - `official Autoware` - `Autoware ` - `certified by Autoware` - `endorsed by the Autoware Foundation` If in doubt, prefer compatibility language over product-name language. ## Before Opening An Issue Please collect the smallest reproducible case you can. Use the structured bug, feature, sensor-support, benchmark, or Autoware issue form that best matches the request. Usage questions must include the diagnostic bundle listed in [SUPPORT.md](SUPPORT.md). If you completed a first map from the public docs without live maintainer guidance, use the [independent first-map validation](docs/external-first-map-validation.md) form. Passing reports may count toward the v1.0 three-user gate; failed attempts are recorded as onboarding findings and are just as valuable. For bug reports, keep ordinary `doctor --json` output local because it contains the bag path and local commands. Instead run and review: ```bash lidarslam-map doctor --public-json ``` Paste that complete `public-doctor-evidence-v1` path-free JSON, a redacted command shape, expected/observed behavior, and either one reviewed support ZIP from an existing session or an explicit no-session/no-ZIP statement with the first finding code. Never attach a bag, map, trajectory, raw log/data, parameter file, terminal history, or private-site image. For Autoware-related reports, include: - projector type and whether an origin exists, with every coordinate and MGRS/grid identifier and precise origin value replaced by `REDACTED` File truncated at 100 lines [see the full file](https://github.com/rsasaki0109/lidarslam_ros2/tree/develop/CONTRIBUTING.md)

Repository Summary

Description
Checkout URI https://github.com/rsasaki0109/lidarslam_ros2.git
VCS Type git
VCS Version develop
Last Updated 2026-10-23
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

README

lidar_slam_ros2

CI License: BSD-2-Clause ROS 2: Humble | Jazzy GitHub stars

Live map building on a handheld outdoor walk, coloured by when each part was mapped Camera-coloured SLAM point-cloud map of a park Handheld Ouster OS1-64 going down one stairwell and up another UGV with an Ouster OS1-64 mapping a metro tunnel

Outdoor walk, APE 0.55 m (Koide, CC BY 4.0) · camera-coloured park (RTK-SLAM, CC BY 4.0) · stairs, ATE 0.24 m on development data · held-out metro tunnel, 0.38 m like BIEVR-LIO and FAST-LIO2 (GEODE). How these were made.

Turn a rosbag into a map you can actually drive on. ROS 2 LiDAR SLAM that writes an Autoware-compatible map bundle: pointcloud_map/, map_projector_info.yaml and lanelet2. RKO-LIO (MIT) + graph_based_slam (BSD-2), no GPL on the default workflow. 日本語クイックスタート · release notes v0.10.0 · next v0.10.1

Quickstart

Choose your shortest path

Goal Start here Safety and cost boundary
See a verified map, no build Default if unsure: Docker demo Stable v0.10.0-humble; needs Docker; host writes stay in ./lidarslam_output.
Map my own rosbag Own-bag route: lidarslam-map doctor /path/to/rosbag2 Read-only diagnosis first; then lidarslam-map start /path/to/rosbag2 writes a new output.
Build from source or contribute Source quickstart: bash scripts/source_quickstart.sh --dry-run Release v0.10.0; needs ROS 2, 8 GiB, and roughly 30 minutes.

Try it with Docker (one command, no build)

docker run --rm -e LIDARSLAM_HOST_UID="$(id -u)" -e LIDARSLAM_HOST_GID="$(id -g)" \
  -v "$PWD/lidarslam_output:/lidarslam_ws/output" \
  ghcr.io/rsasaki0109/lidar_slam_ros2:v0.10.0-humble

The 517 MB MID-360 demo writes lidarslam_output/mid360_demo/ as your user. Other platforms: Getting Started.

Map your own bag (one command after install)

lidarslam-map start /path/to/rosbag2

Run lidarslam-map with no arguments for a guided start, or lidarslam-map doctor first: it uses no network and writes no files. See supported inputs.

Build + verified demo from source (one helper)

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone --recursive https://github.com/rsasaki0109/lidar_slam_ros2.git
cd lidar_slam_ros2
bash scripts/source_quickstart.sh

The helper detects Humble/Jazzy, installs the dependencies, builds the six maintained packages and runs the verified demo (--dry-run, --build-only). It prints a lidarslam-map path that auto-activates this build. Needs ROS 2, 8 GiB and about 30 minutes. Before handoff: python3 scripts/check_first_map_verification_package.py --json, continue only on READY.

Use your own bag

For an Ouster, Velodyne, RoboSense or other PointCloud2 bag, do not edit this package’s launch files or YAML first: run lidarslam-map doctor, then lidarslam-map start. It checks topics, frames, fields, timestamps, a maintained profile and calibration, and stops unsafe inputs with a stable reason code and one next action. Maintained inputs: PointCloud2+Imu, PointCloud2+NavSatFix, VelodyneScan+Applanix GSOF49.

  • Docker, no ROS: bash scripts/docker_map_bag.sh /absolute/path/to/rosbag2 mounts the bag read-only (Docker Own-Bag Map).
  • After a run: lidarslam-map view, lidarslam-map sessions, lidarslam-map compare day1 day2, lidarslam-map support day1, lidarslam-map merge day1 day2 --output-dir site_project.
  • Report on a fixed output: lidarslam-map report /path/to/output/mid360_demo --json (first-map validation guide).
  • Automation: lidarslam-map run (Operator workflows). Localization: Localize On The Map.

Why lidarslam_ros2

  • Autoware-compatible output: verify_autoware_map.py prints map_verify: PASS on every saved bundle.
  • lanelet2 auto-generation from the SLAM trajectory, validated for Autoware routing.
  • Surveyed ground truth: per-dataset APE thresholds gate every release in CI (accuracy).
  • Loop closure, GPL-free: Scan Context, BEV / SOLiD / Triangle descriptors and 3D-BBS verification (opt-in).
  • Tunnels and fog: radar fusion maps a ~500 m tunnel; without radar, an Ouster preset holds all ten ENWIDE sequences; on GEODE’s 13 held-out tunnel bags, no failure but not the most accurate (comparison, guide).
  • Deterministic offline mapping: byte-identical trajectories, loop edges and submaps.
  • Refined maps: plane bundle adjustment under holdout-validated thresholds (evidence).
flowchart LR
    bag(["rosbag2"]) --> rko["RKO-LIO<br/>LiDAR-inertial odometry"]
    rko --> gbs["graph_based_slam<br/>loop closure + graph optimization"]
    gbs --> bundle["Autoware map bundle<br/>pointcloud_map · lanelet2 · projector info"]

Camera-coloured point-cloud maps

The pipeline refines each camera pose against the LiDAR map, then projects the pixels onto it. On the park walk at the top (RTK-SLAM Stadtgarten 2; MP4 · GIF) the refinement cuts the held-out epipolar error from 4.02 to 0.67 px (tool, release reference).

python3 tools/colored_map/colored_map_pipeline.py \
  <bag> output/<run>/traj_corrected.tum output/<run>/colored_map \
  --raw-traj output/<run>/traj_raw.tum \
  --extrinsic configs/gaussian_splatting/<lidar_camera_extrinsic>.yaml

Moving rigs: --refine-spatiotemporal-calibration (design). Regression gates: Benchmarking.

Open-source benchmark results

On the same HILTI 2022 exp04 LiDAR/IMU input and CPU-only host, the competitive

File truncated at 100 lines see the full file

CONTRIBUTING

Contributing

Thanks for contributing to lidarslam_ros2.

This repository is trying to be a practical default for ROS 2 LiDAR SLAM and Autoware pointcloud-map generation. Contributions are most useful when they are easy to reproduce, easy to compare, and clearly scoped.

Participation is governed by the Code of Conduct. The Governance, Support, and Security policies explain decisions, help routes, and private vulnerability reporting.

What To Send

Useful contributions include:

  • bug fixes in the default permissive workflow
  • Autoware pointcloud-map integration fixes
  • benchmark results with reproducible commands and artifacts
  • parameter improvements backed by logs and trajectory metrics
  • documentation improvements that reduce setup time

Default Workflow Policy

The default and recommended workflow in this repository is permissive-license only. Contributions that change the default path should preserve that property.

Current default path:

  • RKO-LIO + graph_based_slam
  • local Scan Context implementation
  • Autoware-compatible pointcloud map output

Research frontends with other licenses can still be discussed, but they should not silently become the default path.

Repository Layout

Keep the repository root limited to project metadata and primary entry-point documents. Place commands under scripts/, incident-specific utilities under scripts/recovery/, offline libraries under tools/, and small research outputs under docs/research/artifacts/. Do not commit colcon manifests or other generated build products. See the repository layout guide for the complete map.

Autoware Naming And Trademark Guidance

Keep Autoware references descriptive.

Preferred wording:

  • Autoware-compatible pointcloud map
  • pointcloud-map workflow for Autoware
  • works with Autoware
  • built on Autoware

Avoid branding this repository or a derived product as if it were an official Autoware product or a Foundation-approved distribution.

Avoid wording such as:

  • Autoware-ready as a product tag line
  • official Autoware
  • Autoware <product-name>
  • certified by Autoware
  • endorsed by the Autoware Foundation

If in doubt, prefer compatibility language over product-name language.

Before Opening An Issue

Please collect the smallest reproducible case you can. Use the structured bug, feature, sensor-support, benchmark, or Autoware issue form that best matches the request. Usage questions must include the diagnostic bundle listed in SUPPORT.md.

If you completed a first map from the public docs without live maintainer guidance, use the independent first-map validation form. Passing reports may count toward the v1.0 three-user gate; failed attempts are recorded as onboarding findings and are just as valuable.

For bug reports, keep ordinary doctor <bag> --json output local because it contains the bag path and local commands. Instead run and review:

lidarslam-map doctor <rosbag2_dir> --public-json

Paste that complete public-doctor-evidence-v1 path-free JSON, a redacted command shape, expected/observed behavior, and either one reviewed support ZIP from an existing session or an explicit no-session/no-ZIP statement with the first finding code. Never attach a bag, map, trajectory, raw log/data, parameter file, terminal history, or private-site image.

For Autoware-related reports, include:

  • projector type and whether an origin exists, with every coordinate and MGRS/grid identifier and precise origin value replaced by REDACTED

File truncated at 100 lines see the full file

# Contributing Thanks for contributing to `lidarslam_ros2`. This repository is trying to be a practical default for ROS 2 LiDAR SLAM and Autoware pointcloud-map generation. Contributions are most useful when they are easy to reproduce, easy to compare, and clearly scoped. Participation is governed by the [Code of Conduct](CODE_OF_CONDUCT.md). The [Governance](GOVERNANCE.md), [Support](SUPPORT.md), and [Security](SECURITY.md) policies explain decisions, help routes, and private vulnerability reporting. ## What To Send Useful contributions include: - bug fixes in the default permissive workflow - Autoware pointcloud-map integration fixes - benchmark results with reproducible commands and artifacts - parameter improvements backed by logs and trajectory metrics - documentation improvements that reduce setup time ## Default Workflow Policy The default and recommended workflow in this repository is permissive-license only. Contributions that change the default path should preserve that property. Current default path: - `RKO-LIO + graph_based_slam` - local Scan Context implementation - Autoware-compatible pointcloud map output Research frontends with other licenses can still be discussed, but they should not silently become the default path. ## Repository Layout Keep the repository root limited to project metadata and primary entry-point documents. Place commands under `scripts/`, incident-specific utilities under `scripts/recovery/`, offline libraries under `tools/`, and small research outputs under `docs/research/artifacts/`. Do not commit colcon manifests or other generated build products. See the [repository layout guide](docs/repository-layout.md) for the complete map. ## Autoware Naming And Trademark Guidance Keep Autoware references descriptive. Preferred wording: - `Autoware-compatible pointcloud map` - `pointcloud-map workflow for Autoware` - `works with Autoware` - `built on Autoware` Avoid branding this repository or a derived product as if it were an official Autoware product or a Foundation-approved distribution. Avoid wording such as: - `Autoware-ready` as a product tag line - `official Autoware` - `Autoware ` - `certified by Autoware` - `endorsed by the Autoware Foundation` If in doubt, prefer compatibility language over product-name language. ## Before Opening An Issue Please collect the smallest reproducible case you can. Use the structured bug, feature, sensor-support, benchmark, or Autoware issue form that best matches the request. Usage questions must include the diagnostic bundle listed in [SUPPORT.md](SUPPORT.md). If you completed a first map from the public docs without live maintainer guidance, use the [independent first-map validation](docs/external-first-map-validation.md) form. Passing reports may count toward the v1.0 three-user gate; failed attempts are recorded as onboarding findings and are just as valuable. For bug reports, keep ordinary `doctor --json` output local because it contains the bag path and local commands. Instead run and review: ```bash lidarslam-map doctor --public-json ``` Paste that complete `public-doctor-evidence-v1` path-free JSON, a redacted command shape, expected/observed behavior, and either one reviewed support ZIP from an existing session or an explicit no-session/no-ZIP statement with the first finding code. Never attach a bag, map, trajectory, raw log/data, parameter file, terminal history, or private-site image. For Autoware-related reports, include: - projector type and whether an origin exists, with every coordinate and MGRS/grid identifier and precise origin value replaced by `REDACTED` File truncated at 100 lines [see the full file](https://github.com/rsasaki0109/lidarslam_ros2/tree/develop/CONTRIBUTING.md)
No version for distro galactic showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/rsasaki0109/lidarslam_ros2.git
VCS Type git
VCS Version develop
Last Updated 2026-10-23
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

README

lidar_slam_ros2

CI License: BSD-2-Clause ROS 2: Humble | Jazzy GitHub stars

Live map building on a handheld outdoor walk, coloured by when each part was mapped Camera-coloured SLAM point-cloud map of a park Handheld Ouster OS1-64 going down one stairwell and up another UGV with an Ouster OS1-64 mapping a metro tunnel

Outdoor walk, APE 0.55 m (Koide, CC BY 4.0) · camera-coloured park (RTK-SLAM, CC BY 4.0) · stairs, ATE 0.24 m on development data · held-out metro tunnel, 0.38 m like BIEVR-LIO and FAST-LIO2 (GEODE). How these were made.

Turn a rosbag into a map you can actually drive on. ROS 2 LiDAR SLAM that writes an Autoware-compatible map bundle: pointcloud_map/, map_projector_info.yaml and lanelet2. RKO-LIO (MIT) + graph_based_slam (BSD-2), no GPL on the default workflow. 日本語クイックスタート · release notes v0.10.0 · next v0.10.1

Quickstart

Choose your shortest path

Goal Start here Safety and cost boundary
See a verified map, no build Default if unsure: Docker demo Stable v0.10.0-humble; needs Docker; host writes stay in ./lidarslam_output.
Map my own rosbag Own-bag route: lidarslam-map doctor /path/to/rosbag2 Read-only diagnosis first; then lidarslam-map start /path/to/rosbag2 writes a new output.
Build from source or contribute Source quickstart: bash scripts/source_quickstart.sh --dry-run Release v0.10.0; needs ROS 2, 8 GiB, and roughly 30 minutes.

Try it with Docker (one command, no build)

docker run --rm -e LIDARSLAM_HOST_UID="$(id -u)" -e LIDARSLAM_HOST_GID="$(id -g)" \
  -v "$PWD/lidarslam_output:/lidarslam_ws/output" \
  ghcr.io/rsasaki0109/lidar_slam_ros2:v0.10.0-humble

The 517 MB MID-360 demo writes lidarslam_output/mid360_demo/ as your user. Other platforms: Getting Started.

Map your own bag (one command after install)

lidarslam-map start /path/to/rosbag2

Run lidarslam-map with no arguments for a guided start, or lidarslam-map doctor first: it uses no network and writes no files. See supported inputs.

Build + verified demo from source (one helper)

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone --recursive https://github.com/rsasaki0109/lidar_slam_ros2.git
cd lidar_slam_ros2
bash scripts/source_quickstart.sh

The helper detects Humble/Jazzy, installs the dependencies, builds the six maintained packages and runs the verified demo (--dry-run, --build-only). It prints a lidarslam-map path that auto-activates this build. Needs ROS 2, 8 GiB and about 30 minutes. Before handoff: python3 scripts/check_first_map_verification_package.py --json, continue only on READY.

Use your own bag

For an Ouster, Velodyne, RoboSense or other PointCloud2 bag, do not edit this package’s launch files or YAML first: run lidarslam-map doctor, then lidarslam-map start. It checks topics, frames, fields, timestamps, a maintained profile and calibration, and stops unsafe inputs with a stable reason code and one next action. Maintained inputs: PointCloud2+Imu, PointCloud2+NavSatFix, VelodyneScan+Applanix GSOF49.

  • Docker, no ROS: bash scripts/docker_map_bag.sh /absolute/path/to/rosbag2 mounts the bag read-only (Docker Own-Bag Map).
  • After a run: lidarslam-map view, lidarslam-map sessions, lidarslam-map compare day1 day2, lidarslam-map support day1, lidarslam-map merge day1 day2 --output-dir site_project.
  • Report on a fixed output: lidarslam-map report /path/to/output/mid360_demo --json (first-map validation guide).
  • Automation: lidarslam-map run (Operator workflows). Localization: Localize On The Map.

Why lidarslam_ros2

  • Autoware-compatible output: verify_autoware_map.py prints map_verify: PASS on every saved bundle.
  • lanelet2 auto-generation from the SLAM trajectory, validated for Autoware routing.
  • Surveyed ground truth: per-dataset APE thresholds gate every release in CI (accuracy).
  • Loop closure, GPL-free: Scan Context, BEV / SOLiD / Triangle descriptors and 3D-BBS verification (opt-in).
  • Tunnels and fog: radar fusion maps a ~500 m tunnel; without radar, an Ouster preset holds all ten ENWIDE sequences; on GEODE’s 13 held-out tunnel bags, no failure but not the most accurate (comparison, guide).
  • Deterministic offline mapping: byte-identical trajectories, loop edges and submaps.
  • Refined maps: plane bundle adjustment under holdout-validated thresholds (evidence).
flowchart LR
    bag(["rosbag2"]) --> rko["RKO-LIO<br/>LiDAR-inertial odometry"]
    rko --> gbs["graph_based_slam<br/>loop closure + graph optimization"]
    gbs --> bundle["Autoware map bundle<br/>pointcloud_map · lanelet2 · projector info"]

Camera-coloured point-cloud maps

The pipeline refines each camera pose against the LiDAR map, then projects the pixels onto it. On the park walk at the top (RTK-SLAM Stadtgarten 2; MP4 · GIF) the refinement cuts the held-out epipolar error from 4.02 to 0.67 px (tool, release reference).

python3 tools/colored_map/colored_map_pipeline.py \
  <bag> output/<run>/traj_corrected.tum output/<run>/colored_map \
  --raw-traj output/<run>/traj_raw.tum \
  --extrinsic configs/gaussian_splatting/<lidar_camera_extrinsic>.yaml

Moving rigs: --refine-spatiotemporal-calibration (design). Regression gates: Benchmarking.

Open-source benchmark results

On the same HILTI 2022 exp04 LiDAR/IMU input and CPU-only host, the competitive

File truncated at 100 lines see the full file

CONTRIBUTING

Contributing

Thanks for contributing to lidarslam_ros2.

This repository is trying to be a practical default for ROS 2 LiDAR SLAM and Autoware pointcloud-map generation. Contributions are most useful when they are easy to reproduce, easy to compare, and clearly scoped.

Participation is governed by the Code of Conduct. The Governance, Support, and Security policies explain decisions, help routes, and private vulnerability reporting.

What To Send

Useful contributions include:

  • bug fixes in the default permissive workflow
  • Autoware pointcloud-map integration fixes
  • benchmark results with reproducible commands and artifacts
  • parameter improvements backed by logs and trajectory metrics
  • documentation improvements that reduce setup time

Default Workflow Policy

The default and recommended workflow in this repository is permissive-license only. Contributions that change the default path should preserve that property.

Current default path:

  • RKO-LIO + graph_based_slam
  • local Scan Context implementation
  • Autoware-compatible pointcloud map output

Research frontends with other licenses can still be discussed, but they should not silently become the default path.

Repository Layout

Keep the repository root limited to project metadata and primary entry-point documents. Place commands under scripts/, incident-specific utilities under scripts/recovery/, offline libraries under tools/, and small research outputs under docs/research/artifacts/. Do not commit colcon manifests or other generated build products. See the repository layout guide for the complete map.

Autoware Naming And Trademark Guidance

Keep Autoware references descriptive.

Preferred wording:

  • Autoware-compatible pointcloud map
  • pointcloud-map workflow for Autoware
  • works with Autoware
  • built on Autoware

Avoid branding this repository or a derived product as if it were an official Autoware product or a Foundation-approved distribution.

Avoid wording such as:

  • Autoware-ready as a product tag line
  • official Autoware
  • Autoware <product-name>
  • certified by Autoware
  • endorsed by the Autoware Foundation

If in doubt, prefer compatibility language over product-name language.

Before Opening An Issue

Please collect the smallest reproducible case you can. Use the structured bug, feature, sensor-support, benchmark, or Autoware issue form that best matches the request. Usage questions must include the diagnostic bundle listed in SUPPORT.md.

If you completed a first map from the public docs without live maintainer guidance, use the independent first-map validation form. Passing reports may count toward the v1.0 three-user gate; failed attempts are recorded as onboarding findings and are just as valuable.

For bug reports, keep ordinary doctor <bag> --json output local because it contains the bag path and local commands. Instead run and review:

lidarslam-map doctor <rosbag2_dir> --public-json

Paste that complete public-doctor-evidence-v1 path-free JSON, a redacted command shape, expected/observed behavior, and either one reviewed support ZIP from an existing session or an explicit no-session/no-ZIP statement with the first finding code. Never attach a bag, map, trajectory, raw log/data, parameter file, terminal history, or private-site image.

For Autoware-related reports, include:

  • projector type and whether an origin exists, with every coordinate and MGRS/grid identifier and precise origin value replaced by REDACTED

File truncated at 100 lines see the full file

# Contributing Thanks for contributing to `lidarslam_ros2`. This repository is trying to be a practical default for ROS 2 LiDAR SLAM and Autoware pointcloud-map generation. Contributions are most useful when they are easy to reproduce, easy to compare, and clearly scoped. Participation is governed by the [Code of Conduct](CODE_OF_CONDUCT.md). The [Governance](GOVERNANCE.md), [Support](SUPPORT.md), and [Security](SECURITY.md) policies explain decisions, help routes, and private vulnerability reporting. ## What To Send Useful contributions include: - bug fixes in the default permissive workflow - Autoware pointcloud-map integration fixes - benchmark results with reproducible commands and artifacts - parameter improvements backed by logs and trajectory metrics - documentation improvements that reduce setup time ## Default Workflow Policy The default and recommended workflow in this repository is permissive-license only. Contributions that change the default path should preserve that property. Current default path: - `RKO-LIO + graph_based_slam` - local Scan Context implementation - Autoware-compatible pointcloud map output Research frontends with other licenses can still be discussed, but they should not silently become the default path. ## Repository Layout Keep the repository root limited to project metadata and primary entry-point documents. Place commands under `scripts/`, incident-specific utilities under `scripts/recovery/`, offline libraries under `tools/`, and small research outputs under `docs/research/artifacts/`. Do not commit colcon manifests or other generated build products. See the [repository layout guide](docs/repository-layout.md) for the complete map. ## Autoware Naming And Trademark Guidance Keep Autoware references descriptive. Preferred wording: - `Autoware-compatible pointcloud map` - `pointcloud-map workflow for Autoware` - `works with Autoware` - `built on Autoware` Avoid branding this repository or a derived product as if it were an official Autoware product or a Foundation-approved distribution. Avoid wording such as: - `Autoware-ready` as a product tag line - `official Autoware` - `Autoware ` - `certified by Autoware` - `endorsed by the Autoware Foundation` If in doubt, prefer compatibility language over product-name language. ## Before Opening An Issue Please collect the smallest reproducible case you can. Use the structured bug, feature, sensor-support, benchmark, or Autoware issue form that best matches the request. Usage questions must include the diagnostic bundle listed in [SUPPORT.md](SUPPORT.md). If you completed a first map from the public docs without live maintainer guidance, use the [independent first-map validation](docs/external-first-map-validation.md) form. Passing reports may count toward the v1.0 three-user gate; failed attempts are recorded as onboarding findings and are just as valuable. For bug reports, keep ordinary `doctor --json` output local because it contains the bag path and local commands. Instead run and review: ```bash lidarslam-map doctor --public-json ``` Paste that complete `public-doctor-evidence-v1` path-free JSON, a redacted command shape, expected/observed behavior, and either one reviewed support ZIP from an existing session or an explicit no-session/no-ZIP statement with the first finding code. Never attach a bag, map, trajectory, raw log/data, parameter file, terminal history, or private-site image. For Autoware-related reports, include: - projector type and whether an origin exists, with every coordinate and MGRS/grid identifier and precise origin value replaced by `REDACTED` File truncated at 100 lines [see the full file](https://github.com/rsasaki0109/lidarslam_ros2/tree/develop/CONTRIBUTING.md)
No version for distro iron showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/rsasaki0109/lidarslam_ros2.git
VCS Type git
VCS Version develop
Last Updated 2026-10-23
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

README

lidar_slam_ros2

CI License: BSD-2-Clause ROS 2: Humble | Jazzy GitHub stars

Live map building on a handheld outdoor walk, coloured by when each part was mapped Camera-coloured SLAM point-cloud map of a park Handheld Ouster OS1-64 going down one stairwell and up another UGV with an Ouster OS1-64 mapping a metro tunnel

Outdoor walk, APE 0.55 m (Koide, CC BY 4.0) · camera-coloured park (RTK-SLAM, CC BY 4.0) · stairs, ATE 0.24 m on development data · held-out metro tunnel, 0.38 m like BIEVR-LIO and FAST-LIO2 (GEODE). How these were made.

Turn a rosbag into a map you can actually drive on. ROS 2 LiDAR SLAM that writes an Autoware-compatible map bundle: pointcloud_map/, map_projector_info.yaml and lanelet2. RKO-LIO (MIT) + graph_based_slam (BSD-2), no GPL on the default workflow. 日本語クイックスタート · release notes v0.10.0 · next v0.10.1

Quickstart

Choose your shortest path

Goal Start here Safety and cost boundary
See a verified map, no build Default if unsure: Docker demo Stable v0.10.0-humble; needs Docker; host writes stay in ./lidarslam_output.
Map my own rosbag Own-bag route: lidarslam-map doctor /path/to/rosbag2 Read-only diagnosis first; then lidarslam-map start /path/to/rosbag2 writes a new output.
Build from source or contribute Source quickstart: bash scripts/source_quickstart.sh --dry-run Release v0.10.0; needs ROS 2, 8 GiB, and roughly 30 minutes.

Try it with Docker (one command, no build)

docker run --rm -e LIDARSLAM_HOST_UID="$(id -u)" -e LIDARSLAM_HOST_GID="$(id -g)" \
  -v "$PWD/lidarslam_output:/lidarslam_ws/output" \
  ghcr.io/rsasaki0109/lidar_slam_ros2:v0.10.0-humble

The 517 MB MID-360 demo writes lidarslam_output/mid360_demo/ as your user. Other platforms: Getting Started.

Map your own bag (one command after install)

lidarslam-map start /path/to/rosbag2

Run lidarslam-map with no arguments for a guided start, or lidarslam-map doctor first: it uses no network and writes no files. See supported inputs.

Build + verified demo from source (one helper)

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone --recursive https://github.com/rsasaki0109/lidar_slam_ros2.git
cd lidar_slam_ros2
bash scripts/source_quickstart.sh

The helper detects Humble/Jazzy, installs the dependencies, builds the six maintained packages and runs the verified demo (--dry-run, --build-only). It prints a lidarslam-map path that auto-activates this build. Needs ROS 2, 8 GiB and about 30 minutes. Before handoff: python3 scripts/check_first_map_verification_package.py --json, continue only on READY.

Use your own bag

For an Ouster, Velodyne, RoboSense or other PointCloud2 bag, do not edit this package’s launch files or YAML first: run lidarslam-map doctor, then lidarslam-map start. It checks topics, frames, fields, timestamps, a maintained profile and calibration, and stops unsafe inputs with a stable reason code and one next action. Maintained inputs: PointCloud2+Imu, PointCloud2+NavSatFix, VelodyneScan+Applanix GSOF49.

  • Docker, no ROS: bash scripts/docker_map_bag.sh /absolute/path/to/rosbag2 mounts the bag read-only (Docker Own-Bag Map).
  • After a run: lidarslam-map view, lidarslam-map sessions, lidarslam-map compare day1 day2, lidarslam-map support day1, lidarslam-map merge day1 day2 --output-dir site_project.
  • Report on a fixed output: lidarslam-map report /path/to/output/mid360_demo --json (first-map validation guide).
  • Automation: lidarslam-map run (Operator workflows). Localization: Localize On The Map.

Why lidarslam_ros2

  • Autoware-compatible output: verify_autoware_map.py prints map_verify: PASS on every saved bundle.
  • lanelet2 auto-generation from the SLAM trajectory, validated for Autoware routing.
  • Surveyed ground truth: per-dataset APE thresholds gate every release in CI (accuracy).
  • Loop closure, GPL-free: Scan Context, BEV / SOLiD / Triangle descriptors and 3D-BBS verification (opt-in).
  • Tunnels and fog: radar fusion maps a ~500 m tunnel; without radar, an Ouster preset holds all ten ENWIDE sequences; on GEODE’s 13 held-out tunnel bags, no failure but not the most accurate (comparison, guide).
  • Deterministic offline mapping: byte-identical trajectories, loop edges and submaps.
  • Refined maps: plane bundle adjustment under holdout-validated thresholds (evidence).
flowchart LR
    bag(["rosbag2"]) --> rko["RKO-LIO<br/>LiDAR-inertial odometry"]
    rko --> gbs["graph_based_slam<br/>loop closure + graph optimization"]
    gbs --> bundle["Autoware map bundle<br/>pointcloud_map · lanelet2 · projector info"]

Camera-coloured point-cloud maps

The pipeline refines each camera pose against the LiDAR map, then projects the pixels onto it. On the park walk at the top (RTK-SLAM Stadtgarten 2; MP4 · GIF) the refinement cuts the held-out epipolar error from 4.02 to 0.67 px (tool, release reference).

python3 tools/colored_map/colored_map_pipeline.py \
  <bag> output/<run>/traj_corrected.tum output/<run>/colored_map \
  --raw-traj output/<run>/traj_raw.tum \
  --extrinsic configs/gaussian_splatting/<lidar_camera_extrinsic>.yaml

Moving rigs: --refine-spatiotemporal-calibration (design). Regression gates: Benchmarking.

Open-source benchmark results

On the same HILTI 2022 exp04 LiDAR/IMU input and CPU-only host, the competitive

File truncated at 100 lines see the full file

CONTRIBUTING

Contributing

Thanks for contributing to lidarslam_ros2.

This repository is trying to be a practical default for ROS 2 LiDAR SLAM and Autoware pointcloud-map generation. Contributions are most useful when they are easy to reproduce, easy to compare, and clearly scoped.

Participation is governed by the Code of Conduct. The Governance, Support, and Security policies explain decisions, help routes, and private vulnerability reporting.

What To Send

Useful contributions include:

  • bug fixes in the default permissive workflow
  • Autoware pointcloud-map integration fixes
  • benchmark results with reproducible commands and artifacts
  • parameter improvements backed by logs and trajectory metrics
  • documentation improvements that reduce setup time

Default Workflow Policy

The default and recommended workflow in this repository is permissive-license only. Contributions that change the default path should preserve that property.

Current default path:

  • RKO-LIO + graph_based_slam
  • local Scan Context implementation
  • Autoware-compatible pointcloud map output

Research frontends with other licenses can still be discussed, but they should not silently become the default path.

Repository Layout

Keep the repository root limited to project metadata and primary entry-point documents. Place commands under scripts/, incident-specific utilities under scripts/recovery/, offline libraries under tools/, and small research outputs under docs/research/artifacts/. Do not commit colcon manifests or other generated build products. See the repository layout guide for the complete map.

Autoware Naming And Trademark Guidance

Keep Autoware references descriptive.

Preferred wording:

  • Autoware-compatible pointcloud map
  • pointcloud-map workflow for Autoware
  • works with Autoware
  • built on Autoware

Avoid branding this repository or a derived product as if it were an official Autoware product or a Foundation-approved distribution.

Avoid wording such as:

  • Autoware-ready as a product tag line
  • official Autoware
  • Autoware <product-name>
  • certified by Autoware
  • endorsed by the Autoware Foundation

If in doubt, prefer compatibility language over product-name language.

Before Opening An Issue

Please collect the smallest reproducible case you can. Use the structured bug, feature, sensor-support, benchmark, or Autoware issue form that best matches the request. Usage questions must include the diagnostic bundle listed in SUPPORT.md.

If you completed a first map from the public docs without live maintainer guidance, use the independent first-map validation form. Passing reports may count toward the v1.0 three-user gate; failed attempts are recorded as onboarding findings and are just as valuable.

For bug reports, keep ordinary doctor <bag> --json output local because it contains the bag path and local commands. Instead run and review:

lidarslam-map doctor <rosbag2_dir> --public-json

Paste that complete public-doctor-evidence-v1 path-free JSON, a redacted command shape, expected/observed behavior, and either one reviewed support ZIP from an existing session or an explicit no-session/no-ZIP statement with the first finding code. Never attach a bag, map, trajectory, raw log/data, parameter file, terminal history, or private-site image.

For Autoware-related reports, include:

  • projector type and whether an origin exists, with every coordinate and MGRS/grid identifier and precise origin value replaced by REDACTED

File truncated at 100 lines see the full file

# Contributing Thanks for contributing to `lidarslam_ros2`. This repository is trying to be a practical default for ROS 2 LiDAR SLAM and Autoware pointcloud-map generation. Contributions are most useful when they are easy to reproduce, easy to compare, and clearly scoped. Participation is governed by the [Code of Conduct](CODE_OF_CONDUCT.md). The [Governance](GOVERNANCE.md), [Support](SUPPORT.md), and [Security](SECURITY.md) policies explain decisions, help routes, and private vulnerability reporting. ## What To Send Useful contributions include: - bug fixes in the default permissive workflow - Autoware pointcloud-map integration fixes - benchmark results with reproducible commands and artifacts - parameter improvements backed by logs and trajectory metrics - documentation improvements that reduce setup time ## Default Workflow Policy The default and recommended workflow in this repository is permissive-license only. Contributions that change the default path should preserve that property. Current default path: - `RKO-LIO + graph_based_slam` - local Scan Context implementation - Autoware-compatible pointcloud map output Research frontends with other licenses can still be discussed, but they should not silently become the default path. ## Repository Layout Keep the repository root limited to project metadata and primary entry-point documents. Place commands under `scripts/`, incident-specific utilities under `scripts/recovery/`, offline libraries under `tools/`, and small research outputs under `docs/research/artifacts/`. Do not commit colcon manifests or other generated build products. See the [repository layout guide](docs/repository-layout.md) for the complete map. ## Autoware Naming And Trademark Guidance Keep Autoware references descriptive. Preferred wording: - `Autoware-compatible pointcloud map` - `pointcloud-map workflow for Autoware` - `works with Autoware` - `built on Autoware` Avoid branding this repository or a derived product as if it were an official Autoware product or a Foundation-approved distribution. Avoid wording such as: - `Autoware-ready` as a product tag line - `official Autoware` - `Autoware ` - `certified by Autoware` - `endorsed by the Autoware Foundation` If in doubt, prefer compatibility language over product-name language. ## Before Opening An Issue Please collect the smallest reproducible case you can. Use the structured bug, feature, sensor-support, benchmark, or Autoware issue form that best matches the request. Usage questions must include the diagnostic bundle listed in [SUPPORT.md](SUPPORT.md). If you completed a first map from the public docs without live maintainer guidance, use the [independent first-map validation](docs/external-first-map-validation.md) form. Passing reports may count toward the v1.0 three-user gate; failed attempts are recorded as onboarding findings and are just as valuable. For bug reports, keep ordinary `doctor --json` output local because it contains the bag path and local commands. Instead run and review: ```bash lidarslam-map doctor --public-json ``` Paste that complete `public-doctor-evidence-v1` path-free JSON, a redacted command shape, expected/observed behavior, and either one reviewed support ZIP from an existing session or an explicit no-session/no-ZIP statement with the first finding code. Never attach a bag, map, trajectory, raw log/data, parameter file, terminal history, or private-site image. For Autoware-related reports, include: - projector type and whether an origin exists, with every coordinate and MGRS/grid identifier and precise origin value replaced by `REDACTED` File truncated at 100 lines [see the full file](https://github.com/rsasaki0109/lidarslam_ros2/tree/develop/CONTRIBUTING.md)
No version for distro melodic showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/rsasaki0109/lidarslam_ros2.git
VCS Type git
VCS Version develop
Last Updated 2026-10-23
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

README

lidar_slam_ros2

CI License: BSD-2-Clause ROS 2: Humble | Jazzy GitHub stars

Live map building on a handheld outdoor walk, coloured by when each part was mapped Camera-coloured SLAM point-cloud map of a park Handheld Ouster OS1-64 going down one stairwell and up another UGV with an Ouster OS1-64 mapping a metro tunnel

Outdoor walk, APE 0.55 m (Koide, CC BY 4.0) · camera-coloured park (RTK-SLAM, CC BY 4.0) · stairs, ATE 0.24 m on development data · held-out metro tunnel, 0.38 m like BIEVR-LIO and FAST-LIO2 (GEODE). How these were made.

Turn a rosbag into a map you can actually drive on. ROS 2 LiDAR SLAM that writes an Autoware-compatible map bundle: pointcloud_map/, map_projector_info.yaml and lanelet2. RKO-LIO (MIT) + graph_based_slam (BSD-2), no GPL on the default workflow. 日本語クイックスタート · release notes v0.10.0 · next v0.10.1

Quickstart

Choose your shortest path

Goal Start here Safety and cost boundary
See a verified map, no build Default if unsure: Docker demo Stable v0.10.0-humble; needs Docker; host writes stay in ./lidarslam_output.
Map my own rosbag Own-bag route: lidarslam-map doctor /path/to/rosbag2 Read-only diagnosis first; then lidarslam-map start /path/to/rosbag2 writes a new output.
Build from source or contribute Source quickstart: bash scripts/source_quickstart.sh --dry-run Release v0.10.0; needs ROS 2, 8 GiB, and roughly 30 minutes.

Try it with Docker (one command, no build)

docker run --rm -e LIDARSLAM_HOST_UID="$(id -u)" -e LIDARSLAM_HOST_GID="$(id -g)" \
  -v "$PWD/lidarslam_output:/lidarslam_ws/output" \
  ghcr.io/rsasaki0109/lidar_slam_ros2:v0.10.0-humble

The 517 MB MID-360 demo writes lidarslam_output/mid360_demo/ as your user. Other platforms: Getting Started.

Map your own bag (one command after install)

lidarslam-map start /path/to/rosbag2

Run lidarslam-map with no arguments for a guided start, or lidarslam-map doctor first: it uses no network and writes no files. See supported inputs.

Build + verified demo from source (one helper)

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone --recursive https://github.com/rsasaki0109/lidar_slam_ros2.git
cd lidar_slam_ros2
bash scripts/source_quickstart.sh

The helper detects Humble/Jazzy, installs the dependencies, builds the six maintained packages and runs the verified demo (--dry-run, --build-only). It prints a lidarslam-map path that auto-activates this build. Needs ROS 2, 8 GiB and about 30 minutes. Before handoff: python3 scripts/check_first_map_verification_package.py --json, continue only on READY.

Use your own bag

For an Ouster, Velodyne, RoboSense or other PointCloud2 bag, do not edit this package’s launch files or YAML first: run lidarslam-map doctor, then lidarslam-map start. It checks topics, frames, fields, timestamps, a maintained profile and calibration, and stops unsafe inputs with a stable reason code and one next action. Maintained inputs: PointCloud2+Imu, PointCloud2+NavSatFix, VelodyneScan+Applanix GSOF49.

  • Docker, no ROS: bash scripts/docker_map_bag.sh /absolute/path/to/rosbag2 mounts the bag read-only (Docker Own-Bag Map).
  • After a run: lidarslam-map view, lidarslam-map sessions, lidarslam-map compare day1 day2, lidarslam-map support day1, lidarslam-map merge day1 day2 --output-dir site_project.
  • Report on a fixed output: lidarslam-map report /path/to/output/mid360_demo --json (first-map validation guide).
  • Automation: lidarslam-map run (Operator workflows). Localization: Localize On The Map.

Why lidarslam_ros2

  • Autoware-compatible output: verify_autoware_map.py prints map_verify: PASS on every saved bundle.
  • lanelet2 auto-generation from the SLAM trajectory, validated for Autoware routing.
  • Surveyed ground truth: per-dataset APE thresholds gate every release in CI (accuracy).
  • Loop closure, GPL-free: Scan Context, BEV / SOLiD / Triangle descriptors and 3D-BBS verification (opt-in).
  • Tunnels and fog: radar fusion maps a ~500 m tunnel; without radar, an Ouster preset holds all ten ENWIDE sequences; on GEODE’s 13 held-out tunnel bags, no failure but not the most accurate (comparison, guide).
  • Deterministic offline mapping: byte-identical trajectories, loop edges and submaps.
  • Refined maps: plane bundle adjustment under holdout-validated thresholds (evidence).
flowchart LR
    bag(["rosbag2"]) --> rko["RKO-LIO<br/>LiDAR-inertial odometry"]
    rko --> gbs["graph_based_slam<br/>loop closure + graph optimization"]
    gbs --> bundle["Autoware map bundle<br/>pointcloud_map · lanelet2 · projector info"]

Camera-coloured point-cloud maps

The pipeline refines each camera pose against the LiDAR map, then projects the pixels onto it. On the park walk at the top (RTK-SLAM Stadtgarten 2; MP4 · GIF) the refinement cuts the held-out epipolar error from 4.02 to 0.67 px (tool, release reference).

python3 tools/colored_map/colored_map_pipeline.py \
  <bag> output/<run>/traj_corrected.tum output/<run>/colored_map \
  --raw-traj output/<run>/traj_raw.tum \
  --extrinsic configs/gaussian_splatting/<lidar_camera_extrinsic>.yaml

Moving rigs: --refine-spatiotemporal-calibration (design). Regression gates: Benchmarking.

Open-source benchmark results

On the same HILTI 2022 exp04 LiDAR/IMU input and CPU-only host, the competitive

File truncated at 100 lines see the full file

CONTRIBUTING

Contributing

Thanks for contributing to lidarslam_ros2.

This repository is trying to be a practical default for ROS 2 LiDAR SLAM and Autoware pointcloud-map generation. Contributions are most useful when they are easy to reproduce, easy to compare, and clearly scoped.

Participation is governed by the Code of Conduct. The Governance, Support, and Security policies explain decisions, help routes, and private vulnerability reporting.

What To Send

Useful contributions include:

  • bug fixes in the default permissive workflow
  • Autoware pointcloud-map integration fixes
  • benchmark results with reproducible commands and artifacts
  • parameter improvements backed by logs and trajectory metrics
  • documentation improvements that reduce setup time

Default Workflow Policy

The default and recommended workflow in this repository is permissive-license only. Contributions that change the default path should preserve that property.

Current default path:

  • RKO-LIO + graph_based_slam
  • local Scan Context implementation
  • Autoware-compatible pointcloud map output

Research frontends with other licenses can still be discussed, but they should not silently become the default path.

Repository Layout

Keep the repository root limited to project metadata and primary entry-point documents. Place commands under scripts/, incident-specific utilities under scripts/recovery/, offline libraries under tools/, and small research outputs under docs/research/artifacts/. Do not commit colcon manifests or other generated build products. See the repository layout guide for the complete map.

Autoware Naming And Trademark Guidance

Keep Autoware references descriptive.

Preferred wording:

  • Autoware-compatible pointcloud map
  • pointcloud-map workflow for Autoware
  • works with Autoware
  • built on Autoware

Avoid branding this repository or a derived product as if it were an official Autoware product or a Foundation-approved distribution.

Avoid wording such as:

  • Autoware-ready as a product tag line
  • official Autoware
  • Autoware <product-name>
  • certified by Autoware
  • endorsed by the Autoware Foundation

If in doubt, prefer compatibility language over product-name language.

Before Opening An Issue

Please collect the smallest reproducible case you can. Use the structured bug, feature, sensor-support, benchmark, or Autoware issue form that best matches the request. Usage questions must include the diagnostic bundle listed in SUPPORT.md.

If you completed a first map from the public docs without live maintainer guidance, use the independent first-map validation form. Passing reports may count toward the v1.0 three-user gate; failed attempts are recorded as onboarding findings and are just as valuable.

For bug reports, keep ordinary doctor <bag> --json output local because it contains the bag path and local commands. Instead run and review:

lidarslam-map doctor <rosbag2_dir> --public-json

Paste that complete public-doctor-evidence-v1 path-free JSON, a redacted command shape, expected/observed behavior, and either one reviewed support ZIP from an existing session or an explicit no-session/no-ZIP statement with the first finding code. Never attach a bag, map, trajectory, raw log/data, parameter file, terminal history, or private-site image.

For Autoware-related reports, include:

  • projector type and whether an origin exists, with every coordinate and MGRS/grid identifier and precise origin value replaced by REDACTED

File truncated at 100 lines see the full file

# Contributing Thanks for contributing to `lidarslam_ros2`. This repository is trying to be a practical default for ROS 2 LiDAR SLAM and Autoware pointcloud-map generation. Contributions are most useful when they are easy to reproduce, easy to compare, and clearly scoped. Participation is governed by the [Code of Conduct](CODE_OF_CONDUCT.md). The [Governance](GOVERNANCE.md), [Support](SUPPORT.md), and [Security](SECURITY.md) policies explain decisions, help routes, and private vulnerability reporting. ## What To Send Useful contributions include: - bug fixes in the default permissive workflow - Autoware pointcloud-map integration fixes - benchmark results with reproducible commands and artifacts - parameter improvements backed by logs and trajectory metrics - documentation improvements that reduce setup time ## Default Workflow Policy The default and recommended workflow in this repository is permissive-license only. Contributions that change the default path should preserve that property. Current default path: - `RKO-LIO + graph_based_slam` - local Scan Context implementation - Autoware-compatible pointcloud map output Research frontends with other licenses can still be discussed, but they should not silently become the default path. ## Repository Layout Keep the repository root limited to project metadata and primary entry-point documents. Place commands under `scripts/`, incident-specific utilities under `scripts/recovery/`, offline libraries under `tools/`, and small research outputs under `docs/research/artifacts/`. Do not commit colcon manifests or other generated build products. See the [repository layout guide](docs/repository-layout.md) for the complete map. ## Autoware Naming And Trademark Guidance Keep Autoware references descriptive. Preferred wording: - `Autoware-compatible pointcloud map` - `pointcloud-map workflow for Autoware` - `works with Autoware` - `built on Autoware` Avoid branding this repository or a derived product as if it were an official Autoware product or a Foundation-approved distribution. Avoid wording such as: - `Autoware-ready` as a product tag line - `official Autoware` - `Autoware ` - `certified by Autoware` - `endorsed by the Autoware Foundation` If in doubt, prefer compatibility language over product-name language. ## Before Opening An Issue Please collect the smallest reproducible case you can. Use the structured bug, feature, sensor-support, benchmark, or Autoware issue form that best matches the request. Usage questions must include the diagnostic bundle listed in [SUPPORT.md](SUPPORT.md). If you completed a first map from the public docs without live maintainer guidance, use the [independent first-map validation](docs/external-first-map-validation.md) form. Passing reports may count toward the v1.0 three-user gate; failed attempts are recorded as onboarding findings and are just as valuable. For bug reports, keep ordinary `doctor --json` output local because it contains the bag path and local commands. Instead run and review: ```bash lidarslam-map doctor --public-json ``` Paste that complete `public-doctor-evidence-v1` path-free JSON, a redacted command shape, expected/observed behavior, and either one reviewed support ZIP from an existing session or an explicit no-session/no-ZIP statement with the first finding code. Never attach a bag, map, trajectory, raw log/data, parameter file, terminal history, or private-site image. For Autoware-related reports, include: - projector type and whether an origin exists, with every coordinate and MGRS/grid identifier and precise origin value replaced by `REDACTED` File truncated at 100 lines [see the full file](https://github.com/rsasaki0109/lidarslam_ros2/tree/develop/CONTRIBUTING.md)
No version for distro noetic showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/rsasaki0109/lidarslam_ros2.git
VCS Type git
VCS Version develop
Last Updated 2026-10-23
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

README

lidar_slam_ros2

CI License: BSD-2-Clause ROS 2: Humble | Jazzy GitHub stars

Live map building on a handheld outdoor walk, coloured by when each part was mapped Camera-coloured SLAM point-cloud map of a park Handheld Ouster OS1-64 going down one stairwell and up another UGV with an Ouster OS1-64 mapping a metro tunnel

Outdoor walk, APE 0.55 m (Koide, CC BY 4.0) · camera-coloured park (RTK-SLAM, CC BY 4.0) · stairs, ATE 0.24 m on development data · held-out metro tunnel, 0.38 m like BIEVR-LIO and FAST-LIO2 (GEODE). How these were made.

Turn a rosbag into a map you can actually drive on. ROS 2 LiDAR SLAM that writes an Autoware-compatible map bundle: pointcloud_map/, map_projector_info.yaml and lanelet2. RKO-LIO (MIT) + graph_based_slam (BSD-2), no GPL on the default workflow. 日本語クイックスタート · release notes v0.10.0 · next v0.10.1

Quickstart

Choose your shortest path

Goal Start here Safety and cost boundary
See a verified map, no build Default if unsure: Docker demo Stable v0.10.0-humble; needs Docker; host writes stay in ./lidarslam_output.
Map my own rosbag Own-bag route: lidarslam-map doctor /path/to/rosbag2 Read-only diagnosis first; then lidarslam-map start /path/to/rosbag2 writes a new output.
Build from source or contribute Source quickstart: bash scripts/source_quickstart.sh --dry-run Release v0.10.0; needs ROS 2, 8 GiB, and roughly 30 minutes.

Try it with Docker (one command, no build)

docker run --rm -e LIDARSLAM_HOST_UID="$(id -u)" -e LIDARSLAM_HOST_GID="$(id -g)" \
  -v "$PWD/lidarslam_output:/lidarslam_ws/output" \
  ghcr.io/rsasaki0109/lidar_slam_ros2:v0.10.0-humble

The 517 MB MID-360 demo writes lidarslam_output/mid360_demo/ as your user. Other platforms: Getting Started.

Map your own bag (one command after install)

lidarslam-map start /path/to/rosbag2

Run lidarslam-map with no arguments for a guided start, or lidarslam-map doctor first: it uses no network and writes no files. See supported inputs.

Build + verified demo from source (one helper)

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone --recursive https://github.com/rsasaki0109/lidar_slam_ros2.git
cd lidar_slam_ros2
bash scripts/source_quickstart.sh

The helper detects Humble/Jazzy, installs the dependencies, builds the six maintained packages and runs the verified demo (--dry-run, --build-only). It prints a lidarslam-map path that auto-activates this build. Needs ROS 2, 8 GiB and about 30 minutes. Before handoff: python3 scripts/check_first_map_verification_package.py --json, continue only on READY.

Use your own bag

For an Ouster, Velodyne, RoboSense or other PointCloud2 bag, do not edit this package’s launch files or YAML first: run lidarslam-map doctor, then lidarslam-map start. It checks topics, frames, fields, timestamps, a maintained profile and calibration, and stops unsafe inputs with a stable reason code and one next action. Maintained inputs: PointCloud2+Imu, PointCloud2+NavSatFix, VelodyneScan+Applanix GSOF49.

  • Docker, no ROS: bash scripts/docker_map_bag.sh /absolute/path/to/rosbag2 mounts the bag read-only (Docker Own-Bag Map).
  • After a run: lidarslam-map view, lidarslam-map sessions, lidarslam-map compare day1 day2, lidarslam-map support day1, lidarslam-map merge day1 day2 --output-dir site_project.
  • Report on a fixed output: lidarslam-map report /path/to/output/mid360_demo --json (first-map validation guide).
  • Automation: lidarslam-map run (Operator workflows). Localization: Localize On The Map.

Why lidarslam_ros2

  • Autoware-compatible output: verify_autoware_map.py prints map_verify: PASS on every saved bundle.
  • lanelet2 auto-generation from the SLAM trajectory, validated for Autoware routing.
  • Surveyed ground truth: per-dataset APE thresholds gate every release in CI (accuracy).
  • Loop closure, GPL-free: Scan Context, BEV / SOLiD / Triangle descriptors and 3D-BBS verification (opt-in).
  • Tunnels and fog: radar fusion maps a ~500 m tunnel; without radar, an Ouster preset holds all ten ENWIDE sequences; on GEODE’s 13 held-out tunnel bags, no failure but not the most accurate (comparison, guide).
  • Deterministic offline mapping: byte-identical trajectories, loop edges and submaps.
  • Refined maps: plane bundle adjustment under holdout-validated thresholds (evidence).
flowchart LR
    bag(["rosbag2"]) --> rko["RKO-LIO<br/>LiDAR-inertial odometry"]
    rko --> gbs["graph_based_slam<br/>loop closure + graph optimization"]
    gbs --> bundle["Autoware map bundle<br/>pointcloud_map · lanelet2 · projector info"]

Camera-coloured point-cloud maps

The pipeline refines each camera pose against the LiDAR map, then projects the pixels onto it. On the park walk at the top (RTK-SLAM Stadtgarten 2; MP4 · GIF) the refinement cuts the held-out epipolar error from 4.02 to 0.67 px (tool, release reference).

python3 tools/colored_map/colored_map_pipeline.py \
  <bag> output/<run>/traj_corrected.tum output/<run>/colored_map \
  --raw-traj output/<run>/traj_raw.tum \
  --extrinsic configs/gaussian_splatting/<lidar_camera_extrinsic>.yaml

Moving rigs: --refine-spatiotemporal-calibration (design). Regression gates: Benchmarking.

Open-source benchmark results

On the same HILTI 2022 exp04 LiDAR/IMU input and CPU-only host, the competitive

File truncated at 100 lines see the full file

CONTRIBUTING

Contributing

Thanks for contributing to lidarslam_ros2.

This repository is trying to be a practical default for ROS 2 LiDAR SLAM and Autoware pointcloud-map generation. Contributions are most useful when they are easy to reproduce, easy to compare, and clearly scoped.

Participation is governed by the Code of Conduct. The Governance, Support, and Security policies explain decisions, help routes, and private vulnerability reporting.

What To Send

Useful contributions include:

  • bug fixes in the default permissive workflow
  • Autoware pointcloud-map integration fixes
  • benchmark results with reproducible commands and artifacts
  • parameter improvements backed by logs and trajectory metrics
  • documentation improvements that reduce setup time

Default Workflow Policy

The default and recommended workflow in this repository is permissive-license only. Contributions that change the default path should preserve that property.

Current default path:

  • RKO-LIO + graph_based_slam
  • local Scan Context implementation
  • Autoware-compatible pointcloud map output

Research frontends with other licenses can still be discussed, but they should not silently become the default path.

Repository Layout

Keep the repository root limited to project metadata and primary entry-point documents. Place commands under scripts/, incident-specific utilities under scripts/recovery/, offline libraries under tools/, and small research outputs under docs/research/artifacts/. Do not commit colcon manifests or other generated build products. See the repository layout guide for the complete map.

Autoware Naming And Trademark Guidance

Keep Autoware references descriptive.

Preferred wording:

  • Autoware-compatible pointcloud map
  • pointcloud-map workflow for Autoware
  • works with Autoware
  • built on Autoware

Avoid branding this repository or a derived product as if it were an official Autoware product or a Foundation-approved distribution.

Avoid wording such as:

  • Autoware-ready as a product tag line
  • official Autoware
  • Autoware <product-name>
  • certified by Autoware
  • endorsed by the Autoware Foundation

If in doubt, prefer compatibility language over product-name language.

Before Opening An Issue

Please collect the smallest reproducible case you can. Use the structured bug, feature, sensor-support, benchmark, or Autoware issue form that best matches the request. Usage questions must include the diagnostic bundle listed in SUPPORT.md.

If you completed a first map from the public docs without live maintainer guidance, use the independent first-map validation form. Passing reports may count toward the v1.0 three-user gate; failed attempts are recorded as onboarding findings and are just as valuable.

For bug reports, keep ordinary doctor <bag> --json output local because it contains the bag path and local commands. Instead run and review:

lidarslam-map doctor <rosbag2_dir> --public-json

Paste that complete public-doctor-evidence-v1 path-free JSON, a redacted command shape, expected/observed behavior, and either one reviewed support ZIP from an existing session or an explicit no-session/no-ZIP statement with the first finding code. Never attach a bag, map, trajectory, raw log/data, parameter file, terminal history, or private-site image.

For Autoware-related reports, include:

  • projector type and whether an origin exists, with every coordinate and MGRS/grid identifier and precise origin value replaced by REDACTED

File truncated at 100 lines see the full file

# Contributing Thanks for contributing to `lidarslam_ros2`. This repository is trying to be a practical default for ROS 2 LiDAR SLAM and Autoware pointcloud-map generation. Contributions are most useful when they are easy to reproduce, easy to compare, and clearly scoped. Participation is governed by the [Code of Conduct](CODE_OF_CONDUCT.md). The [Governance](GOVERNANCE.md), [Support](SUPPORT.md), and [Security](SECURITY.md) policies explain decisions, help routes, and private vulnerability reporting. ## What To Send Useful contributions include: - bug fixes in the default permissive workflow - Autoware pointcloud-map integration fixes - benchmark results with reproducible commands and artifacts - parameter improvements backed by logs and trajectory metrics - documentation improvements that reduce setup time ## Default Workflow Policy The default and recommended workflow in this repository is permissive-license only. Contributions that change the default path should preserve that property. Current default path: - `RKO-LIO + graph_based_slam` - local Scan Context implementation - Autoware-compatible pointcloud map output Research frontends with other licenses can still be discussed, but they should not silently become the default path. ## Repository Layout Keep the repository root limited to project metadata and primary entry-point documents. Place commands under `scripts/`, incident-specific utilities under `scripts/recovery/`, offline libraries under `tools/`, and small research outputs under `docs/research/artifacts/`. Do not commit colcon manifests or other generated build products. See the [repository layout guide](docs/repository-layout.md) for the complete map. ## Autoware Naming And Trademark Guidance Keep Autoware references descriptive. Preferred wording: - `Autoware-compatible pointcloud map` - `pointcloud-map workflow for Autoware` - `works with Autoware` - `built on Autoware` Avoid branding this repository or a derived product as if it were an official Autoware product or a Foundation-approved distribution. Avoid wording such as: - `Autoware-ready` as a product tag line - `official Autoware` - `Autoware ` - `certified by Autoware` - `endorsed by the Autoware Foundation` If in doubt, prefer compatibility language over product-name language. ## Before Opening An Issue Please collect the smallest reproducible case you can. Use the structured bug, feature, sensor-support, benchmark, or Autoware issue form that best matches the request. Usage questions must include the diagnostic bundle listed in [SUPPORT.md](SUPPORT.md). If you completed a first map from the public docs without live maintainer guidance, use the [independent first-map validation](docs/external-first-map-validation.md) form. Passing reports may count toward the v1.0 three-user gate; failed attempts are recorded as onboarding findings and are just as valuable. For bug reports, keep ordinary `doctor --json` output local because it contains the bag path and local commands. Instead run and review: ```bash lidarslam-map doctor --public-json ``` Paste that complete `public-doctor-evidence-v1` path-free JSON, a redacted command shape, expected/observed behavior, and either one reviewed support ZIP from an existing session or an explicit no-session/no-ZIP statement with the first finding code. Never attach a bag, map, trajectory, raw log/data, parameter file, terminal history, or private-site image. For Autoware-related reports, include: - projector type and whether an origin exists, with every coordinate and MGRS/grid identifier and precise origin value replaced by `REDACTED` File truncated at 100 lines [see the full file](https://github.com/rsasaki0109/lidarslam_ros2/tree/develop/CONTRIBUTING.md)