|
mola_lidar_odometry package from mola_lidar_odometry repomola_lidar_odometry |
ROS Distro
|
Package Summary
| Version | 3.2.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-09-01 |
| 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
| 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.2.0 (2026-08-21)
- Offline CLI Enhancements: Made the offline CLI state estimator deterministic by default, added run totals at shutdown, and exposed range-adaptive matcher thresholds.
- Offline CLI Linking Fix: Resolved runtime crashes in the offline CLI by correctly linking mola_state_estimation_smoother and its GTSAM dependencies.
- Wheel Odometry Support: Wired optional wheel odometry (MOLA_ODOMETRY_TOPIC) into the offline rosbag1 CLI path and corrected related documentation.
- Robust Observation Radius: Introduced observation_radius_quantile to prevent single stray far returns from skewing the scale, while keeping the default max-norm path bit-identical.
- GICP Tuning & Profiles: Moved tuned GICP defaults (coarse-voxel sizes, IMU deskew) out of global configurations and into per-dataset profiles (KITTI, Oxford) to prevent regressions on untested datasets.
- New Matching Pipelines: Added lidar3d-ndt-blend.yaml, lidar3d-fastlio-matching.yaml, and lidar3d-icp-blend.yaml to support matching protocol studies.
- KITTI Profile Updates: Configured the KITTI profile to use the more accurate point-to-point pipeline (lidar3d-icp.yaml) and documented the logic behind its velocity prior settings.
- BotanicGarden Profile Updates: Switched the profile to IncrementalPointCloud for better mean APE, but reverted experimental deskew/decimation overrides that didn't confidently improve results.
- Dataset Profile Consolidation: Unified dataset configurations (topics, extrinsics, layouts) into single shared scripts utilized by both GUI and offline CLI tools.
- CitrusFarm Multi-part Bags: Updated launch and GUI scripts to properly accept and route multi-part base*.bag sequences.
- ICP Threshold Adjustment: Raised the ICP adaptive threshold min_motion from 0.04 to 0.5 to prevent correspondence search windows from collapsing.
- Voxel Decimation Splitting: Allowed each decimation stage to use its own voxel size for better short-range precision and long-range drift reduction, and exposed the decimation method via environment variables.
- Observation Layer Bug Fix: Added a step to clear the observation layer in lidar3d-gicp before filling it to prevent crashes when optimize_twist is enabled.
- Eviction Cube Widened: Increased the default IncrementalPointCloud eviction cube size in lidar3d-gicp.yaml to retain more in-range points.
- New Environment Overrides: Exposed environment variables for the solver's inner iteration count, initial twist uncertainties, and MOLA_INITIAL_VX overrides.
- Reverted Dead Parameters: Removed the freezePairingsAfterIteration parameter exposure after discovering it does not actually exist in the released mp2p_icp library.
- Dependency Fix: Added a missing execution dependency for mola_viz_imgui.
- Contributors: Jose Luis Blanco-Claraco, SamueleSandrini
3.1.0 (2026-08-06)
-
fix: keep the local-map render and the IMU worker off the LiDAR critical path (#126)
Moves the local-map render off the LiDAR thread onto its own worker, and introduces a dedicated
imu_state_mtx_so the IMU handler no longer serializes behind every LiDAR scan viastate_mtx_. The render worker now deep-copies the map layers under the map mutex and does the expensive recolorize/OpenGL build on that private copy, unlocked. On Oxford Spires/GrandTour benchmarks this cutonLidarmax latency roughly in half (up to ~216 ms -> ~107 ms) and the IMU thread's total blocked time by more than half, eliminating the scan-queue backlog. Also exposesmap_update_decimationasMOLA_GUI_MAP_UPDATE_DECIMATION. -
Visualize the robot /tf tree in the LO viewer (opt-in) (#125)
Draws the subtree of coordinate frames below a configurable root frame as the robot moves (e.g. a legged robot's joint tree), via the new
mola::TransformTreeSource. Supports excluding frames/subtrees (tf_tree_exclude_frames), is toggled live from the GUI's View tab, and is enabled by default for the GrandTour dataset with its non-body frames excluded. -
Add mola-lo-gui-grandtour launch script for the GrandTour dataset (#124)
GrandTour publishes one ROS1 bag per topic, so
lidar_odometry_from_rosbag1.yamlnow accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own/tf_staticfor sensor extrinsics. -
Gate
gui_preview_sensorsentries behindMOLA_WITH_GUIconsistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds theMOLA_WITH_GUIheadless toggle to the remainingmola-clilaunch files.
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.2.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-09-01 |
| 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
| 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.2.0 (2026-08-21)
- Offline CLI Enhancements: Made the offline CLI state estimator deterministic by default, added run totals at shutdown, and exposed range-adaptive matcher thresholds.
- Offline CLI Linking Fix: Resolved runtime crashes in the offline CLI by correctly linking mola_state_estimation_smoother and its GTSAM dependencies.
- Wheel Odometry Support: Wired optional wheel odometry (MOLA_ODOMETRY_TOPIC) into the offline rosbag1 CLI path and corrected related documentation.
- Robust Observation Radius: Introduced observation_radius_quantile to prevent single stray far returns from skewing the scale, while keeping the default max-norm path bit-identical.
- GICP Tuning & Profiles: Moved tuned GICP defaults (coarse-voxel sizes, IMU deskew) out of global configurations and into per-dataset profiles (KITTI, Oxford) to prevent regressions on untested datasets.
- New Matching Pipelines: Added lidar3d-ndt-blend.yaml, lidar3d-fastlio-matching.yaml, and lidar3d-icp-blend.yaml to support matching protocol studies.
- KITTI Profile Updates: Configured the KITTI profile to use the more accurate point-to-point pipeline (lidar3d-icp.yaml) and documented the logic behind its velocity prior settings.
- BotanicGarden Profile Updates: Switched the profile to IncrementalPointCloud for better mean APE, but reverted experimental deskew/decimation overrides that didn't confidently improve results.
- Dataset Profile Consolidation: Unified dataset configurations (topics, extrinsics, layouts) into single shared scripts utilized by both GUI and offline CLI tools.
- CitrusFarm Multi-part Bags: Updated launch and GUI scripts to properly accept and route multi-part base*.bag sequences.
- ICP Threshold Adjustment: Raised the ICP adaptive threshold min_motion from 0.04 to 0.5 to prevent correspondence search windows from collapsing.
- Voxel Decimation Splitting: Allowed each decimation stage to use its own voxel size for better short-range precision and long-range drift reduction, and exposed the decimation method via environment variables.
- Observation Layer Bug Fix: Added a step to clear the observation layer in lidar3d-gicp before filling it to prevent crashes when optimize_twist is enabled.
- Eviction Cube Widened: Increased the default IncrementalPointCloud eviction cube size in lidar3d-gicp.yaml to retain more in-range points.
- New Environment Overrides: Exposed environment variables for the solver's inner iteration count, initial twist uncertainties, and MOLA_INITIAL_VX overrides.
- Reverted Dead Parameters: Removed the freezePairingsAfterIteration parameter exposure after discovering it does not actually exist in the released mp2p_icp library.
- Dependency Fix: Added a missing execution dependency for mola_viz_imgui.
- Contributors: Jose Luis Blanco-Claraco, SamueleSandrini
3.1.0 (2026-08-06)
-
fix: keep the local-map render and the IMU worker off the LiDAR critical path (#126)
Moves the local-map render off the LiDAR thread onto its own worker, and introduces a dedicated
imu_state_mtx_so the IMU handler no longer serializes behind every LiDAR scan viastate_mtx_. The render worker now deep-copies the map layers under the map mutex and does the expensive recolorize/OpenGL build on that private copy, unlocked. On Oxford Spires/GrandTour benchmarks this cutonLidarmax latency roughly in half (up to ~216 ms -> ~107 ms) and the IMU thread's total blocked time by more than half, eliminating the scan-queue backlog. Also exposesmap_update_decimationasMOLA_GUI_MAP_UPDATE_DECIMATION. -
Visualize the robot /tf tree in the LO viewer (opt-in) (#125)
Draws the subtree of coordinate frames below a configurable root frame as the robot moves (e.g. a legged robot's joint tree), via the new
mola::TransformTreeSource. Supports excluding frames/subtrees (tf_tree_exclude_frames), is toggled live from the GUI's View tab, and is enabled by default for the GrandTour dataset with its non-body frames excluded. -
Add mola-lo-gui-grandtour launch script for the GrandTour dataset (#124)
GrandTour publishes one ROS1 bag per topic, so
lidar_odometry_from_rosbag1.yamlnow accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own/tf_staticfor sensor extrinsics. -
Gate
gui_preview_sensorsentries behindMOLA_WITH_GUIconsistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds theMOLA_WITH_GUIheadless toggle to the remainingmola-clilaunch files.
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.2.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-09-01 |
| 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
| 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.2.0 (2026-08-21)
- Offline CLI Enhancements: Made the offline CLI state estimator deterministic by default, added run totals at shutdown, and exposed range-adaptive matcher thresholds.
- Offline CLI Linking Fix: Resolved runtime crashes in the offline CLI by correctly linking mola_state_estimation_smoother and its GTSAM dependencies.
- Wheel Odometry Support: Wired optional wheel odometry (MOLA_ODOMETRY_TOPIC) into the offline rosbag1 CLI path and corrected related documentation.
- Robust Observation Radius: Introduced observation_radius_quantile to prevent single stray far returns from skewing the scale, while keeping the default max-norm path bit-identical.
- GICP Tuning & Profiles: Moved tuned GICP defaults (coarse-voxel sizes, IMU deskew) out of global configurations and into per-dataset profiles (KITTI, Oxford) to prevent regressions on untested datasets.
- New Matching Pipelines: Added lidar3d-ndt-blend.yaml, lidar3d-fastlio-matching.yaml, and lidar3d-icp-blend.yaml to support matching protocol studies.
- KITTI Profile Updates: Configured the KITTI profile to use the more accurate point-to-point pipeline (lidar3d-icp.yaml) and documented the logic behind its velocity prior settings.
- BotanicGarden Profile Updates: Switched the profile to IncrementalPointCloud for better mean APE, but reverted experimental deskew/decimation overrides that didn't confidently improve results.
- Dataset Profile Consolidation: Unified dataset configurations (topics, extrinsics, layouts) into single shared scripts utilized by both GUI and offline CLI tools.
- CitrusFarm Multi-part Bags: Updated launch and GUI scripts to properly accept and route multi-part base*.bag sequences.
- ICP Threshold Adjustment: Raised the ICP adaptive threshold min_motion from 0.04 to 0.5 to prevent correspondence search windows from collapsing.
- Voxel Decimation Splitting: Allowed each decimation stage to use its own voxel size for better short-range precision and long-range drift reduction, and exposed the decimation method via environment variables.
- Observation Layer Bug Fix: Added a step to clear the observation layer in lidar3d-gicp before filling it to prevent crashes when optimize_twist is enabled.
- Eviction Cube Widened: Increased the default IncrementalPointCloud eviction cube size in lidar3d-gicp.yaml to retain more in-range points.
- New Environment Overrides: Exposed environment variables for the solver's inner iteration count, initial twist uncertainties, and MOLA_INITIAL_VX overrides.
- Reverted Dead Parameters: Removed the freezePairingsAfterIteration parameter exposure after discovering it does not actually exist in the released mp2p_icp library.
- Dependency Fix: Added a missing execution dependency for mola_viz_imgui.
- Contributors: Jose Luis Blanco-Claraco, SamueleSandrini
3.1.0 (2026-08-06)
-
fix: keep the local-map render and the IMU worker off the LiDAR critical path (#126)
Moves the local-map render off the LiDAR thread onto its own worker, and introduces a dedicated
imu_state_mtx_so the IMU handler no longer serializes behind every LiDAR scan viastate_mtx_. The render worker now deep-copies the map layers under the map mutex and does the expensive recolorize/OpenGL build on that private copy, unlocked. On Oxford Spires/GrandTour benchmarks this cutonLidarmax latency roughly in half (up to ~216 ms -> ~107 ms) and the IMU thread's total blocked time by more than half, eliminating the scan-queue backlog. Also exposesmap_update_decimationasMOLA_GUI_MAP_UPDATE_DECIMATION. -
Visualize the robot /tf tree in the LO viewer (opt-in) (#125)
Draws the subtree of coordinate frames below a configurable root frame as the robot moves (e.g. a legged robot's joint tree), via the new
mola::TransformTreeSource. Supports excluding frames/subtrees (tf_tree_exclude_frames), is toggled live from the GUI's View tab, and is enabled by default for the GrandTour dataset with its non-body frames excluded. -
Add mola-lo-gui-grandtour launch script for the GrandTour dataset (#124)
GrandTour publishes one ROS1 bag per topic, so
lidar_odometry_from_rosbag1.yamlnow accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own/tf_staticfor sensor extrinsics. -
Gate
gui_preview_sensorsentries behindMOLA_WITH_GUIconsistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds theMOLA_WITH_GUIheadless toggle to the remainingmola-clilaunch files.
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.2.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-09-01 |
| 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
| 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.2.0 (2026-08-21)
- Offline CLI Enhancements: Made the offline CLI state estimator deterministic by default, added run totals at shutdown, and exposed range-adaptive matcher thresholds.
- Offline CLI Linking Fix: Resolved runtime crashes in the offline CLI by correctly linking mola_state_estimation_smoother and its GTSAM dependencies.
- Wheel Odometry Support: Wired optional wheel odometry (MOLA_ODOMETRY_TOPIC) into the offline rosbag1 CLI path and corrected related documentation.
- Robust Observation Radius: Introduced observation_radius_quantile to prevent single stray far returns from skewing the scale, while keeping the default max-norm path bit-identical.
- GICP Tuning & Profiles: Moved tuned GICP defaults (coarse-voxel sizes, IMU deskew) out of global configurations and into per-dataset profiles (KITTI, Oxford) to prevent regressions on untested datasets.
- New Matching Pipelines: Added lidar3d-ndt-blend.yaml, lidar3d-fastlio-matching.yaml, and lidar3d-icp-blend.yaml to support matching protocol studies.
- KITTI Profile Updates: Configured the KITTI profile to use the more accurate point-to-point pipeline (lidar3d-icp.yaml) and documented the logic behind its velocity prior settings.
- BotanicGarden Profile Updates: Switched the profile to IncrementalPointCloud for better mean APE, but reverted experimental deskew/decimation overrides that didn't confidently improve results.
- Dataset Profile Consolidation: Unified dataset configurations (topics, extrinsics, layouts) into single shared scripts utilized by both GUI and offline CLI tools.
- CitrusFarm Multi-part Bags: Updated launch and GUI scripts to properly accept and route multi-part base*.bag sequences.
- ICP Threshold Adjustment: Raised the ICP adaptive threshold min_motion from 0.04 to 0.5 to prevent correspondence search windows from collapsing.
- Voxel Decimation Splitting: Allowed each decimation stage to use its own voxel size for better short-range precision and long-range drift reduction, and exposed the decimation method via environment variables.
- Observation Layer Bug Fix: Added a step to clear the observation layer in lidar3d-gicp before filling it to prevent crashes when optimize_twist is enabled.
- Eviction Cube Widened: Increased the default IncrementalPointCloud eviction cube size in lidar3d-gicp.yaml to retain more in-range points.
- New Environment Overrides: Exposed environment variables for the solver's inner iteration count, initial twist uncertainties, and MOLA_INITIAL_VX overrides.
- Reverted Dead Parameters: Removed the freezePairingsAfterIteration parameter exposure after discovering it does not actually exist in the released mp2p_icp library.
- Dependency Fix: Added a missing execution dependency for mola_viz_imgui.
- Contributors: Jose Luis Blanco-Claraco, SamueleSandrini
3.1.0 (2026-08-06)
-
fix: keep the local-map render and the IMU worker off the LiDAR critical path (#126)
Moves the local-map render off the LiDAR thread onto its own worker, and introduces a dedicated
imu_state_mtx_so the IMU handler no longer serializes behind every LiDAR scan viastate_mtx_. The render worker now deep-copies the map layers under the map mutex and does the expensive recolorize/OpenGL build on that private copy, unlocked. On Oxford Spires/GrandTour benchmarks this cutonLidarmax latency roughly in half (up to ~216 ms -> ~107 ms) and the IMU thread's total blocked time by more than half, eliminating the scan-queue backlog. Also exposesmap_update_decimationasMOLA_GUI_MAP_UPDATE_DECIMATION. -
Visualize the robot /tf tree in the LO viewer (opt-in) (#125)
Draws the subtree of coordinate frames below a configurable root frame as the robot moves (e.g. a legged robot's joint tree), via the new
mola::TransformTreeSource. Supports excluding frames/subtrees (tf_tree_exclude_frames), is toggled live from the GUI's View tab, and is enabled by default for the GrandTour dataset with its non-body frames excluded. -
Add mola-lo-gui-grandtour launch script for the GrandTour dataset (#124)
GrandTour publishes one ROS1 bag per topic, so
lidar_odometry_from_rosbag1.yamlnow accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own/tf_staticfor sensor extrinsics. -
Gate
gui_preview_sensorsentries behindMOLA_WITH_GUIconsistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds theMOLA_WITH_GUIheadless toggle to the remainingmola-clilaunch files.
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.2.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-09-01 |
| 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
| 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.2.0 (2026-08-21)
- Offline CLI Enhancements: Made the offline CLI state estimator deterministic by default, added run totals at shutdown, and exposed range-adaptive matcher thresholds.
- Offline CLI Linking Fix: Resolved runtime crashes in the offline CLI by correctly linking mola_state_estimation_smoother and its GTSAM dependencies.
- Wheel Odometry Support: Wired optional wheel odometry (MOLA_ODOMETRY_TOPIC) into the offline rosbag1 CLI path and corrected related documentation.
- Robust Observation Radius: Introduced observation_radius_quantile to prevent single stray far returns from skewing the scale, while keeping the default max-norm path bit-identical.
- GICP Tuning & Profiles: Moved tuned GICP defaults (coarse-voxel sizes, IMU deskew) out of global configurations and into per-dataset profiles (KITTI, Oxford) to prevent regressions on untested datasets.
- New Matching Pipelines: Added lidar3d-ndt-blend.yaml, lidar3d-fastlio-matching.yaml, and lidar3d-icp-blend.yaml to support matching protocol studies.
- KITTI Profile Updates: Configured the KITTI profile to use the more accurate point-to-point pipeline (lidar3d-icp.yaml) and documented the logic behind its velocity prior settings.
- BotanicGarden Profile Updates: Switched the profile to IncrementalPointCloud for better mean APE, but reverted experimental deskew/decimation overrides that didn't confidently improve results.
- Dataset Profile Consolidation: Unified dataset configurations (topics, extrinsics, layouts) into single shared scripts utilized by both GUI and offline CLI tools.
- CitrusFarm Multi-part Bags: Updated launch and GUI scripts to properly accept and route multi-part base*.bag sequences.
- ICP Threshold Adjustment: Raised the ICP adaptive threshold min_motion from 0.04 to 0.5 to prevent correspondence search windows from collapsing.
- Voxel Decimation Splitting: Allowed each decimation stage to use its own voxel size for better short-range precision and long-range drift reduction, and exposed the decimation method via environment variables.
- Observation Layer Bug Fix: Added a step to clear the observation layer in lidar3d-gicp before filling it to prevent crashes when optimize_twist is enabled.
- Eviction Cube Widened: Increased the default IncrementalPointCloud eviction cube size in lidar3d-gicp.yaml to retain more in-range points.
- New Environment Overrides: Exposed environment variables for the solver's inner iteration count, initial twist uncertainties, and MOLA_INITIAL_VX overrides.
- Reverted Dead Parameters: Removed the freezePairingsAfterIteration parameter exposure after discovering it does not actually exist in the released mp2p_icp library.
- Dependency Fix: Added a missing execution dependency for mola_viz_imgui.
- Contributors: Jose Luis Blanco-Claraco, SamueleSandrini
3.1.0 (2026-08-06)
-
fix: keep the local-map render and the IMU worker off the LiDAR critical path (#126)
Moves the local-map render off the LiDAR thread onto its own worker, and introduces a dedicated
imu_state_mtx_so the IMU handler no longer serializes behind every LiDAR scan viastate_mtx_. The render worker now deep-copies the map layers under the map mutex and does the expensive recolorize/OpenGL build on that private copy, unlocked. On Oxford Spires/GrandTour benchmarks this cutonLidarmax latency roughly in half (up to ~216 ms -> ~107 ms) and the IMU thread's total blocked time by more than half, eliminating the scan-queue backlog. Also exposesmap_update_decimationasMOLA_GUI_MAP_UPDATE_DECIMATION. -
Visualize the robot /tf tree in the LO viewer (opt-in) (#125)
Draws the subtree of coordinate frames below a configurable root frame as the robot moves (e.g. a legged robot's joint tree), via the new
mola::TransformTreeSource. Supports excluding frames/subtrees (tf_tree_exclude_frames), is toggled live from the GUI's View tab, and is enabled by default for the GrandTour dataset with its non-body frames excluded. -
Add mola-lo-gui-grandtour launch script for the GrandTour dataset (#124)
GrandTour publishes one ROS1 bag per topic, so
lidar_odometry_from_rosbag1.yamlnow accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own/tf_staticfor sensor extrinsics. -
Gate
gui_preview_sensorsentries behindMOLA_WITH_GUIconsistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds theMOLA_WITH_GUIheadless toggle to the remainingmola-clilaunch files.
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.2.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-09-01 |
| 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
| 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.2.0 (2026-08-21)
- Offline CLI Enhancements: Made the offline CLI state estimator deterministic by default, added run totals at shutdown, and exposed range-adaptive matcher thresholds.
- Offline CLI Linking Fix: Resolved runtime crashes in the offline CLI by correctly linking mola_state_estimation_smoother and its GTSAM dependencies.
- Wheel Odometry Support: Wired optional wheel odometry (MOLA_ODOMETRY_TOPIC) into the offline rosbag1 CLI path and corrected related documentation.
- Robust Observation Radius: Introduced observation_radius_quantile to prevent single stray far returns from skewing the scale, while keeping the default max-norm path bit-identical.
- GICP Tuning & Profiles: Moved tuned GICP defaults (coarse-voxel sizes, IMU deskew) out of global configurations and into per-dataset profiles (KITTI, Oxford) to prevent regressions on untested datasets.
- New Matching Pipelines: Added lidar3d-ndt-blend.yaml, lidar3d-fastlio-matching.yaml, and lidar3d-icp-blend.yaml to support matching protocol studies.
- KITTI Profile Updates: Configured the KITTI profile to use the more accurate point-to-point pipeline (lidar3d-icp.yaml) and documented the logic behind its velocity prior settings.
- BotanicGarden Profile Updates: Switched the profile to IncrementalPointCloud for better mean APE, but reverted experimental deskew/decimation overrides that didn't confidently improve results.
- Dataset Profile Consolidation: Unified dataset configurations (topics, extrinsics, layouts) into single shared scripts utilized by both GUI and offline CLI tools.
- CitrusFarm Multi-part Bags: Updated launch and GUI scripts to properly accept and route multi-part base*.bag sequences.
- ICP Threshold Adjustment: Raised the ICP adaptive threshold min_motion from 0.04 to 0.5 to prevent correspondence search windows from collapsing.
- Voxel Decimation Splitting: Allowed each decimation stage to use its own voxel size for better short-range precision and long-range drift reduction, and exposed the decimation method via environment variables.
- Observation Layer Bug Fix: Added a step to clear the observation layer in lidar3d-gicp before filling it to prevent crashes when optimize_twist is enabled.
- Eviction Cube Widened: Increased the default IncrementalPointCloud eviction cube size in lidar3d-gicp.yaml to retain more in-range points.
- New Environment Overrides: Exposed environment variables for the solver's inner iteration count, initial twist uncertainties, and MOLA_INITIAL_VX overrides.
- Reverted Dead Parameters: Removed the freezePairingsAfterIteration parameter exposure after discovering it does not actually exist in the released mp2p_icp library.
- Dependency Fix: Added a missing execution dependency for mola_viz_imgui.
- Contributors: Jose Luis Blanco-Claraco, SamueleSandrini
3.1.0 (2026-08-06)
-
fix: keep the local-map render and the IMU worker off the LiDAR critical path (#126)
Moves the local-map render off the LiDAR thread onto its own worker, and introduces a dedicated
imu_state_mtx_so the IMU handler no longer serializes behind every LiDAR scan viastate_mtx_. The render worker now deep-copies the map layers under the map mutex and does the expensive recolorize/OpenGL build on that private copy, unlocked. On Oxford Spires/GrandTour benchmarks this cutonLidarmax latency roughly in half (up to ~216 ms -> ~107 ms) and the IMU thread's total blocked time by more than half, eliminating the scan-queue backlog. Also exposesmap_update_decimationasMOLA_GUI_MAP_UPDATE_DECIMATION. -
Visualize the robot /tf tree in the LO viewer (opt-in) (#125)
Draws the subtree of coordinate frames below a configurable root frame as the robot moves (e.g. a legged robot's joint tree), via the new
mola::TransformTreeSource. Supports excluding frames/subtrees (tf_tree_exclude_frames), is toggled live from the GUI's View tab, and is enabled by default for the GrandTour dataset with its non-body frames excluded. -
Add mola-lo-gui-grandtour launch script for the GrandTour dataset (#124)
GrandTour publishes one ROS1 bag per topic, so
lidar_odometry_from_rosbag1.yamlnow accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own/tf_staticfor sensor extrinsics. -
Gate
gui_preview_sensorsentries behindMOLA_WITH_GUIconsistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds theMOLA_WITH_GUIheadless toggle to the remainingmola-clilaunch files.
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.2.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-09-01 |
| 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
| 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.2.0 (2026-08-21)
- Offline CLI Enhancements: Made the offline CLI state estimator deterministic by default, added run totals at shutdown, and exposed range-adaptive matcher thresholds.
- Offline CLI Linking Fix: Resolved runtime crashes in the offline CLI by correctly linking mola_state_estimation_smoother and its GTSAM dependencies.
- Wheel Odometry Support: Wired optional wheel odometry (MOLA_ODOMETRY_TOPIC) into the offline rosbag1 CLI path and corrected related documentation.
- Robust Observation Radius: Introduced observation_radius_quantile to prevent single stray far returns from skewing the scale, while keeping the default max-norm path bit-identical.
- GICP Tuning & Profiles: Moved tuned GICP defaults (coarse-voxel sizes, IMU deskew) out of global configurations and into per-dataset profiles (KITTI, Oxford) to prevent regressions on untested datasets.
- New Matching Pipelines: Added lidar3d-ndt-blend.yaml, lidar3d-fastlio-matching.yaml, and lidar3d-icp-blend.yaml to support matching protocol studies.
- KITTI Profile Updates: Configured the KITTI profile to use the more accurate point-to-point pipeline (lidar3d-icp.yaml) and documented the logic behind its velocity prior settings.
- BotanicGarden Profile Updates: Switched the profile to IncrementalPointCloud for better mean APE, but reverted experimental deskew/decimation overrides that didn't confidently improve results.
- Dataset Profile Consolidation: Unified dataset configurations (topics, extrinsics, layouts) into single shared scripts utilized by both GUI and offline CLI tools.
- CitrusFarm Multi-part Bags: Updated launch and GUI scripts to properly accept and route multi-part base*.bag sequences.
- ICP Threshold Adjustment: Raised the ICP adaptive threshold min_motion from 0.04 to 0.5 to prevent correspondence search windows from collapsing.
- Voxel Decimation Splitting: Allowed each decimation stage to use its own voxel size for better short-range precision and long-range drift reduction, and exposed the decimation method via environment variables.
- Observation Layer Bug Fix: Added a step to clear the observation layer in lidar3d-gicp before filling it to prevent crashes when optimize_twist is enabled.
- Eviction Cube Widened: Increased the default IncrementalPointCloud eviction cube size in lidar3d-gicp.yaml to retain more in-range points.
- New Environment Overrides: Exposed environment variables for the solver's inner iteration count, initial twist uncertainties, and MOLA_INITIAL_VX overrides.
- Reverted Dead Parameters: Removed the freezePairingsAfterIteration parameter exposure after discovering it does not actually exist in the released mp2p_icp library.
- Dependency Fix: Added a missing execution dependency for mola_viz_imgui.
- Contributors: Jose Luis Blanco-Claraco, SamueleSandrini
3.1.0 (2026-08-06)
-
fix: keep the local-map render and the IMU worker off the LiDAR critical path (#126)
Moves the local-map render off the LiDAR thread onto its own worker, and introduces a dedicated
imu_state_mtx_so the IMU handler no longer serializes behind every LiDAR scan viastate_mtx_. The render worker now deep-copies the map layers under the map mutex and does the expensive recolorize/OpenGL build on that private copy, unlocked. On Oxford Spires/GrandTour benchmarks this cutonLidarmax latency roughly in half (up to ~216 ms -> ~107 ms) and the IMU thread's total blocked time by more than half, eliminating the scan-queue backlog. Also exposesmap_update_decimationasMOLA_GUI_MAP_UPDATE_DECIMATION. -
Visualize the robot /tf tree in the LO viewer (opt-in) (#125)
Draws the subtree of coordinate frames below a configurable root frame as the robot moves (e.g. a legged robot's joint tree), via the new
mola::TransformTreeSource. Supports excluding frames/subtrees (tf_tree_exclude_frames), is toggled live from the GUI's View tab, and is enabled by default for the GrandTour dataset with its non-body frames excluded. -
Add mola-lo-gui-grandtour launch script for the GrandTour dataset (#124)
GrandTour publishes one ROS1 bag per topic, so
lidar_odometry_from_rosbag1.yamlnow accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own/tf_staticfor sensor extrinsics. -
Gate
gui_preview_sensorsentries behindMOLA_WITH_GUIconsistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds theMOLA_WITH_GUIheadless toggle to the remainingmola-clilaunch files.
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.2.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-09-01 |
| 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
| 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.2.0 (2026-08-21)
- Offline CLI Enhancements: Made the offline CLI state estimator deterministic by default, added run totals at shutdown, and exposed range-adaptive matcher thresholds.
- Offline CLI Linking Fix: Resolved runtime crashes in the offline CLI by correctly linking mola_state_estimation_smoother and its GTSAM dependencies.
- Wheel Odometry Support: Wired optional wheel odometry (MOLA_ODOMETRY_TOPIC) into the offline rosbag1 CLI path and corrected related documentation.
- Robust Observation Radius: Introduced observation_radius_quantile to prevent single stray far returns from skewing the scale, while keeping the default max-norm path bit-identical.
- GICP Tuning & Profiles: Moved tuned GICP defaults (coarse-voxel sizes, IMU deskew) out of global configurations and into per-dataset profiles (KITTI, Oxford) to prevent regressions on untested datasets.
- New Matching Pipelines: Added lidar3d-ndt-blend.yaml, lidar3d-fastlio-matching.yaml, and lidar3d-icp-blend.yaml to support matching protocol studies.
- KITTI Profile Updates: Configured the KITTI profile to use the more accurate point-to-point pipeline (lidar3d-icp.yaml) and documented the logic behind its velocity prior settings.
- BotanicGarden Profile Updates: Switched the profile to IncrementalPointCloud for better mean APE, but reverted experimental deskew/decimation overrides that didn't confidently improve results.
- Dataset Profile Consolidation: Unified dataset configurations (topics, extrinsics, layouts) into single shared scripts utilized by both GUI and offline CLI tools.
- CitrusFarm Multi-part Bags: Updated launch and GUI scripts to properly accept and route multi-part base*.bag sequences.
- ICP Threshold Adjustment: Raised the ICP adaptive threshold min_motion from 0.04 to 0.5 to prevent correspondence search windows from collapsing.
- Voxel Decimation Splitting: Allowed each decimation stage to use its own voxel size for better short-range precision and long-range drift reduction, and exposed the decimation method via environment variables.
- Observation Layer Bug Fix: Added a step to clear the observation layer in lidar3d-gicp before filling it to prevent crashes when optimize_twist is enabled.
- Eviction Cube Widened: Increased the default IncrementalPointCloud eviction cube size in lidar3d-gicp.yaml to retain more in-range points.
- New Environment Overrides: Exposed environment variables for the solver's inner iteration count, initial twist uncertainties, and MOLA_INITIAL_VX overrides.
- Reverted Dead Parameters: Removed the freezePairingsAfterIteration parameter exposure after discovering it does not actually exist in the released mp2p_icp library.
- Dependency Fix: Added a missing execution dependency for mola_viz_imgui.
- Contributors: Jose Luis Blanco-Claraco, SamueleSandrini
3.1.0 (2026-08-06)
-
fix: keep the local-map render and the IMU worker off the LiDAR critical path (#126)
Moves the local-map render off the LiDAR thread onto its own worker, and introduces a dedicated
imu_state_mtx_so the IMU handler no longer serializes behind every LiDAR scan viastate_mtx_. The render worker now deep-copies the map layers under the map mutex and does the expensive recolorize/OpenGL build on that private copy, unlocked. On Oxford Spires/GrandTour benchmarks this cutonLidarmax latency roughly in half (up to ~216 ms -> ~107 ms) and the IMU thread's total blocked time by more than half, eliminating the scan-queue backlog. Also exposesmap_update_decimationasMOLA_GUI_MAP_UPDATE_DECIMATION. -
Visualize the robot /tf tree in the LO viewer (opt-in) (#125)
Draws the subtree of coordinate frames below a configurable root frame as the robot moves (e.g. a legged robot's joint tree), via the new
mola::TransformTreeSource. Supports excluding frames/subtrees (tf_tree_exclude_frames), is toggled live from the GUI's View tab, and is enabled by default for the GrandTour dataset with its non-body frames excluded. -
Add mola-lo-gui-grandtour launch script for the GrandTour dataset (#124)
GrandTour publishes one ROS1 bag per topic, so
lidar_odometry_from_rosbag1.yamlnow accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own/tf_staticfor sensor extrinsics. -
Gate
gui_preview_sensorsentries behindMOLA_WITH_GUIconsistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds theMOLA_WITH_GUIheadless toggle to the remainingmola-clilaunch files.
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.2.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-09-01 |
| 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
| 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.2.0 (2026-08-21)
- Offline CLI Enhancements: Made the offline CLI state estimator deterministic by default, added run totals at shutdown, and exposed range-adaptive matcher thresholds.
- Offline CLI Linking Fix: Resolved runtime crashes in the offline CLI by correctly linking mola_state_estimation_smoother and its GTSAM dependencies.
- Wheel Odometry Support: Wired optional wheel odometry (MOLA_ODOMETRY_TOPIC) into the offline rosbag1 CLI path and corrected related documentation.
- Robust Observation Radius: Introduced observation_radius_quantile to prevent single stray far returns from skewing the scale, while keeping the default max-norm path bit-identical.
- GICP Tuning & Profiles: Moved tuned GICP defaults (coarse-voxel sizes, IMU deskew) out of global configurations and into per-dataset profiles (KITTI, Oxford) to prevent regressions on untested datasets.
- New Matching Pipelines: Added lidar3d-ndt-blend.yaml, lidar3d-fastlio-matching.yaml, and lidar3d-icp-blend.yaml to support matching protocol studies.
- KITTI Profile Updates: Configured the KITTI profile to use the more accurate point-to-point pipeline (lidar3d-icp.yaml) and documented the logic behind its velocity prior settings.
- BotanicGarden Profile Updates: Switched the profile to IncrementalPointCloud for better mean APE, but reverted experimental deskew/decimation overrides that didn't confidently improve results.
- Dataset Profile Consolidation: Unified dataset configurations (topics, extrinsics, layouts) into single shared scripts utilized by both GUI and offline CLI tools.
- CitrusFarm Multi-part Bags: Updated launch and GUI scripts to properly accept and route multi-part base*.bag sequences.
- ICP Threshold Adjustment: Raised the ICP adaptive threshold min_motion from 0.04 to 0.5 to prevent correspondence search windows from collapsing.
- Voxel Decimation Splitting: Allowed each decimation stage to use its own voxel size for better short-range precision and long-range drift reduction, and exposed the decimation method via environment variables.
- Observation Layer Bug Fix: Added a step to clear the observation layer in lidar3d-gicp before filling it to prevent crashes when optimize_twist is enabled.
- Eviction Cube Widened: Increased the default IncrementalPointCloud eviction cube size in lidar3d-gicp.yaml to retain more in-range points.
- New Environment Overrides: Exposed environment variables for the solver's inner iteration count, initial twist uncertainties, and MOLA_INITIAL_VX overrides.
- Reverted Dead Parameters: Removed the freezePairingsAfterIteration parameter exposure after discovering it does not actually exist in the released mp2p_icp library.
- Dependency Fix: Added a missing execution dependency for mola_viz_imgui.
- Contributors: Jose Luis Blanco-Claraco, SamueleSandrini
3.1.0 (2026-08-06)
-
fix: keep the local-map render and the IMU worker off the LiDAR critical path (#126)
Moves the local-map render off the LiDAR thread onto its own worker, and introduces a dedicated
imu_state_mtx_so the IMU handler no longer serializes behind every LiDAR scan viastate_mtx_. The render worker now deep-copies the map layers under the map mutex and does the expensive recolorize/OpenGL build on that private copy, unlocked. On Oxford Spires/GrandTour benchmarks this cutonLidarmax latency roughly in half (up to ~216 ms -> ~107 ms) and the IMU thread's total blocked time by more than half, eliminating the scan-queue backlog. Also exposesmap_update_decimationasMOLA_GUI_MAP_UPDATE_DECIMATION. -
Visualize the robot /tf tree in the LO viewer (opt-in) (#125)
Draws the subtree of coordinate frames below a configurable root frame as the robot moves (e.g. a legged robot's joint tree), via the new
mola::TransformTreeSource. Supports excluding frames/subtrees (tf_tree_exclude_frames), is toggled live from the GUI's View tab, and is enabled by default for the GrandTour dataset with its non-body frames excluded. -
Add mola-lo-gui-grandtour launch script for the GrandTour dataset (#124)
GrandTour publishes one ROS1 bag per topic, so
lidar_odometry_from_rosbag1.yamlnow accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own/tf_staticfor sensor extrinsics. -
Gate
gui_preview_sensorsentries behindMOLA_WITH_GUIconsistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds theMOLA_WITH_GUIheadless toggle to the remainingmola-clilaunch files.
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.2.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-09-01 |
| 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
| 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.2.0 (2026-08-21)
- Offline CLI Enhancements: Made the offline CLI state estimator deterministic by default, added run totals at shutdown, and exposed range-adaptive matcher thresholds.
- Offline CLI Linking Fix: Resolved runtime crashes in the offline CLI by correctly linking mola_state_estimation_smoother and its GTSAM dependencies.
- Wheel Odometry Support: Wired optional wheel odometry (MOLA_ODOMETRY_TOPIC) into the offline rosbag1 CLI path and corrected related documentation.
- Robust Observation Radius: Introduced observation_radius_quantile to prevent single stray far returns from skewing the scale, while keeping the default max-norm path bit-identical.
- GICP Tuning & Profiles: Moved tuned GICP defaults (coarse-voxel sizes, IMU deskew) out of global configurations and into per-dataset profiles (KITTI, Oxford) to prevent regressions on untested datasets.
- New Matching Pipelines: Added lidar3d-ndt-blend.yaml, lidar3d-fastlio-matching.yaml, and lidar3d-icp-blend.yaml to support matching protocol studies.
- KITTI Profile Updates: Configured the KITTI profile to use the more accurate point-to-point pipeline (lidar3d-icp.yaml) and documented the logic behind its velocity prior settings.
- BotanicGarden Profile Updates: Switched the profile to IncrementalPointCloud for better mean APE, but reverted experimental deskew/decimation overrides that didn't confidently improve results.
- Dataset Profile Consolidation: Unified dataset configurations (topics, extrinsics, layouts) into single shared scripts utilized by both GUI and offline CLI tools.
- CitrusFarm Multi-part Bags: Updated launch and GUI scripts to properly accept and route multi-part base*.bag sequences.
- ICP Threshold Adjustment: Raised the ICP adaptive threshold min_motion from 0.04 to 0.5 to prevent correspondence search windows from collapsing.
- Voxel Decimation Splitting: Allowed each decimation stage to use its own voxel size for better short-range precision and long-range drift reduction, and exposed the decimation method via environment variables.
- Observation Layer Bug Fix: Added a step to clear the observation layer in lidar3d-gicp before filling it to prevent crashes when optimize_twist is enabled.
- Eviction Cube Widened: Increased the default IncrementalPointCloud eviction cube size in lidar3d-gicp.yaml to retain more in-range points.
- New Environment Overrides: Exposed environment variables for the solver's inner iteration count, initial twist uncertainties, and MOLA_INITIAL_VX overrides.
- Reverted Dead Parameters: Removed the freezePairingsAfterIteration parameter exposure after discovering it does not actually exist in the released mp2p_icp library.
- Dependency Fix: Added a missing execution dependency for mola_viz_imgui.
- Contributors: Jose Luis Blanco-Claraco, SamueleSandrini
3.1.0 (2026-08-06)
-
fix: keep the local-map render and the IMU worker off the LiDAR critical path (#126)
Moves the local-map render off the LiDAR thread onto its own worker, and introduces a dedicated
imu_state_mtx_so the IMU handler no longer serializes behind every LiDAR scan viastate_mtx_. The render worker now deep-copies the map layers under the map mutex and does the expensive recolorize/OpenGL build on that private copy, unlocked. On Oxford Spires/GrandTour benchmarks this cutonLidarmax latency roughly in half (up to ~216 ms -> ~107 ms) and the IMU thread's total blocked time by more than half, eliminating the scan-queue backlog. Also exposesmap_update_decimationasMOLA_GUI_MAP_UPDATE_DECIMATION. -
Visualize the robot /tf tree in the LO viewer (opt-in) (#125)
Draws the subtree of coordinate frames below a configurable root frame as the robot moves (e.g. a legged robot's joint tree), via the new
mola::TransformTreeSource. Supports excluding frames/subtrees (tf_tree_exclude_frames), is toggled live from the GUI's View tab, and is enabled by default for the GrandTour dataset with its non-body frames excluded. -
Add mola-lo-gui-grandtour launch script for the GrandTour dataset (#124)
GrandTour publishes one ROS1 bag per topic, so
lidar_odometry_from_rosbag1.yamlnow accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own/tf_staticfor sensor extrinsics. -
Gate
gui_preview_sensorsentries behindMOLA_WITH_GUIconsistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds theMOLA_WITH_GUIheadless toggle to the remainingmola-clilaunch files.
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.2.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-09-01 |
| 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
| 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.2.0 (2026-08-21)
- Offline CLI Enhancements: Made the offline CLI state estimator deterministic by default, added run totals at shutdown, and exposed range-adaptive matcher thresholds.
- Offline CLI Linking Fix: Resolved runtime crashes in the offline CLI by correctly linking mola_state_estimation_smoother and its GTSAM dependencies.
- Wheel Odometry Support: Wired optional wheel odometry (MOLA_ODOMETRY_TOPIC) into the offline rosbag1 CLI path and corrected related documentation.
- Robust Observation Radius: Introduced observation_radius_quantile to prevent single stray far returns from skewing the scale, while keeping the default max-norm path bit-identical.
- GICP Tuning & Profiles: Moved tuned GICP defaults (coarse-voxel sizes, IMU deskew) out of global configurations and into per-dataset profiles (KITTI, Oxford) to prevent regressions on untested datasets.
- New Matching Pipelines: Added lidar3d-ndt-blend.yaml, lidar3d-fastlio-matching.yaml, and lidar3d-icp-blend.yaml to support matching protocol studies.
- KITTI Profile Updates: Configured the KITTI profile to use the more accurate point-to-point pipeline (lidar3d-icp.yaml) and documented the logic behind its velocity prior settings.
- BotanicGarden Profile Updates: Switched the profile to IncrementalPointCloud for better mean APE, but reverted experimental deskew/decimation overrides that didn't confidently improve results.
- Dataset Profile Consolidation: Unified dataset configurations (topics, extrinsics, layouts) into single shared scripts utilized by both GUI and offline CLI tools.
- CitrusFarm Multi-part Bags: Updated launch and GUI scripts to properly accept and route multi-part base*.bag sequences.
- ICP Threshold Adjustment: Raised the ICP adaptive threshold min_motion from 0.04 to 0.5 to prevent correspondence search windows from collapsing.
- Voxel Decimation Splitting: Allowed each decimation stage to use its own voxel size for better short-range precision and long-range drift reduction, and exposed the decimation method via environment variables.
- Observation Layer Bug Fix: Added a step to clear the observation layer in lidar3d-gicp before filling it to prevent crashes when optimize_twist is enabled.
- Eviction Cube Widened: Increased the default IncrementalPointCloud eviction cube size in lidar3d-gicp.yaml to retain more in-range points.
- New Environment Overrides: Exposed environment variables for the solver's inner iteration count, initial twist uncertainties, and MOLA_INITIAL_VX overrides.
- Reverted Dead Parameters: Removed the freezePairingsAfterIteration parameter exposure after discovering it does not actually exist in the released mp2p_icp library.
- Dependency Fix: Added a missing execution dependency for mola_viz_imgui.
- Contributors: Jose Luis Blanco-Claraco, SamueleSandrini
3.1.0 (2026-08-06)
-
fix: keep the local-map render and the IMU worker off the LiDAR critical path (#126)
Moves the local-map render off the LiDAR thread onto its own worker, and introduces a dedicated
imu_state_mtx_so the IMU handler no longer serializes behind every LiDAR scan viastate_mtx_. The render worker now deep-copies the map layers under the map mutex and does the expensive recolorize/OpenGL build on that private copy, unlocked. On Oxford Spires/GrandTour benchmarks this cutonLidarmax latency roughly in half (up to ~216 ms -> ~107 ms) and the IMU thread's total blocked time by more than half, eliminating the scan-queue backlog. Also exposesmap_update_decimationasMOLA_GUI_MAP_UPDATE_DECIMATION. -
Visualize the robot /tf tree in the LO viewer (opt-in) (#125)
Draws the subtree of coordinate frames below a configurable root frame as the robot moves (e.g. a legged robot's joint tree), via the new
mola::TransformTreeSource. Supports excluding frames/subtrees (tf_tree_exclude_frames), is toggled live from the GUI's View tab, and is enabled by default for the GrandTour dataset with its non-body frames excluded. -
Add mola-lo-gui-grandtour launch script for the GrandTour dataset (#124)
GrandTour publishes one ROS1 bag per topic, so
lidar_odometry_from_rosbag1.yamlnow accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own/tf_staticfor sensor extrinsics. -
Gate
gui_preview_sensorsentries behindMOLA_WITH_GUIconsistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds theMOLA_WITH_GUIheadless toggle to the remainingmola-clilaunch files.
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.2.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-09-01 |
| 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
| 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.2.0 (2026-08-21)
- Offline CLI Enhancements: Made the offline CLI state estimator deterministic by default, added run totals at shutdown, and exposed range-adaptive matcher thresholds.
- Offline CLI Linking Fix: Resolved runtime crashes in the offline CLI by correctly linking mola_state_estimation_smoother and its GTSAM dependencies.
- Wheel Odometry Support: Wired optional wheel odometry (MOLA_ODOMETRY_TOPIC) into the offline rosbag1 CLI path and corrected related documentation.
- Robust Observation Radius: Introduced observation_radius_quantile to prevent single stray far returns from skewing the scale, while keeping the default max-norm path bit-identical.
- GICP Tuning & Profiles: Moved tuned GICP defaults (coarse-voxel sizes, IMU deskew) out of global configurations and into per-dataset profiles (KITTI, Oxford) to prevent regressions on untested datasets.
- New Matching Pipelines: Added lidar3d-ndt-blend.yaml, lidar3d-fastlio-matching.yaml, and lidar3d-icp-blend.yaml to support matching protocol studies.
- KITTI Profile Updates: Configured the KITTI profile to use the more accurate point-to-point pipeline (lidar3d-icp.yaml) and documented the logic behind its velocity prior settings.
- BotanicGarden Profile Updates: Switched the profile to IncrementalPointCloud for better mean APE, but reverted experimental deskew/decimation overrides that didn't confidently improve results.
- Dataset Profile Consolidation: Unified dataset configurations (topics, extrinsics, layouts) into single shared scripts utilized by both GUI and offline CLI tools.
- CitrusFarm Multi-part Bags: Updated launch and GUI scripts to properly accept and route multi-part base*.bag sequences.
- ICP Threshold Adjustment: Raised the ICP adaptive threshold min_motion from 0.04 to 0.5 to prevent correspondence search windows from collapsing.
- Voxel Decimation Splitting: Allowed each decimation stage to use its own voxel size for better short-range precision and long-range drift reduction, and exposed the decimation method via environment variables.
- Observation Layer Bug Fix: Added a step to clear the observation layer in lidar3d-gicp before filling it to prevent crashes when optimize_twist is enabled.
- Eviction Cube Widened: Increased the default IncrementalPointCloud eviction cube size in lidar3d-gicp.yaml to retain more in-range points.
- New Environment Overrides: Exposed environment variables for the solver's inner iteration count, initial twist uncertainties, and MOLA_INITIAL_VX overrides.
- Reverted Dead Parameters: Removed the freezePairingsAfterIteration parameter exposure after discovering it does not actually exist in the released mp2p_icp library.
- Dependency Fix: Added a missing execution dependency for mola_viz_imgui.
- Contributors: Jose Luis Blanco-Claraco, SamueleSandrini
3.1.0 (2026-08-06)
-
fix: keep the local-map render and the IMU worker off the LiDAR critical path (#126)
Moves the local-map render off the LiDAR thread onto its own worker, and introduces a dedicated
imu_state_mtx_so the IMU handler no longer serializes behind every LiDAR scan viastate_mtx_. The render worker now deep-copies the map layers under the map mutex and does the expensive recolorize/OpenGL build on that private copy, unlocked. On Oxford Spires/GrandTour benchmarks this cutonLidarmax latency roughly in half (up to ~216 ms -> ~107 ms) and the IMU thread's total blocked time by more than half, eliminating the scan-queue backlog. Also exposesmap_update_decimationasMOLA_GUI_MAP_UPDATE_DECIMATION. -
Visualize the robot /tf tree in the LO viewer (opt-in) (#125)
Draws the subtree of coordinate frames below a configurable root frame as the robot moves (e.g. a legged robot's joint tree), via the new
mola::TransformTreeSource. Supports excluding frames/subtrees (tf_tree_exclude_frames), is toggled live from the GUI's View tab, and is enabled by default for the GrandTour dataset with its non-body frames excluded. -
Add mola-lo-gui-grandtour launch script for the GrandTour dataset (#124)
GrandTour publishes one ROS1 bag per topic, so
lidar_odometry_from_rosbag1.yamlnow accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own/tf_staticfor sensor extrinsics. -
Gate
gui_preview_sensorsentries behindMOLA_WITH_GUIconsistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds theMOLA_WITH_GUIheadless toggle to the remainingmola-clilaunch files.
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.2.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-09-01 |
| 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
| 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.2.0 (2026-08-21)
- Offline CLI Enhancements: Made the offline CLI state estimator deterministic by default, added run totals at shutdown, and exposed range-adaptive matcher thresholds.
- Offline CLI Linking Fix: Resolved runtime crashes in the offline CLI by correctly linking mola_state_estimation_smoother and its GTSAM dependencies.
- Wheel Odometry Support: Wired optional wheel odometry (MOLA_ODOMETRY_TOPIC) into the offline rosbag1 CLI path and corrected related documentation.
- Robust Observation Radius: Introduced observation_radius_quantile to prevent single stray far returns from skewing the scale, while keeping the default max-norm path bit-identical.
- GICP Tuning & Profiles: Moved tuned GICP defaults (coarse-voxel sizes, IMU deskew) out of global configurations and into per-dataset profiles (KITTI, Oxford) to prevent regressions on untested datasets.
- New Matching Pipelines: Added lidar3d-ndt-blend.yaml, lidar3d-fastlio-matching.yaml, and lidar3d-icp-blend.yaml to support matching protocol studies.
- KITTI Profile Updates: Configured the KITTI profile to use the more accurate point-to-point pipeline (lidar3d-icp.yaml) and documented the logic behind its velocity prior settings.
- BotanicGarden Profile Updates: Switched the profile to IncrementalPointCloud for better mean APE, but reverted experimental deskew/decimation overrides that didn't confidently improve results.
- Dataset Profile Consolidation: Unified dataset configurations (topics, extrinsics, layouts) into single shared scripts utilized by both GUI and offline CLI tools.
- CitrusFarm Multi-part Bags: Updated launch and GUI scripts to properly accept and route multi-part base*.bag sequences.
- ICP Threshold Adjustment: Raised the ICP adaptive threshold min_motion from 0.04 to 0.5 to prevent correspondence search windows from collapsing.
- Voxel Decimation Splitting: Allowed each decimation stage to use its own voxel size for better short-range precision and long-range drift reduction, and exposed the decimation method via environment variables.
- Observation Layer Bug Fix: Added a step to clear the observation layer in lidar3d-gicp before filling it to prevent crashes when optimize_twist is enabled.
- Eviction Cube Widened: Increased the default IncrementalPointCloud eviction cube size in lidar3d-gicp.yaml to retain more in-range points.
- New Environment Overrides: Exposed environment variables for the solver's inner iteration count, initial twist uncertainties, and MOLA_INITIAL_VX overrides.
- Reverted Dead Parameters: Removed the freezePairingsAfterIteration parameter exposure after discovering it does not actually exist in the released mp2p_icp library.
- Dependency Fix: Added a missing execution dependency for mola_viz_imgui.
- Contributors: Jose Luis Blanco-Claraco, SamueleSandrini
3.1.0 (2026-08-06)
-
fix: keep the local-map render and the IMU worker off the LiDAR critical path (#126)
Moves the local-map render off the LiDAR thread onto its own worker, and introduces a dedicated
imu_state_mtx_so the IMU handler no longer serializes behind every LiDAR scan viastate_mtx_. The render worker now deep-copies the map layers under the map mutex and does the expensive recolorize/OpenGL build on that private copy, unlocked. On Oxford Spires/GrandTour benchmarks this cutonLidarmax latency roughly in half (up to ~216 ms -> ~107 ms) and the IMU thread's total blocked time by more than half, eliminating the scan-queue backlog. Also exposesmap_update_decimationasMOLA_GUI_MAP_UPDATE_DECIMATION. -
Visualize the robot /tf tree in the LO viewer (opt-in) (#125)
Draws the subtree of coordinate frames below a configurable root frame as the robot moves (e.g. a legged robot's joint tree), via the new
mola::TransformTreeSource. Supports excluding frames/subtrees (tf_tree_exclude_frames), is toggled live from the GUI's View tab, and is enabled by default for the GrandTour dataset with its non-body frames excluded. -
Add mola-lo-gui-grandtour launch script for the GrandTour dataset (#124)
GrandTour publishes one ROS1 bag per topic, so
lidar_odometry_from_rosbag1.yamlnow accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own/tf_staticfor sensor extrinsics. -
Gate
gui_preview_sensorsentries behindMOLA_WITH_GUIconsistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds theMOLA_WITH_GUIheadless toggle to the remainingmola-clilaunch files.
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.2.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-09-01 |
| 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
| 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.2.0 (2026-08-21)
- Offline CLI Enhancements: Made the offline CLI state estimator deterministic by default, added run totals at shutdown, and exposed range-adaptive matcher thresholds.
- Offline CLI Linking Fix: Resolved runtime crashes in the offline CLI by correctly linking mola_state_estimation_smoother and its GTSAM dependencies.
- Wheel Odometry Support: Wired optional wheel odometry (MOLA_ODOMETRY_TOPIC) into the offline rosbag1 CLI path and corrected related documentation.
- Robust Observation Radius: Introduced observation_radius_quantile to prevent single stray far returns from skewing the scale, while keeping the default max-norm path bit-identical.
- GICP Tuning & Profiles: Moved tuned GICP defaults (coarse-voxel sizes, IMU deskew) out of global configurations and into per-dataset profiles (KITTI, Oxford) to prevent regressions on untested datasets.
- New Matching Pipelines: Added lidar3d-ndt-blend.yaml, lidar3d-fastlio-matching.yaml, and lidar3d-icp-blend.yaml to support matching protocol studies.
- KITTI Profile Updates: Configured the KITTI profile to use the more accurate point-to-point pipeline (lidar3d-icp.yaml) and documented the logic behind its velocity prior settings.
- BotanicGarden Profile Updates: Switched the profile to IncrementalPointCloud for better mean APE, but reverted experimental deskew/decimation overrides that didn't confidently improve results.
- Dataset Profile Consolidation: Unified dataset configurations (topics, extrinsics, layouts) into single shared scripts utilized by both GUI and offline CLI tools.
- CitrusFarm Multi-part Bags: Updated launch and GUI scripts to properly accept and route multi-part base*.bag sequences.
- ICP Threshold Adjustment: Raised the ICP adaptive threshold min_motion from 0.04 to 0.5 to prevent correspondence search windows from collapsing.
- Voxel Decimation Splitting: Allowed each decimation stage to use its own voxel size for better short-range precision and long-range drift reduction, and exposed the decimation method via environment variables.
- Observation Layer Bug Fix: Added a step to clear the observation layer in lidar3d-gicp before filling it to prevent crashes when optimize_twist is enabled.
- Eviction Cube Widened: Increased the default IncrementalPointCloud eviction cube size in lidar3d-gicp.yaml to retain more in-range points.
- New Environment Overrides: Exposed environment variables for the solver's inner iteration count, initial twist uncertainties, and MOLA_INITIAL_VX overrides.
- Reverted Dead Parameters: Removed the freezePairingsAfterIteration parameter exposure after discovering it does not actually exist in the released mp2p_icp library.
- Dependency Fix: Added a missing execution dependency for mola_viz_imgui.
- Contributors: Jose Luis Blanco-Claraco, SamueleSandrini
3.1.0 (2026-08-06)
-
fix: keep the local-map render and the IMU worker off the LiDAR critical path (#126)
Moves the local-map render off the LiDAR thread onto its own worker, and introduces a dedicated
imu_state_mtx_so the IMU handler no longer serializes behind every LiDAR scan viastate_mtx_. The render worker now deep-copies the map layers under the map mutex and does the expensive recolorize/OpenGL build on that private copy, unlocked. On Oxford Spires/GrandTour benchmarks this cutonLidarmax latency roughly in half (up to ~216 ms -> ~107 ms) and the IMU thread's total blocked time by more than half, eliminating the scan-queue backlog. Also exposesmap_update_decimationasMOLA_GUI_MAP_UPDATE_DECIMATION. -
Visualize the robot /tf tree in the LO viewer (opt-in) (#125)
Draws the subtree of coordinate frames below a configurable root frame as the robot moves (e.g. a legged robot's joint tree), via the new
mola::TransformTreeSource. Supports excluding frames/subtrees (tf_tree_exclude_frames), is toggled live from the GUI's View tab, and is enabled by default for the GrandTour dataset with its non-body frames excluded. -
Add mola-lo-gui-grandtour launch script for the GrandTour dataset (#124)
GrandTour publishes one ROS1 bag per topic, so
lidar_odometry_from_rosbag1.yamlnow accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own/tf_staticfor sensor extrinsics. -
Gate
gui_preview_sensorsentries behindMOLA_WITH_GUIconsistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds theMOLA_WITH_GUIheadless toggle to the remainingmola-clilaunch files.
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.2.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-09-01 |
| 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
| 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.2.0 (2026-08-21)
- Offline CLI Enhancements: Made the offline CLI state estimator deterministic by default, added run totals at shutdown, and exposed range-adaptive matcher thresholds.
- Offline CLI Linking Fix: Resolved runtime crashes in the offline CLI by correctly linking mola_state_estimation_smoother and its GTSAM dependencies.
- Wheel Odometry Support: Wired optional wheel odometry (MOLA_ODOMETRY_TOPIC) into the offline rosbag1 CLI path and corrected related documentation.
- Robust Observation Radius: Introduced observation_radius_quantile to prevent single stray far returns from skewing the scale, while keeping the default max-norm path bit-identical.
- GICP Tuning & Profiles: Moved tuned GICP defaults (coarse-voxel sizes, IMU deskew) out of global configurations and into per-dataset profiles (KITTI, Oxford) to prevent regressions on untested datasets.
- New Matching Pipelines: Added lidar3d-ndt-blend.yaml, lidar3d-fastlio-matching.yaml, and lidar3d-icp-blend.yaml to support matching protocol studies.
- KITTI Profile Updates: Configured the KITTI profile to use the more accurate point-to-point pipeline (lidar3d-icp.yaml) and documented the logic behind its velocity prior settings.
- BotanicGarden Profile Updates: Switched the profile to IncrementalPointCloud for better mean APE, but reverted experimental deskew/decimation overrides that didn't confidently improve results.
- Dataset Profile Consolidation: Unified dataset configurations (topics, extrinsics, layouts) into single shared scripts utilized by both GUI and offline CLI tools.
- CitrusFarm Multi-part Bags: Updated launch and GUI scripts to properly accept and route multi-part base*.bag sequences.
- ICP Threshold Adjustment: Raised the ICP adaptive threshold min_motion from 0.04 to 0.5 to prevent correspondence search windows from collapsing.
- Voxel Decimation Splitting: Allowed each decimation stage to use its own voxel size for better short-range precision and long-range drift reduction, and exposed the decimation method via environment variables.
- Observation Layer Bug Fix: Added a step to clear the observation layer in lidar3d-gicp before filling it to prevent crashes when optimize_twist is enabled.
- Eviction Cube Widened: Increased the default IncrementalPointCloud eviction cube size in lidar3d-gicp.yaml to retain more in-range points.
- New Environment Overrides: Exposed environment variables for the solver's inner iteration count, initial twist uncertainties, and MOLA_INITIAL_VX overrides.
- Reverted Dead Parameters: Removed the freezePairingsAfterIteration parameter exposure after discovering it does not actually exist in the released mp2p_icp library.
- Dependency Fix: Added a missing execution dependency for mola_viz_imgui.
- Contributors: Jose Luis Blanco-Claraco, SamueleSandrini
3.1.0 (2026-08-06)
-
fix: keep the local-map render and the IMU worker off the LiDAR critical path (#126)
Moves the local-map render off the LiDAR thread onto its own worker, and introduces a dedicated
imu_state_mtx_so the IMU handler no longer serializes behind every LiDAR scan viastate_mtx_. The render worker now deep-copies the map layers under the map mutex and does the expensive recolorize/OpenGL build on that private copy, unlocked. On Oxford Spires/GrandTour benchmarks this cutonLidarmax latency roughly in half (up to ~216 ms -> ~107 ms) and the IMU thread's total blocked time by more than half, eliminating the scan-queue backlog. Also exposesmap_update_decimationasMOLA_GUI_MAP_UPDATE_DECIMATION. -
Visualize the robot /tf tree in the LO viewer (opt-in) (#125)
Draws the subtree of coordinate frames below a configurable root frame as the robot moves (e.g. a legged robot's joint tree), via the new
mola::TransformTreeSource. Supports excluding frames/subtrees (tf_tree_exclude_frames), is toggled live from the GUI's View tab, and is enabled by default for the GrandTour dataset with its non-body frames excluded. -
Add mola-lo-gui-grandtour launch script for the GrandTour dataset (#124)
GrandTour publishes one ROS1 bag per topic, so
lidar_odometry_from_rosbag1.yamlnow accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own/tf_staticfor sensor extrinsics. -
Gate
gui_preview_sensorsentries behindMOLA_WITH_GUIconsistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds theMOLA_WITH_GUIheadless toggle to the remainingmola-clilaunch files.
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.2.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-09-01 |
| 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
| 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.2.0 (2026-08-21)
- Offline CLI Enhancements: Made the offline CLI state estimator deterministic by default, added run totals at shutdown, and exposed range-adaptive matcher thresholds.
- Offline CLI Linking Fix: Resolved runtime crashes in the offline CLI by correctly linking mola_state_estimation_smoother and its GTSAM dependencies.
- Wheel Odometry Support: Wired optional wheel odometry (MOLA_ODOMETRY_TOPIC) into the offline rosbag1 CLI path and corrected related documentation.
- Robust Observation Radius: Introduced observation_radius_quantile to prevent single stray far returns from skewing the scale, while keeping the default max-norm path bit-identical.
- GICP Tuning & Profiles: Moved tuned GICP defaults (coarse-voxel sizes, IMU deskew) out of global configurations and into per-dataset profiles (KITTI, Oxford) to prevent regressions on untested datasets.
- New Matching Pipelines: Added lidar3d-ndt-blend.yaml, lidar3d-fastlio-matching.yaml, and lidar3d-icp-blend.yaml to support matching protocol studies.
- KITTI Profile Updates: Configured the KITTI profile to use the more accurate point-to-point pipeline (lidar3d-icp.yaml) and documented the logic behind its velocity prior settings.
- BotanicGarden Profile Updates: Switched the profile to IncrementalPointCloud for better mean APE, but reverted experimental deskew/decimation overrides that didn't confidently improve results.
- Dataset Profile Consolidation: Unified dataset configurations (topics, extrinsics, layouts) into single shared scripts utilized by both GUI and offline CLI tools.
- CitrusFarm Multi-part Bags: Updated launch and GUI scripts to properly accept and route multi-part base*.bag sequences.
- ICP Threshold Adjustment: Raised the ICP adaptive threshold min_motion from 0.04 to 0.5 to prevent correspondence search windows from collapsing.
- Voxel Decimation Splitting: Allowed each decimation stage to use its own voxel size for better short-range precision and long-range drift reduction, and exposed the decimation method via environment variables.
- Observation Layer Bug Fix: Added a step to clear the observation layer in lidar3d-gicp before filling it to prevent crashes when optimize_twist is enabled.
- Eviction Cube Widened: Increased the default IncrementalPointCloud eviction cube size in lidar3d-gicp.yaml to retain more in-range points.
- New Environment Overrides: Exposed environment variables for the solver's inner iteration count, initial twist uncertainties, and MOLA_INITIAL_VX overrides.
- Reverted Dead Parameters: Removed the freezePairingsAfterIteration parameter exposure after discovering it does not actually exist in the released mp2p_icp library.
- Dependency Fix: Added a missing execution dependency for mola_viz_imgui.
- Contributors: Jose Luis Blanco-Claraco, SamueleSandrini
3.1.0 (2026-08-06)
-
fix: keep the local-map render and the IMU worker off the LiDAR critical path (#126)
Moves the local-map render off the LiDAR thread onto its own worker, and introduces a dedicated
imu_state_mtx_so the IMU handler no longer serializes behind every LiDAR scan viastate_mtx_. The render worker now deep-copies the map layers under the map mutex and does the expensive recolorize/OpenGL build on that private copy, unlocked. On Oxford Spires/GrandTour benchmarks this cutonLidarmax latency roughly in half (up to ~216 ms -> ~107 ms) and the IMU thread's total blocked time by more than half, eliminating the scan-queue backlog. Also exposesmap_update_decimationasMOLA_GUI_MAP_UPDATE_DECIMATION. -
Visualize the robot /tf tree in the LO viewer (opt-in) (#125)
Draws the subtree of coordinate frames below a configurable root frame as the robot moves (e.g. a legged robot's joint tree), via the new
mola::TransformTreeSource. Supports excluding frames/subtrees (tf_tree_exclude_frames), is toggled live from the GUI's View tab, and is enabled by default for the GrandTour dataset with its non-body frames excluded. -
Add mola-lo-gui-grandtour launch script for the GrandTour dataset (#124)
GrandTour publishes one ROS1 bag per topic, so
lidar_odometry_from_rosbag1.yamlnow accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own/tf_staticfor sensor extrinsics. -
Gate
gui_preview_sensorsentries behindMOLA_WITH_GUIconsistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds theMOLA_WITH_GUIheadless toggle to the remainingmola-clilaunch files.
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.2.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-09-01 |
| 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
| 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.2.0 (2026-08-21)
- Offline CLI Enhancements: Made the offline CLI state estimator deterministic by default, added run totals at shutdown, and exposed range-adaptive matcher thresholds.
- Offline CLI Linking Fix: Resolved runtime crashes in the offline CLI by correctly linking mola_state_estimation_smoother and its GTSAM dependencies.
- Wheel Odometry Support: Wired optional wheel odometry (MOLA_ODOMETRY_TOPIC) into the offline rosbag1 CLI path and corrected related documentation.
- Robust Observation Radius: Introduced observation_radius_quantile to prevent single stray far returns from skewing the scale, while keeping the default max-norm path bit-identical.
- GICP Tuning & Profiles: Moved tuned GICP defaults (coarse-voxel sizes, IMU deskew) out of global configurations and into per-dataset profiles (KITTI, Oxford) to prevent regressions on untested datasets.
- New Matching Pipelines: Added lidar3d-ndt-blend.yaml, lidar3d-fastlio-matching.yaml, and lidar3d-icp-blend.yaml to support matching protocol studies.
- KITTI Profile Updates: Configured the KITTI profile to use the more accurate point-to-point pipeline (lidar3d-icp.yaml) and documented the logic behind its velocity prior settings.
- BotanicGarden Profile Updates: Switched the profile to IncrementalPointCloud for better mean APE, but reverted experimental deskew/decimation overrides that didn't confidently improve results.
- Dataset Profile Consolidation: Unified dataset configurations (topics, extrinsics, layouts) into single shared scripts utilized by both GUI and offline CLI tools.
- CitrusFarm Multi-part Bags: Updated launch and GUI scripts to properly accept and route multi-part base*.bag sequences.
- ICP Threshold Adjustment: Raised the ICP adaptive threshold min_motion from 0.04 to 0.5 to prevent correspondence search windows from collapsing.
- Voxel Decimation Splitting: Allowed each decimation stage to use its own voxel size for better short-range precision and long-range drift reduction, and exposed the decimation method via environment variables.
- Observation Layer Bug Fix: Added a step to clear the observation layer in lidar3d-gicp before filling it to prevent crashes when optimize_twist is enabled.
- Eviction Cube Widened: Increased the default IncrementalPointCloud eviction cube size in lidar3d-gicp.yaml to retain more in-range points.
- New Environment Overrides: Exposed environment variables for the solver's inner iteration count, initial twist uncertainties, and MOLA_INITIAL_VX overrides.
- Reverted Dead Parameters: Removed the freezePairingsAfterIteration parameter exposure after discovering it does not actually exist in the released mp2p_icp library.
- Dependency Fix: Added a missing execution dependency for mola_viz_imgui.
- Contributors: Jose Luis Blanco-Claraco, SamueleSandrini
3.1.0 (2026-08-06)
-
fix: keep the local-map render and the IMU worker off the LiDAR critical path (#126)
Moves the local-map render off the LiDAR thread onto its own worker, and introduces a dedicated
imu_state_mtx_so the IMU handler no longer serializes behind every LiDAR scan viastate_mtx_. The render worker now deep-copies the map layers under the map mutex and does the expensive recolorize/OpenGL build on that private copy, unlocked. On Oxford Spires/GrandTour benchmarks this cutonLidarmax latency roughly in half (up to ~216 ms -> ~107 ms) and the IMU thread's total blocked time by more than half, eliminating the scan-queue backlog. Also exposesmap_update_decimationasMOLA_GUI_MAP_UPDATE_DECIMATION. -
Visualize the robot /tf tree in the LO viewer (opt-in) (#125)
Draws the subtree of coordinate frames below a configurable root frame as the robot moves (e.g. a legged robot's joint tree), via the new
mola::TransformTreeSource. Supports excluding frames/subtrees (tf_tree_exclude_frames), is toggled live from the GUI's View tab, and is enabled by default for the GrandTour dataset with its non-body frames excluded. -
Add mola-lo-gui-grandtour launch script for the GrandTour dataset (#124)
GrandTour publishes one ROS1 bag per topic, so
lidar_odometry_from_rosbag1.yamlnow accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own/tf_staticfor sensor extrinsics. -
Gate
gui_preview_sensorsentries behindMOLA_WITH_GUIconsistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds theMOLA_WITH_GUIheadless toggle to the remainingmola-clilaunch files.
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.2.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-09-01 |
| 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
| 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.2.0 (2026-08-21)
- Offline CLI Enhancements: Made the offline CLI state estimator deterministic by default, added run totals at shutdown, and exposed range-adaptive matcher thresholds.
- Offline CLI Linking Fix: Resolved runtime crashes in the offline CLI by correctly linking mola_state_estimation_smoother and its GTSAM dependencies.
- Wheel Odometry Support: Wired optional wheel odometry (MOLA_ODOMETRY_TOPIC) into the offline rosbag1 CLI path and corrected related documentation.
- Robust Observation Radius: Introduced observation_radius_quantile to prevent single stray far returns from skewing the scale, while keeping the default max-norm path bit-identical.
- GICP Tuning & Profiles: Moved tuned GICP defaults (coarse-voxel sizes, IMU deskew) out of global configurations and into per-dataset profiles (KITTI, Oxford) to prevent regressions on untested datasets.
- New Matching Pipelines: Added lidar3d-ndt-blend.yaml, lidar3d-fastlio-matching.yaml, and lidar3d-icp-blend.yaml to support matching protocol studies.
- KITTI Profile Updates: Configured the KITTI profile to use the more accurate point-to-point pipeline (lidar3d-icp.yaml) and documented the logic behind its velocity prior settings.
- BotanicGarden Profile Updates: Switched the profile to IncrementalPointCloud for better mean APE, but reverted experimental deskew/decimation overrides that didn't confidently improve results.
- Dataset Profile Consolidation: Unified dataset configurations (topics, extrinsics, layouts) into single shared scripts utilized by both GUI and offline CLI tools.
- CitrusFarm Multi-part Bags: Updated launch and GUI scripts to properly accept and route multi-part base*.bag sequences.
- ICP Threshold Adjustment: Raised the ICP adaptive threshold min_motion from 0.04 to 0.5 to prevent correspondence search windows from collapsing.
- Voxel Decimation Splitting: Allowed each decimation stage to use its own voxel size for better short-range precision and long-range drift reduction, and exposed the decimation method via environment variables.
- Observation Layer Bug Fix: Added a step to clear the observation layer in lidar3d-gicp before filling it to prevent crashes when optimize_twist is enabled.
- Eviction Cube Widened: Increased the default IncrementalPointCloud eviction cube size in lidar3d-gicp.yaml to retain more in-range points.
- New Environment Overrides: Exposed environment variables for the solver's inner iteration count, initial twist uncertainties, and MOLA_INITIAL_VX overrides.
- Reverted Dead Parameters: Removed the freezePairingsAfterIteration parameter exposure after discovering it does not actually exist in the released mp2p_icp library.
- Dependency Fix: Added a missing execution dependency for mola_viz_imgui.
- Contributors: Jose Luis Blanco-Claraco, SamueleSandrini
3.1.0 (2026-08-06)
-
fix: keep the local-map render and the IMU worker off the LiDAR critical path (#126)
Moves the local-map render off the LiDAR thread onto its own worker, and introduces a dedicated
imu_state_mtx_so the IMU handler no longer serializes behind every LiDAR scan viastate_mtx_. The render worker now deep-copies the map layers under the map mutex and does the expensive recolorize/OpenGL build on that private copy, unlocked. On Oxford Spires/GrandTour benchmarks this cutonLidarmax latency roughly in half (up to ~216 ms -> ~107 ms) and the IMU thread's total blocked time by more than half, eliminating the scan-queue backlog. Also exposesmap_update_decimationasMOLA_GUI_MAP_UPDATE_DECIMATION. -
Visualize the robot /tf tree in the LO viewer (opt-in) (#125)
Draws the subtree of coordinate frames below a configurable root frame as the robot moves (e.g. a legged robot's joint tree), via the new
mola::TransformTreeSource. Supports excluding frames/subtrees (tf_tree_exclude_frames), is toggled live from the GUI's View tab, and is enabled by default for the GrandTour dataset with its non-body frames excluded. -
Add mola-lo-gui-grandtour launch script for the GrandTour dataset (#124)
GrandTour publishes one ROS1 bag per topic, so
lidar_odometry_from_rosbag1.yamlnow accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own/tf_staticfor sensor extrinsics. -
Gate
gui_preview_sensorsentries behindMOLA_WITH_GUIconsistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds theMOLA_WITH_GUIheadless toggle to the remainingmola-clilaunch files.
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.2.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-09-01 |
| 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
| 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.2.0 (2026-08-21)
- Offline CLI Enhancements: Made the offline CLI state estimator deterministic by default, added run totals at shutdown, and exposed range-adaptive matcher thresholds.
- Offline CLI Linking Fix: Resolved runtime crashes in the offline CLI by correctly linking mola_state_estimation_smoother and its GTSAM dependencies.
- Wheel Odometry Support: Wired optional wheel odometry (MOLA_ODOMETRY_TOPIC) into the offline rosbag1 CLI path and corrected related documentation.
- Robust Observation Radius: Introduced observation_radius_quantile to prevent single stray far returns from skewing the scale, while keeping the default max-norm path bit-identical.
- GICP Tuning & Profiles: Moved tuned GICP defaults (coarse-voxel sizes, IMU deskew) out of global configurations and into per-dataset profiles (KITTI, Oxford) to prevent regressions on untested datasets.
- New Matching Pipelines: Added lidar3d-ndt-blend.yaml, lidar3d-fastlio-matching.yaml, and lidar3d-icp-blend.yaml to support matching protocol studies.
- KITTI Profile Updates: Configured the KITTI profile to use the more accurate point-to-point pipeline (lidar3d-icp.yaml) and documented the logic behind its velocity prior settings.
- BotanicGarden Profile Updates: Switched the profile to IncrementalPointCloud for better mean APE, but reverted experimental deskew/decimation overrides that didn't confidently improve results.
- Dataset Profile Consolidation: Unified dataset configurations (topics, extrinsics, layouts) into single shared scripts utilized by both GUI and offline CLI tools.
- CitrusFarm Multi-part Bags: Updated launch and GUI scripts to properly accept and route multi-part base*.bag sequences.
- ICP Threshold Adjustment: Raised the ICP adaptive threshold min_motion from 0.04 to 0.5 to prevent correspondence search windows from collapsing.
- Voxel Decimation Splitting: Allowed each decimation stage to use its own voxel size for better short-range precision and long-range drift reduction, and exposed the decimation method via environment variables.
- Observation Layer Bug Fix: Added a step to clear the observation layer in lidar3d-gicp before filling it to prevent crashes when optimize_twist is enabled.
- Eviction Cube Widened: Increased the default IncrementalPointCloud eviction cube size in lidar3d-gicp.yaml to retain more in-range points.
- New Environment Overrides: Exposed environment variables for the solver's inner iteration count, initial twist uncertainties, and MOLA_INITIAL_VX overrides.
- Reverted Dead Parameters: Removed the freezePairingsAfterIteration parameter exposure after discovering it does not actually exist in the released mp2p_icp library.
- Dependency Fix: Added a missing execution dependency for mola_viz_imgui.
- Contributors: Jose Luis Blanco-Claraco, SamueleSandrini
3.1.0 (2026-08-06)
-
fix: keep the local-map render and the IMU worker off the LiDAR critical path (#126)
Moves the local-map render off the LiDAR thread onto its own worker, and introduces a dedicated
imu_state_mtx_so the IMU handler no longer serializes behind every LiDAR scan viastate_mtx_. The render worker now deep-copies the map layers under the map mutex and does the expensive recolorize/OpenGL build on that private copy, unlocked. On Oxford Spires/GrandTour benchmarks this cutonLidarmax latency roughly in half (up to ~216 ms -> ~107 ms) and the IMU thread's total blocked time by more than half, eliminating the scan-queue backlog. Also exposesmap_update_decimationasMOLA_GUI_MAP_UPDATE_DECIMATION. -
Visualize the robot /tf tree in the LO viewer (opt-in) (#125)
Draws the subtree of coordinate frames below a configurable root frame as the robot moves (e.g. a legged robot's joint tree), via the new
mola::TransformTreeSource. Supports excluding frames/subtrees (tf_tree_exclude_frames), is toggled live from the GUI's View tab, and is enabled by default for the GrandTour dataset with its non-body frames excluded. -
Add mola-lo-gui-grandtour launch script for the GrandTour dataset (#124)
GrandTour publishes one ROS1 bag per topic, so
lidar_odometry_from_rosbag1.yamlnow accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own/tf_staticfor sensor extrinsics. -
Gate
gui_preview_sensorsentries behindMOLA_WITH_GUIconsistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds theMOLA_WITH_GUIheadless toggle to the remainingmola-clilaunch files.
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.2.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-09-01 |
| 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
| 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.2.0 (2026-08-21)
- Offline CLI Enhancements: Made the offline CLI state estimator deterministic by default, added run totals at shutdown, and exposed range-adaptive matcher thresholds.
- Offline CLI Linking Fix: Resolved runtime crashes in the offline CLI by correctly linking mola_state_estimation_smoother and its GTSAM dependencies.
- Wheel Odometry Support: Wired optional wheel odometry (MOLA_ODOMETRY_TOPIC) into the offline rosbag1 CLI path and corrected related documentation.
- Robust Observation Radius: Introduced observation_radius_quantile to prevent single stray far returns from skewing the scale, while keeping the default max-norm path bit-identical.
- GICP Tuning & Profiles: Moved tuned GICP defaults (coarse-voxel sizes, IMU deskew) out of global configurations and into per-dataset profiles (KITTI, Oxford) to prevent regressions on untested datasets.
- New Matching Pipelines: Added lidar3d-ndt-blend.yaml, lidar3d-fastlio-matching.yaml, and lidar3d-icp-blend.yaml to support matching protocol studies.
- KITTI Profile Updates: Configured the KITTI profile to use the more accurate point-to-point pipeline (lidar3d-icp.yaml) and documented the logic behind its velocity prior settings.
- BotanicGarden Profile Updates: Switched the profile to IncrementalPointCloud for better mean APE, but reverted experimental deskew/decimation overrides that didn't confidently improve results.
- Dataset Profile Consolidation: Unified dataset configurations (topics, extrinsics, layouts) into single shared scripts utilized by both GUI and offline CLI tools.
- CitrusFarm Multi-part Bags: Updated launch and GUI scripts to properly accept and route multi-part base*.bag sequences.
- ICP Threshold Adjustment: Raised the ICP adaptive threshold min_motion from 0.04 to 0.5 to prevent correspondence search windows from collapsing.
- Voxel Decimation Splitting: Allowed each decimation stage to use its own voxel size for better short-range precision and long-range drift reduction, and exposed the decimation method via environment variables.
- Observation Layer Bug Fix: Added a step to clear the observation layer in lidar3d-gicp before filling it to prevent crashes when optimize_twist is enabled.
- Eviction Cube Widened: Increased the default IncrementalPointCloud eviction cube size in lidar3d-gicp.yaml to retain more in-range points.
- New Environment Overrides: Exposed environment variables for the solver's inner iteration count, initial twist uncertainties, and MOLA_INITIAL_VX overrides.
- Reverted Dead Parameters: Removed the freezePairingsAfterIteration parameter exposure after discovering it does not actually exist in the released mp2p_icp library.
- Dependency Fix: Added a missing execution dependency for mola_viz_imgui.
- Contributors: Jose Luis Blanco-Claraco, SamueleSandrini
3.1.0 (2026-08-06)
-
fix: keep the local-map render and the IMU worker off the LiDAR critical path (#126)
Moves the local-map render off the LiDAR thread onto its own worker, and introduces a dedicated
imu_state_mtx_so the IMU handler no longer serializes behind every LiDAR scan viastate_mtx_. The render worker now deep-copies the map layers under the map mutex and does the expensive recolorize/OpenGL build on that private copy, unlocked. On Oxford Spires/GrandTour benchmarks this cutonLidarmax latency roughly in half (up to ~216 ms -> ~107 ms) and the IMU thread's total blocked time by more than half, eliminating the scan-queue backlog. Also exposesmap_update_decimationasMOLA_GUI_MAP_UPDATE_DECIMATION. -
Visualize the robot /tf tree in the LO viewer (opt-in) (#125)
Draws the subtree of coordinate frames below a configurable root frame as the robot moves (e.g. a legged robot's joint tree), via the new
mola::TransformTreeSource. Supports excluding frames/subtrees (tf_tree_exclude_frames), is toggled live from the GUI's View tab, and is enabled by default for the GrandTour dataset with its non-body frames excluded. -
Add mola-lo-gui-grandtour launch script for the GrandTour dataset (#124)
GrandTour publishes one ROS1 bag per topic, so
lidar_odometry_from_rosbag1.yamlnow accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own/tf_staticfor sensor extrinsics. -
Gate
gui_preview_sensorsentries behindMOLA_WITH_GUIconsistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds theMOLA_WITH_GUIheadless toggle to the remainingmola-clilaunch files.
File truncated at 100 lines see the full file