Package symbol

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.4.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MOLAorg/mola_lidar_odometry.git
VCS Type git
VCS Version develop
Last Updated 2026-11-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format Docs codecov

mola_lidar_odometry

LIDAR odometry component based on the MOLA and MRPT frameworks, compatible with ROS 2.

Contents

This repository provides a C++ library mola_lidar_odometry implementing LIDAR odometry. Sensor input is provided via MOLA components, and ROS 2 example launch files are provided in ros2-launchs.

A CLI interface mola-lidar-odometry-cli is also provided for running on offline datasets.

Build and install

Refer to: https://docs.mola-slam.org/latest/#installing

Lidar Inertial Odometry (LIO) demo with Oxford Spires: Peek 2025-08-31 11-36

Lidar Odometry (LO) demo with KITTI: mola-slam-kitti-demo

Documentation and tutorials

See: https://docs.mola-slam.org/

ROS build farm status

Distro Build dev Release
ROS 2 Humble (u22.04) Build Status Version
ROS 2 Jazzy (u24.04) Build Status Version
ROS 2 Kilted (u24.04) Build Status Version
ROS 2 Lyrical (u26.04) Build Status Version
ROS 2 Rolling (u26.04) Build Status Version

Binary package build status per ROS 2 distro:

Package ROS 2 Humble
(u22.04)
ROS 2 Jazzy
(u24.04)
ROS 2 Kilted
(u24.04)
ROS 2 Lyrical
(u26.04)
ROS 2 Rolling
(u26.04)
mola_lidar_odometry Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status

Each cell stacks the badges for that ROS 2 distro, in this order (when available):

  • Ubuntu (amd64)
  • Ubuntu (arm64)
  • RHEL (x86_64) – not available for Humble, since mrpt3 cannot be built there.
  • Fedora (x86_64) – only available since ROS 2 Lyrical.
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

