Package symbol

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.1.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-08-16
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format codecov

mola_lidar_odometry

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

Contents

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

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

Build and install

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

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

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

Documentation and tutorials

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

ROS build farm status

Distro Develop branch Releases Stable release
ROS2 Humble (u22.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Jazzy @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Kilted @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Lyrical (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Rolling (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

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

License

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

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

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

CHANGELOG

Changelog for package mola_lidar_odometry

3.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 via state_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 cut onLidar max 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 exposes map_update_decimation as MOLA_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.yaml now accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own /tf_static for sensor extrinsics.

  • Gate gui_preview_sensors entries behind MOLA_WITH_GUI consistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds the MOLA_WITH_GUI headless toggle to the remaining mola-cli launch files.

  • Launch scripts for the citrus farm dataset; conslam dataset now also accepts ROS2 bags.

  • CLI: reduce/disable the batch progress bar; port CLI argument parsing from mrpt-tclap to CLI11 (#123)

    Adds --progress-bar-period to control per-scan progress logging (useful for Jenkins batch runs), and replaces the legacy TCLAP parser with CLI11, preserving all existing flags/defaults while fixing several --help/docs discrepancies along the way.

  • CI: don't let rosdep failures on unresolvable packages abort the job before the build/test steps run; mola-lidar-odometry-cli gains --input-rosbag1 support (#122) and now accepts a comma-separated bag list for multi-part recordings.

  • Add lidar3d-gicp-single-filter.yaml: one decimation filter feeding both map and ICP layers instead of two chained ones (#121), plus a DLIO-like pipeline, VoxelAverage/forward-alone decimation-axis variants, and map-policy leave-one-out/decimation-method ablation pipelines from the 809 investigation.

  • Add log_only mode for the map-gravity estimator (validate against ground truth without feeding back into the map frame) and retry the one-shot accelerometer verticality capture on later scans instead of giving up permanently.

  • fix: deadlock rendering the local map without owning state_mtx_, and a related potential deadlock for large maps under the incremental map class (#120). Declare mola_yaml as an explicit dependency (#109).

  • Estimate the map-frame gravity direction online, default off (#116)

    The verticality reference used by the ICP gravity prior was captured once from a single 50 ms accelerometer average and never updated, biasing the map frame by up to several degrees. Wires in mola::imu::MapGravityEstimator, which continuously solves for gravity in the map frame from preintegrated IMU and the odometry's own relative attitudes/velocities, and uses it as the prior's up_map reference. The one-shot rigid re-levelling half of this feature was found unsafe on some sequences and deferred to a separate experimental branch.

  • Add option to hide the current-pose XYZ corner OpenGL object (#117); expose the max-range filter as MOLA_MAXIMUM_RANGE_FILTER and add a hybrid cov-to-cov/point-to-point reference pipeline.

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

Package symbol

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
jazzy

Package Summary

Version 3.1.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-08-16
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format codecov

mola_lidar_odometry

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

Contents

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

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

Build and install

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

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

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

Documentation and tutorials

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

ROS build farm status

Distro Develop branch Releases Stable release
ROS2 Humble (u22.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Jazzy @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Kilted @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Lyrical (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Rolling (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

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

License

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

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

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

CHANGELOG

Changelog for package mola_lidar_odometry

3.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 via state_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 cut onLidar max 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 exposes map_update_decimation as MOLA_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.yaml now accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own /tf_static for sensor extrinsics.

  • Gate gui_preview_sensors entries behind MOLA_WITH_GUI consistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds the MOLA_WITH_GUI headless toggle to the remaining mola-cli launch files.

  • Launch scripts for the citrus farm dataset; conslam dataset now also accepts ROS2 bags.

  • CLI: reduce/disable the batch progress bar; port CLI argument parsing from mrpt-tclap to CLI11 (#123)

    Adds --progress-bar-period to control per-scan progress logging (useful for Jenkins batch runs), and replaces the legacy TCLAP parser with CLI11, preserving all existing flags/defaults while fixing several --help/docs discrepancies along the way.

  • CI: don't let rosdep failures on unresolvable packages abort the job before the build/test steps run; mola-lidar-odometry-cli gains --input-rosbag1 support (#122) and now accepts a comma-separated bag list for multi-part recordings.

  • Add lidar3d-gicp-single-filter.yaml: one decimation filter feeding both map and ICP layers instead of two chained ones (#121), plus a DLIO-like pipeline, VoxelAverage/forward-alone decimation-axis variants, and map-policy leave-one-out/decimation-method ablation pipelines from the 809 investigation.

  • Add log_only mode for the map-gravity estimator (validate against ground truth without feeding back into the map frame) and retry the one-shot accelerometer verticality capture on later scans instead of giving up permanently.

  • fix: deadlock rendering the local map without owning state_mtx_, and a related potential deadlock for large maps under the incremental map class (#120). Declare mola_yaml as an explicit dependency (#109).

  • Estimate the map-frame gravity direction online, default off (#116)

    The verticality reference used by the ICP gravity prior was captured once from a single 50 ms accelerometer average and never updated, biasing the map frame by up to several degrees. Wires in mola::imu::MapGravityEstimator, which continuously solves for gravity in the map frame from preintegrated IMU and the odometry's own relative attitudes/velocities, and uses it as the prior's up_map reference. The one-shot rigid re-levelling half of this feature was found unsafe on some sequences and deferred to a separate experimental branch.

  • Add option to hide the current-pose XYZ corner OpenGL object (#117); expose the max-range filter as MOLA_MAXIMUM_RANGE_FILTER and add a hybrid cov-to-cov/point-to-point reference pipeline.

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

Package symbol

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
kilted

Package Summary

Version 3.1.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-08-16
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format codecov

mola_lidar_odometry

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

Contents

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

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

Build and install

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

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

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

Documentation and tutorials

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

ROS build farm status

Distro Develop branch Releases Stable release
ROS2 Humble (u22.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Jazzy @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Kilted @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Lyrical (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Rolling (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

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

License

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

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

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

CHANGELOG

Changelog for package mola_lidar_odometry

3.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 via state_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 cut onLidar max 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 exposes map_update_decimation as MOLA_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.yaml now accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own /tf_static for sensor extrinsics.

  • Gate gui_preview_sensors entries behind MOLA_WITH_GUI consistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds the MOLA_WITH_GUI headless toggle to the remaining mola-cli launch files.

  • Launch scripts for the citrus farm dataset; conslam dataset now also accepts ROS2 bags.

  • CLI: reduce/disable the batch progress bar; port CLI argument parsing from mrpt-tclap to CLI11 (#123)

    Adds --progress-bar-period to control per-scan progress logging (useful for Jenkins batch runs), and replaces the legacy TCLAP parser with CLI11, preserving all existing flags/defaults while fixing several --help/docs discrepancies along the way.

  • CI: don't let rosdep failures on unresolvable packages abort the job before the build/test steps run; mola-lidar-odometry-cli gains --input-rosbag1 support (#122) and now accepts a comma-separated bag list for multi-part recordings.

  • Add lidar3d-gicp-single-filter.yaml: one decimation filter feeding both map and ICP layers instead of two chained ones (#121), plus a DLIO-like pipeline, VoxelAverage/forward-alone decimation-axis variants, and map-policy leave-one-out/decimation-method ablation pipelines from the 809 investigation.

  • Add log_only mode for the map-gravity estimator (validate against ground truth without feeding back into the map frame) and retry the one-shot accelerometer verticality capture on later scans instead of giving up permanently.

  • fix: deadlock rendering the local map without owning state_mtx_, and a related potential deadlock for large maps under the incremental map class (#120). Declare mola_yaml as an explicit dependency (#109).

  • Estimate the map-frame gravity direction online, default off (#116)

    The verticality reference used by the ICP gravity prior was captured once from a single 50 ms accelerometer average and never updated, biasing the map frame by up to several degrees. Wires in mola::imu::MapGravityEstimator, which continuously solves for gravity in the map frame from preintegrated IMU and the odometry's own relative attitudes/velocities, and uses it as the prior's up_map reference. The one-shot rigid re-levelling half of this feature was found unsafe on some sequences and deferred to a separate experimental branch.

  • Add option to hide the current-pose XYZ corner OpenGL object (#117); expose the max-range filter as MOLA_MAXIMUM_RANGE_FILTER and add a hybrid cov-to-cov/point-to-point reference pipeline.

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

Package symbol

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
lyrical

Package Summary

Version 3.1.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-08-16
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format codecov

mola_lidar_odometry

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

Contents

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

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

Build and install

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

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

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

Documentation and tutorials

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

ROS build farm status

Distro Develop branch Releases Stable release
ROS2 Humble (u22.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Jazzy @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Kilted @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Lyrical (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Rolling (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

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

License

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

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

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

CHANGELOG

Changelog for package mola_lidar_odometry

3.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 via state_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 cut onLidar max 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 exposes map_update_decimation as MOLA_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.yaml now accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own /tf_static for sensor extrinsics.

  • Gate gui_preview_sensors entries behind MOLA_WITH_GUI consistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds the MOLA_WITH_GUI headless toggle to the remaining mola-cli launch files.

  • Launch scripts for the citrus farm dataset; conslam dataset now also accepts ROS2 bags.

  • CLI: reduce/disable the batch progress bar; port CLI argument parsing from mrpt-tclap to CLI11 (#123)

    Adds --progress-bar-period to control per-scan progress logging (useful for Jenkins batch runs), and replaces the legacy TCLAP parser with CLI11, preserving all existing flags/defaults while fixing several --help/docs discrepancies along the way.

  • CI: don't let rosdep failures on unresolvable packages abort the job before the build/test steps run; mola-lidar-odometry-cli gains --input-rosbag1 support (#122) and now accepts a comma-separated bag list for multi-part recordings.

  • Add lidar3d-gicp-single-filter.yaml: one decimation filter feeding both map and ICP layers instead of two chained ones (#121), plus a DLIO-like pipeline, VoxelAverage/forward-alone decimation-axis variants, and map-policy leave-one-out/decimation-method ablation pipelines from the 809 investigation.

  • Add log_only mode for the map-gravity estimator (validate against ground truth without feeding back into the map frame) and retry the one-shot accelerometer verticality capture on later scans instead of giving up permanently.

  • fix: deadlock rendering the local map without owning state_mtx_, and a related potential deadlock for large maps under the incremental map class (#120). Declare mola_yaml as an explicit dependency (#109).

  • Estimate the map-frame gravity direction online, default off (#116)

    The verticality reference used by the ICP gravity prior was captured once from a single 50 ms accelerometer average and never updated, biasing the map frame by up to several degrees. Wires in mola::imu::MapGravityEstimator, which continuously solves for gravity in the map frame from preintegrated IMU and the odometry's own relative attitudes/velocities, and uses it as the prior's up_map reference. The one-shot rigid re-levelling half of this feature was found unsafe on some sequences and deferred to a separate experimental branch.

  • Add option to hide the current-pose XYZ corner OpenGL object (#117); expose the max-range filter as MOLA_MAXIMUM_RANGE_FILTER and add a hybrid cov-to-cov/point-to-point reference pipeline.

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

Package symbol

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
rolling

Package Summary

Version 3.1.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-08-16
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format codecov

mola_lidar_odometry

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

Contents

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

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

Build and install

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

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

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

Documentation and tutorials

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

ROS build farm status

Distro Develop branch Releases Stable release
ROS2 Humble (u22.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Jazzy @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Kilted @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Lyrical (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Rolling (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

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

License

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

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

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

CHANGELOG

Changelog for package mola_lidar_odometry

3.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 via state_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 cut onLidar max 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 exposes map_update_decimation as MOLA_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.yaml now accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own /tf_static for sensor extrinsics.

  • Gate gui_preview_sensors entries behind MOLA_WITH_GUI consistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds the MOLA_WITH_GUI headless toggle to the remaining mola-cli launch files.

  • Launch scripts for the citrus farm dataset; conslam dataset now also accepts ROS2 bags.

  • CLI: reduce/disable the batch progress bar; port CLI argument parsing from mrpt-tclap to CLI11 (#123)

    Adds --progress-bar-period to control per-scan progress logging (useful for Jenkins batch runs), and replaces the legacy TCLAP parser with CLI11, preserving all existing flags/defaults while fixing several --help/docs discrepancies along the way.

  • CI: don't let rosdep failures on unresolvable packages abort the job before the build/test steps run; mola-lidar-odometry-cli gains --input-rosbag1 support (#122) and now accepts a comma-separated bag list for multi-part recordings.

  • Add lidar3d-gicp-single-filter.yaml: one decimation filter feeding both map and ICP layers instead of two chained ones (#121), plus a DLIO-like pipeline, VoxelAverage/forward-alone decimation-axis variants, and map-policy leave-one-out/decimation-method ablation pipelines from the 809 investigation.

  • Add log_only mode for the map-gravity estimator (validate against ground truth without feeding back into the map frame) and retry the one-shot accelerometer verticality capture on later scans instead of giving up permanently.

  • fix: deadlock rendering the local map without owning state_mtx_, and a related potential deadlock for large maps under the incremental map class (#120). Declare mola_yaml as an explicit dependency (#109).

  • Estimate the map-frame gravity direction online, default off (#116)

    The verticality reference used by the ICP gravity prior was captured once from a single 50 ms accelerometer average and never updated, biasing the map frame by up to several degrees. Wires in mola::imu::MapGravityEstimator, which continuously solves for gravity in the map frame from preintegrated IMU and the odometry's own relative attitudes/velocities, and uses it as the prior's up_map reference. The one-shot rigid re-levelling half of this feature was found unsafe on some sequences and deferred to a separate experimental branch.

  • Add option to hide the current-pose XYZ corner OpenGL object (#117); expose the max-range filter as MOLA_MAXIMUM_RANGE_FILTER and add a hybrid cov-to-cov/point-to-point reference pipeline.

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.1.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-08-16
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format codecov

mola_lidar_odometry

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

Contents

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

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

Build and install

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

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

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

Documentation and tutorials

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

ROS build farm status

Distro Develop branch Releases Stable release
ROS2 Humble (u22.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Jazzy @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Kilted @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Lyrical (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Rolling (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

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

License

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

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

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

CHANGELOG

Changelog for package mola_lidar_odometry

3.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 via state_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 cut onLidar max 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 exposes map_update_decimation as MOLA_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.yaml now accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own /tf_static for sensor extrinsics.

  • Gate gui_preview_sensors entries behind MOLA_WITH_GUI consistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds the MOLA_WITH_GUI headless toggle to the remaining mola-cli launch files.

  • Launch scripts for the citrus farm dataset; conslam dataset now also accepts ROS2 bags.

  • CLI: reduce/disable the batch progress bar; port CLI argument parsing from mrpt-tclap to CLI11 (#123)

    Adds --progress-bar-period to control per-scan progress logging (useful for Jenkins batch runs), and replaces the legacy TCLAP parser with CLI11, preserving all existing flags/defaults while fixing several --help/docs discrepancies along the way.

  • CI: don't let rosdep failures on unresolvable packages abort the job before the build/test steps run; mola-lidar-odometry-cli gains --input-rosbag1 support (#122) and now accepts a comma-separated bag list for multi-part recordings.

  • Add lidar3d-gicp-single-filter.yaml: one decimation filter feeding both map and ICP layers instead of two chained ones (#121), plus a DLIO-like pipeline, VoxelAverage/forward-alone decimation-axis variants, and map-policy leave-one-out/decimation-method ablation pipelines from the 809 investigation.

  • Add log_only mode for the map-gravity estimator (validate against ground truth without feeding back into the map frame) and retry the one-shot accelerometer verticality capture on later scans instead of giving up permanently.

  • fix: deadlock rendering the local map without owning state_mtx_, and a related potential deadlock for large maps under the incremental map class (#120). Declare mola_yaml as an explicit dependency (#109).

  • Estimate the map-frame gravity direction online, default off (#116)

    The verticality reference used by the ICP gravity prior was captured once from a single 50 ms accelerometer average and never updated, biasing the map frame by up to several degrees. Wires in mola::imu::MapGravityEstimator, which continuously solves for gravity in the map frame from preintegrated IMU and the odometry's own relative attitudes/velocities, and uses it as the prior's up_map reference. The one-shot rigid re-levelling half of this feature was found unsafe on some sequences and deferred to a separate experimental branch.

  • Add option to hide the current-pose XYZ corner OpenGL object (#117); expose the max-range filter as MOLA_MAXIMUM_RANGE_FILTER and add a hybrid cov-to-cov/point-to-point reference pipeline.

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.1.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-08-16
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format codecov

mola_lidar_odometry

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

Contents

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

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

Build and install

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

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

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

Documentation and tutorials

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

ROS build farm status

Distro Develop branch Releases Stable release
ROS2 Humble (u22.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Jazzy @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Kilted @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Lyrical (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Rolling (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

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

License

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

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

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

CHANGELOG

Changelog for package mola_lidar_odometry

3.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 via state_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 cut onLidar max 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 exposes map_update_decimation as MOLA_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.yaml now accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own /tf_static for sensor extrinsics.

  • Gate gui_preview_sensors entries behind MOLA_WITH_GUI consistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds the MOLA_WITH_GUI headless toggle to the remaining mola-cli launch files.

  • Launch scripts for the citrus farm dataset; conslam dataset now also accepts ROS2 bags.

  • CLI: reduce/disable the batch progress bar; port CLI argument parsing from mrpt-tclap to CLI11 (#123)

    Adds --progress-bar-period to control per-scan progress logging (useful for Jenkins batch runs), and replaces the legacy TCLAP parser with CLI11, preserving all existing flags/defaults while fixing several --help/docs discrepancies along the way.

  • CI: don't let rosdep failures on unresolvable packages abort the job before the build/test steps run; mola-lidar-odometry-cli gains --input-rosbag1 support (#122) and now accepts a comma-separated bag list for multi-part recordings.

  • Add lidar3d-gicp-single-filter.yaml: one decimation filter feeding both map and ICP layers instead of two chained ones (#121), plus a DLIO-like pipeline, VoxelAverage/forward-alone decimation-axis variants, and map-policy leave-one-out/decimation-method ablation pipelines from the 809 investigation.

  • Add log_only mode for the map-gravity estimator (validate against ground truth without feeding back into the map frame) and retry the one-shot accelerometer verticality capture on later scans instead of giving up permanently.

  • fix: deadlock rendering the local map without owning state_mtx_, and a related potential deadlock for large maps under the incremental map class (#120). Declare mola_yaml as an explicit dependency (#109).

  • Estimate the map-frame gravity direction online, default off (#116)

    The verticality reference used by the ICP gravity prior was captured once from a single 50 ms accelerometer average and never updated, biasing the map frame by up to several degrees. Wires in mola::imu::MapGravityEstimator, which continuously solves for gravity in the map frame from preintegrated IMU and the odometry's own relative attitudes/velocities, and uses it as the prior's up_map reference. The one-shot rigid re-levelling half of this feature was found unsafe on some sequences and deferred to a separate experimental branch.

  • Add option to hide the current-pose XYZ corner OpenGL object (#117); expose the max-range filter as MOLA_MAXIMUM_RANGE_FILTER and add a hybrid cov-to-cov/point-to-point reference pipeline.

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.1.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-08-16
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format codecov

mola_lidar_odometry

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

Contents

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

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

Build and install

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

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

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

Documentation and tutorials

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

ROS build farm status

Distro Develop branch Releases Stable release
ROS2 Humble (u22.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Jazzy @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Kilted @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Lyrical (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Rolling (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

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

License

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

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

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

CHANGELOG

Changelog for package mola_lidar_odometry

3.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 via state_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 cut onLidar max 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 exposes map_update_decimation as MOLA_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.yaml now accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own /tf_static for sensor extrinsics.

  • Gate gui_preview_sensors entries behind MOLA_WITH_GUI consistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds the MOLA_WITH_GUI headless toggle to the remaining mola-cli launch files.

  • Launch scripts for the citrus farm dataset; conslam dataset now also accepts ROS2 bags.

  • CLI: reduce/disable the batch progress bar; port CLI argument parsing from mrpt-tclap to CLI11 (#123)

    Adds --progress-bar-period to control per-scan progress logging (useful for Jenkins batch runs), and replaces the legacy TCLAP parser with CLI11, preserving all existing flags/defaults while fixing several --help/docs discrepancies along the way.

  • CI: don't let rosdep failures on unresolvable packages abort the job before the build/test steps run; mola-lidar-odometry-cli gains --input-rosbag1 support (#122) and now accepts a comma-separated bag list for multi-part recordings.

  • Add lidar3d-gicp-single-filter.yaml: one decimation filter feeding both map and ICP layers instead of two chained ones (#121), plus a DLIO-like pipeline, VoxelAverage/forward-alone decimation-axis variants, and map-policy leave-one-out/decimation-method ablation pipelines from the 809 investigation.

  • Add log_only mode for the map-gravity estimator (validate against ground truth without feeding back into the map frame) and retry the one-shot accelerometer verticality capture on later scans instead of giving up permanently.

  • fix: deadlock rendering the local map without owning state_mtx_, and a related potential deadlock for large maps under the incremental map class (#120). Declare mola_yaml as an explicit dependency (#109).

  • Estimate the map-frame gravity direction online, default off (#116)

    The verticality reference used by the ICP gravity prior was captured once from a single 50 ms accelerometer average and never updated, biasing the map frame by up to several degrees. Wires in mola::imu::MapGravityEstimator, which continuously solves for gravity in the map frame from preintegrated IMU and the odometry's own relative attitudes/velocities, and uses it as the prior's up_map reference. The one-shot rigid re-levelling half of this feature was found unsafe on some sequences and deferred to a separate experimental branch.

  • Add option to hide the current-pose XYZ corner OpenGL object (#117); expose the max-range filter as MOLA_MAXIMUM_RANGE_FILTER and add a hybrid cov-to-cov/point-to-point reference pipeline.

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.1.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-08-16
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format codecov

mola_lidar_odometry

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

Contents

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

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

Build and install

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

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

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

Documentation and tutorials

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

ROS build farm status

Distro Develop branch Releases Stable release
ROS2 Humble (u22.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Jazzy @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Kilted @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Lyrical (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Rolling (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

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

License

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

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

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

CHANGELOG

Changelog for package mola_lidar_odometry

3.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 via state_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 cut onLidar max 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 exposes map_update_decimation as MOLA_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.yaml now accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own /tf_static for sensor extrinsics.

  • Gate gui_preview_sensors entries behind MOLA_WITH_GUI consistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds the MOLA_WITH_GUI headless toggle to the remaining mola-cli launch files.

  • Launch scripts for the citrus farm dataset; conslam dataset now also accepts ROS2 bags.

  • CLI: reduce/disable the batch progress bar; port CLI argument parsing from mrpt-tclap to CLI11 (#123)

    Adds --progress-bar-period to control per-scan progress logging (useful for Jenkins batch runs), and replaces the legacy TCLAP parser with CLI11, preserving all existing flags/defaults while fixing several --help/docs discrepancies along the way.

  • CI: don't let rosdep failures on unresolvable packages abort the job before the build/test steps run; mola-lidar-odometry-cli gains --input-rosbag1 support (#122) and now accepts a comma-separated bag list for multi-part recordings.

  • Add lidar3d-gicp-single-filter.yaml: one decimation filter feeding both map and ICP layers instead of two chained ones (#121), plus a DLIO-like pipeline, VoxelAverage/forward-alone decimation-axis variants, and map-policy leave-one-out/decimation-method ablation pipelines from the 809 investigation.

  • Add log_only mode for the map-gravity estimator (validate against ground truth without feeding back into the map frame) and retry the one-shot accelerometer verticality capture on later scans instead of giving up permanently.

  • fix: deadlock rendering the local map without owning state_mtx_, and a related potential deadlock for large maps under the incremental map class (#120). Declare mola_yaml as an explicit dependency (#109).

  • Estimate the map-frame gravity direction online, default off (#116)

    The verticality reference used by the ICP gravity prior was captured once from a single 50 ms accelerometer average and never updated, biasing the map frame by up to several degrees. Wires in mola::imu::MapGravityEstimator, which continuously solves for gravity in the map frame from preintegrated IMU and the odometry's own relative attitudes/velocities, and uses it as the prior's up_map reference. The one-shot rigid re-levelling half of this feature was found unsafe on some sequences and deferred to a separate experimental branch.

  • Add option to hide the current-pose XYZ corner OpenGL object (#117); expose the max-range filter as MOLA_MAXIMUM_RANGE_FILTER and add a hybrid cov-to-cov/point-to-point reference pipeline.

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.1.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-08-16
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format codecov

mola_lidar_odometry

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

Contents

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

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

Build and install

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

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

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

Documentation and tutorials

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

ROS build farm status

Distro Develop branch Releases Stable release
ROS2 Humble (u22.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Jazzy @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Kilted @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Lyrical (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Rolling (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

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

License

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

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

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

CHANGELOG

Changelog for package mola_lidar_odometry

3.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 via state_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 cut onLidar max 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 exposes map_update_decimation as MOLA_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.yaml now accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own /tf_static for sensor extrinsics.

  • Gate gui_preview_sensors entries behind MOLA_WITH_GUI consistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds the MOLA_WITH_GUI headless toggle to the remaining mola-cli launch files.

  • Launch scripts for the citrus farm dataset; conslam dataset now also accepts ROS2 bags.

  • CLI: reduce/disable the batch progress bar; port CLI argument parsing from mrpt-tclap to CLI11 (#123)

    Adds --progress-bar-period to control per-scan progress logging (useful for Jenkins batch runs), and replaces the legacy TCLAP parser with CLI11, preserving all existing flags/defaults while fixing several --help/docs discrepancies along the way.

  • CI: don't let rosdep failures on unresolvable packages abort the job before the build/test steps run; mola-lidar-odometry-cli gains --input-rosbag1 support (#122) and now accepts a comma-separated bag list for multi-part recordings.

  • Add lidar3d-gicp-single-filter.yaml: one decimation filter feeding both map and ICP layers instead of two chained ones (#121), plus a DLIO-like pipeline, VoxelAverage/forward-alone decimation-axis variants, and map-policy leave-one-out/decimation-method ablation pipelines from the 809 investigation.

  • Add log_only mode for the map-gravity estimator (validate against ground truth without feeding back into the map frame) and retry the one-shot accelerometer verticality capture on later scans instead of giving up permanently.

  • fix: deadlock rendering the local map without owning state_mtx_, and a related potential deadlock for large maps under the incremental map class (#120). Declare mola_yaml as an explicit dependency (#109).

  • Estimate the map-frame gravity direction online, default off (#116)

    The verticality reference used by the ICP gravity prior was captured once from a single 50 ms accelerometer average and never updated, biasing the map frame by up to several degrees. Wires in mola::imu::MapGravityEstimator, which continuously solves for gravity in the map frame from preintegrated IMU and the odometry's own relative attitudes/velocities, and uses it as the prior's up_map reference. The one-shot rigid re-levelling half of this feature was found unsafe on some sequences and deferred to a separate experimental branch.

  • Add option to hide the current-pose XYZ corner OpenGL object (#117); expose the max-range filter as MOLA_MAXIMUM_RANGE_FILTER and add a hybrid cov-to-cov/point-to-point reference pipeline.

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.1.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-08-16
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format codecov

mola_lidar_odometry

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

Contents

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

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

Build and install

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

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

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

Documentation and tutorials

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

ROS build farm status

Distro Develop branch Releases Stable release
ROS2 Humble (u22.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Jazzy @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Kilted @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Lyrical (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Rolling (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

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

License

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

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

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

CHANGELOG

Changelog for package mola_lidar_odometry

3.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 via state_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 cut onLidar max 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 exposes map_update_decimation as MOLA_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.yaml now accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own /tf_static for sensor extrinsics.

  • Gate gui_preview_sensors entries behind MOLA_WITH_GUI consistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds the MOLA_WITH_GUI headless toggle to the remaining mola-cli launch files.

  • Launch scripts for the citrus farm dataset; conslam dataset now also accepts ROS2 bags.

  • CLI: reduce/disable the batch progress bar; port CLI argument parsing from mrpt-tclap to CLI11 (#123)

    Adds --progress-bar-period to control per-scan progress logging (useful for Jenkins batch runs), and replaces the legacy TCLAP parser with CLI11, preserving all existing flags/defaults while fixing several --help/docs discrepancies along the way.

  • CI: don't let rosdep failures on unresolvable packages abort the job before the build/test steps run; mola-lidar-odometry-cli gains --input-rosbag1 support (#122) and now accepts a comma-separated bag list for multi-part recordings.

  • Add lidar3d-gicp-single-filter.yaml: one decimation filter feeding both map and ICP layers instead of two chained ones (#121), plus a DLIO-like pipeline, VoxelAverage/forward-alone decimation-axis variants, and map-policy leave-one-out/decimation-method ablation pipelines from the 809 investigation.

  • Add log_only mode for the map-gravity estimator (validate against ground truth without feeding back into the map frame) and retry the one-shot accelerometer verticality capture on later scans instead of giving up permanently.

  • fix: deadlock rendering the local map without owning state_mtx_, and a related potential deadlock for large maps under the incremental map class (#120). Declare mola_yaml as an explicit dependency (#109).

  • Estimate the map-frame gravity direction online, default off (#116)

    The verticality reference used by the ICP gravity prior was captured once from a single 50 ms accelerometer average and never updated, biasing the map frame by up to several degrees. Wires in mola::imu::MapGravityEstimator, which continuously solves for gravity in the map frame from preintegrated IMU and the odometry's own relative attitudes/velocities, and uses it as the prior's up_map reference. The one-shot rigid re-levelling half of this feature was found unsafe on some sequences and deferred to a separate experimental branch.

  • Add option to hide the current-pose XYZ corner OpenGL object (#117); expose the max-range filter as MOLA_MAXIMUM_RANGE_FILTER and add a hybrid cov-to-cov/point-to-point reference pipeline.

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.1.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-08-16
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format codecov

mola_lidar_odometry

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

Contents

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

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

Build and install

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

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

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

Documentation and tutorials

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

ROS build farm status

Distro Develop branch Releases Stable release
ROS2 Humble (u22.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Jazzy @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Kilted @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Lyrical (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Rolling (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

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

License

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

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

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

CHANGELOG

Changelog for package mola_lidar_odometry

3.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 via state_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 cut onLidar max 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 exposes map_update_decimation as MOLA_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.yaml now accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own /tf_static for sensor extrinsics.

  • Gate gui_preview_sensors entries behind MOLA_WITH_GUI consistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds the MOLA_WITH_GUI headless toggle to the remaining mola-cli launch files.

  • Launch scripts for the citrus farm dataset; conslam dataset now also accepts ROS2 bags.

  • CLI: reduce/disable the batch progress bar; port CLI argument parsing from mrpt-tclap to CLI11 (#123)

    Adds --progress-bar-period to control per-scan progress logging (useful for Jenkins batch runs), and replaces the legacy TCLAP parser with CLI11, preserving all existing flags/defaults while fixing several --help/docs discrepancies along the way.

  • CI: don't let rosdep failures on unresolvable packages abort the job before the build/test steps run; mola-lidar-odometry-cli gains --input-rosbag1 support (#122) and now accepts a comma-separated bag list for multi-part recordings.

  • Add lidar3d-gicp-single-filter.yaml: one decimation filter feeding both map and ICP layers instead of two chained ones (#121), plus a DLIO-like pipeline, VoxelAverage/forward-alone decimation-axis variants, and map-policy leave-one-out/decimation-method ablation pipelines from the 809 investigation.

  • Add log_only mode for the map-gravity estimator (validate against ground truth without feeding back into the map frame) and retry the one-shot accelerometer verticality capture on later scans instead of giving up permanently.

  • fix: deadlock rendering the local map without owning state_mtx_, and a related potential deadlock for large maps under the incremental map class (#120). Declare mola_yaml as an explicit dependency (#109).

  • Estimate the map-frame gravity direction online, default off (#116)

    The verticality reference used by the ICP gravity prior was captured once from a single 50 ms accelerometer average and never updated, biasing the map frame by up to several degrees. Wires in mola::imu::MapGravityEstimator, which continuously solves for gravity in the map frame from preintegrated IMU and the odometry's own relative attitudes/velocities, and uses it as the prior's up_map reference. The one-shot rigid re-levelling half of this feature was found unsafe on some sequences and deferred to a separate experimental branch.

  • Add option to hide the current-pose XYZ corner OpenGL object (#117); expose the max-range filter as MOLA_MAXIMUM_RANGE_FILTER and add a hybrid cov-to-cov/point-to-point reference pipeline.

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

Package symbol

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
iron

Package Summary

Version 3.1.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-08-16
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format codecov

mola_lidar_odometry

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

Contents

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

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

Build and install

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

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

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

Documentation and tutorials

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

ROS build farm status

Distro Develop branch Releases Stable release
ROS2 Humble (u22.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Jazzy @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Kilted @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Lyrical (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Rolling (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

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

License

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

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

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

CHANGELOG

Changelog for package mola_lidar_odometry

3.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 via state_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 cut onLidar max 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 exposes map_update_decimation as MOLA_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.yaml now accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own /tf_static for sensor extrinsics.

  • Gate gui_preview_sensors entries behind MOLA_WITH_GUI consistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds the MOLA_WITH_GUI headless toggle to the remaining mola-cli launch files.

  • Launch scripts for the citrus farm dataset; conslam dataset now also accepts ROS2 bags.

  • CLI: reduce/disable the batch progress bar; port CLI argument parsing from mrpt-tclap to CLI11 (#123)

    Adds --progress-bar-period to control per-scan progress logging (useful for Jenkins batch runs), and replaces the legacy TCLAP parser with CLI11, preserving all existing flags/defaults while fixing several --help/docs discrepancies along the way.

  • CI: don't let rosdep failures on unresolvable packages abort the job before the build/test steps run; mola-lidar-odometry-cli gains --input-rosbag1 support (#122) and now accepts a comma-separated bag list for multi-part recordings.

  • Add lidar3d-gicp-single-filter.yaml: one decimation filter feeding both map and ICP layers instead of two chained ones (#121), plus a DLIO-like pipeline, VoxelAverage/forward-alone decimation-axis variants, and map-policy leave-one-out/decimation-method ablation pipelines from the 809 investigation.

  • Add log_only mode for the map-gravity estimator (validate against ground truth without feeding back into the map frame) and retry the one-shot accelerometer verticality capture on later scans instead of giving up permanently.

  • fix: deadlock rendering the local map without owning state_mtx_, and a related potential deadlock for large maps under the incremental map class (#120). Declare mola_yaml as an explicit dependency (#109).

  • Estimate the map-frame gravity direction online, default off (#116)

    The verticality reference used by the ICP gravity prior was captured once from a single 50 ms accelerometer average and never updated, biasing the map frame by up to several degrees. Wires in mola::imu::MapGravityEstimator, which continuously solves for gravity in the map frame from preintegrated IMU and the odometry's own relative attitudes/velocities, and uses it as the prior's up_map reference. The one-shot rigid re-levelling half of this feature was found unsafe on some sequences and deferred to a separate experimental branch.

  • Add option to hide the current-pose XYZ corner OpenGL object (#117); expose the max-range filter as MOLA_MAXIMUM_RANGE_FILTER and add a hybrid cov-to-cov/point-to-point reference pipeline.

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.1.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-08-16
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format codecov

mola_lidar_odometry

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

Contents

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

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

Build and install

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

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

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

Documentation and tutorials

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

ROS build farm status

Distro Develop branch Releases Stable release
ROS2 Humble (u22.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Jazzy @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Kilted @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Lyrical (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Rolling (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

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

License

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

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

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

CHANGELOG

Changelog for package mola_lidar_odometry

3.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 via state_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 cut onLidar max 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 exposes map_update_decimation as MOLA_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.yaml now accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own /tf_static for sensor extrinsics.

  • Gate gui_preview_sensors entries behind MOLA_WITH_GUI consistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds the MOLA_WITH_GUI headless toggle to the remaining mola-cli launch files.

  • Launch scripts for the citrus farm dataset; conslam dataset now also accepts ROS2 bags.

  • CLI: reduce/disable the batch progress bar; port CLI argument parsing from mrpt-tclap to CLI11 (#123)

    Adds --progress-bar-period to control per-scan progress logging (useful for Jenkins batch runs), and replaces the legacy TCLAP parser with CLI11, preserving all existing flags/defaults while fixing several --help/docs discrepancies along the way.

  • CI: don't let rosdep failures on unresolvable packages abort the job before the build/test steps run; mola-lidar-odometry-cli gains --input-rosbag1 support (#122) and now accepts a comma-separated bag list for multi-part recordings.

  • Add lidar3d-gicp-single-filter.yaml: one decimation filter feeding both map and ICP layers instead of two chained ones (#121), plus a DLIO-like pipeline, VoxelAverage/forward-alone decimation-axis variants, and map-policy leave-one-out/decimation-method ablation pipelines from the 809 investigation.

  • Add log_only mode for the map-gravity estimator (validate against ground truth without feeding back into the map frame) and retry the one-shot accelerometer verticality capture on later scans instead of giving up permanently.

  • fix: deadlock rendering the local map without owning state_mtx_, and a related potential deadlock for large maps under the incremental map class (#120). Declare mola_yaml as an explicit dependency (#109).

  • Estimate the map-frame gravity direction online, default off (#116)

    The verticality reference used by the ICP gravity prior was captured once from a single 50 ms accelerometer average and never updated, biasing the map frame by up to several degrees. Wires in mola::imu::MapGravityEstimator, which continuously solves for gravity in the map frame from preintegrated IMU and the odometry's own relative attitudes/velocities, and uses it as the prior's up_map reference. The one-shot rigid re-levelling half of this feature was found unsafe on some sequences and deferred to a separate experimental branch.

  • Add option to hide the current-pose XYZ corner OpenGL object (#117); expose the max-range filter as MOLA_MAXIMUM_RANGE_FILTER and add a hybrid cov-to-cov/point-to-point reference pipeline.

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.1.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-08-16
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format codecov

mola_lidar_odometry

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

Contents

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

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

Build and install

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

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

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

Documentation and tutorials

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

ROS build farm status

Distro Develop branch Releases Stable release
ROS2 Humble (u22.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Jazzy @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Kilted @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Lyrical (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Rolling (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

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

License

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

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

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

CHANGELOG

Changelog for package mola_lidar_odometry

3.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 via state_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 cut onLidar max 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 exposes map_update_decimation as MOLA_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.yaml now accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own /tf_static for sensor extrinsics.

  • Gate gui_preview_sensors entries behind MOLA_WITH_GUI consistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds the MOLA_WITH_GUI headless toggle to the remaining mola-cli launch files.

  • Launch scripts for the citrus farm dataset; conslam dataset now also accepts ROS2 bags.

  • CLI: reduce/disable the batch progress bar; port CLI argument parsing from mrpt-tclap to CLI11 (#123)

    Adds --progress-bar-period to control per-scan progress logging (useful for Jenkins batch runs), and replaces the legacy TCLAP parser with CLI11, preserving all existing flags/defaults while fixing several --help/docs discrepancies along the way.

  • CI: don't let rosdep failures on unresolvable packages abort the job before the build/test steps run; mola-lidar-odometry-cli gains --input-rosbag1 support (#122) and now accepts a comma-separated bag list for multi-part recordings.

  • Add lidar3d-gicp-single-filter.yaml: one decimation filter feeding both map and ICP layers instead of two chained ones (#121), plus a DLIO-like pipeline, VoxelAverage/forward-alone decimation-axis variants, and map-policy leave-one-out/decimation-method ablation pipelines from the 809 investigation.

  • Add log_only mode for the map-gravity estimator (validate against ground truth without feeding back into the map frame) and retry the one-shot accelerometer verticality capture on later scans instead of giving up permanently.

  • fix: deadlock rendering the local map without owning state_mtx_, and a related potential deadlock for large maps under the incremental map class (#120). Declare mola_yaml as an explicit dependency (#109).

  • Estimate the map-frame gravity direction online, default off (#116)

    The verticality reference used by the ICP gravity prior was captured once from a single 50 ms accelerometer average and never updated, biasing the map frame by up to several degrees. Wires in mola::imu::MapGravityEstimator, which continuously solves for gravity in the map frame from preintegrated IMU and the odometry's own relative attitudes/velocities, and uses it as the prior's up_map reference. The one-shot rigid re-levelling half of this feature was found unsafe on some sequences and deferred to a separate experimental branch.

  • Add option to hide the current-pose XYZ corner OpenGL object (#117); expose the max-range filter as MOLA_MAXIMUM_RANGE_FILTER and add a hybrid cov-to-cov/point-to-point reference pipeline.

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.1.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-08-16
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format codecov

mola_lidar_odometry

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

Contents

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

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

Build and install

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

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

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

Documentation and tutorials

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

ROS build farm status

Distro Develop branch Releases Stable release
ROS2 Humble (u22.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Jazzy @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Kilted @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Lyrical (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Rolling (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

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

License

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

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

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

CHANGELOG

Changelog for package mola_lidar_odometry

3.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 via state_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 cut onLidar max 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 exposes map_update_decimation as MOLA_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.yaml now accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own /tf_static for sensor extrinsics.

  • Gate gui_preview_sensors entries behind MOLA_WITH_GUI consistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds the MOLA_WITH_GUI headless toggle to the remaining mola-cli launch files.

  • Launch scripts for the citrus farm dataset; conslam dataset now also accepts ROS2 bags.

  • CLI: reduce/disable the batch progress bar; port CLI argument parsing from mrpt-tclap to CLI11 (#123)

    Adds --progress-bar-period to control per-scan progress logging (useful for Jenkins batch runs), and replaces the legacy TCLAP parser with CLI11, preserving all existing flags/defaults while fixing several --help/docs discrepancies along the way.

  • CI: don't let rosdep failures on unresolvable packages abort the job before the build/test steps run; mola-lidar-odometry-cli gains --input-rosbag1 support (#122) and now accepts a comma-separated bag list for multi-part recordings.

  • Add lidar3d-gicp-single-filter.yaml: one decimation filter feeding both map and ICP layers instead of two chained ones (#121), plus a DLIO-like pipeline, VoxelAverage/forward-alone decimation-axis variants, and map-policy leave-one-out/decimation-method ablation pipelines from the 809 investigation.

  • Add log_only mode for the map-gravity estimator (validate against ground truth without feeding back into the map frame) and retry the one-shot accelerometer verticality capture on later scans instead of giving up permanently.

  • fix: deadlock rendering the local map without owning state_mtx_, and a related potential deadlock for large maps under the incremental map class (#120). Declare mola_yaml as an explicit dependency (#109).

  • Estimate the map-frame gravity direction online, default off (#116)

    The verticality reference used by the ICP gravity prior was captured once from a single 50 ms accelerometer average and never updated, biasing the map frame by up to several degrees. Wires in mola::imu::MapGravityEstimator, which continuously solves for gravity in the map frame from preintegrated IMU and the odometry's own relative attitudes/velocities, and uses it as the prior's up_map reference. The one-shot rigid re-levelling half of this feature was found unsafe on some sequences and deferred to a separate experimental branch.

  • Add option to hide the current-pose XYZ corner OpenGL object (#117); expose the max-range filter as MOLA_MAXIMUM_RANGE_FILTER and add a hybrid cov-to-cov/point-to-point reference pipeline.

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.1.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-08-16
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format codecov

mola_lidar_odometry

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

Contents

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

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

Build and install

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

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

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

Documentation and tutorials

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

ROS build farm status

Distro Develop branch Releases Stable release
ROS2 Humble (u22.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Jazzy @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Kilted @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Lyrical (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Rolling (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

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

License

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

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

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

CHANGELOG

Changelog for package mola_lidar_odometry

3.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 via state_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 cut onLidar max 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 exposes map_update_decimation as MOLA_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.yaml now accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own /tf_static for sensor extrinsics.

  • Gate gui_preview_sensors entries behind MOLA_WITH_GUI consistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds the MOLA_WITH_GUI headless toggle to the remaining mola-cli launch files.

  • Launch scripts for the citrus farm dataset; conslam dataset now also accepts ROS2 bags.

  • CLI: reduce/disable the batch progress bar; port CLI argument parsing from mrpt-tclap to CLI11 (#123)

    Adds --progress-bar-period to control per-scan progress logging (useful for Jenkins batch runs), and replaces the legacy TCLAP parser with CLI11, preserving all existing flags/defaults while fixing several --help/docs discrepancies along the way.

  • CI: don't let rosdep failures on unresolvable packages abort the job before the build/test steps run; mola-lidar-odometry-cli gains --input-rosbag1 support (#122) and now accepts a comma-separated bag list for multi-part recordings.

  • Add lidar3d-gicp-single-filter.yaml: one decimation filter feeding both map and ICP layers instead of two chained ones (#121), plus a DLIO-like pipeline, VoxelAverage/forward-alone decimation-axis variants, and map-policy leave-one-out/decimation-method ablation pipelines from the 809 investigation.

  • Add log_only mode for the map-gravity estimator (validate against ground truth without feeding back into the map frame) and retry the one-shot accelerometer verticality capture on later scans instead of giving up permanently.

  • fix: deadlock rendering the local map without owning state_mtx_, and a related potential deadlock for large maps under the incremental map class (#120). Declare mola_yaml as an explicit dependency (#109).

  • Estimate the map-frame gravity direction online, default off (#116)

    The verticality reference used by the ICP gravity prior was captured once from a single 50 ms accelerometer average and never updated, biasing the map frame by up to several degrees. Wires in mola::imu::MapGravityEstimator, which continuously solves for gravity in the map frame from preintegrated IMU and the odometry's own relative attitudes/velocities, and uses it as the prior's up_map reference. The one-shot rigid re-levelling half of this feature was found unsafe on some sequences and deferred to a separate experimental branch.

  • Add option to hide the current-pose XYZ corner OpenGL object (#117); expose the max-range filter as MOLA_MAXIMUM_RANGE_FILTER and add a hybrid cov-to-cov/point-to-point reference pipeline.

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.1.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-08-16
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format codecov

mola_lidar_odometry

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

Contents

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

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

Build and install

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

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

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

Documentation and tutorials

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

ROS build farm status

Distro Develop branch Releases Stable release
ROS2 Humble (u22.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Jazzy @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Kilted @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Lyrical (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Rolling (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

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

License

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

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

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

CHANGELOG

Changelog for package mola_lidar_odometry

3.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 via state_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 cut onLidar max 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 exposes map_update_decimation as MOLA_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.yaml now accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own /tf_static for sensor extrinsics.

  • Gate gui_preview_sensors entries behind MOLA_WITH_GUI consistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds the MOLA_WITH_GUI headless toggle to the remaining mola-cli launch files.

  • Launch scripts for the citrus farm dataset; conslam dataset now also accepts ROS2 bags.

  • CLI: reduce/disable the batch progress bar; port CLI argument parsing from mrpt-tclap to CLI11 (#123)

    Adds --progress-bar-period to control per-scan progress logging (useful for Jenkins batch runs), and replaces the legacy TCLAP parser with CLI11, preserving all existing flags/defaults while fixing several --help/docs discrepancies along the way.

  • CI: don't let rosdep failures on unresolvable packages abort the job before the build/test steps run; mola-lidar-odometry-cli gains --input-rosbag1 support (#122) and now accepts a comma-separated bag list for multi-part recordings.

  • Add lidar3d-gicp-single-filter.yaml: one decimation filter feeding both map and ICP layers instead of two chained ones (#121), plus a DLIO-like pipeline, VoxelAverage/forward-alone decimation-axis variants, and map-policy leave-one-out/decimation-method ablation pipelines from the 809 investigation.

  • Add log_only mode for the map-gravity estimator (validate against ground truth without feeding back into the map frame) and retry the one-shot accelerometer verticality capture on later scans instead of giving up permanently.

  • fix: deadlock rendering the local map without owning state_mtx_, and a related potential deadlock for large maps under the incremental map class (#120). Declare mola_yaml as an explicit dependency (#109).

  • Estimate the map-frame gravity direction online, default off (#116)

    The verticality reference used by the ICP gravity prior was captured once from a single 50 ms accelerometer average and never updated, biasing the map frame by up to several degrees. Wires in mola::imu::MapGravityEstimator, which continuously solves for gravity in the map frame from preintegrated IMU and the odometry's own relative attitudes/velocities, and uses it as the prior's up_map reference. The one-shot rigid re-levelling half of this feature was found unsafe on some sequences and deferred to a separate experimental branch.

  • Add option to hide the current-pose XYZ corner OpenGL object (#117); expose the max-range filter as MOLA_MAXIMUM_RANGE_FILTER and add a hybrid cov-to-cov/point-to-point reference pipeline.

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.1.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-08-16
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format codecov

mola_lidar_odometry

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

Contents

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

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

Build and install

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

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

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

Documentation and tutorials

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

ROS build farm status

Distro Develop branch Releases Stable release
ROS2 Humble (u22.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Jazzy @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Kilted @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Lyrical (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Rolling (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

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

License

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

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

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

CHANGELOG

Changelog for package mola_lidar_odometry

3.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 via state_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 cut onLidar max 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 exposes map_update_decimation as MOLA_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.yaml now accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own /tf_static for sensor extrinsics.

  • Gate gui_preview_sensors entries behind MOLA_WITH_GUI consistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds the MOLA_WITH_GUI headless toggle to the remaining mola-cli launch files.

  • Launch scripts for the citrus farm dataset; conslam dataset now also accepts ROS2 bags.

  • CLI: reduce/disable the batch progress bar; port CLI argument parsing from mrpt-tclap to CLI11 (#123)

    Adds --progress-bar-period to control per-scan progress logging (useful for Jenkins batch runs), and replaces the legacy TCLAP parser with CLI11, preserving all existing flags/defaults while fixing several --help/docs discrepancies along the way.

  • CI: don't let rosdep failures on unresolvable packages abort the job before the build/test steps run; mola-lidar-odometry-cli gains --input-rosbag1 support (#122) and now accepts a comma-separated bag list for multi-part recordings.

  • Add lidar3d-gicp-single-filter.yaml: one decimation filter feeding both map and ICP layers instead of two chained ones (#121), plus a DLIO-like pipeline, VoxelAverage/forward-alone decimation-axis variants, and map-policy leave-one-out/decimation-method ablation pipelines from the 809 investigation.

  • Add log_only mode for the map-gravity estimator (validate against ground truth without feeding back into the map frame) and retry the one-shot accelerometer verticality capture on later scans instead of giving up permanently.

  • fix: deadlock rendering the local map without owning state_mtx_, and a related potential deadlock for large maps under the incremental map class (#120). Declare mola_yaml as an explicit dependency (#109).

  • Estimate the map-frame gravity direction online, default off (#116)

    The verticality reference used by the ICP gravity prior was captured once from a single 50 ms accelerometer average and never updated, biasing the map frame by up to several degrees. Wires in mola::imu::MapGravityEstimator, which continuously solves for gravity in the map frame from preintegrated IMU and the odometry's own relative attitudes/velocities, and uses it as the prior's up_map reference. The one-shot rigid re-levelling half of this feature was found unsafe on some sequences and deferred to a separate experimental branch.

  • Add option to hide the current-pose XYZ corner OpenGL object (#117); expose the max-range filter as MOLA_MAXIMUM_RANGE_FILTER and add a hybrid cov-to-cov/point-to-point reference pipeline.

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange

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

mola_lidar_odometry package from mola_lidar_odometry repo

mola_lidar_odometry

ROS Distro
humble

Package Summary

Version 3.1.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-08-16
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

LIDAR odometry system based on MOLA and MRPT components

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

No additional authors.

CI Build colcon CI clang-format codecov

mola_lidar_odometry

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

Contents

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

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

Build and install

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

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

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

Documentation and tutorials

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

ROS build farm status

Distro Develop branch Releases Stable release
ROS2 Humble (u22.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Jazzy @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Kilted @ u24.04 Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Lyrical (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
ROS 2 Rolling (u26.04) Build Status amd64 Build Status
arm64 Build Status
Version
EOL Distro Last release
ROS2 Iron (u22.04) Version

Citation

The latest publication on MOLA is (ArXiV).

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

License

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

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

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

CHANGELOG

Changelog for package mola_lidar_odometry

3.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 via state_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 cut onLidar max 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 exposes map_update_decimation as MOLA_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.yaml now accepts up to three bags replayed jointly. The wrapper locates sibling bags from a mission directory and uses the dataset's own /tf_static for sensor extrinsics.

  • Gate gui_preview_sensors entries behind MOLA_WITH_GUI consistently across all launch YAMLs, removing noisy "no running MolaViz module" warnings in headless CI runs. Also adds the MOLA_WITH_GUI headless toggle to the remaining mola-cli launch files.

  • Launch scripts for the citrus farm dataset; conslam dataset now also accepts ROS2 bags.

  • CLI: reduce/disable the batch progress bar; port CLI argument parsing from mrpt-tclap to CLI11 (#123)

    Adds --progress-bar-period to control per-scan progress logging (useful for Jenkins batch runs), and replaces the legacy TCLAP parser with CLI11, preserving all existing flags/defaults while fixing several --help/docs discrepancies along the way.

  • CI: don't let rosdep failures on unresolvable packages abort the job before the build/test steps run; mola-lidar-odometry-cli gains --input-rosbag1 support (#122) and now accepts a comma-separated bag list for multi-part recordings.

  • Add lidar3d-gicp-single-filter.yaml: one decimation filter feeding both map and ICP layers instead of two chained ones (#121), plus a DLIO-like pipeline, VoxelAverage/forward-alone decimation-axis variants, and map-policy leave-one-out/decimation-method ablation pipelines from the 809 investigation.

  • Add log_only mode for the map-gravity estimator (validate against ground truth without feeding back into the map frame) and retry the one-shot accelerometer verticality capture on later scans instead of giving up permanently.

  • fix: deadlock rendering the local map without owning state_mtx_, and a related potential deadlock for large maps under the incremental map class (#120). Declare mola_yaml as an explicit dependency (#109).

  • Estimate the map-frame gravity direction online, default off (#116)

    The verticality reference used by the ICP gravity prior was captured once from a single 50 ms accelerometer average and never updated, biasing the map frame by up to several degrees. Wires in mola::imu::MapGravityEstimator, which continuously solves for gravity in the map frame from preintegrated IMU and the odometry's own relative attitudes/velocities, and uses it as the prior's up_map reference. The one-shot rigid re-levelling half of this feature was found unsafe on some sequences and deferred to a separate experimental branch.

  • Add option to hide the current-pose XYZ corner OpenGL object (#117); expose the max-range filter as MOLA_MAXIMUM_RANGE_FILTER and add a hybrid cov-to-cov/point-to-point reference pipeline.

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_lidar_odometry at Robotics Stack Exchange