|
mola_lidar_odometry package from mola_lidar_odometry repomola_lidar_odometry |
ROS Distro
|
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
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
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:
Lidar Odometry (LO) demo with KITTI:
Documentation and tutorials
See: https://docs.mola-slam.org/
ROS build farm status
| Distro | Build dev | Release |
|---|---|---|
| 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) |
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 |
|
|
|
|
|
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, sincemrpt3cannot be built there. - Fedora (
x86_64) – only available since ROS 2 Lyrical.
| EOL Distro | Last release |
|---|---|
| ROS2 Iron (u22.04) |
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 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
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange
|
mola_lidar_odometry package from mola_lidar_odometry repomola_lidar_odometry |
ROS Distro
|
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
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
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:
Lidar Odometry (LO) demo with KITTI:
Documentation and tutorials
See: https://docs.mola-slam.org/
ROS build farm status
| Distro | Build dev | Release |
|---|---|---|
| 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) |
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 |
|
|
|
|
|
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, sincemrpt3cannot be built there. - Fedora (
x86_64) – only available since ROS 2 Lyrical.
| EOL Distro | Last release |
|---|---|
| ROS2 Iron (u22.04) |
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 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
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange
|
mola_lidar_odometry package from mola_lidar_odometry repomola_lidar_odometry |
ROS Distro
|
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
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
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:
Lidar Odometry (LO) demo with KITTI:
Documentation and tutorials
See: https://docs.mola-slam.org/
ROS build farm status
| Distro | Build dev | Release |
|---|---|---|
| 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) |
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 |
|
|
|
|
|
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, sincemrpt3cannot be built there. - Fedora (
x86_64) – only available since ROS 2 Lyrical.
| EOL Distro | Last release |
|---|---|
| ROS2 Iron (u22.04) |
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 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
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange
|
mola_lidar_odometry package from mola_lidar_odometry repomola_lidar_odometry |
ROS Distro
|
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
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
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:
Lidar Odometry (LO) demo with KITTI:
Documentation and tutorials
See: https://docs.mola-slam.org/
ROS build farm status
| Distro | Build dev | Release |
|---|---|---|
| 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) |
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 |
|
|
|
|
|
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, sincemrpt3cannot be built there. - Fedora (
x86_64) – only available since ROS 2 Lyrical.
| EOL Distro | Last release |
|---|---|
| ROS2 Iron (u22.04) |
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 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
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange
|
mola_lidar_odometry package from mola_lidar_odometry repomola_lidar_odometry |
ROS Distro
|
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
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
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:
Lidar Odometry (LO) demo with KITTI:
Documentation and tutorials
See: https://docs.mola-slam.org/
ROS build farm status
| Distro | Build dev | Release |
|---|---|---|
| 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) |
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 |
|
|
|
|
|
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, sincemrpt3cannot be built there. - Fedora (
x86_64) – only available since ROS 2 Lyrical.
| EOL Distro | Last release |
|---|---|
| ROS2 Iron (u22.04) |
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 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
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange
|
mola_lidar_odometry package from mola_lidar_odometry repomola_lidar_odometry |
ROS Distro
|
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
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
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:
Lidar Odometry (LO) demo with KITTI:
Documentation and tutorials
See: https://docs.mola-slam.org/
ROS build farm status
| Distro | Build dev | Release |
|---|---|---|
| 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) |
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 |
|
|
|
|
|
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, sincemrpt3cannot be built there. - Fedora (
x86_64) – only available since ROS 2 Lyrical.
| EOL Distro | Last release |
|---|---|
| ROS2 Iron (u22.04) |
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 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
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange
|
mola_lidar_odometry package from mola_lidar_odometry repomola_lidar_odometry |
ROS Distro
|
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
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
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:
Lidar Odometry (LO) demo with KITTI:
Documentation and tutorials
See: https://docs.mola-slam.org/
ROS build farm status
| Distro | Build dev | Release |
|---|---|---|
| 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) |
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 |
|
|
|
|
|
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, sincemrpt3cannot be built there. - Fedora (
x86_64) – only available since ROS 2 Lyrical.
| EOL Distro | Last release |
|---|---|
| ROS2 Iron (u22.04) |
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 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
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange
|
mola_lidar_odometry package from mola_lidar_odometry repomola_lidar_odometry |
ROS Distro
|
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
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
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:
Lidar Odometry (LO) demo with KITTI:
Documentation and tutorials
See: https://docs.mola-slam.org/
ROS build farm status
| Distro | Build dev | Release |
|---|---|---|
| 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) |
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 |
|
|
|
|
|
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, sincemrpt3cannot be built there. - Fedora (
x86_64) – only available since ROS 2 Lyrical.
| EOL Distro | Last release |
|---|---|
| ROS2 Iron (u22.04) |
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 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
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange
|
mola_lidar_odometry package from mola_lidar_odometry repomola_lidar_odometry |
ROS Distro
|
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
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
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:
Lidar Odometry (LO) demo with KITTI:
Documentation and tutorials
See: https://docs.mola-slam.org/
ROS build farm status
| Distro | Build dev | Release |
|---|---|---|
| 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) |
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 |
|
|
|
|
|
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, sincemrpt3cannot be built there. - Fedora (
x86_64) – only available since ROS 2 Lyrical.
| EOL Distro | Last release |
|---|---|
| ROS2 Iron (u22.04) |
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 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
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange
|
mola_lidar_odometry package from mola_lidar_odometry repomola_lidar_odometry |
ROS Distro
|
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
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
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:
Lidar Odometry (LO) demo with KITTI:
Documentation and tutorials
See: https://docs.mola-slam.org/
ROS build farm status
| Distro | Build dev | Release |
|---|---|---|
| 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) |
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 |
|
|
|
|
|
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, sincemrpt3cannot be built there. - Fedora (
x86_64) – only available since ROS 2 Lyrical.
| EOL Distro | Last release |
|---|---|
| ROS2 Iron (u22.04) |
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 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
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange
|
mola_lidar_odometry package from mola_lidar_odometry repomola_lidar_odometry |
ROS Distro
|
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
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
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:
Lidar Odometry (LO) demo with KITTI:
Documentation and tutorials
See: https://docs.mola-slam.org/
ROS build farm status
| Distro | Build dev | Release |
|---|---|---|
| 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) |
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 |
|
|
|
|
|
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, sincemrpt3cannot be built there. - Fedora (
x86_64) – only available since ROS 2 Lyrical.
| EOL Distro | Last release |
|---|---|
| ROS2 Iron (u22.04) |
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 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
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange
|
mola_lidar_odometry package from mola_lidar_odometry repomola_lidar_odometry |
ROS Distro
|
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
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
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:
Lidar Odometry (LO) demo with KITTI:
Documentation and tutorials
See: https://docs.mola-slam.org/
ROS build farm status
| Distro | Build dev | Release |
|---|---|---|
| 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) |
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 |
|
|
|
|
|
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, sincemrpt3cannot be built there. - Fedora (
x86_64) – only available since ROS 2 Lyrical.
| EOL Distro | Last release |
|---|---|
| ROS2 Iron (u22.04) |
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 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
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange
|
mola_lidar_odometry package from mola_lidar_odometry repomola_lidar_odometry |
ROS Distro
|
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
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
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:
Lidar Odometry (LO) demo with KITTI:
Documentation and tutorials
See: https://docs.mola-slam.org/
ROS build farm status
| Distro | Build dev | Release |
|---|---|---|
| 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) |
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 |
|
|
|
|
|
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, sincemrpt3cannot be built there. - Fedora (
x86_64) – only available since ROS 2 Lyrical.
| EOL Distro | Last release |
|---|---|
| ROS2 Iron (u22.04) |
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 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
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange
|
mola_lidar_odometry package from mola_lidar_odometry repomola_lidar_odometry |
ROS Distro
|
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
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
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:
Lidar Odometry (LO) demo with KITTI:
Documentation and tutorials
See: https://docs.mola-slam.org/
ROS build farm status
| Distro | Build dev | Release |
|---|---|---|
| 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) |
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 |
|
|
|
|
|
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, sincemrpt3cannot be built there. - Fedora (
x86_64) – only available since ROS 2 Lyrical.
| EOL Distro | Last release |
|---|---|
| ROS2 Iron (u22.04) |
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 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
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange
|
mola_lidar_odometry package from mola_lidar_odometry repomola_lidar_odometry |
ROS Distro
|
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
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
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:
Lidar Odometry (LO) demo with KITTI:
Documentation and tutorials
See: https://docs.mola-slam.org/
ROS build farm status
| Distro | Build dev | Release |
|---|---|---|
| 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) |
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 |
|
|
|
|
|
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, sincemrpt3cannot be built there. - Fedora (
x86_64) – only available since ROS 2 Lyrical.
| EOL Distro | Last release |
|---|---|
| ROS2 Iron (u22.04) |
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 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
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange
|
mola_lidar_odometry package from mola_lidar_odometry repomola_lidar_odometry |
ROS Distro
|
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
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
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:
Lidar Odometry (LO) demo with KITTI:
Documentation and tutorials
See: https://docs.mola-slam.org/
ROS build farm status
| Distro | Build dev | Release |
|---|---|---|
| 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) |
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 |
|
|
|
|
|
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, sincemrpt3cannot be built there. - Fedora (
x86_64) – only available since ROS 2 Lyrical.
| EOL Distro | Last release |
|---|---|
| ROS2 Iron (u22.04) |
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 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
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange
|
mola_lidar_odometry package from mola_lidar_odometry repomola_lidar_odometry |
ROS Distro
|
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
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
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:
Lidar Odometry (LO) demo with KITTI:
Documentation and tutorials
See: https://docs.mola-slam.org/
ROS build farm status
| Distro | Build dev | Release |
|---|---|---|
| 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) |
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 |
|
|
|
|
|
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, sincemrpt3cannot be built there. - Fedora (
x86_64) – only available since ROS 2 Lyrical.
| EOL Distro | Last release |
|---|---|
| ROS2 Iron (u22.04) |
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 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
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange
|
mola_lidar_odometry package from mola_lidar_odometry repomola_lidar_odometry |
ROS Distro
|
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
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
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:
Lidar Odometry (LO) demo with KITTI:
Documentation and tutorials
See: https://docs.mola-slam.org/
ROS build farm status
| Distro | Build dev | Release |
|---|---|---|
| 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) |
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 |
|
|
|
|
|
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, sincemrpt3cannot be built there. - Fedora (
x86_64) – only available since ROS 2 Lyrical.
| EOL Distro | Last release |
|---|---|
| ROS2 Iron (u22.04) |
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 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
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange
|
mola_lidar_odometry package from mola_lidar_odometry repomola_lidar_odometry |
ROS Distro
|
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
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
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:
Lidar Odometry (LO) demo with KITTI:
Documentation and tutorials
See: https://docs.mola-slam.org/
ROS build farm status
| Distro | Build dev | Release |
|---|---|---|
| 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) |
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 |
|
|
|
|
|
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, sincemrpt3cannot be built there. - Fedora (
x86_64) – only available since ROS 2 Lyrical.
| EOL Distro | Last release |
|---|---|
| ROS2 Iron (u22.04) |
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 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
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange
|
mola_lidar_odometry package from mola_lidar_odometry repomola_lidar_odometry |
ROS Distro
|
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
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
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:
Lidar Odometry (LO) demo with KITTI:
Documentation and tutorials
See: https://docs.mola-slam.org/
ROS build farm status
| Distro | Build dev | Release |
|---|---|---|
| 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) |
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 |
|
|
|
|
|
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, sincemrpt3cannot be built there. - Fedora (
x86_64) – only available since ROS 2 Lyrical.
| EOL Distro | Last release |
|---|---|
| ROS2 Iron (u22.04) |
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 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