@article{blanco2025mola_lo,
    author = {Blanco-Claraco, Jose Luis},
    title ={{A flexible framework for accurate LiDAR odometry, map manipulation, and localization}},
    journal = {The International Journal of Robotics Research},
    volume = {44},
    number = {9},
    pages = {1553--1599},
    year = {2025},
    doi = {10.1177/02783649251316881},
    URL = { https://doi.org/10.1177/02783649251316881},
    eprint = {2407.20465},
}

License

Copyright (C) 2018-2026 Jose Luis Blanco jlblanco@ual.es, University of Almeria

This package is released under the GNU GPL v3 license as open source, with the main intention of being useful for research and evaluation purposes. Commercial licenses available upon request.

Contributions require acceptance of the Contributor License Agreement (CLA).

CHANGELOG

Changelog for package mola_lidar_odometry

3.4.0 (2026-11-01)

  • Initial localization: global search around an uncertain state estimator pose, with z from the map ground and a minimum yaw range (MOLA_LO_INIT_GLOBAL_SEARCH_MIN_YAW)
  • Place the first keyframe at the initial localization pose; re-initialize from the state estimator after a bad first ICP
  • Post-relocalization: start ICP from the re-localized pose; relocalize_from_gnss() resets the state estimator first (#193)
  • GICP pipelines: IncrementalPointCloud (voxel hash index) is the default local map; index type and view-direction filter exposed in the pipelines
  • lidar3d-gicp-dual-tsdf: add the TSDF layer with $append (requires mola_yaml >= 3.3.3)
  • Optional attitude-only IMU, also stored into simplemap keyframes
  • New FoMo dataset profile
  • mola-lidar-odometry-cli: read dataset entries ahead on a background thread; cap TBB threads to physical cores; exit with an error after a fatal error
  • ROS 2 launch: smoother arguments reach mola-cli; publish_local_map argument; no IMU gravity factor in localization-only mode by default
  • Local map publishing: xyz (+intensity) only, off the state lock
  • Drop invalid input (IMU, GNSS) instead of stopping the odometry; discard queued scans after a fatal error
  • Fix a reference cycle with BridgeROS2 that kept modules alive after shutdown
  • Fix a deadlock when the state estimator publishes its geo-referencing; several thread safety fixes in reset(), map_save() and queued requests
  • ICP prior: convert the motion model prior and information to the solver tangent
  • De-skew in place; drop inserted points closer than 0.05 m to the incremental local map
  • GUI: option to hide back-facing points; trajectory cost no longer grows with its length
  • Online version check fixes; new MOLA_LO_DISABLE_VERSION_CHECK
  • Fix configure on Humble with CMake >= 3.27
  • New tests: headless launch runs, initial localization on a real dataset fragment, local map publishing, error and concurrency paths
  • Docs and CI updates
  • Contributors: Jose Luis Blanco-Claraco

3.3.0 (2026-09-28)

  • viz: expose grid spacing as env var
  • Ouster Rev8 launcher: accept low-overlap ICP, predict motion with the IMU (#190)
  • Ouster Rev8 launcher: incremental local map and per-point RGB coloring by default
  • add rosbag1 as build dep for binaries to have this functionality
  • ci: add GitHub release workflow on version tags
  • Recover the observation radius from the raw scan when every filtered layer is empty
  • Add mola-lo-gui-ouster-rev8, accept an .osf argument in the Ouster wrappers
  • Feed IMU samples to the generators through one shared output map
  • Test that every pipeline resolves; document pipeline blocks
  • Pipelines: rebuild the single-filter GICP variant as an overlay
  • Pipelines: assemble the 3D pipelines from shared blocks
  • deskewTwistFromOdometry: use the covered interval when odometry starts mid-sweep
  • Launchers: pin the first pose when selecting the smoother
  • De-skew with an independent odometry's velocity (deskew_odometry_sensor_label)
  • feat: expose a weight on the pose prior handed to the ICP solver
  • feat: a refused registration contributes the prediction, not a gap
  • feat: optional Mahalanobis gate on the ICP registration result
  • offline CLI: do not publish the local map by default
  • GrandTour pipeline: expose the cov2cov incidence and per-point range weighting
  • pipelines: use $import/$define to collapse thin variants, drop stale experiments
  • GrandTour: select the smoother and a scene-adaptive point budget
  • feat: add --output-tum-path-smoothed to the offline CLI
  • Default pipeline: enable the local map's covariance cache admission gate
  • IncrementalPointCloud: own default for the eviction cube, 1.0x radius
  • Publisher: reach the points-map view via mrpt::<maps::asPointsMap>()
  • remove obsolete rgbd pipeline (refer to mola_vision)
  • gicp pipeline: new default max icp iters 25->16
  • store IMU readings in simplemaps for attitude aid in georef (#173)
  • Move the pipelines to the renamed, squared robust-kernel scale
  • Expose the TSDF layer's rendering knobs in the dual-map pipeline
  • GrandTour: add a 'hesai_raw' LiDAR selector for the uncompensated cloud
  • GrandTour: keep the scan point timestamps at their own reference
  • cli: --module, to run a second front-end in the batch tool
  • Add drop_stale_scans: a lossless input queue for offline runs
  • Optional, env-gated log of the local-map insert/skip decision
  • KITTI eval: record that MOLA_INITIAL_VX is coupled to the pipeline, not the dataset
  • KITTI: run the shipped pipeline, which halves absolute trajectory error
  • Stop refusing recordings with more bags than launch-file slots

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

Package symbol

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
jazzy

Package Summary

Version 3.4.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MOLAorg/mola_lidar_odometry.git
VCS Type git
VCS Version develop
Last Updated 2026-11-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format Docs codecov

mola_lidar_odometry

LIDAR odometry component based on the MOLA and MRPT frameworks, compatible with ROS 2.

Contents

This repository provides a C++ library mola_lidar_odometry implementing LIDAR odometry. Sensor input is provided via MOLA components, and ROS 2 example launch files are provided in ros2-launchs.

A CLI interface mola-lidar-odometry-cli is also provided for running on offline datasets.

Build and install

Refer to: https://docs.mola-slam.org/latest/#installing

Lidar Inertial Odometry (LIO) demo with Oxford Spires: Peek 2025-08-31 11-36

Lidar Odometry (LO) demo with KITTI: mola-slam-kitti-demo

Documentation and tutorials

See: https://docs.mola-slam.org/

ROS build farm status

Distro Build dev Release
ROS 2 Humble (u22.04) Build Status Version
ROS 2 Jazzy (u24.04) Build Status Version
ROS 2 Kilted (u24.04) Build Status Version
ROS 2 Lyrical (u26.04) Build Status Version
ROS 2 Rolling (u26.04) Build Status Version

Binary package build status per ROS 2 distro:

Package ROS 2 Humble
(u22.04)
ROS 2 Jazzy
(u24.04)
ROS 2 Kilted
(u24.04)
ROS 2 Lyrical
(u26.04)
ROS 2 Rolling
(u26.04)
mola_lidar_odometry Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status

Each cell stacks the badges for that ROS 2 distro, in this order (when available):

  • Ubuntu (amd64)
  • Ubuntu (arm64)
  • RHEL (x86_64) – not available for Humble, since mrpt3 cannot be built there.
  • Fedora (x86_64) – only available since ROS 2 Lyrical.
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

@article{blanco2025mola_lo,
    author = {Blanco-Claraco, Jose Luis},
    title ={{A flexible framework for accurate LiDAR odometry, map manipulation, and localization}},
    journal = {The International Journal of Robotics Research},
    volume = {44},
    number = {9},
    pages = {1553--1599},
    year = {2025},
    doi = {10.1177/02783649251316881},
    URL = { https://doi.org/10.1177/02783649251316881},
    eprint = {2407.20465},
}

License

Copyright (C) 2018-2026 Jose Luis Blanco jlblanco@ual.es, University of Almeria

This package is released under the GNU GPL v3 license as open source, with the main intention of being useful for research and evaluation purposes. Commercial licenses available upon request.

Contributions require acceptance of the Contributor License Agreement (CLA).

CHANGELOG

Changelog for package mola_lidar_odometry

3.4.0 (2026-11-01)

  • Initial localization: global search around an uncertain state estimator pose, with z from the map ground and a minimum yaw range (MOLA_LO_INIT_GLOBAL_SEARCH_MIN_YAW)
  • Place the first keyframe at the initial localization pose; re-initialize from the state estimator after a bad first ICP
  • Post-relocalization: start ICP from the re-localized pose; relocalize_from_gnss() resets the state estimator first (#193)
  • GICP pipelines: IncrementalPointCloud (voxel hash index) is the default local map; index type and view-direction filter exposed in the pipelines
  • lidar3d-gicp-dual-tsdf: add the TSDF layer with $append (requires mola_yaml >= 3.3.3)
  • Optional attitude-only IMU, also stored into simplemap keyframes
  • New FoMo dataset profile
  • mola-lidar-odometry-cli: read dataset entries ahead on a background thread; cap TBB threads to physical cores; exit with an error after a fatal error
  • ROS 2 launch: smoother arguments reach mola-cli; publish_local_map argument; no IMU gravity factor in localization-only mode by default
  • Local map publishing: xyz (+intensity) only, off the state lock
  • Drop invalid input (IMU, GNSS) instead of stopping the odometry; discard queued scans after a fatal error
  • Fix a reference cycle with BridgeROS2 that kept modules alive after shutdown
  • Fix a deadlock when the state estimator publishes its geo-referencing; several thread safety fixes in reset(), map_save() and queued requests
  • ICP prior: convert the motion model prior and information to the solver tangent
  • De-skew in place; drop inserted points closer than 0.05 m to the incremental local map
  • GUI: option to hide back-facing points; trajectory cost no longer grows with its length
  • Online version check fixes; new MOLA_LO_DISABLE_VERSION_CHECK
  • Fix configure on Humble with CMake >= 3.27
  • New tests: headless launch runs, initial localization on a real dataset fragment, local map publishing, error and concurrency paths
  • Docs and CI updates
  • Contributors: Jose Luis Blanco-Claraco

3.3.0 (2026-09-28)

  • viz: expose grid spacing as env var
  • Ouster Rev8 launcher: accept low-overlap ICP, predict motion with the IMU (#190)
  • Ouster Rev8 launcher: incremental local map and per-point RGB coloring by default
  • add rosbag1 as build dep for binaries to have this functionality
  • ci: add GitHub release workflow on version tags
  • Recover the observation radius from the raw scan when every filtered layer is empty
  • Add mola-lo-gui-ouster-rev8, accept an .osf argument in the Ouster wrappers
  • Feed IMU samples to the generators through one shared output map
  • Test that every pipeline resolves; document pipeline blocks
  • Pipelines: rebuild the single-filter GICP variant as an overlay
  • Pipelines: assemble the 3D pipelines from shared blocks
  • deskewTwistFromOdometry: use the covered interval when odometry starts mid-sweep
  • Launchers: pin the first pose when selecting the smoother
  • De-skew with an independent odometry's velocity (deskew_odometry_sensor_label)
  • feat: expose a weight on the pose prior handed to the ICP solver
  • feat: a refused registration contributes the prediction, not a gap
  • feat: optional Mahalanobis gate on the ICP registration result
  • offline CLI: do not publish the local map by default
  • GrandTour pipeline: expose the cov2cov incidence and per-point range weighting
  • pipelines: use $import/$define to collapse thin variants, drop stale experiments
  • GrandTour: select the smoother and a scene-adaptive point budget
  • feat: add --output-tum-path-smoothed to the offline CLI
  • Default pipeline: enable the local map's covariance cache admission gate
  • IncrementalPointCloud: own default for the eviction cube, 1.0x radius
  • Publisher: reach the points-map view via mrpt::<maps::asPointsMap>()
  • remove obsolete rgbd pipeline (refer to mola_vision)
  • gicp pipeline: new default max icp iters 25->16
  • store IMU readings in simplemaps for attitude aid in georef (#173)
  • Move the pipelines to the renamed, squared robust-kernel scale
  • Expose the TSDF layer's rendering knobs in the dual-map pipeline
  • GrandTour: add a 'hesai_raw' LiDAR selector for the uncompensated cloud
  • GrandTour: keep the scan point timestamps at their own reference
  • cli: --module, to run a second front-end in the batch tool
  • Add drop_stale_scans: a lossless input queue for offline runs
  • Optional, env-gated log of the local-map insert/skip decision
  • KITTI eval: record that MOLA_INITIAL_VX is coupled to the pipeline, not the dataset
  • KITTI: run the shipped pipeline, which halves absolute trajectory error
  • Stop refusing recordings with more bags than launch-file slots

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

Package symbol

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
kilted

Package Summary

Version 3.4.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MOLAorg/mola_lidar_odometry.git
VCS Type git
VCS Version develop
Last Updated 2026-11-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format Docs codecov

mola_lidar_odometry

LIDAR odometry component based on the MOLA and MRPT frameworks, compatible with ROS 2.

Contents

This repository provides a C++ library mola_lidar_odometry implementing LIDAR odometry. Sensor input is provided via MOLA components, and ROS 2 example launch files are provided in ros2-launchs.

A CLI interface mola-lidar-odometry-cli is also provided for running on offline datasets.

Build and install

Refer to: https://docs.mola-slam.org/latest/#installing

Lidar Inertial Odometry (LIO) demo with Oxford Spires: Peek 2025-08-31 11-36

Lidar Odometry (LO) demo with KITTI: mola-slam-kitti-demo

Documentation and tutorials

See: https://docs.mola-slam.org/

ROS build farm status

Distro Build dev Release
ROS 2 Humble (u22.04) Build Status Version
ROS 2 Jazzy (u24.04) Build Status Version
ROS 2 Kilted (u24.04) Build Status Version
ROS 2 Lyrical (u26.04) Build Status Version
ROS 2 Rolling (u26.04) Build Status Version

Binary package build status per ROS 2 distro:

Package ROS 2 Humble
(u22.04)
ROS 2 Jazzy
(u24.04)
ROS 2 Kilted
(u24.04)
ROS 2 Lyrical
(u26.04)
ROS 2 Rolling
(u26.04)
mola_lidar_odometry Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status

Each cell stacks the badges for that ROS 2 distro, in this order (when available):

  • Ubuntu (amd64)
  • Ubuntu (arm64)
  • RHEL (x86_64) – not available for Humble, since mrpt3 cannot be built there.
  • Fedora (x86_64) – only available since ROS 2 Lyrical.
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

@article{blanco2025mola_lo,
    author = {Blanco-Claraco, Jose Luis},
    title ={{A flexible framework for accurate LiDAR odometry, map manipulation, and localization}},
    journal = {The International Journal of Robotics Research},
    volume = {44},
    number = {9},
    pages = {1553--1599},
    year = {2025},
    doi = {10.1177/02783649251316881},
    URL = { https://doi.org/10.1177/02783649251316881},
    eprint = {2407.20465},
}

License

Copyright (C) 2018-2026 Jose Luis Blanco jlblanco@ual.es, University of Almeria

This package is released under the GNU GPL v3 license as open source, with the main intention of being useful for research and evaluation purposes. Commercial licenses available upon request.

Contributions require acceptance of the Contributor License Agreement (CLA).

CHANGELOG

Changelog for package mola_lidar_odometry

3.4.0 (2026-11-01)

  • Initial localization: global search around an uncertain state estimator pose, with z from the map ground and a minimum yaw range (MOLA_LO_INIT_GLOBAL_SEARCH_MIN_YAW)
  • Place the first keyframe at the initial localization pose; re-initialize from the state estimator after a bad first ICP
  • Post-relocalization: start ICP from the re-localized pose; relocalize_from_gnss() resets the state estimator first (#193)
  • GICP pipelines: IncrementalPointCloud (voxel hash index) is the default local map; index type and view-direction filter exposed in the pipelines
  • lidar3d-gicp-dual-tsdf: add the TSDF layer with $append (requires mola_yaml >= 3.3.3)
  • Optional attitude-only IMU, also stored into simplemap keyframes
  • New FoMo dataset profile
  • mola-lidar-odometry-cli: read dataset entries ahead on a background thread; cap TBB threads to physical cores; exit with an error after a fatal error
  • ROS 2 launch: smoother arguments reach mola-cli; publish_local_map argument; no IMU gravity factor in localization-only mode by default
  • Local map publishing: xyz (+intensity) only, off the state lock
  • Drop invalid input (IMU, GNSS) instead of stopping the odometry; discard queued scans after a fatal error
  • Fix a reference cycle with BridgeROS2 that kept modules alive after shutdown
  • Fix a deadlock when the state estimator publishes its geo-referencing; several thread safety fixes in reset(), map_save() and queued requests
  • ICP prior: convert the motion model prior and information to the solver tangent
  • De-skew in place; drop inserted points closer than 0.05 m to the incremental local map
  • GUI: option to hide back-facing points; trajectory cost no longer grows with its length
  • Online version check fixes; new MOLA_LO_DISABLE_VERSION_CHECK
  • Fix configure on Humble with CMake >= 3.27
  • New tests: headless launch runs, initial localization on a real dataset fragment, local map publishing, error and concurrency paths
  • Docs and CI updates
  • Contributors: Jose Luis Blanco-Claraco

3.3.0 (2026-09-28)

  • viz: expose grid spacing as env var
  • Ouster Rev8 launcher: accept low-overlap ICP, predict motion with the IMU (#190)
  • Ouster Rev8 launcher: incremental local map and per-point RGB coloring by default
  • add rosbag1 as build dep for binaries to have this functionality
  • ci: add GitHub release workflow on version tags
  • Recover the observation radius from the raw scan when every filtered layer is empty
  • Add mola-lo-gui-ouster-rev8, accept an .osf argument in the Ouster wrappers
  • Feed IMU samples to the generators through one shared output map
  • Test that every pipeline resolves; document pipeline blocks
  • Pipelines: rebuild the single-filter GICP variant as an overlay
  • Pipelines: assemble the 3D pipelines from shared blocks
  • deskewTwistFromOdometry: use the covered interval when odometry starts mid-sweep
  • Launchers: pin the first pose when selecting the smoother
  • De-skew with an independent odometry's velocity (deskew_odometry_sensor_label)
  • feat: expose a weight on the pose prior handed to the ICP solver
  • feat: a refused registration contributes the prediction, not a gap
  • feat: optional Mahalanobis gate on the ICP registration result
  • offline CLI: do not publish the local map by default
  • GrandTour pipeline: expose the cov2cov incidence and per-point range weighting
  • pipelines: use $import/$define to collapse thin variants, drop stale experiments
  • GrandTour: select the smoother and a scene-adaptive point budget
  • feat: add --output-tum-path-smoothed to the offline CLI
  • Default pipeline: enable the local map's covariance cache admission gate
  • IncrementalPointCloud: own default for the eviction cube, 1.0x radius
  • Publisher: reach the points-map view via mrpt::<maps::asPointsMap>()
  • remove obsolete rgbd pipeline (refer to mola_vision)
  • gicp pipeline: new default max icp iters 25->16
  • store IMU readings in simplemaps for attitude aid in georef (#173)
  • Move the pipelines to the renamed, squared robust-kernel scale
  • Expose the TSDF layer's rendering knobs in the dual-map pipeline
  • GrandTour: add a 'hesai_raw' LiDAR selector for the uncompensated cloud
  • GrandTour: keep the scan point timestamps at their own reference
  • cli: --module, to run a second front-end in the batch tool
  • Add drop_stale_scans: a lossless input queue for offline runs
  • Optional, env-gated log of the local-map insert/skip decision
  • KITTI eval: record that MOLA_INITIAL_VX is coupled to the pipeline, not the dataset
  • KITTI: run the shipped pipeline, which halves absolute trajectory error
  • Stop refusing recordings with more bags than launch-file slots

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

Package symbol

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
lyrical

Package Summary

Version 3.4.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MOLAorg/mola_lidar_odometry.git
VCS Type git
VCS Version develop
Last Updated 2026-11-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format Docs codecov

mola_lidar_odometry

LIDAR odometry component based on the MOLA and MRPT frameworks, compatible with ROS 2.

Contents

This repository provides a C++ library mola_lidar_odometry implementing LIDAR odometry. Sensor input is provided via MOLA components, and ROS 2 example launch files are provided in ros2-launchs.

A CLI interface mola-lidar-odometry-cli is also provided for running on offline datasets.

Build and install

Refer to: https://docs.mola-slam.org/latest/#installing

Lidar Inertial Odometry (LIO) demo with Oxford Spires: Peek 2025-08-31 11-36

Lidar Odometry (LO) demo with KITTI: mola-slam-kitti-demo

Documentation and tutorials

See: https://docs.mola-slam.org/

ROS build farm status

Distro Build dev Release
ROS 2 Humble (u22.04) Build Status Version
ROS 2 Jazzy (u24.04) Build Status Version
ROS 2 Kilted (u24.04) Build Status Version
ROS 2 Lyrical (u26.04) Build Status Version
ROS 2 Rolling (u26.04) Build Status Version

Binary package build status per ROS 2 distro:

Package ROS 2 Humble
(u22.04)
ROS 2 Jazzy
(u24.04)
ROS 2 Kilted
(u24.04)
ROS 2 Lyrical
(u26.04)
ROS 2 Rolling
(u26.04)
mola_lidar_odometry Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status

Each cell stacks the badges for that ROS 2 distro, in this order (when available):

  • Ubuntu (amd64)
  • Ubuntu (arm64)
  • RHEL (x86_64) – not available for Humble, since mrpt3 cannot be built there.
  • Fedora (x86_64) – only available since ROS 2 Lyrical.
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

@article{blanco2025mola_lo,
    author = {Blanco-Claraco, Jose Luis},
    title ={{A flexible framework for accurate LiDAR odometry, map manipulation, and localization}},
    journal = {The International Journal of Robotics Research},
    volume = {44},
    number = {9},
    pages = {1553--1599},
    year = {2025},
    doi = {10.1177/02783649251316881},
    URL = { https://doi.org/10.1177/02783649251316881},
    eprint = {2407.20465},
}

License

Copyright (C) 2018-2026 Jose Luis Blanco jlblanco@ual.es, University of Almeria

This package is released under the GNU GPL v3 license as open source, with the main intention of being useful for research and evaluation purposes. Commercial licenses available upon request.

Contributions require acceptance of the Contributor License Agreement (CLA).

CHANGELOG

Changelog for package mola_lidar_odometry

3.4.0 (2026-11-01)

  • Initial localization: global search around an uncertain state estimator pose, with z from the map ground and a minimum yaw range (MOLA_LO_INIT_GLOBAL_SEARCH_MIN_YAW)
  • Place the first keyframe at the initial localization pose; re-initialize from the state estimator after a bad first ICP
  • Post-relocalization: start ICP from the re-localized pose; relocalize_from_gnss() resets the state estimator first (#193)
  • GICP pipelines: IncrementalPointCloud (voxel hash index) is the default local map; index type and view-direction filter exposed in the pipelines
  • lidar3d-gicp-dual-tsdf: add the TSDF layer with $append (requires mola_yaml >= 3.3.3)
  • Optional attitude-only IMU, also stored into simplemap keyframes
  • New FoMo dataset profile
  • mola-lidar-odometry-cli: read dataset entries ahead on a background thread; cap TBB threads to physical cores; exit with an error after a fatal error
  • ROS 2 launch: smoother arguments reach mola-cli; publish_local_map argument; no IMU gravity factor in localization-only mode by default
  • Local map publishing: xyz (+intensity) only, off the state lock
  • Drop invalid input (IMU, GNSS) instead of stopping the odometry; discard queued scans after a fatal error
  • Fix a reference cycle with BridgeROS2 that kept modules alive after shutdown
  • Fix a deadlock when the state estimator publishes its geo-referencing; several thread safety fixes in reset(), map_save() and queued requests
  • ICP prior: convert the motion model prior and information to the solver tangent
  • De-skew in place; drop inserted points closer than 0.05 m to the incremental local map
  • GUI: option to hide back-facing points; trajectory cost no longer grows with its length
  • Online version check fixes; new MOLA_LO_DISABLE_VERSION_CHECK
  • Fix configure on Humble with CMake >= 3.27
  • New tests: headless launch runs, initial localization on a real dataset fragment, local map publishing, error and concurrency paths
  • Docs and CI updates
  • Contributors: Jose Luis Blanco-Claraco

3.3.0 (2026-09-28)

  • viz: expose grid spacing as env var
  • Ouster Rev8 launcher: accept low-overlap ICP, predict motion with the IMU (#190)
  • Ouster Rev8 launcher: incremental local map and per-point RGB coloring by default
  • add rosbag1 as build dep for binaries to have this functionality
  • ci: add GitHub release workflow on version tags
  • Recover the observation radius from the raw scan when every filtered layer is empty
  • Add mola-lo-gui-ouster-rev8, accept an .osf argument in the Ouster wrappers
  • Feed IMU samples to the generators through one shared output map
  • Test that every pipeline resolves; document pipeline blocks
  • Pipelines: rebuild the single-filter GICP variant as an overlay
  • Pipelines: assemble the 3D pipelines from shared blocks
  • deskewTwistFromOdometry: use the covered interval when odometry starts mid-sweep
  • Launchers: pin the first pose when selecting the smoother
  • De-skew with an independent odometry's velocity (deskew_odometry_sensor_label)
  • feat: expose a weight on the pose prior handed to the ICP solver
  • feat: a refused registration contributes the prediction, not a gap
  • feat: optional Mahalanobis gate on the ICP registration result
  • offline CLI: do not publish the local map by default
  • GrandTour pipeline: expose the cov2cov incidence and per-point range weighting
  • pipelines: use $import/$define to collapse thin variants, drop stale experiments
  • GrandTour: select the smoother and a scene-adaptive point budget
  • feat: add --output-tum-path-smoothed to the offline CLI
  • Default pipeline: enable the local map's covariance cache admission gate
  • IncrementalPointCloud: own default for the eviction cube, 1.0x radius
  • Publisher: reach the points-map view via mrpt::<maps::asPointsMap>()
  • remove obsolete rgbd pipeline (refer to mola_vision)
  • gicp pipeline: new default max icp iters 25->16
  • store IMU readings in simplemaps for attitude aid in georef (#173)
  • Move the pipelines to the renamed, squared robust-kernel scale
  • Expose the TSDF layer's rendering knobs in the dual-map pipeline
  • GrandTour: add a 'hesai_raw' LiDAR selector for the uncompensated cloud
  • GrandTour: keep the scan point timestamps at their own reference
  • cli: --module, to run a second front-end in the batch tool
  • Add drop_stale_scans: a lossless input queue for offline runs
  • Optional, env-gated log of the local-map insert/skip decision
  • KITTI eval: record that MOLA_INITIAL_VX is coupled to the pipeline, not the dataset
  • KITTI: run the shipped pipeline, which halves absolute trajectory error
  • Stop refusing recordings with more bags than launch-file slots

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

Package symbol

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
rolling

Package Summary

Version 3.4.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MOLAorg/mola_lidar_odometry.git
VCS Type git
VCS Version develop
Last Updated 2026-11-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format Docs codecov

mola_lidar_odometry

LIDAR odometry component based on the MOLA and MRPT frameworks, compatible with ROS 2.

Contents

This repository provides a C++ library mola_lidar_odometry implementing LIDAR odometry. Sensor input is provided via MOLA components, and ROS 2 example launch files are provided in ros2-launchs.

A CLI interface mola-lidar-odometry-cli is also provided for running on offline datasets.

Build and install

Refer to: https://docs.mola-slam.org/latest/#installing

Lidar Inertial Odometry (LIO) demo with Oxford Spires: Peek 2025-08-31 11-36

Lidar Odometry (LO) demo with KITTI: mola-slam-kitti-demo

Documentation and tutorials

See: https://docs.mola-slam.org/

ROS build farm status

Distro Build dev Release
ROS 2 Humble (u22.04) Build Status Version
ROS 2 Jazzy (u24.04) Build Status Version
ROS 2 Kilted (u24.04) Build Status Version
ROS 2 Lyrical (u26.04) Build Status Version
ROS 2 Rolling (u26.04) Build Status Version

Binary package build status per ROS 2 distro:

Package ROS 2 Humble
(u22.04)
ROS 2 Jazzy
(u24.04)
ROS 2 Kilted
(u24.04)
ROS 2 Lyrical
(u26.04)
ROS 2 Rolling
(u26.04)
mola_lidar_odometry Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status

Each cell stacks the badges for that ROS 2 distro, in this order (when available):

  • Ubuntu (amd64)
  • Ubuntu (arm64)
  • RHEL (x86_64) – not available for Humble, since mrpt3 cannot be built there.
  • Fedora (x86_64) – only available since ROS 2 Lyrical.
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

@article{blanco2025mola_lo,
    author = {Blanco-Claraco, Jose Luis},
    title ={{A flexible framework for accurate LiDAR odometry, map manipulation, and localization}},
    journal = {The International Journal of Robotics Research},
    volume = {44},
    number = {9},
    pages = {1553--1599},
    year = {2025},
    doi = {10.1177/02783649251316881},
    URL = { https://doi.org/10.1177/02783649251316881},
    eprint = {2407.20465},
}

License

Copyright (C) 2018-2026 Jose Luis Blanco jlblanco@ual.es, University of Almeria

This package is released under the GNU GPL v3 license as open source, with the main intention of being useful for research and evaluation purposes. Commercial licenses available upon request.

Contributions require acceptance of the Contributor License Agreement (CLA).

CHANGELOG

Changelog for package mola_lidar_odometry

3.4.0 (2026-11-01)

  • Initial localization: global search around an uncertain state estimator pose, with z from the map ground and a minimum yaw range (MOLA_LO_INIT_GLOBAL_SEARCH_MIN_YAW)
  • Place the first keyframe at the initial localization pose; re-initialize from the state estimator after a bad first ICP
  • Post-relocalization: start ICP from the re-localized pose; relocalize_from_gnss() resets the state estimator first (#193)
  • GICP pipelines: IncrementalPointCloud (voxel hash index) is the default local map; index type and view-direction filter exposed in the pipelines
  • lidar3d-gicp-dual-tsdf: add the TSDF layer with $append (requires mola_yaml >= 3.3.3)
  • Optional attitude-only IMU, also stored into simplemap keyframes
  • New FoMo dataset profile
  • mola-lidar-odometry-cli: read dataset entries ahead on a background thread; cap TBB threads to physical cores; exit with an error after a fatal error
  • ROS 2 launch: smoother arguments reach mola-cli; publish_local_map argument; no IMU gravity factor in localization-only mode by default
  • Local map publishing: xyz (+intensity) only, off the state lock
  • Drop invalid input (IMU, GNSS) instead of stopping the odometry; discard queued scans after a fatal error
  • Fix a reference cycle with BridgeROS2 that kept modules alive after shutdown
  • Fix a deadlock when the state estimator publishes its geo-referencing; several thread safety fixes in reset(), map_save() and queued requests
  • ICP prior: convert the motion model prior and information to the solver tangent
  • De-skew in place; drop inserted points closer than 0.05 m to the incremental local map
  • GUI: option to hide back-facing points; trajectory cost no longer grows with its length
  • Online version check fixes; new MOLA_LO_DISABLE_VERSION_CHECK
  • Fix configure on Humble with CMake >= 3.27
  • New tests: headless launch runs, initial localization on a real dataset fragment, local map publishing, error and concurrency paths
  • Docs and CI updates
  • Contributors: Jose Luis Blanco-Claraco

3.3.0 (2026-09-28)

  • viz: expose grid spacing as env var
  • Ouster Rev8 launcher: accept low-overlap ICP, predict motion with the IMU (#190)
  • Ouster Rev8 launcher: incremental local map and per-point RGB coloring by default
  • add rosbag1 as build dep for binaries to have this functionality
  • ci: add GitHub release workflow on version tags
  • Recover the observation radius from the raw scan when every filtered layer is empty
  • Add mola-lo-gui-ouster-rev8, accept an .osf argument in the Ouster wrappers
  • Feed IMU samples to the generators through one shared output map
  • Test that every pipeline resolves; document pipeline blocks
  • Pipelines: rebuild the single-filter GICP variant as an overlay
  • Pipelines: assemble the 3D pipelines from shared blocks
  • deskewTwistFromOdometry: use the covered interval when odometry starts mid-sweep
  • Launchers: pin the first pose when selecting the smoother
  • De-skew with an independent odometry's velocity (deskew_odometry_sensor_label)
  • feat: expose a weight on the pose prior handed to the ICP solver
  • feat: a refused registration contributes the prediction, not a gap
  • feat: optional Mahalanobis gate on the ICP registration result
  • offline CLI: do not publish the local map by default
  • GrandTour pipeline: expose the cov2cov incidence and per-point range weighting
  • pipelines: use $import/$define to collapse thin variants, drop stale experiments
  • GrandTour: select the smoother and a scene-adaptive point budget
  • feat: add --output-tum-path-smoothed to the offline CLI
  • Default pipeline: enable the local map's covariance cache admission gate
  • IncrementalPointCloud: own default for the eviction cube, 1.0x radius
  • Publisher: reach the points-map view via mrpt::<maps::asPointsMap>()
  • remove obsolete rgbd pipeline (refer to mola_vision)
  • gicp pipeline: new default max icp iters 25->16
  • store IMU readings in simplemaps for attitude aid in georef (#173)
  • Move the pipelines to the renamed, squared robust-kernel scale
  • Expose the TSDF layer's rendering knobs in the dual-map pipeline
  • GrandTour: add a 'hesai_raw' LiDAR selector for the uncompensated cloud
  • GrandTour: keep the scan point timestamps at their own reference
  • cli: --module, to run a second front-end in the batch tool
  • Add drop_stale_scans: a lossless input queue for offline runs
  • Optional, env-gated log of the local-map insert/skip decision
  • KITTI eval: record that MOLA_INITIAL_VX is coupled to the pipeline, not the dataset
  • KITTI: run the shipped pipeline, which halves absolute trajectory error
  • Stop refusing recordings with more bags than launch-file slots

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.4.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MOLAorg/mola_lidar_odometry.git
VCS Type git
VCS Version develop
Last Updated 2026-11-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format Docs codecov

mola_lidar_odometry

LIDAR odometry component based on the MOLA and MRPT frameworks, compatible with ROS 2.

Contents

This repository provides a C++ library mola_lidar_odometry implementing LIDAR odometry. Sensor input is provided via MOLA components, and ROS 2 example launch files are provided in ros2-launchs.

A CLI interface mola-lidar-odometry-cli is also provided for running on offline datasets.

Build and install

Refer to: https://docs.mola-slam.org/latest/#installing

Lidar Inertial Odometry (LIO) demo with Oxford Spires: Peek 2025-08-31 11-36

Lidar Odometry (LO) demo with KITTI: mola-slam-kitti-demo

Documentation and tutorials

See: https://docs.mola-slam.org/

ROS build farm status

Distro Build dev Release
ROS 2 Humble (u22.04) Build Status Version
ROS 2 Jazzy (u24.04) Build Status Version
ROS 2 Kilted (u24.04) Build Status Version
ROS 2 Lyrical (u26.04) Build Status Version
ROS 2 Rolling (u26.04) Build Status Version

Binary package build status per ROS 2 distro:

Package ROS 2 Humble
(u22.04)
ROS 2 Jazzy
(u24.04)
ROS 2 Kilted
(u24.04)
ROS 2 Lyrical
(u26.04)
ROS 2 Rolling
(u26.04)
mola_lidar_odometry Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status

Each cell stacks the badges for that ROS 2 distro, in this order (when available):

  • Ubuntu (amd64)
  • Ubuntu (arm64)
  • RHEL (x86_64) – not available for Humble, since mrpt3 cannot be built there.
  • Fedora (x86_64) – only available since ROS 2 Lyrical.
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

@article{blanco2025mola_lo,
    author = {Blanco-Claraco, Jose Luis},
    title ={{A flexible framework for accurate LiDAR odometry, map manipulation, and localization}},
    journal = {The International Journal of Robotics Research},
    volume = {44},
    number = {9},
    pages = {1553--1599},
    year = {2025},
    doi = {10.1177/02783649251316881},
    URL = { https://doi.org/10.1177/02783649251316881},
    eprint = {2407.20465},
}

License

Copyright (C) 2018-2026 Jose Luis Blanco jlblanco@ual.es, University of Almeria

This package is released under the GNU GPL v3 license as open source, with the main intention of being useful for research and evaluation purposes. Commercial licenses available upon request.

Contributions require acceptance of the Contributor License Agreement (CLA).

CHANGELOG

Changelog for package mola_lidar_odometry

3.4.0 (2026-11-01)

  • Initial localization: global search around an uncertain state estimator pose, with z from the map ground and a minimum yaw range (MOLA_LO_INIT_GLOBAL_SEARCH_MIN_YAW)
  • Place the first keyframe at the initial localization pose; re-initialize from the state estimator after a bad first ICP
  • Post-relocalization: start ICP from the re-localized pose; relocalize_from_gnss() resets the state estimator first (#193)
  • GICP pipelines: IncrementalPointCloud (voxel hash index) is the default local map; index type and view-direction filter exposed in the pipelines
  • lidar3d-gicp-dual-tsdf: add the TSDF layer with $append (requires mola_yaml >= 3.3.3)
  • Optional attitude-only IMU, also stored into simplemap keyframes
  • New FoMo dataset profile
  • mola-lidar-odometry-cli: read dataset entries ahead on a background thread; cap TBB threads to physical cores; exit with an error after a fatal error
  • ROS 2 launch: smoother arguments reach mola-cli; publish_local_map argument; no IMU gravity factor in localization-only mode by default
  • Local map publishing: xyz (+intensity) only, off the state lock
  • Drop invalid input (IMU, GNSS) instead of stopping the odometry; discard queued scans after a fatal error
  • Fix a reference cycle with BridgeROS2 that kept modules alive after shutdown
  • Fix a deadlock when the state estimator publishes its geo-referencing; several thread safety fixes in reset(), map_save() and queued requests
  • ICP prior: convert the motion model prior and information to the solver tangent
  • De-skew in place; drop inserted points closer than 0.05 m to the incremental local map
  • GUI: option to hide back-facing points; trajectory cost no longer grows with its length
  • Online version check fixes; new MOLA_LO_DISABLE_VERSION_CHECK
  • Fix configure on Humble with CMake >= 3.27
  • New tests: headless launch runs, initial localization on a real dataset fragment, local map publishing, error and concurrency paths
  • Docs and CI updates
  • Contributors: Jose Luis Blanco-Claraco

3.3.0 (2026-09-28)

  • viz: expose grid spacing as env var
  • Ouster Rev8 launcher: accept low-overlap ICP, predict motion with the IMU (#190)
  • Ouster Rev8 launcher: incremental local map and per-point RGB coloring by default
  • add rosbag1 as build dep for binaries to have this functionality
  • ci: add GitHub release workflow on version tags
  • Recover the observation radius from the raw scan when every filtered layer is empty
  • Add mola-lo-gui-ouster-rev8, accept an .osf argument in the Ouster wrappers
  • Feed IMU samples to the generators through one shared output map
  • Test that every pipeline resolves; document pipeline blocks
  • Pipelines: rebuild the single-filter GICP variant as an overlay
  • Pipelines: assemble the 3D pipelines from shared blocks
  • deskewTwistFromOdometry: use the covered interval when odometry starts mid-sweep
  • Launchers: pin the first pose when selecting the smoother
  • De-skew with an independent odometry's velocity (deskew_odometry_sensor_label)
  • feat: expose a weight on the pose prior handed to the ICP solver
  • feat: a refused registration contributes the prediction, not a gap
  • feat: optional Mahalanobis gate on the ICP registration result
  • offline CLI: do not publish the local map by default
  • GrandTour pipeline: expose the cov2cov incidence and per-point range weighting
  • pipelines: use $import/$define to collapse thin variants, drop stale experiments
  • GrandTour: select the smoother and a scene-adaptive point budget
  • feat: add --output-tum-path-smoothed to the offline CLI
  • Default pipeline: enable the local map's covariance cache admission gate
  • IncrementalPointCloud: own default for the eviction cube, 1.0x radius
  • Publisher: reach the points-map view via mrpt::<maps::asPointsMap>()
  • remove obsolete rgbd pipeline (refer to mola_vision)
  • gicp pipeline: new default max icp iters 25->16
  • store IMU readings in simplemaps for attitude aid in georef (#173)
  • Move the pipelines to the renamed, squared robust-kernel scale
  • Expose the TSDF layer's rendering knobs in the dual-map pipeline
  • GrandTour: add a 'hesai_raw' LiDAR selector for the uncompensated cloud
  • GrandTour: keep the scan point timestamps at their own reference
  • cli: --module, to run a second front-end in the batch tool
  • Add drop_stale_scans: a lossless input queue for offline runs
  • Optional, env-gated log of the local-map insert/skip decision
  • KITTI eval: record that MOLA_INITIAL_VX is coupled to the pipeline, not the dataset
  • KITTI: run the shipped pipeline, which halves absolute trajectory error
  • Stop refusing recordings with more bags than launch-file slots

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.4.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MOLAorg/mola_lidar_odometry.git
VCS Type git
VCS Version develop
Last Updated 2026-11-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format Docs codecov

mola_lidar_odometry

LIDAR odometry component based on the MOLA and MRPT frameworks, compatible with ROS 2.

Contents

This repository provides a C++ library mola_lidar_odometry implementing LIDAR odometry. Sensor input is provided via MOLA components, and ROS 2 example launch files are provided in ros2-launchs.

A CLI interface mola-lidar-odometry-cli is also provided for running on offline datasets.

Build and install

Refer to: https://docs.mola-slam.org/latest/#installing

Lidar Inertial Odometry (LIO) demo with Oxford Spires: Peek 2025-08-31 11-36

Lidar Odometry (LO) demo with KITTI: mola-slam-kitti-demo

Documentation and tutorials

See: https://docs.mola-slam.org/

ROS build farm status

Distro Build dev Release
ROS 2 Humble (u22.04) Build Status Version
ROS 2 Jazzy (u24.04) Build Status Version
ROS 2 Kilted (u24.04) Build Status Version
ROS 2 Lyrical (u26.04) Build Status Version
ROS 2 Rolling (u26.04) Build Status Version

Binary package build status per ROS 2 distro:

Package ROS 2 Humble
(u22.04)
ROS 2 Jazzy
(u24.04)
ROS 2 Kilted
(u24.04)
ROS 2 Lyrical
(u26.04)
ROS 2 Rolling
(u26.04)
mola_lidar_odometry Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status

Each cell stacks the badges for that ROS 2 distro, in this order (when available):

  • Ubuntu (amd64)
  • Ubuntu (arm64)
  • RHEL (x86_64) – not available for Humble, since mrpt3 cannot be built there.
  • Fedora (x86_64) – only available since ROS 2 Lyrical.
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

@article{blanco2025mola_lo,
    author = {Blanco-Claraco, Jose Luis},
    title ={{A flexible framework for accurate LiDAR odometry, map manipulation, and localization}},
    journal = {The International Journal of Robotics Research},
    volume = {44},
    number = {9},
    pages = {1553--1599},
    year = {2025},
    doi = {10.1177/02783649251316881},
    URL = { https://doi.org/10.1177/02783649251316881},
    eprint = {2407.20465},
}

License

Copyright (C) 2018-2026 Jose Luis Blanco jlblanco@ual.es, University of Almeria

This package is released under the GNU GPL v3 license as open source, with the main intention of being useful for research and evaluation purposes. Commercial licenses available upon request.

Contributions require acceptance of the Contributor License Agreement (CLA).

CHANGELOG

Changelog for package mola_lidar_odometry

3.4.0 (2026-11-01)

  • Initial localization: global search around an uncertain state estimator pose, with z from the map ground and a minimum yaw range (MOLA_LO_INIT_GLOBAL_SEARCH_MIN_YAW)
  • Place the first keyframe at the initial localization pose; re-initialize from the state estimator after a bad first ICP
  • Post-relocalization: start ICP from the re-localized pose; relocalize_from_gnss() resets the state estimator first (#193)
  • GICP pipelines: IncrementalPointCloud (voxel hash index) is the default local map; index type and view-direction filter exposed in the pipelines
  • lidar3d-gicp-dual-tsdf: add the TSDF layer with $append (requires mola_yaml >= 3.3.3)
  • Optional attitude-only IMU, also stored into simplemap keyframes
  • New FoMo dataset profile
  • mola-lidar-odometry-cli: read dataset entries ahead on a background thread; cap TBB threads to physical cores; exit with an error after a fatal error
  • ROS 2 launch: smoother arguments reach mola-cli; publish_local_map argument; no IMU gravity factor in localization-only mode by default
  • Local map publishing: xyz (+intensity) only, off the state lock
  • Drop invalid input (IMU, GNSS) instead of stopping the odometry; discard queued scans after a fatal error
  • Fix a reference cycle with BridgeROS2 that kept modules alive after shutdown
  • Fix a deadlock when the state estimator publishes its geo-referencing; several thread safety fixes in reset(), map_save() and queued requests
  • ICP prior: convert the motion model prior and information to the solver tangent
  • De-skew in place; drop inserted points closer than 0.05 m to the incremental local map
  • GUI: option to hide back-facing points; trajectory cost no longer grows with its length
  • Online version check fixes; new MOLA_LO_DISABLE_VERSION_CHECK
  • Fix configure on Humble with CMake >= 3.27
  • New tests: headless launch runs, initial localization on a real dataset fragment, local map publishing, error and concurrency paths
  • Docs and CI updates
  • Contributors: Jose Luis Blanco-Claraco

3.3.0 (2026-09-28)

  • viz: expose grid spacing as env var
  • Ouster Rev8 launcher: accept low-overlap ICP, predict motion with the IMU (#190)
  • Ouster Rev8 launcher: incremental local map and per-point RGB coloring by default
  • add rosbag1 as build dep for binaries to have this functionality
  • ci: add GitHub release workflow on version tags
  • Recover the observation radius from the raw scan when every filtered layer is empty
  • Add mola-lo-gui-ouster-rev8, accept an .osf argument in the Ouster wrappers
  • Feed IMU samples to the generators through one shared output map
  • Test that every pipeline resolves; document pipeline blocks
  • Pipelines: rebuild the single-filter GICP variant as an overlay
  • Pipelines: assemble the 3D pipelines from shared blocks
  • deskewTwistFromOdometry: use the covered interval when odometry starts mid-sweep
  • Launchers: pin the first pose when selecting the smoother
  • De-skew with an independent odometry's velocity (deskew_odometry_sensor_label)
  • feat: expose a weight on the pose prior handed to the ICP solver
  • feat: a refused registration contributes the prediction, not a gap
  • feat: optional Mahalanobis gate on the ICP registration result
  • offline CLI: do not publish the local map by default
  • GrandTour pipeline: expose the cov2cov incidence and per-point range weighting
  • pipelines: use $import/$define to collapse thin variants, drop stale experiments
  • GrandTour: select the smoother and a scene-adaptive point budget
  • feat: add --output-tum-path-smoothed to the offline CLI
  • Default pipeline: enable the local map's covariance cache admission gate
  • IncrementalPointCloud: own default for the eviction cube, 1.0x radius
  • Publisher: reach the points-map view via mrpt::<maps::asPointsMap>()
  • remove obsolete rgbd pipeline (refer to mola_vision)
  • gicp pipeline: new default max icp iters 25->16
  • store IMU readings in simplemaps for attitude aid in georef (#173)
  • Move the pipelines to the renamed, squared robust-kernel scale
  • Expose the TSDF layer's rendering knobs in the dual-map pipeline
  • GrandTour: add a 'hesai_raw' LiDAR selector for the uncompensated cloud
  • GrandTour: keep the scan point timestamps at their own reference
  • cli: --module, to run a second front-end in the batch tool
  • Add drop_stale_scans: a lossless input queue for offline runs
  • Optional, env-gated log of the local-map insert/skip decision
  • KITTI eval: record that MOLA_INITIAL_VX is coupled to the pipeline, not the dataset
  • KITTI: run the shipped pipeline, which halves absolute trajectory error
  • Stop refusing recordings with more bags than launch-file slots

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.4.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MOLAorg/mola_lidar_odometry.git
VCS Type git
VCS Version develop
Last Updated 2026-11-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format Docs codecov

mola_lidar_odometry

LIDAR odometry component based on the MOLA and MRPT frameworks, compatible with ROS 2.

Contents

This repository provides a C++ library mola_lidar_odometry implementing LIDAR odometry. Sensor input is provided via MOLA components, and ROS 2 example launch files are provided in ros2-launchs.

A CLI interface mola-lidar-odometry-cli is also provided for running on offline datasets.

Build and install

Refer to: https://docs.mola-slam.org/latest/#installing

Lidar Inertial Odometry (LIO) demo with Oxford Spires: Peek 2025-08-31 11-36

Lidar Odometry (LO) demo with KITTI: mola-slam-kitti-demo

Documentation and tutorials

See: https://docs.mola-slam.org/

ROS build farm status

Distro Build dev Release
ROS 2 Humble (u22.04) Build Status Version
ROS 2 Jazzy (u24.04) Build Status Version
ROS 2 Kilted (u24.04) Build Status Version
ROS 2 Lyrical (u26.04) Build Status Version
ROS 2 Rolling (u26.04) Build Status Version

Binary package build status per ROS 2 distro:

Package ROS 2 Humble
(u22.04)
ROS 2 Jazzy
(u24.04)
ROS 2 Kilted
(u24.04)
ROS 2 Lyrical
(u26.04)
ROS 2 Rolling
(u26.04)
mola_lidar_odometry Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status

Each cell stacks the badges for that ROS 2 distro, in this order (when available):

  • Ubuntu (amd64)
  • Ubuntu (arm64)
  • RHEL (x86_64) – not available for Humble, since mrpt3 cannot be built there.
  • Fedora (x86_64) – only available since ROS 2 Lyrical.
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

@article{blanco2025mola_lo,
    author = {Blanco-Claraco, Jose Luis},
    title ={{A flexible framework for accurate LiDAR odometry, map manipulation, and localization}},
    journal = {The International Journal of Robotics Research},
    volume = {44},
    number = {9},
    pages = {1553--1599},
    year = {2025},
    doi = {10.1177/02783649251316881},
    URL = { https://doi.org/10.1177/02783649251316881},
    eprint = {2407.20465},
}

License

Copyright (C) 2018-2026 Jose Luis Blanco jlblanco@ual.es, University of Almeria

This package is released under the GNU GPL v3 license as open source, with the main intention of being useful for research and evaluation purposes. Commercial licenses available upon request.

Contributions require acceptance of the Contributor License Agreement (CLA).

CHANGELOG

Changelog for package mola_lidar_odometry

3.4.0 (2026-11-01)

  • Initial localization: global search around an uncertain state estimator pose, with z from the map ground and a minimum yaw range (MOLA_LO_INIT_GLOBAL_SEARCH_MIN_YAW)
  • Place the first keyframe at the initial localization pose; re-initialize from the state estimator after a bad first ICP
  • Post-relocalization: start ICP from the re-localized pose; relocalize_from_gnss() resets the state estimator first (#193)
  • GICP pipelines: IncrementalPointCloud (voxel hash index) is the default local map; index type and view-direction filter exposed in the pipelines
  • lidar3d-gicp-dual-tsdf: add the TSDF layer with $append (requires mola_yaml >= 3.3.3)
  • Optional attitude-only IMU, also stored into simplemap keyframes
  • New FoMo dataset profile
  • mola-lidar-odometry-cli: read dataset entries ahead on a background thread; cap TBB threads to physical cores; exit with an error after a fatal error
  • ROS 2 launch: smoother arguments reach mola-cli; publish_local_map argument; no IMU gravity factor in localization-only mode by default
  • Local map publishing: xyz (+intensity) only, off the state lock
  • Drop invalid input (IMU, GNSS) instead of stopping the odometry; discard queued scans after a fatal error
  • Fix a reference cycle with BridgeROS2 that kept modules alive after shutdown
  • Fix a deadlock when the state estimator publishes its geo-referencing; several thread safety fixes in reset(), map_save() and queued requests
  • ICP prior: convert the motion model prior and information to the solver tangent
  • De-skew in place; drop inserted points closer than 0.05 m to the incremental local map
  • GUI: option to hide back-facing points; trajectory cost no longer grows with its length
  • Online version check fixes; new MOLA_LO_DISABLE_VERSION_CHECK
  • Fix configure on Humble with CMake >= 3.27
  • New tests: headless launch runs, initial localization on a real dataset fragment, local map publishing, error and concurrency paths
  • Docs and CI updates
  • Contributors: Jose Luis Blanco-Claraco

3.3.0 (2026-09-28)

  • viz: expose grid spacing as env var
  • Ouster Rev8 launcher: accept low-overlap ICP, predict motion with the IMU (#190)
  • Ouster Rev8 launcher: incremental local map and per-point RGB coloring by default
  • add rosbag1 as build dep for binaries to have this functionality
  • ci: add GitHub release workflow on version tags
  • Recover the observation radius from the raw scan when every filtered layer is empty
  • Add mola-lo-gui-ouster-rev8, accept an .osf argument in the Ouster wrappers
  • Feed IMU samples to the generators through one shared output map
  • Test that every pipeline resolves; document pipeline blocks
  • Pipelines: rebuild the single-filter GICP variant as an overlay
  • Pipelines: assemble the 3D pipelines from shared blocks
  • deskewTwistFromOdometry: use the covered interval when odometry starts mid-sweep
  • Launchers: pin the first pose when selecting the smoother
  • De-skew with an independent odometry's velocity (deskew_odometry_sensor_label)
  • feat: expose a weight on the pose prior handed to the ICP solver
  • feat: a refused registration contributes the prediction, not a gap
  • feat: optional Mahalanobis gate on the ICP registration result
  • offline CLI: do not publish the local map by default
  • GrandTour pipeline: expose the cov2cov incidence and per-point range weighting
  • pipelines: use $import/$define to collapse thin variants, drop stale experiments
  • GrandTour: select the smoother and a scene-adaptive point budget
  • feat: add --output-tum-path-smoothed to the offline CLI
  • Default pipeline: enable the local map's covariance cache admission gate
  • IncrementalPointCloud: own default for the eviction cube, 1.0x radius
  • Publisher: reach the points-map view via mrpt::<maps::asPointsMap>()
  • remove obsolete rgbd pipeline (refer to mola_vision)
  • gicp pipeline: new default max icp iters 25->16
  • store IMU readings in simplemaps for attitude aid in georef (#173)
  • Move the pipelines to the renamed, squared robust-kernel scale
  • Expose the TSDF layer's rendering knobs in the dual-map pipeline
  • GrandTour: add a 'hesai_raw' LiDAR selector for the uncompensated cloud
  • GrandTour: keep the scan point timestamps at their own reference
  • cli: --module, to run a second front-end in the batch tool
  • Add drop_stale_scans: a lossless input queue for offline runs
  • Optional, env-gated log of the local-map insert/skip decision
  • KITTI eval: record that MOLA_INITIAL_VX is coupled to the pipeline, not the dataset
  • KITTI: run the shipped pipeline, which halves absolute trajectory error
  • Stop refusing recordings with more bags than launch-file slots

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.4.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MOLAorg/mola_lidar_odometry.git
VCS Type git
VCS Version develop
Last Updated 2026-11-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format Docs codecov

mola_lidar_odometry

LIDAR odometry component based on the MOLA and MRPT frameworks, compatible with ROS 2.

Contents

This repository provides a C++ library mola_lidar_odometry implementing LIDAR odometry. Sensor input is provided via MOLA components, and ROS 2 example launch files are provided in ros2-launchs.

A CLI interface mola-lidar-odometry-cli is also provided for running on offline datasets.

Build and install

Refer to: https://docs.mola-slam.org/latest/#installing

Lidar Inertial Odometry (LIO) demo with Oxford Spires: Peek 2025-08-31 11-36

Lidar Odometry (LO) demo with KITTI: mola-slam-kitti-demo

Documentation and tutorials

See: https://docs.mola-slam.org/

ROS build farm status

Distro Build dev Release
ROS 2 Humble (u22.04) Build Status Version
ROS 2 Jazzy (u24.04) Build Status Version
ROS 2 Kilted (u24.04) Build Status Version
ROS 2 Lyrical (u26.04) Build Status Version
ROS 2 Rolling (u26.04) Build Status Version

Binary package build status per ROS 2 distro:

Package ROS 2 Humble
(u22.04)
ROS 2 Jazzy
(u24.04)
ROS 2 Kilted
(u24.04)
ROS 2 Lyrical
(u26.04)
ROS 2 Rolling
(u26.04)
mola_lidar_odometry Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status

Each cell stacks the badges for that ROS 2 distro, in this order (when available):

  • Ubuntu (amd64)
  • Ubuntu (arm64)
  • RHEL (x86_64) – not available for Humble, since mrpt3 cannot be built there.
  • Fedora (x86_64) – only available since ROS 2 Lyrical.
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

@article{blanco2025mola_lo,
    author = {Blanco-Claraco, Jose Luis},
    title ={{A flexible framework for accurate LiDAR odometry, map manipulation, and localization}},
    journal = {The International Journal of Robotics Research},
    volume = {44},
    number = {9},
    pages = {1553--1599},
    year = {2025},
    doi = {10.1177/02783649251316881},
    URL = { https://doi.org/10.1177/02783649251316881},
    eprint = {2407.20465},
}

License

Copyright (C) 2018-2026 Jose Luis Blanco jlblanco@ual.es, University of Almeria

This package is released under the GNU GPL v3 license as open source, with the main intention of being useful for research and evaluation purposes. Commercial licenses available upon request.

Contributions require acceptance of the Contributor License Agreement (CLA).

CHANGELOG

Changelog for package mola_lidar_odometry

3.4.0 (2026-11-01)

  • Initial localization: global search around an uncertain state estimator pose, with z from the map ground and a minimum yaw range (MOLA_LO_INIT_GLOBAL_SEARCH_MIN_YAW)
  • Place the first keyframe at the initial localization pose; re-initialize from the state estimator after a bad first ICP
  • Post-relocalization: start ICP from the re-localized pose; relocalize_from_gnss() resets the state estimator first (#193)
  • GICP pipelines: IncrementalPointCloud (voxel hash index) is the default local map; index type and view-direction filter exposed in the pipelines
  • lidar3d-gicp-dual-tsdf: add the TSDF layer with $append (requires mola_yaml >= 3.3.3)
  • Optional attitude-only IMU, also stored into simplemap keyframes
  • New FoMo dataset profile
  • mola-lidar-odometry-cli: read dataset entries ahead on a background thread; cap TBB threads to physical cores; exit with an error after a fatal error
  • ROS 2 launch: smoother arguments reach mola-cli; publish_local_map argument; no IMU gravity factor in localization-only mode by default
  • Local map publishing: xyz (+intensity) only, off the state lock
  • Drop invalid input (IMU, GNSS) instead of stopping the odometry; discard queued scans after a fatal error
  • Fix a reference cycle with BridgeROS2 that kept modules alive after shutdown
  • Fix a deadlock when the state estimator publishes its geo-referencing; several thread safety fixes in reset(), map_save() and queued requests
  • ICP prior: convert the motion model prior and information to the solver tangent
  • De-skew in place; drop inserted points closer than 0.05 m to the incremental local map
  • GUI: option to hide back-facing points; trajectory cost no longer grows with its length
  • Online version check fixes; new MOLA_LO_DISABLE_VERSION_CHECK
  • Fix configure on Humble with CMake >= 3.27
  • New tests: headless launch runs, initial localization on a real dataset fragment, local map publishing, error and concurrency paths
  • Docs and CI updates
  • Contributors: Jose Luis Blanco-Claraco

3.3.0 (2026-09-28)

  • viz: expose grid spacing as env var
  • Ouster Rev8 launcher: accept low-overlap ICP, predict motion with the IMU (#190)
  • Ouster Rev8 launcher: incremental local map and per-point RGB coloring by default
  • add rosbag1 as build dep for binaries to have this functionality
  • ci: add GitHub release workflow on version tags
  • Recover the observation radius from the raw scan when every filtered layer is empty
  • Add mola-lo-gui-ouster-rev8, accept an .osf argument in the Ouster wrappers
  • Feed IMU samples to the generators through one shared output map
  • Test that every pipeline resolves; document pipeline blocks
  • Pipelines: rebuild the single-filter GICP variant as an overlay
  • Pipelines: assemble the 3D pipelines from shared blocks
  • deskewTwistFromOdometry: use the covered interval when odometry starts mid-sweep
  • Launchers: pin the first pose when selecting the smoother
  • De-skew with an independent odometry's velocity (deskew_odometry_sensor_label)
  • feat: expose a weight on the pose prior handed to the ICP solver
  • feat: a refused registration contributes the prediction, not a gap
  • feat: optional Mahalanobis gate on the ICP registration result
  • offline CLI: do not publish the local map by default
  • GrandTour pipeline: expose the cov2cov incidence and per-point range weighting
  • pipelines: use $import/$define to collapse thin variants, drop stale experiments
  • GrandTour: select the smoother and a scene-adaptive point budget
  • feat: add --output-tum-path-smoothed to the offline CLI
  • Default pipeline: enable the local map's covariance cache admission gate
  • IncrementalPointCloud: own default for the eviction cube, 1.0x radius
  • Publisher: reach the points-map view via mrpt::<maps::asPointsMap>()
  • remove obsolete rgbd pipeline (refer to mola_vision)
  • gicp pipeline: new default max icp iters 25->16
  • store IMU readings in simplemaps for attitude aid in georef (#173)
  • Move the pipelines to the renamed, squared robust-kernel scale
  • Expose the TSDF layer's rendering knobs in the dual-map pipeline
  • GrandTour: add a 'hesai_raw' LiDAR selector for the uncompensated cloud
  • GrandTour: keep the scan point timestamps at their own reference
  • cli: --module, to run a second front-end in the batch tool
  • Add drop_stale_scans: a lossless input queue for offline runs
  • Optional, env-gated log of the local-map insert/skip decision
  • KITTI eval: record that MOLA_INITIAL_VX is coupled to the pipeline, not the dataset
  • KITTI: run the shipped pipeline, which halves absolute trajectory error
  • Stop refusing recordings with more bags than launch-file slots

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.4.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MOLAorg/mola_lidar_odometry.git
VCS Type git
VCS Version develop
Last Updated 2026-11-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format Docs codecov

mola_lidar_odometry

LIDAR odometry component based on the MOLA and MRPT frameworks, compatible with ROS 2.

Contents

This repository provides a C++ library mola_lidar_odometry implementing LIDAR odometry. Sensor input is provided via MOLA components, and ROS 2 example launch files are provided in ros2-launchs.

A CLI interface mola-lidar-odometry-cli is also provided for running on offline datasets.

Build and install

Refer to: https://docs.mola-slam.org/latest/#installing

Lidar Inertial Odometry (LIO) demo with Oxford Spires: Peek 2025-08-31 11-36

Lidar Odometry (LO) demo with KITTI: mola-slam-kitti-demo

Documentation and tutorials

See: https://docs.mola-slam.org/

ROS build farm status

Distro Build dev Release
ROS 2 Humble (u22.04) Build Status Version
ROS 2 Jazzy (u24.04) Build Status Version
ROS 2 Kilted (u24.04) Build Status Version
ROS 2 Lyrical (u26.04) Build Status Version
ROS 2 Rolling (u26.04) Build Status Version

Binary package build status per ROS 2 distro:

Package ROS 2 Humble
(u22.04)
ROS 2 Jazzy
(u24.04)
ROS 2 Kilted
(u24.04)
ROS 2 Lyrical
(u26.04)
ROS 2 Rolling
(u26.04)
mola_lidar_odometry Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status

Each cell stacks the badges for that ROS 2 distro, in this order (when available):

  • Ubuntu (amd64)
  • Ubuntu (arm64)
  • RHEL (x86_64) – not available for Humble, since mrpt3 cannot be built there.
  • Fedora (x86_64) – only available since ROS 2 Lyrical.
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

@article{blanco2025mola_lo,
    author = {Blanco-Claraco, Jose Luis},
    title ={{A flexible framework for accurate LiDAR odometry, map manipulation, and localization}},
    journal = {The International Journal of Robotics Research},
    volume = {44},
    number = {9},
    pages = {1553--1599},
    year = {2025},
    doi = {10.1177/02783649251316881},
    URL = { https://doi.org/10.1177/02783649251316881},
    eprint = {2407.20465},
}

License

Copyright (C) 2018-2026 Jose Luis Blanco jlblanco@ual.es, University of Almeria

This package is released under the GNU GPL v3 license as open source, with the main intention of being useful for research and evaluation purposes. Commercial licenses available upon request.

Contributions require acceptance of the Contributor License Agreement (CLA).

CHANGELOG

Changelog for package mola_lidar_odometry

3.4.0 (2026-11-01)

  • Initial localization: global search around an uncertain state estimator pose, with z from the map ground and a minimum yaw range (MOLA_LO_INIT_GLOBAL_SEARCH_MIN_YAW)
  • Place the first keyframe at the initial localization pose; re-initialize from the state estimator after a bad first ICP
  • Post-relocalization: start ICP from the re-localized pose; relocalize_from_gnss() resets the state estimator first (#193)
  • GICP pipelines: IncrementalPointCloud (voxel hash index) is the default local map; index type and view-direction filter exposed in the pipelines
  • lidar3d-gicp-dual-tsdf: add the TSDF layer with $append (requires mola_yaml >= 3.3.3)
  • Optional attitude-only IMU, also stored into simplemap keyframes
  • New FoMo dataset profile
  • mola-lidar-odometry-cli: read dataset entries ahead on a background thread; cap TBB threads to physical cores; exit with an error after a fatal error
  • ROS 2 launch: smoother arguments reach mola-cli; publish_local_map argument; no IMU gravity factor in localization-only mode by default
  • Local map publishing: xyz (+intensity) only, off the state lock
  • Drop invalid input (IMU, GNSS) instead of stopping the odometry; discard queued scans after a fatal error
  • Fix a reference cycle with BridgeROS2 that kept modules alive after shutdown
  • Fix a deadlock when the state estimator publishes its geo-referencing; several thread safety fixes in reset(), map_save() and queued requests
  • ICP prior: convert the motion model prior and information to the solver tangent
  • De-skew in place; drop inserted points closer than 0.05 m to the incremental local map
  • GUI: option to hide back-facing points; trajectory cost no longer grows with its length
  • Online version check fixes; new MOLA_LO_DISABLE_VERSION_CHECK
  • Fix configure on Humble with CMake >= 3.27
  • New tests: headless launch runs, initial localization on a real dataset fragment, local map publishing, error and concurrency paths
  • Docs and CI updates
  • Contributors: Jose Luis Blanco-Claraco

3.3.0 (2026-09-28)

  • viz: expose grid spacing as env var
  • Ouster Rev8 launcher: accept low-overlap ICP, predict motion with the IMU (#190)
  • Ouster Rev8 launcher: incremental local map and per-point RGB coloring by default
  • add rosbag1 as build dep for binaries to have this functionality
  • ci: add GitHub release workflow on version tags
  • Recover the observation radius from the raw scan when every filtered layer is empty
  • Add mola-lo-gui-ouster-rev8, accept an .osf argument in the Ouster wrappers
  • Feed IMU samples to the generators through one shared output map
  • Test that every pipeline resolves; document pipeline blocks
  • Pipelines: rebuild the single-filter GICP variant as an overlay
  • Pipelines: assemble the 3D pipelines from shared blocks
  • deskewTwistFromOdometry: use the covered interval when odometry starts mid-sweep
  • Launchers: pin the first pose when selecting the smoother
  • De-skew with an independent odometry's velocity (deskew_odometry_sensor_label)
  • feat: expose a weight on the pose prior handed to the ICP solver
  • feat: a refused registration contributes the prediction, not a gap
  • feat: optional Mahalanobis gate on the ICP registration result
  • offline CLI: do not publish the local map by default
  • GrandTour pipeline: expose the cov2cov incidence and per-point range weighting
  • pipelines: use $import/$define to collapse thin variants, drop stale experiments
  • GrandTour: select the smoother and a scene-adaptive point budget
  • feat: add --output-tum-path-smoothed to the offline CLI
  • Default pipeline: enable the local map's covariance cache admission gate
  • IncrementalPointCloud: own default for the eviction cube, 1.0x radius
  • Publisher: reach the points-map view via mrpt::<maps::asPointsMap>()
  • remove obsolete rgbd pipeline (refer to mola_vision)
  • gicp pipeline: new default max icp iters 25->16
  • store IMU readings in simplemaps for attitude aid in georef (#173)
  • Move the pipelines to the renamed, squared robust-kernel scale
  • Expose the TSDF layer's rendering knobs in the dual-map pipeline
  • GrandTour: add a 'hesai_raw' LiDAR selector for the uncompensated cloud
  • GrandTour: keep the scan point timestamps at their own reference
  • cli: --module, to run a second front-end in the batch tool
  • Add drop_stale_scans: a lossless input queue for offline runs
  • Optional, env-gated log of the local-map insert/skip decision
  • KITTI eval: record that MOLA_INITIAL_VX is coupled to the pipeline, not the dataset
  • KITTI: run the shipped pipeline, which halves absolute trajectory error
  • Stop refusing recordings with more bags than launch-file slots

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.4.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MOLAorg/mola_lidar_odometry.git
VCS Type git
VCS Version develop
Last Updated 2026-11-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format Docs codecov

mola_lidar_odometry

LIDAR odometry component based on the MOLA and MRPT frameworks, compatible with ROS 2.

Contents

This repository provides a C++ library mola_lidar_odometry implementing LIDAR odometry. Sensor input is provided via MOLA components, and ROS 2 example launch files are provided in ros2-launchs.

A CLI interface mola-lidar-odometry-cli is also provided for running on offline datasets.

Build and install

Refer to: https://docs.mola-slam.org/latest/#installing

Lidar Inertial Odometry (LIO) demo with Oxford Spires: Peek 2025-08-31 11-36

Lidar Odometry (LO) demo with KITTI: mola-slam-kitti-demo

Documentation and tutorials

See: https://docs.mola-slam.org/

ROS build farm status

Distro Build dev Release
ROS 2 Humble (u22.04) Build Status Version
ROS 2 Jazzy (u24.04) Build Status Version
ROS 2 Kilted (u24.04) Build Status Version
ROS 2 Lyrical (u26.04) Build Status Version
ROS 2 Rolling (u26.04) Build Status Version

Binary package build status per ROS 2 distro:

Package ROS 2 Humble
(u22.04)
ROS 2 Jazzy
(u24.04)
ROS 2 Kilted
(u24.04)
ROS 2 Lyrical
(u26.04)
ROS 2 Rolling
(u26.04)
mola_lidar_odometry Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status

Each cell stacks the badges for that ROS 2 distro, in this order (when available):

  • Ubuntu (amd64)
  • Ubuntu (arm64)
  • RHEL (x86_64) – not available for Humble, since mrpt3 cannot be built there.
  • Fedora (x86_64) – only available since ROS 2 Lyrical.
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

@article{blanco2025mola_lo,
    author = {Blanco-Claraco, Jose Luis},
    title ={{A flexible framework for accurate LiDAR odometry, map manipulation, and localization}},
    journal = {The International Journal of Robotics Research},
    volume = {44},
    number = {9},
    pages = {1553--1599},
    year = {2025},
    doi = {10.1177/02783649251316881},
    URL = { https://doi.org/10.1177/02783649251316881},
    eprint = {2407.20465},
}

License

Copyright (C) 2018-2026 Jose Luis Blanco jlblanco@ual.es, University of Almeria

This package is released under the GNU GPL v3 license as open source, with the main intention of being useful for research and evaluation purposes. Commercial licenses available upon request.

Contributions require acceptance of the Contributor License Agreement (CLA).

CHANGELOG

Changelog for package mola_lidar_odometry

3.4.0 (2026-11-01)

  • Initial localization: global search around an uncertain state estimator pose, with z from the map ground and a minimum yaw range (MOLA_LO_INIT_GLOBAL_SEARCH_MIN_YAW)
  • Place the first keyframe at the initial localization pose; re-initialize from the state estimator after a bad first ICP
  • Post-relocalization: start ICP from the re-localized pose; relocalize_from_gnss() resets the state estimator first (#193)
  • GICP pipelines: IncrementalPointCloud (voxel hash index) is the default local map; index type and view-direction filter exposed in the pipelines
  • lidar3d-gicp-dual-tsdf: add the TSDF layer with $append (requires mola_yaml >= 3.3.3)
  • Optional attitude-only IMU, also stored into simplemap keyframes
  • New FoMo dataset profile
  • mola-lidar-odometry-cli: read dataset entries ahead on a background thread; cap TBB threads to physical cores; exit with an error after a fatal error
  • ROS 2 launch: smoother arguments reach mola-cli; publish_local_map argument; no IMU gravity factor in localization-only mode by default
  • Local map publishing: xyz (+intensity) only, off the state lock
  • Drop invalid input (IMU, GNSS) instead of stopping the odometry; discard queued scans after a fatal error
  • Fix a reference cycle with BridgeROS2 that kept modules alive after shutdown
  • Fix a deadlock when the state estimator publishes its geo-referencing; several thread safety fixes in reset(), map_save() and queued requests
  • ICP prior: convert the motion model prior and information to the solver tangent
  • De-skew in place; drop inserted points closer than 0.05 m to the incremental local map
  • GUI: option to hide back-facing points; trajectory cost no longer grows with its length
  • Online version check fixes; new MOLA_LO_DISABLE_VERSION_CHECK
  • Fix configure on Humble with CMake >= 3.27
  • New tests: headless launch runs, initial localization on a real dataset fragment, local map publishing, error and concurrency paths
  • Docs and CI updates
  • Contributors: Jose Luis Blanco-Claraco

3.3.0 (2026-09-28)

  • viz: expose grid spacing as env var
  • Ouster Rev8 launcher: accept low-overlap ICP, predict motion with the IMU (#190)
  • Ouster Rev8 launcher: incremental local map and per-point RGB coloring by default
  • add rosbag1 as build dep for binaries to have this functionality
  • ci: add GitHub release workflow on version tags
  • Recover the observation radius from the raw scan when every filtered layer is empty
  • Add mola-lo-gui-ouster-rev8, accept an .osf argument in the Ouster wrappers
  • Feed IMU samples to the generators through one shared output map
  • Test that every pipeline resolves; document pipeline blocks
  • Pipelines: rebuild the single-filter GICP variant as an overlay
  • Pipelines: assemble the 3D pipelines from shared blocks
  • deskewTwistFromOdometry: use the covered interval when odometry starts mid-sweep
  • Launchers: pin the first pose when selecting the smoother
  • De-skew with an independent odometry's velocity (deskew_odometry_sensor_label)
  • feat: expose a weight on the pose prior handed to the ICP solver
  • feat: a refused registration contributes the prediction, not a gap
  • feat: optional Mahalanobis gate on the ICP registration result
  • offline CLI: do not publish the local map by default
  • GrandTour pipeline: expose the cov2cov incidence and per-point range weighting
  • pipelines: use $import/$define to collapse thin variants, drop stale experiments
  • GrandTour: select the smoother and a scene-adaptive point budget
  • feat: add --output-tum-path-smoothed to the offline CLI
  • Default pipeline: enable the local map's covariance cache admission gate
  • IncrementalPointCloud: own default for the eviction cube, 1.0x radius
  • Publisher: reach the points-map view via mrpt::<maps::asPointsMap>()
  • remove obsolete rgbd pipeline (refer to mola_vision)
  • gicp pipeline: new default max icp iters 25->16
  • store IMU readings in simplemaps for attitude aid in georef (#173)
  • Move the pipelines to the renamed, squared robust-kernel scale
  • Expose the TSDF layer's rendering knobs in the dual-map pipeline
  • GrandTour: add a 'hesai_raw' LiDAR selector for the uncompensated cloud
  • GrandTour: keep the scan point timestamps at their own reference
  • cli: --module, to run a second front-end in the batch tool
  • Add drop_stale_scans: a lossless input queue for offline runs
  • Optional, env-gated log of the local-map insert/skip decision
  • KITTI eval: record that MOLA_INITIAL_VX is coupled to the pipeline, not the dataset
  • KITTI: run the shipped pipeline, which halves absolute trajectory error
  • Stop refusing recordings with more bags than launch-file slots

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.4.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MOLAorg/mola_lidar_odometry.git
VCS Type git
VCS Version develop
Last Updated 2026-11-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format Docs codecov

mola_lidar_odometry

LIDAR odometry component based on the MOLA and MRPT frameworks, compatible with ROS 2.

Contents

This repository provides a C++ library mola_lidar_odometry implementing LIDAR odometry. Sensor input is provided via MOLA components, and ROS 2 example launch files are provided in ros2-launchs.

A CLI interface mola-lidar-odometry-cli is also provided for running on offline datasets.

Build and install

Refer to: https://docs.mola-slam.org/latest/#installing

Lidar Inertial Odometry (LIO) demo with Oxford Spires: Peek 2025-08-31 11-36

Lidar Odometry (LO) demo with KITTI: mola-slam-kitti-demo

Documentation and tutorials

See: https://docs.mola-slam.org/

ROS build farm status

Distro Build dev Release
ROS 2 Humble (u22.04) Build Status Version
ROS 2 Jazzy (u24.04) Build Status Version
ROS 2 Kilted (u24.04) Build Status Version
ROS 2 Lyrical (u26.04) Build Status Version
ROS 2 Rolling (u26.04) Build Status Version

Binary package build status per ROS 2 distro:

Package ROS 2 Humble
(u22.04)
ROS 2 Jazzy
(u24.04)
ROS 2 Kilted
(u24.04)
ROS 2 Lyrical
(u26.04)
ROS 2 Rolling
(u26.04)
mola_lidar_odometry Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status

Each cell stacks the badges for that ROS 2 distro, in this order (when available):

  • Ubuntu (amd64)
  • Ubuntu (arm64)
  • RHEL (x86_64) – not available for Humble, since mrpt3 cannot be built there.
  • Fedora (x86_64) – only available since ROS 2 Lyrical.
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

@article{blanco2025mola_lo,
    author = {Blanco-Claraco, Jose Luis},
    title ={{A flexible framework for accurate LiDAR odometry, map manipulation, and localization}},
    journal = {The International Journal of Robotics Research},
    volume = {44},
    number = {9},
    pages = {1553--1599},
    year = {2025},
    doi = {10.1177/02783649251316881},
    URL = { https://doi.org/10.1177/02783649251316881},
    eprint = {2407.20465},
}

License

Copyright (C) 2018-2026 Jose Luis Blanco jlblanco@ual.es, University of Almeria

This package is released under the GNU GPL v3 license as open source, with the main intention of being useful for research and evaluation purposes. Commercial licenses available upon request.

Contributions require acceptance of the Contributor License Agreement (CLA).

CHANGELOG

Changelog for package mola_lidar_odometry

3.4.0 (2026-11-01)

  • Initial localization: global search around an uncertain state estimator pose, with z from the map ground and a minimum yaw range (MOLA_LO_INIT_GLOBAL_SEARCH_MIN_YAW)
  • Place the first keyframe at the initial localization pose; re-initialize from the state estimator after a bad first ICP
  • Post-relocalization: start ICP from the re-localized pose; relocalize_from_gnss() resets the state estimator first (#193)
  • GICP pipelines: IncrementalPointCloud (voxel hash index) is the default local map; index type and view-direction filter exposed in the pipelines
  • lidar3d-gicp-dual-tsdf: add the TSDF layer with $append (requires mola_yaml >= 3.3.3)
  • Optional attitude-only IMU, also stored into simplemap keyframes
  • New FoMo dataset profile
  • mola-lidar-odometry-cli: read dataset entries ahead on a background thread; cap TBB threads to physical cores; exit with an error after a fatal error
  • ROS 2 launch: smoother arguments reach mola-cli; publish_local_map argument; no IMU gravity factor in localization-only mode by default
  • Local map publishing: xyz (+intensity) only, off the state lock
  • Drop invalid input (IMU, GNSS) instead of stopping the odometry; discard queued scans after a fatal error
  • Fix a reference cycle with BridgeROS2 that kept modules alive after shutdown
  • Fix a deadlock when the state estimator publishes its geo-referencing; several thread safety fixes in reset(), map_save() and queued requests
  • ICP prior: convert the motion model prior and information to the solver tangent
  • De-skew in place; drop inserted points closer than 0.05 m to the incremental local map
  • GUI: option to hide back-facing points; trajectory cost no longer grows with its length
  • Online version check fixes; new MOLA_LO_DISABLE_VERSION_CHECK
  • Fix configure on Humble with CMake >= 3.27
  • New tests: headless launch runs, initial localization on a real dataset fragment, local map publishing, error and concurrency paths
  • Docs and CI updates
  • Contributors: Jose Luis Blanco-Claraco

3.3.0 (2026-09-28)

  • viz: expose grid spacing as env var
  • Ouster Rev8 launcher: accept low-overlap ICP, predict motion with the IMU (#190)
  • Ouster Rev8 launcher: incremental local map and per-point RGB coloring by default
  • add rosbag1 as build dep for binaries to have this functionality
  • ci: add GitHub release workflow on version tags
  • Recover the observation radius from the raw scan when every filtered layer is empty
  • Add mola-lo-gui-ouster-rev8, accept an .osf argument in the Ouster wrappers
  • Feed IMU samples to the generators through one shared output map
  • Test that every pipeline resolves; document pipeline blocks
  • Pipelines: rebuild the single-filter GICP variant as an overlay
  • Pipelines: assemble the 3D pipelines from shared blocks
  • deskewTwistFromOdometry: use the covered interval when odometry starts mid-sweep
  • Launchers: pin the first pose when selecting the smoother
  • De-skew with an independent odometry's velocity (deskew_odometry_sensor_label)
  • feat: expose a weight on the pose prior handed to the ICP solver
  • feat: a refused registration contributes the prediction, not a gap
  • feat: optional Mahalanobis gate on the ICP registration result
  • offline CLI: do not publish the local map by default
  • GrandTour pipeline: expose the cov2cov incidence and per-point range weighting
  • pipelines: use $import/$define to collapse thin variants, drop stale experiments
  • GrandTour: select the smoother and a scene-adaptive point budget
  • feat: add --output-tum-path-smoothed to the offline CLI
  • Default pipeline: enable the local map's covariance cache admission gate
  • IncrementalPointCloud: own default for the eviction cube, 1.0x radius
  • Publisher: reach the points-map view via mrpt::<maps::asPointsMap>()
  • remove obsolete rgbd pipeline (refer to mola_vision)
  • gicp pipeline: new default max icp iters 25->16
  • store IMU readings in simplemaps for attitude aid in georef (#173)
  • Move the pipelines to the renamed, squared robust-kernel scale
  • Expose the TSDF layer's rendering knobs in the dual-map pipeline
  • GrandTour: add a 'hesai_raw' LiDAR selector for the uncompensated cloud
  • GrandTour: keep the scan point timestamps at their own reference
  • cli: --module, to run a second front-end in the batch tool
  • Add drop_stale_scans: a lossless input queue for offline runs
  • Optional, env-gated log of the local-map insert/skip decision
  • KITTI eval: record that MOLA_INITIAL_VX is coupled to the pipeline, not the dataset
  • KITTI: run the shipped pipeline, which halves absolute trajectory error
  • Stop refusing recordings with more bags than launch-file slots

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

Package symbol

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
iron

Package Summary

Version 3.4.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MOLAorg/mola_lidar_odometry.git
VCS Type git
VCS Version develop
Last Updated 2026-11-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format Docs codecov

mola_lidar_odometry

LIDAR odometry component based on the MOLA and MRPT frameworks, compatible with ROS 2.

Contents

This repository provides a C++ library mola_lidar_odometry implementing LIDAR odometry. Sensor input is provided via MOLA components, and ROS 2 example launch files are provided in ros2-launchs.

A CLI interface mola-lidar-odometry-cli is also provided for running on offline datasets.

Build and install

Refer to: https://docs.mola-slam.org/latest/#installing

Lidar Inertial Odometry (LIO) demo with Oxford Spires: Peek 2025-08-31 11-36

Lidar Odometry (LO) demo with KITTI: mola-slam-kitti-demo

Documentation and tutorials

See: https://docs.mola-slam.org/

ROS build farm status

Distro Build dev Release
ROS 2 Humble (u22.04) Build Status Version
ROS 2 Jazzy (u24.04) Build Status Version
ROS 2 Kilted (u24.04) Build Status Version
ROS 2 Lyrical (u26.04) Build Status Version
ROS 2 Rolling (u26.04) Build Status Version

Binary package build status per ROS 2 distro:

Package ROS 2 Humble
(u22.04)
ROS 2 Jazzy
(u24.04)
ROS 2 Kilted
(u24.04)
ROS 2 Lyrical
(u26.04)
ROS 2 Rolling
(u26.04)
mola_lidar_odometry Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status

Each cell stacks the badges for that ROS 2 distro, in this order (when available):

  • Ubuntu (amd64)
  • Ubuntu (arm64)
  • RHEL (x86_64) – not available for Humble, since mrpt3 cannot be built there.
  • Fedora (x86_64) – only available since ROS 2 Lyrical.
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

@article{blanco2025mola_lo,
    author = {Blanco-Claraco, Jose Luis},
    title ={{A flexible framework for accurate LiDAR odometry, map manipulation, and localization}},
    journal = {The International Journal of Robotics Research},
    volume = {44},
    number = {9},
    pages = {1553--1599},
    year = {2025},
    doi = {10.1177/02783649251316881},
    URL = { https://doi.org/10.1177/02783649251316881},
    eprint = {2407.20465},
}

License

Copyright (C) 2018-2026 Jose Luis Blanco jlblanco@ual.es, University of Almeria

This package is released under the GNU GPL v3 license as open source, with the main intention of being useful for research and evaluation purposes. Commercial licenses available upon request.

Contributions require acceptance of the Contributor License Agreement (CLA).

CHANGELOG

Changelog for package mola_lidar_odometry

3.4.0 (2026-11-01)

  • Initial localization: global search around an uncertain state estimator pose, with z from the map ground and a minimum yaw range (MOLA_LO_INIT_GLOBAL_SEARCH_MIN_YAW)
  • Place the first keyframe at the initial localization pose; re-initialize from the state estimator after a bad first ICP
  • Post-relocalization: start ICP from the re-localized pose; relocalize_from_gnss() resets the state estimator first (#193)
  • GICP pipelines: IncrementalPointCloud (voxel hash index) is the default local map; index type and view-direction filter exposed in the pipelines
  • lidar3d-gicp-dual-tsdf: add the TSDF layer with $append (requires mola_yaml >= 3.3.3)
  • Optional attitude-only IMU, also stored into simplemap keyframes
  • New FoMo dataset profile
  • mola-lidar-odometry-cli: read dataset entries ahead on a background thread; cap TBB threads to physical cores; exit with an error after a fatal error
  • ROS 2 launch: smoother arguments reach mola-cli; publish_local_map argument; no IMU gravity factor in localization-only mode by default
  • Local map publishing: xyz (+intensity) only, off the state lock
  • Drop invalid input (IMU, GNSS) instead of stopping the odometry; discard queued scans after a fatal error
  • Fix a reference cycle with BridgeROS2 that kept modules alive after shutdown
  • Fix a deadlock when the state estimator publishes its geo-referencing; several thread safety fixes in reset(), map_save() and queued requests
  • ICP prior: convert the motion model prior and information to the solver tangent
  • De-skew in place; drop inserted points closer than 0.05 m to the incremental local map
  • GUI: option to hide back-facing points; trajectory cost no longer grows with its length
  • Online version check fixes; new MOLA_LO_DISABLE_VERSION_CHECK
  • Fix configure on Humble with CMake >= 3.27
  • New tests: headless launch runs, initial localization on a real dataset fragment, local map publishing, error and concurrency paths
  • Docs and CI updates
  • Contributors: Jose Luis Blanco-Claraco

3.3.0 (2026-09-28)

  • viz: expose grid spacing as env var
  • Ouster Rev8 launcher: accept low-overlap ICP, predict motion with the IMU (#190)
  • Ouster Rev8 launcher: incremental local map and per-point RGB coloring by default
  • add rosbag1 as build dep for binaries to have this functionality
  • ci: add GitHub release workflow on version tags
  • Recover the observation radius from the raw scan when every filtered layer is empty
  • Add mola-lo-gui-ouster-rev8, accept an .osf argument in the Ouster wrappers
  • Feed IMU samples to the generators through one shared output map
  • Test that every pipeline resolves; document pipeline blocks
  • Pipelines: rebuild the single-filter GICP variant as an overlay
  • Pipelines: assemble the 3D pipelines from shared blocks
  • deskewTwistFromOdometry: use the covered interval when odometry starts mid-sweep
  • Launchers: pin the first pose when selecting the smoother
  • De-skew with an independent odometry's velocity (deskew_odometry_sensor_label)
  • feat: expose a weight on the pose prior handed to the ICP solver
  • feat: a refused registration contributes the prediction, not a gap
  • feat: optional Mahalanobis gate on the ICP registration result
  • offline CLI: do not publish the local map by default
  • GrandTour pipeline: expose the cov2cov incidence and per-point range weighting
  • pipelines: use $import/$define to collapse thin variants, drop stale experiments
  • GrandTour: select the smoother and a scene-adaptive point budget
  • feat: add --output-tum-path-smoothed to the offline CLI
  • Default pipeline: enable the local map's covariance cache admission gate
  • IncrementalPointCloud: own default for the eviction cube, 1.0x radius
  • Publisher: reach the points-map view via mrpt::<maps::asPointsMap>()
  • remove obsolete rgbd pipeline (refer to mola_vision)
  • gicp pipeline: new default max icp iters 25->16
  • store IMU readings in simplemaps for attitude aid in georef (#173)
  • Move the pipelines to the renamed, squared robust-kernel scale
  • Expose the TSDF layer's rendering knobs in the dual-map pipeline
  • GrandTour: add a 'hesai_raw' LiDAR selector for the uncompensated cloud
  • GrandTour: keep the scan point timestamps at their own reference
  • cli: --module, to run a second front-end in the batch tool
  • Add drop_stale_scans: a lossless input queue for offline runs
  • Optional, env-gated log of the local-map insert/skip decision
  • KITTI eval: record that MOLA_INITIAL_VX is coupled to the pipeline, not the dataset
  • KITTI: run the shipped pipeline, which halves absolute trajectory error
  • Stop refusing recordings with more bags than launch-file slots

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.4.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MOLAorg/mola_lidar_odometry.git
VCS Type git
VCS Version develop
Last Updated 2026-11-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format Docs codecov

mola_lidar_odometry

LIDAR odometry component based on the MOLA and MRPT frameworks, compatible with ROS 2.

Contents

This repository provides a C++ library mola_lidar_odometry implementing LIDAR odometry. Sensor input is provided via MOLA components, and ROS 2 example launch files are provided in ros2-launchs.

A CLI interface mola-lidar-odometry-cli is also provided for running on offline datasets.

Build and install

Refer to: https://docs.mola-slam.org/latest/#installing

Lidar Inertial Odometry (LIO) demo with Oxford Spires: Peek 2025-08-31 11-36

Lidar Odometry (LO) demo with KITTI: mola-slam-kitti-demo

Documentation and tutorials

See: https://docs.mola-slam.org/

ROS build farm status

Distro Build dev Release
ROS 2 Humble (u22.04) Build Status Version
ROS 2 Jazzy (u24.04) Build Status Version
ROS 2 Kilted (u24.04) Build Status Version
ROS 2 Lyrical (u26.04) Build Status Version
ROS 2 Rolling (u26.04) Build Status Version

Binary package build status per ROS 2 distro:

Package ROS 2 Humble
(u22.04)
ROS 2 Jazzy
(u24.04)
ROS 2 Kilted
(u24.04)
ROS 2 Lyrical
(u26.04)
ROS 2 Rolling
(u26.04)
mola_lidar_odometry Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status

Each cell stacks the badges for that ROS 2 distro, in this order (when available):

  • Ubuntu (amd64)
  • Ubuntu (arm64)
  • RHEL (x86_64) – not available for Humble, since mrpt3 cannot be built there.
  • Fedora (x86_64) – only available since ROS 2 Lyrical.
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

@article{blanco2025mola_lo,
    author = {Blanco-Claraco, Jose Luis},
    title ={{A flexible framework for accurate LiDAR odometry, map manipulation, and localization}},
    journal = {The International Journal of Robotics Research},
    volume = {44},
    number = {9},
    pages = {1553--1599},
    year = {2025},
    doi = {10.1177/02783649251316881},
    URL = { https://doi.org/10.1177/02783649251316881},
    eprint = {2407.20465},
}

License

Copyright (C) 2018-2026 Jose Luis Blanco jlblanco@ual.es, University of Almeria

This package is released under the GNU GPL v3 license as open source, with the main intention of being useful for research and evaluation purposes. Commercial licenses available upon request.

Contributions require acceptance of the Contributor License Agreement (CLA).

CHANGELOG

Changelog for package mola_lidar_odometry

3.4.0 (2026-11-01)

  • Initial localization: global search around an uncertain state estimator pose, with z from the map ground and a minimum yaw range (MOLA_LO_INIT_GLOBAL_SEARCH_MIN_YAW)
  • Place the first keyframe at the initial localization pose; re-initialize from the state estimator after a bad first ICP
  • Post-relocalization: start ICP from the re-localized pose; relocalize_from_gnss() resets the state estimator first (#193)
  • GICP pipelines: IncrementalPointCloud (voxel hash index) is the default local map; index type and view-direction filter exposed in the pipelines
  • lidar3d-gicp-dual-tsdf: add the TSDF layer with $append (requires mola_yaml >= 3.3.3)
  • Optional attitude-only IMU, also stored into simplemap keyframes
  • New FoMo dataset profile
  • mola-lidar-odometry-cli: read dataset entries ahead on a background thread; cap TBB threads to physical cores; exit with an error after a fatal error
  • ROS 2 launch: smoother arguments reach mola-cli; publish_local_map argument; no IMU gravity factor in localization-only mode by default
  • Local map publishing: xyz (+intensity) only, off the state lock
  • Drop invalid input (IMU, GNSS) instead of stopping the odometry; discard queued scans after a fatal error
  • Fix a reference cycle with BridgeROS2 that kept modules alive after shutdown
  • Fix a deadlock when the state estimator publishes its geo-referencing; several thread safety fixes in reset(), map_save() and queued requests
  • ICP prior: convert the motion model prior and information to the solver tangent
  • De-skew in place; drop inserted points closer than 0.05 m to the incremental local map
  • GUI: option to hide back-facing points; trajectory cost no longer grows with its length
  • Online version check fixes; new MOLA_LO_DISABLE_VERSION_CHECK
  • Fix configure on Humble with CMake >= 3.27
  • New tests: headless launch runs, initial localization on a real dataset fragment, local map publishing, error and concurrency paths
  • Docs and CI updates
  • Contributors: Jose Luis Blanco-Claraco

3.3.0 (2026-09-28)

  • viz: expose grid spacing as env var
  • Ouster Rev8 launcher: accept low-overlap ICP, predict motion with the IMU (#190)
  • Ouster Rev8 launcher: incremental local map and per-point RGB coloring by default
  • add rosbag1 as build dep for binaries to have this functionality
  • ci: add GitHub release workflow on version tags
  • Recover the observation radius from the raw scan when every filtered layer is empty
  • Add mola-lo-gui-ouster-rev8, accept an .osf argument in the Ouster wrappers
  • Feed IMU samples to the generators through one shared output map
  • Test that every pipeline resolves; document pipeline blocks
  • Pipelines: rebuild the single-filter GICP variant as an overlay
  • Pipelines: assemble the 3D pipelines from shared blocks
  • deskewTwistFromOdometry: use the covered interval when odometry starts mid-sweep
  • Launchers: pin the first pose when selecting the smoother
  • De-skew with an independent odometry's velocity (deskew_odometry_sensor_label)
  • feat: expose a weight on the pose prior handed to the ICP solver
  • feat: a refused registration contributes the prediction, not a gap
  • feat: optional Mahalanobis gate on the ICP registration result
  • offline CLI: do not publish the local map by default
  • GrandTour pipeline: expose the cov2cov incidence and per-point range weighting
  • pipelines: use $import/$define to collapse thin variants, drop stale experiments
  • GrandTour: select the smoother and a scene-adaptive point budget
  • feat: add --output-tum-path-smoothed to the offline CLI
  • Default pipeline: enable the local map's covariance cache admission gate
  • IncrementalPointCloud: own default for the eviction cube, 1.0x radius
  • Publisher: reach the points-map view via mrpt::<maps::asPointsMap>()
  • remove obsolete rgbd pipeline (refer to mola_vision)
  • gicp pipeline: new default max icp iters 25->16
  • store IMU readings in simplemaps for attitude aid in georef (#173)
  • Move the pipelines to the renamed, squared robust-kernel scale
  • Expose the TSDF layer's rendering knobs in the dual-map pipeline
  • GrandTour: add a 'hesai_raw' LiDAR selector for the uncompensated cloud
  • GrandTour: keep the scan point timestamps at their own reference
  • cli: --module, to run a second front-end in the batch tool
  • Add drop_stale_scans: a lossless input queue for offline runs
  • Optional, env-gated log of the local-map insert/skip decision
  • KITTI eval: record that MOLA_INITIAL_VX is coupled to the pipeline, not the dataset
  • KITTI: run the shipped pipeline, which halves absolute trajectory error
  • Stop refusing recordings with more bags than launch-file slots

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.4.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MOLAorg/mola_lidar_odometry.git
VCS Type git
VCS Version develop
Last Updated 2026-11-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format Docs codecov

mola_lidar_odometry

LIDAR odometry component based on the MOLA and MRPT frameworks, compatible with ROS 2.

Contents

This repository provides a C++ library mola_lidar_odometry implementing LIDAR odometry. Sensor input is provided via MOLA components, and ROS 2 example launch files are provided in ros2-launchs.

A CLI interface mola-lidar-odometry-cli is also provided for running on offline datasets.

Build and install

Refer to: https://docs.mola-slam.org/latest/#installing

Lidar Inertial Odometry (LIO) demo with Oxford Spires: Peek 2025-08-31 11-36

Lidar Odometry (LO) demo with KITTI: mola-slam-kitti-demo

Documentation and tutorials

See: https://docs.mola-slam.org/

ROS build farm status

Distro Build dev Release
ROS 2 Humble (u22.04) Build Status Version
ROS 2 Jazzy (u24.04) Build Status Version
ROS 2 Kilted (u24.04) Build Status Version
ROS 2 Lyrical (u26.04) Build Status Version
ROS 2 Rolling (u26.04) Build Status Version

Binary package build status per ROS 2 distro:

Package ROS 2 Humble
(u22.04)
ROS 2 Jazzy
(u24.04)
ROS 2 Kilted
(u24.04)
ROS 2 Lyrical
(u26.04)
ROS 2 Rolling
(u26.04)
mola_lidar_odometry Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status

Each cell stacks the badges for that ROS 2 distro, in this order (when available):

  • Ubuntu (amd64)
  • Ubuntu (arm64)
  • RHEL (x86_64) – not available for Humble, since mrpt3 cannot be built there.
  • Fedora (x86_64) – only available since ROS 2 Lyrical.
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

@article{blanco2025mola_lo,
    author = {Blanco-Claraco, Jose Luis},
    title ={{A flexible framework for accurate LiDAR odometry, map manipulation, and localization}},
    journal = {The International Journal of Robotics Research},
    volume = {44},
    number = {9},
    pages = {1553--1599},
    year = {2025},
    doi = {10.1177/02783649251316881},
    URL = { https://doi.org/10.1177/02783649251316881},
    eprint = {2407.20465},
}

License

Copyright (C) 2018-2026 Jose Luis Blanco jlblanco@ual.es, University of Almeria

This package is released under the GNU GPL v3 license as open source, with the main intention of being useful for research and evaluation purposes. Commercial licenses available upon request.

Contributions require acceptance of the Contributor License Agreement (CLA).

CHANGELOG

Changelog for package mola_lidar_odometry

3.4.0 (2026-11-01)

  • Initial localization: global search around an uncertain state estimator pose, with z from the map ground and a minimum yaw range (MOLA_LO_INIT_GLOBAL_SEARCH_MIN_YAW)
  • Place the first keyframe at the initial localization pose; re-initialize from the state estimator after a bad first ICP
  • Post-relocalization: start ICP from the re-localized pose; relocalize_from_gnss() resets the state estimator first (#193)
  • GICP pipelines: IncrementalPointCloud (voxel hash index) is the default local map; index type and view-direction filter exposed in the pipelines
  • lidar3d-gicp-dual-tsdf: add the TSDF layer with $append (requires mola_yaml >= 3.3.3)
  • Optional attitude-only IMU, also stored into simplemap keyframes
  • New FoMo dataset profile
  • mola-lidar-odometry-cli: read dataset entries ahead on a background thread; cap TBB threads to physical cores; exit with an error after a fatal error
  • ROS 2 launch: smoother arguments reach mola-cli; publish_local_map argument; no IMU gravity factor in localization-only mode by default
  • Local map publishing: xyz (+intensity) only, off the state lock
  • Drop invalid input (IMU, GNSS) instead of stopping the odometry; discard queued scans after a fatal error
  • Fix a reference cycle with BridgeROS2 that kept modules alive after shutdown
  • Fix a deadlock when the state estimator publishes its geo-referencing; several thread safety fixes in reset(), map_save() and queued requests
  • ICP prior: convert the motion model prior and information to the solver tangent
  • De-skew in place; drop inserted points closer than 0.05 m to the incremental local map
  • GUI: option to hide back-facing points; trajectory cost no longer grows with its length
  • Online version check fixes; new MOLA_LO_DISABLE_VERSION_CHECK
  • Fix configure on Humble with CMake >= 3.27
  • New tests: headless launch runs, initial localization on a real dataset fragment, local map publishing, error and concurrency paths
  • Docs and CI updates
  • Contributors: Jose Luis Blanco-Claraco

3.3.0 (2026-09-28)

  • viz: expose grid spacing as env var
  • Ouster Rev8 launcher: accept low-overlap ICP, predict motion with the IMU (#190)
  • Ouster Rev8 launcher: incremental local map and per-point RGB coloring by default
  • add rosbag1 as build dep for binaries to have this functionality
  • ci: add GitHub release workflow on version tags
  • Recover the observation radius from the raw scan when every filtered layer is empty
  • Add mola-lo-gui-ouster-rev8, accept an .osf argument in the Ouster wrappers
  • Feed IMU samples to the generators through one shared output map
  • Test that every pipeline resolves; document pipeline blocks
  • Pipelines: rebuild the single-filter GICP variant as an overlay
  • Pipelines: assemble the 3D pipelines from shared blocks
  • deskewTwistFromOdometry: use the covered interval when odometry starts mid-sweep
  • Launchers: pin the first pose when selecting the smoother
  • De-skew with an independent odometry's velocity (deskew_odometry_sensor_label)
  • feat: expose a weight on the pose prior handed to the ICP solver
  • feat: a refused registration contributes the prediction, not a gap
  • feat: optional Mahalanobis gate on the ICP registration result
  • offline CLI: do not publish the local map by default
  • GrandTour pipeline: expose the cov2cov incidence and per-point range weighting
  • pipelines: use $import/$define to collapse thin variants, drop stale experiments
  • GrandTour: select the smoother and a scene-adaptive point budget
  • feat: add --output-tum-path-smoothed to the offline CLI
  • Default pipeline: enable the local map's covariance cache admission gate
  • IncrementalPointCloud: own default for the eviction cube, 1.0x radius
  • Publisher: reach the points-map view via mrpt::<maps::asPointsMap>()
  • remove obsolete rgbd pipeline (refer to mola_vision)
  • gicp pipeline: new default max icp iters 25->16
  • store IMU readings in simplemaps for attitude aid in georef (#173)
  • Move the pipelines to the renamed, squared robust-kernel scale
  • Expose the TSDF layer's rendering knobs in the dual-map pipeline
  • GrandTour: add a 'hesai_raw' LiDAR selector for the uncompensated cloud
  • GrandTour: keep the scan point timestamps at their own reference
  • cli: --module, to run a second front-end in the batch tool
  • Add drop_stale_scans: a lossless input queue for offline runs
  • Optional, env-gated log of the local-map insert/skip decision
  • KITTI eval: record that MOLA_INITIAL_VX is coupled to the pipeline, not the dataset
  • KITTI: run the shipped pipeline, which halves absolute trajectory error
  • Stop refusing recordings with more bags than launch-file slots

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.4.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MOLAorg/mola_lidar_odometry.git
VCS Type git
VCS Version develop
Last Updated 2026-11-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format Docs codecov

mola_lidar_odometry

LIDAR odometry component based on the MOLA and MRPT frameworks, compatible with ROS 2.

Contents

This repository provides a C++ library mola_lidar_odometry implementing LIDAR odometry. Sensor input is provided via MOLA components, and ROS 2 example launch files are provided in ros2-launchs.

A CLI interface mola-lidar-odometry-cli is also provided for running on offline datasets.

Build and install

Refer to: https://docs.mola-slam.org/latest/#installing

Lidar Inertial Odometry (LIO) demo with Oxford Spires: Peek 2025-08-31 11-36

Lidar Odometry (LO) demo with KITTI: mola-slam-kitti-demo

Documentation and tutorials

See: https://docs.mola-slam.org/

ROS build farm status

Distro Build dev Release
ROS 2 Humble (u22.04) Build Status Version
ROS 2 Jazzy (u24.04) Build Status Version
ROS 2 Kilted (u24.04) Build Status Version
ROS 2 Lyrical (u26.04) Build Status Version
ROS 2 Rolling (u26.04) Build Status Version

Binary package build status per ROS 2 distro:

Package ROS 2 Humble
(u22.04)
ROS 2 Jazzy
(u24.04)
ROS 2 Kilted
(u24.04)
ROS 2 Lyrical
(u26.04)
ROS 2 Rolling
(u26.04)
mola_lidar_odometry Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status

Each cell stacks the badges for that ROS 2 distro, in this order (when available):

  • Ubuntu (amd64)
  • Ubuntu (arm64)
  • RHEL (x86_64) – not available for Humble, since mrpt3 cannot be built there.
  • Fedora (x86_64) – only available since ROS 2 Lyrical.
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

@article{blanco2025mola_lo,
    author = {Blanco-Claraco, Jose Luis},
    title ={{A flexible framework for accurate LiDAR odometry, map manipulation, and localization}},
    journal = {The International Journal of Robotics Research},
    volume = {44},
    number = {9},
    pages = {1553--1599},
    year = {2025},
    doi = {10.1177/02783649251316881},
    URL = { https://doi.org/10.1177/02783649251316881},
    eprint = {2407.20465},
}

License

Copyright (C) 2018-2026 Jose Luis Blanco jlblanco@ual.es, University of Almeria

This package is released under the GNU GPL v3 license as open source, with the main intention of being useful for research and evaluation purposes. Commercial licenses available upon request.

Contributions require acceptance of the Contributor License Agreement (CLA).

CHANGELOG

Changelog for package mola_lidar_odometry

3.4.0 (2026-11-01)

  • Initial localization: global search around an uncertain state estimator pose, with z from the map ground and a minimum yaw range (MOLA_LO_INIT_GLOBAL_SEARCH_MIN_YAW)
  • Place the first keyframe at the initial localization pose; re-initialize from the state estimator after a bad first ICP
  • Post-relocalization: start ICP from the re-localized pose; relocalize_from_gnss() resets the state estimator first (#193)
  • GICP pipelines: IncrementalPointCloud (voxel hash index) is the default local map; index type and view-direction filter exposed in the pipelines
  • lidar3d-gicp-dual-tsdf: add the TSDF layer with $append (requires mola_yaml >= 3.3.3)
  • Optional attitude-only IMU, also stored into simplemap keyframes
  • New FoMo dataset profile
  • mola-lidar-odometry-cli: read dataset entries ahead on a background thread; cap TBB threads to physical cores; exit with an error after a fatal error
  • ROS 2 launch: smoother arguments reach mola-cli; publish_local_map argument; no IMU gravity factor in localization-only mode by default
  • Local map publishing: xyz (+intensity) only, off the state lock
  • Drop invalid input (IMU, GNSS) instead of stopping the odometry; discard queued scans after a fatal error
  • Fix a reference cycle with BridgeROS2 that kept modules alive after shutdown
  • Fix a deadlock when the state estimator publishes its geo-referencing; several thread safety fixes in reset(), map_save() and queued requests
  • ICP prior: convert the motion model prior and information to the solver tangent
  • De-skew in place; drop inserted points closer than 0.05 m to the incremental local map
  • GUI: option to hide back-facing points; trajectory cost no longer grows with its length
  • Online version check fixes; new MOLA_LO_DISABLE_VERSION_CHECK
  • Fix configure on Humble with CMake >= 3.27
  • New tests: headless launch runs, initial localization on a real dataset fragment, local map publishing, error and concurrency paths
  • Docs and CI updates
  • Contributors: Jose Luis Blanco-Claraco

3.3.0 (2026-09-28)

  • viz: expose grid spacing as env var
  • Ouster Rev8 launcher: accept low-overlap ICP, predict motion with the IMU (#190)
  • Ouster Rev8 launcher: incremental local map and per-point RGB coloring by default
  • add rosbag1 as build dep for binaries to have this functionality
  • ci: add GitHub release workflow on version tags
  • Recover the observation radius from the raw scan when every filtered layer is empty
  • Add mola-lo-gui-ouster-rev8, accept an .osf argument in the Ouster wrappers
  • Feed IMU samples to the generators through one shared output map
  • Test that every pipeline resolves; document pipeline blocks
  • Pipelines: rebuild the single-filter GICP variant as an overlay
  • Pipelines: assemble the 3D pipelines from shared blocks
  • deskewTwistFromOdometry: use the covered interval when odometry starts mid-sweep
  • Launchers: pin the first pose when selecting the smoother
  • De-skew with an independent odometry's velocity (deskew_odometry_sensor_label)
  • feat: expose a weight on the pose prior handed to the ICP solver
  • feat: a refused registration contributes the prediction, not a gap
  • feat: optional Mahalanobis gate on the ICP registration result
  • offline CLI: do not publish the local map by default
  • GrandTour pipeline: expose the cov2cov incidence and per-point range weighting
  • pipelines: use $import/$define to collapse thin variants, drop stale experiments
  • GrandTour: select the smoother and a scene-adaptive point budget
  • feat: add --output-tum-path-smoothed to the offline CLI
  • Default pipeline: enable the local map's covariance cache admission gate
  • IncrementalPointCloud: own default for the eviction cube, 1.0x radius
  • Publisher: reach the points-map view via mrpt::<maps::asPointsMap>()
  • remove obsolete rgbd pipeline (refer to mola_vision)
  • gicp pipeline: new default max icp iters 25->16
  • store IMU readings in simplemaps for attitude aid in georef (#173)
  • Move the pipelines to the renamed, squared robust-kernel scale
  • Expose the TSDF layer's rendering knobs in the dual-map pipeline
  • GrandTour: add a 'hesai_raw' LiDAR selector for the uncompensated cloud
  • GrandTour: keep the scan point timestamps at their own reference
  • cli: --module, to run a second front-end in the batch tool
  • Add drop_stale_scans: a lossless input queue for offline runs
  • Optional, env-gated log of the local-map insert/skip decision
  • KITTI eval: record that MOLA_INITIAL_VX is coupled to the pipeline, not the dataset
  • KITTI: run the shipped pipeline, which halves absolute trajectory error
  • Stop refusing recordings with more bags than launch-file slots

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.4.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MOLAorg/mola_lidar_odometry.git
VCS Type git
VCS Version develop
Last Updated 2026-11-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format Docs codecov

mola_lidar_odometry

LIDAR odometry component based on the MOLA and MRPT frameworks, compatible with ROS 2.

Contents

This repository provides a C++ library mola_lidar_odometry implementing LIDAR odometry. Sensor input is provided via MOLA components, and ROS 2 example launch files are provided in ros2-launchs.

A CLI interface mola-lidar-odometry-cli is also provided for running on offline datasets.

Build and install

Refer to: https://docs.mola-slam.org/latest/#installing

Lidar Inertial Odometry (LIO) demo with Oxford Spires: Peek 2025-08-31 11-36

Lidar Odometry (LO) demo with KITTI: mola-slam-kitti-demo

Documentation and tutorials

See: https://docs.mola-slam.org/

ROS build farm status

Distro Build dev Release
ROS 2 Humble (u22.04) Build Status Version
ROS 2 Jazzy (u24.04) Build Status Version
ROS 2 Kilted (u24.04) Build Status Version
ROS 2 Lyrical (u26.04) Build Status Version
ROS 2 Rolling (u26.04) Build Status Version

Binary package build status per ROS 2 distro:

Package ROS 2 Humble
(u22.04)
ROS 2 Jazzy
(u24.04)
ROS 2 Kilted
(u24.04)
ROS 2 Lyrical
(u26.04)
ROS 2 Rolling
(u26.04)
mola_lidar_odometry Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status

Each cell stacks the badges for that ROS 2 distro, in this order (when available):

  • Ubuntu (amd64)
  • Ubuntu (arm64)
  • RHEL (x86_64) – not available for Humble, since mrpt3 cannot be built there.
  • Fedora (x86_64) – only available since ROS 2 Lyrical.
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

@article{blanco2025mola_lo,
    author = {Blanco-Claraco, Jose Luis},
    title ={{A flexible framework for accurate LiDAR odometry, map manipulation, and localization}},
    journal = {The International Journal of Robotics Research},
    volume = {44},
    number = {9},
    pages = {1553--1599},
    year = {2025},
    doi = {10.1177/02783649251316881},
    URL = { https://doi.org/10.1177/02783649251316881},
    eprint = {2407.20465},
}

License

Copyright (C) 2018-2026 Jose Luis Blanco jlblanco@ual.es, University of Almeria

This package is released under the GNU GPL v3 license as open source, with the main intention of being useful for research and evaluation purposes. Commercial licenses available upon request.

Contributions require acceptance of the Contributor License Agreement (CLA).

CHANGELOG

Changelog for package mola_lidar_odometry

3.4.0 (2026-11-01)

  • Initial localization: global search around an uncertain state estimator pose, with z from the map ground and a minimum yaw range (MOLA_LO_INIT_GLOBAL_SEARCH_MIN_YAW)
  • Place the first keyframe at the initial localization pose; re-initialize from the state estimator after a bad first ICP
  • Post-relocalization: start ICP from the re-localized pose; relocalize_from_gnss() resets the state estimator first (#193)
  • GICP pipelines: IncrementalPointCloud (voxel hash index) is the default local map; index type and view-direction filter exposed in the pipelines
  • lidar3d-gicp-dual-tsdf: add the TSDF layer with $append (requires mola_yaml >= 3.3.3)
  • Optional attitude-only IMU, also stored into simplemap keyframes
  • New FoMo dataset profile
  • mola-lidar-odometry-cli: read dataset entries ahead on a background thread; cap TBB threads to physical cores; exit with an error after a fatal error
  • ROS 2 launch: smoother arguments reach mola-cli; publish_local_map argument; no IMU gravity factor in localization-only mode by default
  • Local map publishing: xyz (+intensity) only, off the state lock
  • Drop invalid input (IMU, GNSS) instead of stopping the odometry; discard queued scans after a fatal error
  • Fix a reference cycle with BridgeROS2 that kept modules alive after shutdown
  • Fix a deadlock when the state estimator publishes its geo-referencing; several thread safety fixes in reset(), map_save() and queued requests
  • ICP prior: convert the motion model prior and information to the solver tangent
  • De-skew in place; drop inserted points closer than 0.05 m to the incremental local map
  • GUI: option to hide back-facing points; trajectory cost no longer grows with its length
  • Online version check fixes; new MOLA_LO_DISABLE_VERSION_CHECK
  • Fix configure on Humble with CMake >= 3.27
  • New tests: headless launch runs, initial localization on a real dataset fragment, local map publishing, error and concurrency paths
  • Docs and CI updates
  • Contributors: Jose Luis Blanco-Claraco

3.3.0 (2026-09-28)

  • viz: expose grid spacing as env var
  • Ouster Rev8 launcher: accept low-overlap ICP, predict motion with the IMU (#190)
  • Ouster Rev8 launcher: incremental local map and per-point RGB coloring by default
  • add rosbag1 as build dep for binaries to have this functionality
  • ci: add GitHub release workflow on version tags
  • Recover the observation radius from the raw scan when every filtered layer is empty
  • Add mola-lo-gui-ouster-rev8, accept an .osf argument in the Ouster wrappers
  • Feed IMU samples to the generators through one shared output map
  • Test that every pipeline resolves; document pipeline blocks
  • Pipelines: rebuild the single-filter GICP variant as an overlay
  • Pipelines: assemble the 3D pipelines from shared blocks
  • deskewTwistFromOdometry: use the covered interval when odometry starts mid-sweep
  • Launchers: pin the first pose when selecting the smoother
  • De-skew with an independent odometry's velocity (deskew_odometry_sensor_label)
  • feat: expose a weight on the pose prior handed to the ICP solver
  • feat: a refused registration contributes the prediction, not a gap
  • feat: optional Mahalanobis gate on the ICP registration result
  • offline CLI: do not publish the local map by default
  • GrandTour pipeline: expose the cov2cov incidence and per-point range weighting
  • pipelines: use $import/$define to collapse thin variants, drop stale experiments
  • GrandTour: select the smoother and a scene-adaptive point budget
  • feat: add --output-tum-path-smoothed to the offline CLI
  • Default pipeline: enable the local map's covariance cache admission gate
  • IncrementalPointCloud: own default for the eviction cube, 1.0x radius
  • Publisher: reach the points-map view via mrpt::<maps::asPointsMap>()
  • remove obsolete rgbd pipeline (refer to mola_vision)
  • gicp pipeline: new default max icp iters 25->16
  • store IMU readings in simplemaps for attitude aid in georef (#173)
  • Move the pipelines to the renamed, squared robust-kernel scale
  • Expose the TSDF layer's rendering knobs in the dual-map pipeline
  • GrandTour: add a 'hesai_raw' LiDAR selector for the uncompensated cloud
  • GrandTour: keep the scan point timestamps at their own reference
  • cli: --module, to run a second front-end in the batch tool
  • Add drop_stale_scans: a lossless input queue for offline runs
  • Optional, env-gated log of the local-map insert/skip decision
  • KITTI eval: record that MOLA_INITIAL_VX is coupled to the pipeline, not the dataset
  • KITTI: run the shipped pipeline, which halves absolute trajectory error
  • Stop refusing recordings with more bags than launch-file slots

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.4.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MOLAorg/mola_lidar_odometry.git
VCS Type git
VCS Version develop
Last Updated 2026-11-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format Docs codecov

mola_lidar_odometry

LIDAR odometry component based on the MOLA and MRPT frameworks, compatible with ROS 2.

Contents

This repository provides a C++ library mola_lidar_odometry implementing LIDAR odometry. Sensor input is provided via MOLA components, and ROS 2 example launch files are provided in ros2-launchs.

A CLI interface mola-lidar-odometry-cli is also provided for running on offline datasets.

Build and install

Refer to: https://docs.mola-slam.org/latest/#installing

Lidar Inertial Odometry (LIO) demo with Oxford Spires: Peek 2025-08-31 11-36

Lidar Odometry (LO) demo with KITTI: mola-slam-kitti-demo

Documentation and tutorials

See: https://docs.mola-slam.org/

ROS build farm status

Distro Build dev Release
ROS 2 Humble (u22.04) Build Status Version
ROS 2 Jazzy (u24.04) Build Status Version
ROS 2 Kilted (u24.04) Build Status Version
ROS 2 Lyrical (u26.04) Build Status Version
ROS 2 Rolling (u26.04) Build Status Version

Binary package build status per ROS 2 distro:

Package ROS 2 Humble
(u22.04)
ROS 2 Jazzy
(u24.04)
ROS 2 Kilted
(u24.04)
ROS 2 Lyrical
(u26.04)
ROS 2 Rolling
(u26.04)
mola_lidar_odometry Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status

Each cell stacks the badges for that ROS 2 distro, in this order (when available):

  • Ubuntu (amd64)
  • Ubuntu (arm64)
  • RHEL (x86_64) – not available for Humble, since mrpt3 cannot be built there.
  • Fedora (x86_64) – only available since ROS 2 Lyrical.
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

@article{blanco2025mola_lo,
    author = {Blanco-Claraco, Jose Luis},
    title ={{A flexible framework for accurate LiDAR odometry, map manipulation, and localization}},
    journal = {The International Journal of Robotics Research},
    volume = {44},
    number = {9},
    pages = {1553--1599},
    year = {2025},
    doi = {10.1177/02783649251316881},
    URL = { https://doi.org/10.1177/02783649251316881},
    eprint = {2407.20465},
}

License

Copyright (C) 2018-2026 Jose Luis Blanco jlblanco@ual.es, University of Almeria

This package is released under the GNU GPL v3 license as open source, with the main intention of being useful for research and evaluation purposes. Commercial licenses available upon request.

Contributions require acceptance of the Contributor License Agreement (CLA).

CHANGELOG

Changelog for package mola_lidar_odometry

3.4.0 (2026-11-01)

  • Initial localization: global search around an uncertain state estimator pose, with z from the map ground and a minimum yaw range (MOLA_LO_INIT_GLOBAL_SEARCH_MIN_YAW)
  • Place the first keyframe at the initial localization pose; re-initialize from the state estimator after a bad first ICP
  • Post-relocalization: start ICP from the re-localized pose; relocalize_from_gnss() resets the state estimator first (#193)
  • GICP pipelines: IncrementalPointCloud (voxel hash index) is the default local map; index type and view-direction filter exposed in the pipelines
  • lidar3d-gicp-dual-tsdf: add the TSDF layer with $append (requires mola_yaml >= 3.3.3)
  • Optional attitude-only IMU, also stored into simplemap keyframes
  • New FoMo dataset profile
  • mola-lidar-odometry-cli: read dataset entries ahead on a background thread; cap TBB threads to physical cores; exit with an error after a fatal error
  • ROS 2 launch: smoother arguments reach mola-cli; publish_local_map argument; no IMU gravity factor in localization-only mode by default
  • Local map publishing: xyz (+intensity) only, off the state lock
  • Drop invalid input (IMU, GNSS) instead of stopping the odometry; discard queued scans after a fatal error
  • Fix a reference cycle with BridgeROS2 that kept modules alive after shutdown
  • Fix a deadlock when the state estimator publishes its geo-referencing; several thread safety fixes in reset(), map_save() and queued requests
  • ICP prior: convert the motion model prior and information to the solver tangent
  • De-skew in place; drop inserted points closer than 0.05 m to the incremental local map
  • GUI: option to hide back-facing points; trajectory cost no longer grows with its length
  • Online version check fixes; new MOLA_LO_DISABLE_VERSION_CHECK
  • Fix configure on Humble with CMake >= 3.27
  • New tests: headless launch runs, initial localization on a real dataset fragment, local map publishing, error and concurrency paths
  • Docs and CI updates
  • Contributors: Jose Luis Blanco-Claraco

3.3.0 (2026-09-28)

  • viz: expose grid spacing as env var
  • Ouster Rev8 launcher: accept low-overlap ICP, predict motion with the IMU (#190)
  • Ouster Rev8 launcher: incremental local map and per-point RGB coloring by default
  • add rosbag1 as build dep for binaries to have this functionality
  • ci: add GitHub release workflow on version tags
  • Recover the observation radius from the raw scan when every filtered layer is empty
  • Add mola-lo-gui-ouster-rev8, accept an .osf argument in the Ouster wrappers
  • Feed IMU samples to the generators through one shared output map
  • Test that every pipeline resolves; document pipeline blocks
  • Pipelines: rebuild the single-filter GICP variant as an overlay
  • Pipelines: assemble the 3D pipelines from shared blocks
  • deskewTwistFromOdometry: use the covered interval when odometry starts mid-sweep
  • Launchers: pin the first pose when selecting the smoother
  • De-skew with an independent odometry's velocity (deskew_odometry_sensor_label)
  • feat: expose a weight on the pose prior handed to the ICP solver
  • feat: a refused registration contributes the prediction, not a gap
  • feat: optional Mahalanobis gate on the ICP registration result
  • offline CLI: do not publish the local map by default
  • GrandTour pipeline: expose the cov2cov incidence and per-point range weighting
  • pipelines: use $import/$define to collapse thin variants, drop stale experiments
  • GrandTour: select the smoother and a scene-adaptive point budget
  • feat: add --output-tum-path-smoothed to the offline CLI
  • Default pipeline: enable the local map's covariance cache admission gate
  • IncrementalPointCloud: own default for the eviction cube, 1.0x radius
  • Publisher: reach the points-map view via mrpt::<maps::asPointsMap>()
  • remove obsolete rgbd pipeline (refer to mola_vision)
  • gicp pipeline: new default max icp iters 25->16
  • store IMU readings in simplemaps for attitude aid in georef (#173)
  • Move the pipelines to the renamed, squared robust-kernel scale
  • Expose the TSDF layer's rendering knobs in the dual-map pipeline
  • GrandTour: add a 'hesai_raw' LiDAR selector for the uncompensated cloud
  • GrandTour: keep the scan point timestamps at their own reference
  • cli: --module, to run a second front-end in the batch tool
  • Add drop_stale_scans: a lossless input queue for offline runs
  • Optional, env-gated log of the local-map insert/skip decision
  • KITTI eval: record that MOLA_INITIAL_VX is coupled to the pipeline, not the dataset
  • KITTI: run the shipped pipeline, which halves absolute trajectory error
  • Stop refusing recordings with more bags than launch-file slots

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.4.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MOLAorg/mola_lidar_odometry.git
VCS Type git
VCS Version develop
Last Updated 2026-11-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format Docs codecov

mola_lidar_odometry

LIDAR odometry component based on the MOLA and MRPT frameworks, compatible with ROS 2.

Contents

This repository provides a C++ library mola_lidar_odometry implementing LIDAR odometry. Sensor input is provided via MOLA components, and ROS 2 example launch files are provided in ros2-launchs.

A CLI interface mola-lidar-odometry-cli is also provided for running on offline datasets.

Build and install

Refer to: https://docs.mola-slam.org/latest/#installing

Lidar Inertial Odometry (LIO) demo with Oxford Spires: Peek 2025-08-31 11-36

Lidar Odometry (LO) demo with KITTI: mola-slam-kitti-demo

Documentation and tutorials

See: https://docs.mola-slam.org/

ROS build farm status

Distro Build dev Release
ROS 2 Humble (u22.04) Build Status Version
ROS 2 Jazzy (u24.04) Build Status Version
ROS 2 Kilted (u24.04) Build Status Version
ROS 2 Lyrical (u26.04) Build Status Version
ROS 2 Rolling (u26.04) Build Status Version

Binary package build status per ROS 2 distro:

Package ROS 2 Humble
(u22.04)
ROS 2 Jazzy
(u24.04)
ROS 2 Kilted
(u24.04)
ROS 2 Lyrical
(u26.04)
ROS 2 Rolling
(u26.04)
mola_lidar_odometry Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status

Each cell stacks the badges for that ROS 2 distro, in this order (when available):

  • Ubuntu (amd64)
  • Ubuntu (arm64)
  • RHEL (x86_64) – not available for Humble, since mrpt3 cannot be built there.
  • Fedora (x86_64) – only available since ROS 2 Lyrical.
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

@article{blanco2025mola_lo,
    author = {Blanco-Claraco, Jose Luis},
    title ={{A flexible framework for accurate LiDAR odometry, map manipulation, and localization}},
    journal = {The International Journal of Robotics Research},
    volume = {44},
    number = {9},
    pages = {1553--1599},
    year = {2025},
    doi = {10.1177/02783649251316881},
    URL = { https://doi.org/10.1177/02783649251316881},
    eprint = {2407.20465},
}

License

Copyright (C) 2018-2026 Jose Luis Blanco jlblanco@ual.es, University of Almeria

This package is released under the GNU GPL v3 license as open source, with the main intention of being useful for research and evaluation purposes. Commercial licenses available upon request.

Contributions require acceptance of the Contributor License Agreement (CLA).

CHANGELOG

Changelog for package mola_lidar_odometry

3.4.0 (2026-11-01)

  • Initial localization: global search around an uncertain state estimator pose, with z from the map ground and a minimum yaw range (MOLA_LO_INIT_GLOBAL_SEARCH_MIN_YAW)
  • Place the first keyframe at the initial localization pose; re-initialize from the state estimator after a bad first ICP
  • Post-relocalization: start ICP from the re-localized pose; relocalize_from_gnss() resets the state estimator first (#193)
  • GICP pipelines: IncrementalPointCloud (voxel hash index) is the default local map; index type and view-direction filter exposed in the pipelines
  • lidar3d-gicp-dual-tsdf: add the TSDF layer with $append (requires mola_yaml >= 3.3.3)
  • Optional attitude-only IMU, also stored into simplemap keyframes
  • New FoMo dataset profile
  • mola-lidar-odometry-cli: read dataset entries ahead on a background thread; cap TBB threads to physical cores; exit with an error after a fatal error
  • ROS 2 launch: smoother arguments reach mola-cli; publish_local_map argument; no IMU gravity factor in localization-only mode by default
  • Local map publishing: xyz (+intensity) only, off the state lock
  • Drop invalid input (IMU, GNSS) instead of stopping the odometry; discard queued scans after a fatal error
  • Fix a reference cycle with BridgeROS2 that kept modules alive after shutdown
  • Fix a deadlock when the state estimator publishes its geo-referencing; several thread safety fixes in reset(), map_save() and queued requests
  • ICP prior: convert the motion model prior and information to the solver tangent
  • De-skew in place; drop inserted points closer than 0.05 m to the incremental local map
  • GUI: option to hide back-facing points; trajectory cost no longer grows with its length
  • Online version check fixes; new MOLA_LO_DISABLE_VERSION_CHECK
  • Fix configure on Humble with CMake >= 3.27
  • New tests: headless launch runs, initial localization on a real dataset fragment, local map publishing, error and concurrency paths
  • Docs and CI updates
  • Contributors: Jose Luis Blanco-Claraco

3.3.0 (2026-09-28)

  • viz: expose grid spacing as env var
  • Ouster Rev8 launcher: accept low-overlap ICP, predict motion with the IMU (#190)
  • Ouster Rev8 launcher: incremental local map and per-point RGB coloring by default
  • add rosbag1 as build dep for binaries to have this functionality
  • ci: add GitHub release workflow on version tags
  • Recover the observation radius from the raw scan when every filtered layer is empty
  • Add mola-lo-gui-ouster-rev8, accept an .osf argument in the Ouster wrappers
  • Feed IMU samples to the generators through one shared output map
  • Test that every pipeline resolves; document pipeline blocks
  • Pipelines: rebuild the single-filter GICP variant as an overlay
  • Pipelines: assemble the 3D pipelines from shared blocks
  • deskewTwistFromOdometry: use the covered interval when odometry starts mid-sweep
  • Launchers: pin the first pose when selecting the smoother
  • De-skew with an independent odometry's velocity (deskew_odometry_sensor_label)
  • feat: expose a weight on the pose prior handed to the ICP solver
  • feat: a refused registration contributes the prediction, not a gap
  • feat: optional Mahalanobis gate on the ICP registration result
  • offline CLI: do not publish the local map by default
  • GrandTour pipeline: expose the cov2cov incidence and per-point range weighting
  • pipelines: use $import/$define to collapse thin variants, drop stale experiments
  • GrandTour: select the smoother and a scene-adaptive point budget
  • feat: add --output-tum-path-smoothed to the offline CLI
  • Default pipeline: enable the local map's covariance cache admission gate
  • IncrementalPointCloud: own default for the eviction cube, 1.0x radius
  • Publisher: reach the points-map view via mrpt::<maps::asPointsMap>()
  • remove obsolete rgbd pipeline (refer to mola_vision)
  • gicp pipeline: new default max icp iters 25->16
  • store IMU readings in simplemaps for attitude aid in georef (#173)
  • Move the pipelines to the renamed, squared robust-kernel scale
  • Expose the TSDF layer's rendering knobs in the dual-map pipeline
  • GrandTour: add a 'hesai_raw' LiDAR selector for the uncompensated cloud
  • GrandTour: keep the scan point timestamps at their own reference
  • cli: --module, to run a second front-end in the batch tool
  • Add drop_stale_scans: a lossless input queue for offline runs
  • Optional, env-gated log of the local-map insert/skip decision
  • KITTI eval: record that MOLA_INITIAL_VX is coupled to the pipeline, not the dataset
  • KITTI: run the shipped pipeline, which halves absolute trajectory error
  • Stop refusing recordings with more bags than launch-file slots

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.4.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/MOLAorg/mola_lidar_odometry.git
VCS Type git
VCS Version develop
Last Updated 2026-11-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format Docs codecov

mola_lidar_odometry

LIDAR odometry component based on the MOLA and MRPT frameworks, compatible with ROS 2.

Contents

This repository provides a C++ library mola_lidar_odometry implementing LIDAR odometry. Sensor input is provided via MOLA components, and ROS 2 example launch files are provided in ros2-launchs.

A CLI interface mola-lidar-odometry-cli is also provided for running on offline datasets.

Build and install

Refer to: https://docs.mola-slam.org/latest/#installing

Lidar Inertial Odometry (LIO) demo with Oxford Spires: Peek 2025-08-31 11-36

Lidar Odometry (LO) demo with KITTI: mola-slam-kitti-demo

Documentation and tutorials

See: https://docs.mola-slam.org/

ROS build farm status

Distro Build dev Release
ROS 2 Humble (u22.04) Build Status Version
ROS 2 Jazzy (u24.04) Build Status Version
ROS 2 Kilted (u24.04) Build Status Version
ROS 2 Lyrical (u26.04) Build Status Version
ROS 2 Rolling (u26.04) Build Status Version

Binary package build status per ROS 2 distro:

Package ROS 2 Humble
(u22.04)
ROS 2 Jazzy
(u24.04)
ROS 2 Kilted
(u24.04)
ROS 2 Lyrical
(u26.04)
ROS 2 Rolling
(u26.04)
mola_lidar_odometry Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status
Build Status

Each cell stacks the badges for that ROS 2 distro, in this order (when available):

  • Ubuntu (amd64)
  • Ubuntu (arm64)
  • RHEL (x86_64) – not available for Humble, since mrpt3 cannot be built there.
  • Fedora (x86_64) – only available since ROS 2 Lyrical.
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

@article{blanco2025mola_lo,
    author = {Blanco-Claraco, Jose Luis},
    title ={{A flexible framework for accurate LiDAR odometry, map manipulation, and localization}},
    journal = {The International Journal of Robotics Research},
    volume = {44},
    number = {9},
    pages = {1553--1599},
    year = {2025},
    doi = {10.1177/02783649251316881},
    URL = { https://doi.org/10.1177/02783649251316881},
    eprint = {2407.20465},
}

License

Copyright (C) 2018-2026 Jose Luis Blanco jlblanco@ual.es, University of Almeria

This package is released under the GNU GPL v3 license as open source, with the main intention of being useful for research and evaluation purposes. Commercial licenses available upon request.

Contributions require acceptance of the Contributor License Agreement (CLA).

CHANGELOG

Changelog for package mola_lidar_odometry

3.4.0 (2026-11-01)

  • Initial localization: global search around an uncertain state estimator pose, with z from the map ground and a minimum yaw range (MOLA_LO_INIT_GLOBAL_SEARCH_MIN_YAW)
  • Place the first keyframe at the initial localization pose; re-initialize from the state estimator after a bad first ICP
  • Post-relocalization: start ICP from the re-localized pose; relocalize_from_gnss() resets the state estimator first (#193)
  • GICP pipelines: IncrementalPointCloud (voxel hash index) is the default local map; index type and view-direction filter exposed in the pipelines
  • lidar3d-gicp-dual-tsdf: add the TSDF layer with $append (requires mola_yaml >= 3.3.3)
  • Optional attitude-only IMU, also stored into simplemap keyframes
  • New FoMo dataset profile
  • mola-lidar-odometry-cli: read dataset entries ahead on a background thread; cap TBB threads to physical cores; exit with an error after a fatal error
  • ROS 2 launch: smoother arguments reach mola-cli; publish_local_map argument; no IMU gravity factor in localization-only mode by default
  • Local map publishing: xyz (+intensity) only, off the state lock
  • Drop invalid input (IMU, GNSS) instead of stopping the odometry; discard queued scans after a fatal error
  • Fix a reference cycle with BridgeROS2 that kept modules alive after shutdown
  • Fix a deadlock when the state estimator publishes its geo-referencing; several thread safety fixes in reset(), map_save() and queued requests
  • ICP prior: convert the motion model prior and information to the solver tangent
  • De-skew in place; drop inserted points closer than 0.05 m to the incremental local map
  • GUI: option to hide back-facing points; trajectory cost no longer grows with its length
  • Online version check fixes; new MOLA_LO_DISABLE_VERSION_CHECK
  • Fix configure on Humble with CMake >= 3.27
  • New tests: headless launch runs, initial localization on a real dataset fragment, local map publishing, error and concurrency paths
  • Docs and CI updates
  • Contributors: Jose Luis Blanco-Claraco

3.3.0 (2026-09-28)

  • viz: expose grid spacing as env var
  • Ouster Rev8 launcher: accept low-overlap ICP, predict motion with the IMU (#190)
  • Ouster Rev8 launcher: incremental local map and per-point RGB coloring by default
  • add rosbag1 as build dep for binaries to have this functionality
  • ci: add GitHub release workflow on version tags
  • Recover the observation radius from the raw scan when every filtered layer is empty
  • Add mola-lo-gui-ouster-rev8, accept an .osf argument in the Ouster wrappers
  • Feed IMU samples to the generators through one shared output map
  • Test that every pipeline resolves; document pipeline blocks
  • Pipelines: rebuild the single-filter GICP variant as an overlay
  • Pipelines: assemble the 3D pipelines from shared blocks
  • deskewTwistFromOdometry: use the covered interval when odometry starts mid-sweep
  • Launchers: pin the first pose when selecting the smoother
  • De-skew with an independent odometry's velocity (deskew_odometry_sensor_label)
  • feat: expose a weight on the pose prior handed to the ICP solver
  • feat: a refused registration contributes the prediction, not a gap
  • feat: optional Mahalanobis gate on the ICP registration result
  • offline CLI: do not publish the local map by default
  • GrandTour pipeline: expose the cov2cov incidence and per-point range weighting
  • pipelines: use $import/$define to collapse thin variants, drop stale experiments
  • GrandTour: select the smoother and a scene-adaptive point budget
  • feat: add --output-tum-path-smoothed to the offline CLI
  • Default pipeline: enable the local map's covariance cache admission gate
  • IncrementalPointCloud: own default for the eviction cube, 1.0x radius
  • Publisher: reach the points-map view via mrpt::<maps::asPointsMap>()
  • remove obsolete rgbd pipeline (refer to mola_vision)
  • gicp pipeline: new default max icp iters 25->16
  • store IMU readings in simplemaps for attitude aid in georef (#173)
  • Move the pipelines to the renamed, squared robust-kernel scale
  • Expose the TSDF layer's rendering knobs in the dual-map pipeline
  • GrandTour: add a 'hesai_raw' LiDAR selector for the uncompensated cloud
  • GrandTour: keep the scan point timestamps at their own reference
  • cli: --module, to run a second front-end in the batch tool
  • Add drop_stale_scans: a lossless input queue for offline runs
  • Optional, env-gated log of the local-map insert/skip decision
  • KITTI eval: record that MOLA_INITIAL_VX is coupled to the pipeline, not the dataset
  • KITTI: run the shipped pipeline, which halves absolute trajectory error
  • Stop refusing recordings with more bags than launch-file slots

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange