Package symbol

mola_sm_loop_closure package from mola_sm_loop_closure repo

mola_sm_loop_closure

ROS Distro
humble

Package Summary

Version 1.0.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

Simplemap loop-closure postprocessing library and CLI tool

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

  • Jose-Luis Blanco-Claraco

CI ROS CI Check clang-format Docs

Distro Build dev Build releases Stable version
ROS 2 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 Rolling (u24.04) Build Status amd64 Build Status
arm64 Build Status
Version

mola_sm_loop_closure

Offline loop-closure engine for MOLA CSimpleMap files. Given an input simplemap produced by any MOLA odometry front-end, the package re-optimises all keyframe poses by detecting and closing loops, then writes the corrected simplemap back to disk.

Two algorithms

Algorithm Class Best for
SimplemapLoopClosure mola::SimplemapLoopClosure Long maps with noticeable drift; groups keyframes into submaps and runs heavy point-cloud ICP between submap pairs
FrameToFrameLoopClosure mola::FrameToFrameLoopClosure GNSS-augmented datasets or quick re-optimisation; runs frame-to-frame ICP with a GNC graph optimizer

CLI usage

# SimplemapLoopClosure (default algorithm):
mola-sm-lc-cli -i in.simplemap -o out.simplemap \
    -p pipelines/loop-closure-lidar3d-gicp.yaml

# FrameToFrameLoopClosure:
mola-sm-lc-cli -i in.simplemap -o out.simplemap \
    -a mola::FrameToFrameLoopClosure \
    -p pipelines/loop-closure-f2f-lidar3d-gicp.yaml

Available pipelines

YAML file Sensor type Algorithm
loop-closure-lidar3d-gicp.yaml 3-D LiDAR (GICP) SimplemapLoopClosure
loop-closure-lidar3d-icp.yaml 3-D LiDAR (point-to-point ICP) SimplemapLoopClosure
loop-closure-lidar2d.yaml 2-D LiDAR SimplemapLoopClosure
loop-closure-f2f-lidar3d-gicp.yaml 3-D LiDAR (GICP) FrameToFrameLoopClosure

Key YAML knobs

SimplemapLoopClosure

  • submap_max_absolute_length / submap_min_absolute_length — controls submap granularity.
  • assume_planar_world: true enables annealed soft planar constraints (z, roll, pitch).
    • planar_world_initial_sigma_z, planar_world_initial_sigma_ang, planar_world_annealing_rounds — tune the annealing schedule.
    • planar_world_hard_flatten: true restores the old hard-flattening behaviour.
  • use_gnss: true / gnss_add_horizontality: true — GNSS-assisted global alignment.

FrameToFrameLoopClosure

  • lc_candidate_strategyDISTANCE_STRATIFIED (default), PROXIMITY_ONLY, or MULTI_OBJECTIVE.
  • assume_planar_world: true — planar-world annealing.
  • use_gnss: true — per-keyframe GNSS factors (FactorGnssEnu).

See the online tutorial for a step-by-step example.

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_sm_loop_closure

1.0.0 (2026-04-14)

  • package.xml: add missing test-dep
  • add unit tests
  • cli: use output directory as default for debug output files, not input
  • Install pipelines so they are accessible under 'share'
  • Make the package discoverage by ament
  • Merge pull request #6 from MOLAorg/save-ram F2F algorithm: save ram in offline runs
  • More memory efficient loop
  • Bump minimum cmake version to 3.7
  • Reuse mp2p_icp::update_velocity_buffer_from_obs() from mp2p_icp Removes duplicated code in this repo now that mp2p_icp>=2.5.0 is available in all distributions
  • Fix build against mp2p_icp <2.6.0
  • icp debug log files: save only good edges
  • F2F algorithm: save ram in offline runs
  • sm2mm pipeline yaml: expose more params via env vars
  • Expose more parameters for F2F algorithm
  • Debug feature: enable saving 3Dscene files per optimization round
  • Use Graduated Non-Convexity (GNC) optimizer for superior outlier rejection
  • FIX: Reverted logic in formula for adaptive threshold
  • Add formal CLA
  • Merge pull request #5 from MOLAorg/feat/smart-ram-lazy-unload Lazy unload keyframe clouds to keep RAM usage bounded
  • Contributors: Jose Luis Blanco-Claraco

0.2.0 (2026-03-03)

  • Fix build against different gtsam versions
  • Add optional generation of .3Dscene files with loop-closure visualizations
  • Tolerate missing external files without throwing
  • Better logging and expose more env var params
  • Add GNSS uncertainty multiplier
  • Use debug files prefix
  • Add more frame-to-frame LC selection algorithms
  • Merge pull request #4 from MOLAorg/feat/f2f-fixes Add more parameters to f2f method
  • Add new params for f2f method
  • pipeline file: expose more params and fix reversed sigma logic
  • Fix: prior should be weak for GNSS to transform to ENU frame
  • fix copyright headers
  • Merge pull request #3 from MOLAorg/feat/new-f2f-algo Add alternative frame-to-frame LC algorithm
  • Provide virtual LoopClosureInterface to select the algorithm from a CLI argument
  • Add alternative frame-to-frame LC algorithm
  • Merge pull request #2 from MOLAorg/feat/add-ci-and-badges Add CI workflows and clang-format linting infrastructure
  • package.xml: add FILE tag
  • Merge pull request #1 from MOLAorg/feature/refactor-pkg-mola-gtsam-factors Progress moving code to new package mola_gtsam_factors
  • Update dependencies after refactorization into mola_georeferencing
  • Progress moving code to new package mola_gtsam_factors
  • Protect against invalid GPS cov entries
  • Add param gnss_minimum_uncertainty_xyz; dump trajectories as TUM files.
  • simplify: remove obsolete parameters not used anymore here
  • Remove unused parameter (GPS observations are automatically detected anyway)
  • Fix: ensure minimum uncertainty in edges
  • Fix deskewing generating sm2mm for local maps
  • Implement missing loading of new LocalVelocityBuffer while doing submaps "sm2mm"
  • Don't use absolute paths for debug icplog files
  • FIX: Detect the error case of no GNSS observations in sm-georeference-cli
  • Add gicp pipeline
  • bump minimum cmake version to 3.5
  • add .clang-tidy rules and better vscode integration
  • Expose more env vars in the pipeline
  • robust kernels; optional horizontality
  • progress with submaps
  • implement submaps
  • use new mrpt enu covariance field
  • done georeferencing cli
  • progress
  • progress cli app interface
  • initial structure
  • Initial commit
  • Contributors: Jose Luis Blanco Claraco, Jose Luis Blanco-Claraco

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_sm_loop_closure at Robotics Stack Exchange

Package symbol

mola_sm_loop_closure package from mola_sm_loop_closure repo

mola_sm_loop_closure

ROS Distro
jazzy

Package Summary

Version 1.0.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

Simplemap loop-closure postprocessing library and CLI tool

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

  • Jose-Luis Blanco-Claraco

CI ROS CI Check clang-format Docs

Distro Build dev Build releases Stable version
ROS 2 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 Rolling (u24.04) Build Status amd64 Build Status
arm64 Build Status
Version

mola_sm_loop_closure

Offline loop-closure engine for MOLA CSimpleMap files. Given an input simplemap produced by any MOLA odometry front-end, the package re-optimises all keyframe poses by detecting and closing loops, then writes the corrected simplemap back to disk.

Two algorithms

Algorithm Class Best for
SimplemapLoopClosure mola::SimplemapLoopClosure Long maps with noticeable drift; groups keyframes into submaps and runs heavy point-cloud ICP between submap pairs
FrameToFrameLoopClosure mola::FrameToFrameLoopClosure GNSS-augmented datasets or quick re-optimisation; runs frame-to-frame ICP with a GNC graph optimizer

CLI usage

# SimplemapLoopClosure (default algorithm):
mola-sm-lc-cli -i in.simplemap -o out.simplemap \
    -p pipelines/loop-closure-lidar3d-gicp.yaml

# FrameToFrameLoopClosure:
mola-sm-lc-cli -i in.simplemap -o out.simplemap \
    -a mola::FrameToFrameLoopClosure \
    -p pipelines/loop-closure-f2f-lidar3d-gicp.yaml

Available pipelines

YAML file Sensor type Algorithm
loop-closure-lidar3d-gicp.yaml 3-D LiDAR (GICP) SimplemapLoopClosure
loop-closure-lidar3d-icp.yaml 3-D LiDAR (point-to-point ICP) SimplemapLoopClosure
loop-closure-lidar2d.yaml 2-D LiDAR SimplemapLoopClosure
loop-closure-f2f-lidar3d-gicp.yaml 3-D LiDAR (GICP) FrameToFrameLoopClosure

Key YAML knobs

SimplemapLoopClosure

  • submap_max_absolute_length / submap_min_absolute_length — controls submap granularity.
  • assume_planar_world: true enables annealed soft planar constraints (z, roll, pitch).
    • planar_world_initial_sigma_z, planar_world_initial_sigma_ang, planar_world_annealing_rounds — tune the annealing schedule.
    • planar_world_hard_flatten: true restores the old hard-flattening behaviour.
  • use_gnss: true / gnss_add_horizontality: true — GNSS-assisted global alignment.

FrameToFrameLoopClosure

  • lc_candidate_strategyDISTANCE_STRATIFIED (default), PROXIMITY_ONLY, or MULTI_OBJECTIVE.
  • assume_planar_world: true — planar-world annealing.
  • use_gnss: true — per-keyframe GNSS factors (FactorGnssEnu).

See the online tutorial for a step-by-step example.

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_sm_loop_closure

1.0.0 (2026-04-14)

  • package.xml: add missing test-dep
  • add unit tests
  • cli: use output directory as default for debug output files, not input
  • Install pipelines so they are accessible under 'share'
  • Make the package discoverage by ament
  • Merge pull request #6 from MOLAorg/save-ram F2F algorithm: save ram in offline runs
  • More memory efficient loop
  • Bump minimum cmake version to 3.7
  • Reuse mp2p_icp::update_velocity_buffer_from_obs() from mp2p_icp Removes duplicated code in this repo now that mp2p_icp>=2.5.0 is available in all distributions
  • Fix build against mp2p_icp <2.6.0
  • icp debug log files: save only good edges
  • F2F algorithm: save ram in offline runs
  • sm2mm pipeline yaml: expose more params via env vars
  • Expose more parameters for F2F algorithm
  • Debug feature: enable saving 3Dscene files per optimization round
  • Use Graduated Non-Convexity (GNC) optimizer for superior outlier rejection
  • FIX: Reverted logic in formula for adaptive threshold
  • Add formal CLA
  • Merge pull request #5 from MOLAorg/feat/smart-ram-lazy-unload Lazy unload keyframe clouds to keep RAM usage bounded
  • Contributors: Jose Luis Blanco-Claraco

0.2.0 (2026-03-03)

  • Fix build against different gtsam versions
  • Add optional generation of .3Dscene files with loop-closure visualizations
  • Tolerate missing external files without throwing
  • Better logging and expose more env var params
  • Add GNSS uncertainty multiplier
  • Use debug files prefix
  • Add more frame-to-frame LC selection algorithms
  • Merge pull request #4 from MOLAorg/feat/f2f-fixes Add more parameters to f2f method
  • Add new params for f2f method
  • pipeline file: expose more params and fix reversed sigma logic
  • Fix: prior should be weak for GNSS to transform to ENU frame
  • fix copyright headers
  • Merge pull request #3 from MOLAorg/feat/new-f2f-algo Add alternative frame-to-frame LC algorithm
  • Provide virtual LoopClosureInterface to select the algorithm from a CLI argument
  • Add alternative frame-to-frame LC algorithm
  • Merge pull request #2 from MOLAorg/feat/add-ci-and-badges Add CI workflows and clang-format linting infrastructure
  • package.xml: add FILE tag
  • Merge pull request #1 from MOLAorg/feature/refactor-pkg-mola-gtsam-factors Progress moving code to new package mola_gtsam_factors
  • Update dependencies after refactorization into mola_georeferencing
  • Progress moving code to new package mola_gtsam_factors
  • Protect against invalid GPS cov entries
  • Add param gnss_minimum_uncertainty_xyz; dump trajectories as TUM files.
  • simplify: remove obsolete parameters not used anymore here
  • Remove unused parameter (GPS observations are automatically detected anyway)
  • Fix: ensure minimum uncertainty in edges
  • Fix deskewing generating sm2mm for local maps
  • Implement missing loading of new LocalVelocityBuffer while doing submaps "sm2mm"
  • Don't use absolute paths for debug icplog files
  • FIX: Detect the error case of no GNSS observations in sm-georeference-cli
  • Add gicp pipeline
  • bump minimum cmake version to 3.5
  • add .clang-tidy rules and better vscode integration
  • Expose more env vars in the pipeline
  • robust kernels; optional horizontality
  • progress with submaps
  • implement submaps
  • use new mrpt enu covariance field
  • done georeferencing cli
  • progress
  • progress cli app interface
  • initial structure
  • Initial commit
  • Contributors: Jose Luis Blanco Claraco, Jose Luis Blanco-Claraco

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_sm_loop_closure at Robotics Stack Exchange

Package symbol

mola_sm_loop_closure package from mola_sm_loop_closure repo

mola_sm_loop_closure

ROS Distro
kilted

Package Summary

Version 1.0.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

Simplemap loop-closure postprocessing library and CLI tool

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

  • Jose-Luis Blanco-Claraco

CI ROS CI Check clang-format Docs

Distro Build dev Build releases Stable version
ROS 2 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 Rolling (u24.04) Build Status amd64 Build Status
arm64 Build Status
Version

mola_sm_loop_closure

Offline loop-closure engine for MOLA CSimpleMap files. Given an input simplemap produced by any MOLA odometry front-end, the package re-optimises all keyframe poses by detecting and closing loops, then writes the corrected simplemap back to disk.

Two algorithms

Algorithm Class Best for
SimplemapLoopClosure mola::SimplemapLoopClosure Long maps with noticeable drift; groups keyframes into submaps and runs heavy point-cloud ICP between submap pairs
FrameToFrameLoopClosure mola::FrameToFrameLoopClosure GNSS-augmented datasets or quick re-optimisation; runs frame-to-frame ICP with a GNC graph optimizer

CLI usage

# SimplemapLoopClosure (default algorithm):
mola-sm-lc-cli -i in.simplemap -o out.simplemap \
    -p pipelines/loop-closure-lidar3d-gicp.yaml

# FrameToFrameLoopClosure:
mola-sm-lc-cli -i in.simplemap -o out.simplemap \
    -a mola::FrameToFrameLoopClosure \
    -p pipelines/loop-closure-f2f-lidar3d-gicp.yaml

Available pipelines

YAML file Sensor type Algorithm
loop-closure-lidar3d-gicp.yaml 3-D LiDAR (GICP) SimplemapLoopClosure
loop-closure-lidar3d-icp.yaml 3-D LiDAR (point-to-point ICP) SimplemapLoopClosure
loop-closure-lidar2d.yaml 2-D LiDAR SimplemapLoopClosure
loop-closure-f2f-lidar3d-gicp.yaml 3-D LiDAR (GICP) FrameToFrameLoopClosure

Key YAML knobs

SimplemapLoopClosure

  • submap_max_absolute_length / submap_min_absolute_length — controls submap granularity.
  • assume_planar_world: true enables annealed soft planar constraints (z, roll, pitch).
    • planar_world_initial_sigma_z, planar_world_initial_sigma_ang, planar_world_annealing_rounds — tune the annealing schedule.
    • planar_world_hard_flatten: true restores the old hard-flattening behaviour.
  • use_gnss: true / gnss_add_horizontality: true — GNSS-assisted global alignment.

FrameToFrameLoopClosure

  • lc_candidate_strategyDISTANCE_STRATIFIED (default), PROXIMITY_ONLY, or MULTI_OBJECTIVE.
  • assume_planar_world: true — planar-world annealing.
  • use_gnss: true — per-keyframe GNSS factors (FactorGnssEnu).

See the online tutorial for a step-by-step example.

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_sm_loop_closure

1.0.0 (2026-04-14)

  • package.xml: add missing test-dep
  • add unit tests
  • cli: use output directory as default for debug output files, not input
  • Install pipelines so they are accessible under 'share'
  • Make the package discoverage by ament
  • Merge pull request #6 from MOLAorg/save-ram F2F algorithm: save ram in offline runs
  • More memory efficient loop
  • Bump minimum cmake version to 3.7
  • Reuse mp2p_icp::update_velocity_buffer_from_obs() from mp2p_icp Removes duplicated code in this repo now that mp2p_icp>=2.5.0 is available in all distributions
  • Fix build against mp2p_icp <2.6.0
  • icp debug log files: save only good edges
  • F2F algorithm: save ram in offline runs
  • sm2mm pipeline yaml: expose more params via env vars
  • Expose more parameters for F2F algorithm
  • Debug feature: enable saving 3Dscene files per optimization round
  • Use Graduated Non-Convexity (GNC) optimizer for superior outlier rejection
  • FIX: Reverted logic in formula for adaptive threshold
  • Add formal CLA
  • Merge pull request #5 from MOLAorg/feat/smart-ram-lazy-unload Lazy unload keyframe clouds to keep RAM usage bounded
  • Contributors: Jose Luis Blanco-Claraco

0.2.0 (2026-03-03)

  • Fix build against different gtsam versions
  • Add optional generation of .3Dscene files with loop-closure visualizations
  • Tolerate missing external files without throwing
  • Better logging and expose more env var params
  • Add GNSS uncertainty multiplier
  • Use debug files prefix
  • Add more frame-to-frame LC selection algorithms
  • Merge pull request #4 from MOLAorg/feat/f2f-fixes Add more parameters to f2f method
  • Add new params for f2f method
  • pipeline file: expose more params and fix reversed sigma logic
  • Fix: prior should be weak for GNSS to transform to ENU frame
  • fix copyright headers
  • Merge pull request #3 from MOLAorg/feat/new-f2f-algo Add alternative frame-to-frame LC algorithm
  • Provide virtual LoopClosureInterface to select the algorithm from a CLI argument
  • Add alternative frame-to-frame LC algorithm
  • Merge pull request #2 from MOLAorg/feat/add-ci-and-badges Add CI workflows and clang-format linting infrastructure
  • package.xml: add FILE tag
  • Merge pull request #1 from MOLAorg/feature/refactor-pkg-mola-gtsam-factors Progress moving code to new package mola_gtsam_factors
  • Update dependencies after refactorization into mola_georeferencing
  • Progress moving code to new package mola_gtsam_factors
  • Protect against invalid GPS cov entries
  • Add param gnss_minimum_uncertainty_xyz; dump trajectories as TUM files.
  • simplify: remove obsolete parameters not used anymore here
  • Remove unused parameter (GPS observations are automatically detected anyway)
  • Fix: ensure minimum uncertainty in edges
  • Fix deskewing generating sm2mm for local maps
  • Implement missing loading of new LocalVelocityBuffer while doing submaps "sm2mm"
  • Don't use absolute paths for debug icplog files
  • FIX: Detect the error case of no GNSS observations in sm-georeference-cli
  • Add gicp pipeline
  • bump minimum cmake version to 3.5
  • add .clang-tidy rules and better vscode integration
  • Expose more env vars in the pipeline
  • robust kernels; optional horizontality
  • progress with submaps
  • implement submaps
  • use new mrpt enu covariance field
  • done georeferencing cli
  • progress
  • progress cli app interface
  • initial structure
  • Initial commit
  • Contributors: Jose Luis Blanco Claraco, Jose Luis Blanco-Claraco

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_sm_loop_closure at Robotics Stack Exchange

Package symbol

mola_sm_loop_closure package from mola_sm_loop_closure repo

mola_sm_loop_closure

ROS Distro
rolling

Package Summary

Version 1.0.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

Simplemap loop-closure postprocessing library and CLI tool

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

  • Jose-Luis Blanco-Claraco

CI ROS CI Check clang-format Docs

Distro Build dev Build releases Stable version
ROS 2 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 Rolling (u24.04) Build Status amd64 Build Status
arm64 Build Status
Version

mola_sm_loop_closure

Offline loop-closure engine for MOLA CSimpleMap files. Given an input simplemap produced by any MOLA odometry front-end, the package re-optimises all keyframe poses by detecting and closing loops, then writes the corrected simplemap back to disk.

Two algorithms

Algorithm Class Best for
SimplemapLoopClosure mola::SimplemapLoopClosure Long maps with noticeable drift; groups keyframes into submaps and runs heavy point-cloud ICP between submap pairs
FrameToFrameLoopClosure mola::FrameToFrameLoopClosure GNSS-augmented datasets or quick re-optimisation; runs frame-to-frame ICP with a GNC graph optimizer

CLI usage

# SimplemapLoopClosure (default algorithm):
mola-sm-lc-cli -i in.simplemap -o out.simplemap \
    -p pipelines/loop-closure-lidar3d-gicp.yaml

# FrameToFrameLoopClosure:
mola-sm-lc-cli -i in.simplemap -o out.simplemap \
    -a mola::FrameToFrameLoopClosure \
    -p pipelines/loop-closure-f2f-lidar3d-gicp.yaml

Available pipelines

YAML file Sensor type Algorithm
loop-closure-lidar3d-gicp.yaml 3-D LiDAR (GICP) SimplemapLoopClosure
loop-closure-lidar3d-icp.yaml 3-D LiDAR (point-to-point ICP) SimplemapLoopClosure
loop-closure-lidar2d.yaml 2-D LiDAR SimplemapLoopClosure
loop-closure-f2f-lidar3d-gicp.yaml 3-D LiDAR (GICP) FrameToFrameLoopClosure

Key YAML knobs

SimplemapLoopClosure

  • submap_max_absolute_length / submap_min_absolute_length — controls submap granularity.
  • assume_planar_world: true enables annealed soft planar constraints (z, roll, pitch).
    • planar_world_initial_sigma_z, planar_world_initial_sigma_ang, planar_world_annealing_rounds — tune the annealing schedule.
    • planar_world_hard_flatten: true restores the old hard-flattening behaviour.
  • use_gnss: true / gnss_add_horizontality: true — GNSS-assisted global alignment.

FrameToFrameLoopClosure

  • lc_candidate_strategyDISTANCE_STRATIFIED (default), PROXIMITY_ONLY, or MULTI_OBJECTIVE.
  • assume_planar_world: true — planar-world annealing.
  • use_gnss: true — per-keyframe GNSS factors (FactorGnssEnu).

See the online tutorial for a step-by-step example.

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_sm_loop_closure

1.0.0 (2026-04-14)

  • package.xml: add missing test-dep
  • add unit tests
  • cli: use output directory as default for debug output files, not input
  • Install pipelines so they are accessible under 'share'
  • Make the package discoverage by ament
  • Merge pull request #6 from MOLAorg/save-ram F2F algorithm: save ram in offline runs
  • More memory efficient loop
  • Bump minimum cmake version to 3.7
  • Reuse mp2p_icp::update_velocity_buffer_from_obs() from mp2p_icp Removes duplicated code in this repo now that mp2p_icp>=2.5.0 is available in all distributions
  • Fix build against mp2p_icp <2.6.0
  • icp debug log files: save only good edges
  • F2F algorithm: save ram in offline runs
  • sm2mm pipeline yaml: expose more params via env vars
  • Expose more parameters for F2F algorithm
  • Debug feature: enable saving 3Dscene files per optimization round
  • Use Graduated Non-Convexity (GNC) optimizer for superior outlier rejection
  • FIX: Reverted logic in formula for adaptive threshold
  • Add formal CLA
  • Merge pull request #5 from MOLAorg/feat/smart-ram-lazy-unload Lazy unload keyframe clouds to keep RAM usage bounded
  • Contributors: Jose Luis Blanco-Claraco

0.2.0 (2026-03-03)

  • Fix build against different gtsam versions
  • Add optional generation of .3Dscene files with loop-closure visualizations
  • Tolerate missing external files without throwing
  • Better logging and expose more env var params
  • Add GNSS uncertainty multiplier
  • Use debug files prefix
  • Add more frame-to-frame LC selection algorithms
  • Merge pull request #4 from MOLAorg/feat/f2f-fixes Add more parameters to f2f method
  • Add new params for f2f method
  • pipeline file: expose more params and fix reversed sigma logic
  • Fix: prior should be weak for GNSS to transform to ENU frame
  • fix copyright headers
  • Merge pull request #3 from MOLAorg/feat/new-f2f-algo Add alternative frame-to-frame LC algorithm
  • Provide virtual LoopClosureInterface to select the algorithm from a CLI argument
  • Add alternative frame-to-frame LC algorithm
  • Merge pull request #2 from MOLAorg/feat/add-ci-and-badges Add CI workflows and clang-format linting infrastructure
  • package.xml: add FILE tag
  • Merge pull request #1 from MOLAorg/feature/refactor-pkg-mola-gtsam-factors Progress moving code to new package mola_gtsam_factors
  • Update dependencies after refactorization into mola_georeferencing
  • Progress moving code to new package mola_gtsam_factors
  • Protect against invalid GPS cov entries
  • Add param gnss_minimum_uncertainty_xyz; dump trajectories as TUM files.
  • simplify: remove obsolete parameters not used anymore here
  • Remove unused parameter (GPS observations are automatically detected anyway)
  • Fix: ensure minimum uncertainty in edges
  • Fix deskewing generating sm2mm for local maps
  • Implement missing loading of new LocalVelocityBuffer while doing submaps "sm2mm"
  • Don't use absolute paths for debug icplog files
  • FIX: Detect the error case of no GNSS observations in sm-georeference-cli
  • Add gicp pipeline
  • bump minimum cmake version to 3.5
  • add .clang-tidy rules and better vscode integration
  • Expose more env vars in the pipeline
  • robust kernels; optional horizontality
  • progress with submaps
  • implement submaps
  • use new mrpt enu covariance field
  • done georeferencing cli
  • progress
  • progress cli app interface
  • initial structure
  • Initial commit
  • Contributors: Jose Luis Blanco Claraco, Jose Luis Blanco-Claraco

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_sm_loop_closure at Robotics Stack Exchange

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

mola_sm_loop_closure package from mola_sm_loop_closure repo

mola_sm_loop_closure

ROS Distro
humble

Package Summary

Version 1.0.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

Simplemap loop-closure postprocessing library and CLI tool

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

  • Jose-Luis Blanco-Claraco

CI ROS CI Check clang-format Docs

Distro Build dev Build releases Stable version
ROS 2 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 Rolling (u24.04) Build Status amd64 Build Status
arm64 Build Status
Version

mola_sm_loop_closure

Offline loop-closure engine for MOLA CSimpleMap files. Given an input simplemap produced by any MOLA odometry front-end, the package re-optimises all keyframe poses by detecting and closing loops, then writes the corrected simplemap back to disk.

Two algorithms

Algorithm Class Best for
SimplemapLoopClosure mola::SimplemapLoopClosure Long maps with noticeable drift; groups keyframes into submaps and runs heavy point-cloud ICP between submap pairs
FrameToFrameLoopClosure mola::FrameToFrameLoopClosure GNSS-augmented datasets or quick re-optimisation; runs frame-to-frame ICP with a GNC graph optimizer

CLI usage

# SimplemapLoopClosure (default algorithm):
mola-sm-lc-cli -i in.simplemap -o out.simplemap \
    -p pipelines/loop-closure-lidar3d-gicp.yaml

# FrameToFrameLoopClosure:
mola-sm-lc-cli -i in.simplemap -o out.simplemap \
    -a mola::FrameToFrameLoopClosure \
    -p pipelines/loop-closure-f2f-lidar3d-gicp.yaml

Available pipelines

YAML file Sensor type Algorithm
loop-closure-lidar3d-gicp.yaml 3-D LiDAR (GICP) SimplemapLoopClosure
loop-closure-lidar3d-icp.yaml 3-D LiDAR (point-to-point ICP) SimplemapLoopClosure
loop-closure-lidar2d.yaml 2-D LiDAR SimplemapLoopClosure
loop-closure-f2f-lidar3d-gicp.yaml 3-D LiDAR (GICP) FrameToFrameLoopClosure

Key YAML knobs

SimplemapLoopClosure

  • submap_max_absolute_length / submap_min_absolute_length — controls submap granularity.
  • assume_planar_world: true enables annealed soft planar constraints (z, roll, pitch).
    • planar_world_initial_sigma_z, planar_world_initial_sigma_ang, planar_world_annealing_rounds — tune the annealing schedule.
    • planar_world_hard_flatten: true restores the old hard-flattening behaviour.
  • use_gnss: true / gnss_add_horizontality: true — GNSS-assisted global alignment.

FrameToFrameLoopClosure

  • lc_candidate_strategyDISTANCE_STRATIFIED (default), PROXIMITY_ONLY, or MULTI_OBJECTIVE.
  • assume_planar_world: true — planar-world annealing.
  • use_gnss: true — per-keyframe GNSS factors (FactorGnssEnu).

See the online tutorial for a step-by-step example.

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_sm_loop_closure

1.0.0 (2026-04-14)

  • package.xml: add missing test-dep
  • add unit tests
  • cli: use output directory as default for debug output files, not input
  • Install pipelines so they are accessible under 'share'
  • Make the package discoverage by ament
  • Merge pull request #6 from MOLAorg/save-ram F2F algorithm: save ram in offline runs
  • More memory efficient loop
  • Bump minimum cmake version to 3.7
  • Reuse mp2p_icp::update_velocity_buffer_from_obs() from mp2p_icp Removes duplicated code in this repo now that mp2p_icp>=2.5.0 is available in all distributions
  • Fix build against mp2p_icp <2.6.0
  • icp debug log files: save only good edges
  • F2F algorithm: save ram in offline runs
  • sm2mm pipeline yaml: expose more params via env vars
  • Expose more parameters for F2F algorithm
  • Debug feature: enable saving 3Dscene files per optimization round
  • Use Graduated Non-Convexity (GNC) optimizer for superior outlier rejection
  • FIX: Reverted logic in formula for adaptive threshold
  • Add formal CLA
  • Merge pull request #5 from MOLAorg/feat/smart-ram-lazy-unload Lazy unload keyframe clouds to keep RAM usage bounded
  • Contributors: Jose Luis Blanco-Claraco

0.2.0 (2026-03-03)

  • Fix build against different gtsam versions
  • Add optional generation of .3Dscene files with loop-closure visualizations
  • Tolerate missing external files without throwing
  • Better logging and expose more env var params
  • Add GNSS uncertainty multiplier
  • Use debug files prefix
  • Add more frame-to-frame LC selection algorithms
  • Merge pull request #4 from MOLAorg/feat/f2f-fixes Add more parameters to f2f method
  • Add new params for f2f method
  • pipeline file: expose more params and fix reversed sigma logic
  • Fix: prior should be weak for GNSS to transform to ENU frame
  • fix copyright headers
  • Merge pull request #3 from MOLAorg/feat/new-f2f-algo Add alternative frame-to-frame LC algorithm
  • Provide virtual LoopClosureInterface to select the algorithm from a CLI argument
  • Add alternative frame-to-frame LC algorithm
  • Merge pull request #2 from MOLAorg/feat/add-ci-and-badges Add CI workflows and clang-format linting infrastructure
  • package.xml: add FILE tag
  • Merge pull request #1 from MOLAorg/feature/refactor-pkg-mola-gtsam-factors Progress moving code to new package mola_gtsam_factors
  • Update dependencies after refactorization into mola_georeferencing
  • Progress moving code to new package mola_gtsam_factors
  • Protect against invalid GPS cov entries
  • Add param gnss_minimum_uncertainty_xyz; dump trajectories as TUM files.
  • simplify: remove obsolete parameters not used anymore here
  • Remove unused parameter (GPS observations are automatically detected anyway)
  • Fix: ensure minimum uncertainty in edges
  • Fix deskewing generating sm2mm for local maps
  • Implement missing loading of new LocalVelocityBuffer while doing submaps "sm2mm"
  • Don't use absolute paths for debug icplog files
  • FIX: Detect the error case of no GNSS observations in sm-georeference-cli
  • Add gicp pipeline
  • bump minimum cmake version to 3.5
  • add .clang-tidy rules and better vscode integration
  • Expose more env vars in the pipeline
  • robust kernels; optional horizontality
  • progress with submaps
  • implement submaps
  • use new mrpt enu covariance field
  • done georeferencing cli
  • progress
  • progress cli app interface
  • initial structure
  • Initial commit
  • Contributors: Jose Luis Blanco Claraco, Jose Luis Blanco-Claraco

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_sm_loop_closure at Robotics Stack Exchange

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

mola_sm_loop_closure package from mola_sm_loop_closure repo

mola_sm_loop_closure

ROS Distro
humble

Package Summary

Version 1.0.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

Simplemap loop-closure postprocessing library and CLI tool

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

  • Jose-Luis Blanco-Claraco

CI ROS CI Check clang-format Docs

Distro Build dev Build releases Stable version
ROS 2 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 Rolling (u24.04) Build Status amd64 Build Status
arm64 Build Status
Version

mola_sm_loop_closure

Offline loop-closure engine for MOLA CSimpleMap files. Given an input simplemap produced by any MOLA odometry front-end, the package re-optimises all keyframe poses by detecting and closing loops, then writes the corrected simplemap back to disk.

Two algorithms

Algorithm Class Best for
SimplemapLoopClosure mola::SimplemapLoopClosure Long maps with noticeable drift; groups keyframes into submaps and runs heavy point-cloud ICP between submap pairs
FrameToFrameLoopClosure mola::FrameToFrameLoopClosure GNSS-augmented datasets or quick re-optimisation; runs frame-to-frame ICP with a GNC graph optimizer

CLI usage

# SimplemapLoopClosure (default algorithm):
mola-sm-lc-cli -i in.simplemap -o out.simplemap \
    -p pipelines/loop-closure-lidar3d-gicp.yaml

# FrameToFrameLoopClosure:
mola-sm-lc-cli -i in.simplemap -o out.simplemap \
    -a mola::FrameToFrameLoopClosure \
    -p pipelines/loop-closure-f2f-lidar3d-gicp.yaml

Available pipelines

YAML file Sensor type Algorithm
loop-closure-lidar3d-gicp.yaml 3-D LiDAR (GICP) SimplemapLoopClosure
loop-closure-lidar3d-icp.yaml 3-D LiDAR (point-to-point ICP) SimplemapLoopClosure
loop-closure-lidar2d.yaml 2-D LiDAR SimplemapLoopClosure
loop-closure-f2f-lidar3d-gicp.yaml 3-D LiDAR (GICP) FrameToFrameLoopClosure

Key YAML knobs

SimplemapLoopClosure

  • submap_max_absolute_length / submap_min_absolute_length — controls submap granularity.
  • assume_planar_world: true enables annealed soft planar constraints (z, roll, pitch).
    • planar_world_initial_sigma_z, planar_world_initial_sigma_ang, planar_world_annealing_rounds — tune the annealing schedule.
    • planar_world_hard_flatten: true restores the old hard-flattening behaviour.
  • use_gnss: true / gnss_add_horizontality: true — GNSS-assisted global alignment.

FrameToFrameLoopClosure

  • lc_candidate_strategyDISTANCE_STRATIFIED (default), PROXIMITY_ONLY, or MULTI_OBJECTIVE.
  • assume_planar_world: true — planar-world annealing.
  • use_gnss: true — per-keyframe GNSS factors (FactorGnssEnu).

See the online tutorial for a step-by-step example.

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_sm_loop_closure

1.0.0 (2026-04-14)

  • package.xml: add missing test-dep
  • add unit tests
  • cli: use output directory as default for debug output files, not input
  • Install pipelines so they are accessible under 'share'
  • Make the package discoverage by ament
  • Merge pull request #6 from MOLAorg/save-ram F2F algorithm: save ram in offline runs
  • More memory efficient loop
  • Bump minimum cmake version to 3.7
  • Reuse mp2p_icp::update_velocity_buffer_from_obs() from mp2p_icp Removes duplicated code in this repo now that mp2p_icp>=2.5.0 is available in all distributions
  • Fix build against mp2p_icp <2.6.0
  • icp debug log files: save only good edges
  • F2F algorithm: save ram in offline runs
  • sm2mm pipeline yaml: expose more params via env vars
  • Expose more parameters for F2F algorithm
  • Debug feature: enable saving 3Dscene files per optimization round
  • Use Graduated Non-Convexity (GNC) optimizer for superior outlier rejection
  • FIX: Reverted logic in formula for adaptive threshold
  • Add formal CLA
  • Merge pull request #5 from MOLAorg/feat/smart-ram-lazy-unload Lazy unload keyframe clouds to keep RAM usage bounded
  • Contributors: Jose Luis Blanco-Claraco

0.2.0 (2026-03-03)

  • Fix build against different gtsam versions
  • Add optional generation of .3Dscene files with loop-closure visualizations
  • Tolerate missing external files without throwing
  • Better logging and expose more env var params
  • Add GNSS uncertainty multiplier
  • Use debug files prefix
  • Add more frame-to-frame LC selection algorithms
  • Merge pull request #4 from MOLAorg/feat/f2f-fixes Add more parameters to f2f method
  • Add new params for f2f method
  • pipeline file: expose more params and fix reversed sigma logic
  • Fix: prior should be weak for GNSS to transform to ENU frame
  • fix copyright headers
  • Merge pull request #3 from MOLAorg/feat/new-f2f-algo Add alternative frame-to-frame LC algorithm
  • Provide virtual LoopClosureInterface to select the algorithm from a CLI argument
  • Add alternative frame-to-frame LC algorithm
  • Merge pull request #2 from MOLAorg/feat/add-ci-and-badges Add CI workflows and clang-format linting infrastructure
  • package.xml: add FILE tag
  • Merge pull request #1 from MOLAorg/feature/refactor-pkg-mola-gtsam-factors Progress moving code to new package mola_gtsam_factors
  • Update dependencies after refactorization into mola_georeferencing
  • Progress moving code to new package mola_gtsam_factors
  • Protect against invalid GPS cov entries
  • Add param gnss_minimum_uncertainty_xyz; dump trajectories as TUM files.
  • simplify: remove obsolete parameters not used anymore here
  • Remove unused parameter (GPS observations are automatically detected anyway)
  • Fix: ensure minimum uncertainty in edges
  • Fix deskewing generating sm2mm for local maps
  • Implement missing loading of new LocalVelocityBuffer while doing submaps "sm2mm"
  • Don't use absolute paths for debug icplog files
  • FIX: Detect the error case of no GNSS observations in sm-georeference-cli
  • Add gicp pipeline
  • bump minimum cmake version to 3.5
  • add .clang-tidy rules and better vscode integration
  • Expose more env vars in the pipeline
  • robust kernels; optional horizontality
  • progress with submaps
  • implement submaps
  • use new mrpt enu covariance field
  • done georeferencing cli
  • progress
  • progress cli app interface
  • initial structure
  • Initial commit
  • Contributors: Jose Luis Blanco Claraco, Jose Luis Blanco-Claraco

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_sm_loop_closure at Robotics Stack Exchange

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

mola_sm_loop_closure package from mola_sm_loop_closure repo

mola_sm_loop_closure

ROS Distro
humble

Package Summary

Version 1.0.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

Simplemap loop-closure postprocessing library and CLI tool

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

  • Jose-Luis Blanco-Claraco

CI ROS CI Check clang-format Docs

Distro Build dev Build releases Stable version
ROS 2 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 Rolling (u24.04) Build Status amd64 Build Status
arm64 Build Status
Version

mola_sm_loop_closure

Offline loop-closure engine for MOLA CSimpleMap files. Given an input simplemap produced by any MOLA odometry front-end, the package re-optimises all keyframe poses by detecting and closing loops, then writes the corrected simplemap back to disk.

Two algorithms

Algorithm Class Best for
SimplemapLoopClosure mola::SimplemapLoopClosure Long maps with noticeable drift; groups keyframes into submaps and runs heavy point-cloud ICP between submap pairs
FrameToFrameLoopClosure mola::FrameToFrameLoopClosure GNSS-augmented datasets or quick re-optimisation; runs frame-to-frame ICP with a GNC graph optimizer

CLI usage

# SimplemapLoopClosure (default algorithm):
mola-sm-lc-cli -i in.simplemap -o out.simplemap \
    -p pipelines/loop-closure-lidar3d-gicp.yaml

# FrameToFrameLoopClosure:
mola-sm-lc-cli -i in.simplemap -o out.simplemap \
    -a mola::FrameToFrameLoopClosure \
    -p pipelines/loop-closure-f2f-lidar3d-gicp.yaml

Available pipelines

YAML file Sensor type Algorithm
loop-closure-lidar3d-gicp.yaml 3-D LiDAR (GICP) SimplemapLoopClosure
loop-closure-lidar3d-icp.yaml 3-D LiDAR (point-to-point ICP) SimplemapLoopClosure
loop-closure-lidar2d.yaml 2-D LiDAR SimplemapLoopClosure
loop-closure-f2f-lidar3d-gicp.yaml 3-D LiDAR (GICP) FrameToFrameLoopClosure

Key YAML knobs

SimplemapLoopClosure

  • submap_max_absolute_length / submap_min_absolute_length — controls submap granularity.
  • assume_planar_world: true enables annealed soft planar constraints (z, roll, pitch).
    • planar_world_initial_sigma_z, planar_world_initial_sigma_ang, planar_world_annealing_rounds — tune the annealing schedule.
    • planar_world_hard_flatten: true restores the old hard-flattening behaviour.
  • use_gnss: true / gnss_add_horizontality: true — GNSS-assisted global alignment.

FrameToFrameLoopClosure

  • lc_candidate_strategyDISTANCE_STRATIFIED (default), PROXIMITY_ONLY, or MULTI_OBJECTIVE.
  • assume_planar_world: true — planar-world annealing.
  • use_gnss: true — per-keyframe GNSS factors (FactorGnssEnu).

See the online tutorial for a step-by-step example.

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_sm_loop_closure

1.0.0 (2026-04-14)

  • package.xml: add missing test-dep
  • add unit tests
  • cli: use output directory as default for debug output files, not input
  • Install pipelines so they are accessible under 'share'
  • Make the package discoverage by ament
  • Merge pull request #6 from MOLAorg/save-ram F2F algorithm: save ram in offline runs
  • More memory efficient loop
  • Bump minimum cmake version to 3.7
  • Reuse mp2p_icp::update_velocity_buffer_from_obs() from mp2p_icp Removes duplicated code in this repo now that mp2p_icp>=2.5.0 is available in all distributions
  • Fix build against mp2p_icp <2.6.0
  • icp debug log files: save only good edges
  • F2F algorithm: save ram in offline runs
  • sm2mm pipeline yaml: expose more params via env vars
  • Expose more parameters for F2F algorithm
  • Debug feature: enable saving 3Dscene files per optimization round
  • Use Graduated Non-Convexity (GNC) optimizer for superior outlier rejection
  • FIX: Reverted logic in formula for adaptive threshold
  • Add formal CLA
  • Merge pull request #5 from MOLAorg/feat/smart-ram-lazy-unload Lazy unload keyframe clouds to keep RAM usage bounded
  • Contributors: Jose Luis Blanco-Claraco

0.2.0 (2026-03-03)

  • Fix build against different gtsam versions
  • Add optional generation of .3Dscene files with loop-closure visualizations
  • Tolerate missing external files without throwing
  • Better logging and expose more env var params
  • Add GNSS uncertainty multiplier
  • Use debug files prefix
  • Add more frame-to-frame LC selection algorithms
  • Merge pull request #4 from MOLAorg/feat/f2f-fixes Add more parameters to f2f method
  • Add new params for f2f method
  • pipeline file: expose more params and fix reversed sigma logic
  • Fix: prior should be weak for GNSS to transform to ENU frame
  • fix copyright headers
  • Merge pull request #3 from MOLAorg/feat/new-f2f-algo Add alternative frame-to-frame LC algorithm
  • Provide virtual LoopClosureInterface to select the algorithm from a CLI argument
  • Add alternative frame-to-frame LC algorithm
  • Merge pull request #2 from MOLAorg/feat/add-ci-and-badges Add CI workflows and clang-format linting infrastructure
  • package.xml: add FILE tag
  • Merge pull request #1 from MOLAorg/feature/refactor-pkg-mola-gtsam-factors Progress moving code to new package mola_gtsam_factors
  • Update dependencies after refactorization into mola_georeferencing
  • Progress moving code to new package mola_gtsam_factors
  • Protect against invalid GPS cov entries
  • Add param gnss_minimum_uncertainty_xyz; dump trajectories as TUM files.
  • simplify: remove obsolete parameters not used anymore here
  • Remove unused parameter (GPS observations are automatically detected anyway)
  • Fix: ensure minimum uncertainty in edges
  • Fix deskewing generating sm2mm for local maps
  • Implement missing loading of new LocalVelocityBuffer while doing submaps "sm2mm"
  • Don't use absolute paths for debug icplog files
  • FIX: Detect the error case of no GNSS observations in sm-georeference-cli
  • Add gicp pipeline
  • bump minimum cmake version to 3.5
  • add .clang-tidy rules and better vscode integration
  • Expose more env vars in the pipeline
  • robust kernels; optional horizontality
  • progress with submaps
  • implement submaps
  • use new mrpt enu covariance field
  • done georeferencing cli
  • progress
  • progress cli app interface
  • initial structure
  • Initial commit
  • Contributors: Jose Luis Blanco Claraco, Jose Luis Blanco-Claraco

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_sm_loop_closure at Robotics Stack Exchange

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

mola_sm_loop_closure package from mola_sm_loop_closure repo

mola_sm_loop_closure

ROS Distro
humble

Package Summary

Version 1.0.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

Simplemap loop-closure postprocessing library and CLI tool

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

  • Jose-Luis Blanco-Claraco

CI ROS CI Check clang-format Docs

Distro Build dev Build releases Stable version
ROS 2 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 Rolling (u24.04) Build Status amd64 Build Status
arm64 Build Status
Version

mola_sm_loop_closure

Offline loop-closure engine for MOLA CSimpleMap files. Given an input simplemap produced by any MOLA odometry front-end, the package re-optimises all keyframe poses by detecting and closing loops, then writes the corrected simplemap back to disk.

Two algorithms

Algorithm Class Best for
SimplemapLoopClosure mola::SimplemapLoopClosure Long maps with noticeable drift; groups keyframes into submaps and runs heavy point-cloud ICP between submap pairs
FrameToFrameLoopClosure mola::FrameToFrameLoopClosure GNSS-augmented datasets or quick re-optimisation; runs frame-to-frame ICP with a GNC graph optimizer

CLI usage

# SimplemapLoopClosure (default algorithm):
mola-sm-lc-cli -i in.simplemap -o out.simplemap \
    -p pipelines/loop-closure-lidar3d-gicp.yaml

# FrameToFrameLoopClosure:
mola-sm-lc-cli -i in.simplemap -o out.simplemap \
    -a mola::FrameToFrameLoopClosure \
    -p pipelines/loop-closure-f2f-lidar3d-gicp.yaml

Available pipelines

YAML file Sensor type Algorithm
loop-closure-lidar3d-gicp.yaml 3-D LiDAR (GICP) SimplemapLoopClosure
loop-closure-lidar3d-icp.yaml 3-D LiDAR (point-to-point ICP) SimplemapLoopClosure
loop-closure-lidar2d.yaml 2-D LiDAR SimplemapLoopClosure
loop-closure-f2f-lidar3d-gicp.yaml 3-D LiDAR (GICP) FrameToFrameLoopClosure

Key YAML knobs

SimplemapLoopClosure

  • submap_max_absolute_length / submap_min_absolute_length — controls submap granularity.
  • assume_planar_world: true enables annealed soft planar constraints (z, roll, pitch).
    • planar_world_initial_sigma_z, planar_world_initial_sigma_ang, planar_world_annealing_rounds — tune the annealing schedule.
    • planar_world_hard_flatten: true restores the old hard-flattening behaviour.
  • use_gnss: true / gnss_add_horizontality: true — GNSS-assisted global alignment.

FrameToFrameLoopClosure

  • lc_candidate_strategyDISTANCE_STRATIFIED (default), PROXIMITY_ONLY, or MULTI_OBJECTIVE.
  • assume_planar_world: true — planar-world annealing.
  • use_gnss: true — per-keyframe GNSS factors (FactorGnssEnu).

See the online tutorial for a step-by-step example.

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_sm_loop_closure

1.0.0 (2026-04-14)

  • package.xml: add missing test-dep
  • add unit tests
  • cli: use output directory as default for debug output files, not input
  • Install pipelines so they are accessible under 'share'
  • Make the package discoverage by ament
  • Merge pull request #6 from MOLAorg/save-ram F2F algorithm: save ram in offline runs
  • More memory efficient loop
  • Bump minimum cmake version to 3.7
  • Reuse mp2p_icp::update_velocity_buffer_from_obs() from mp2p_icp Removes duplicated code in this repo now that mp2p_icp>=2.5.0 is available in all distributions
  • Fix build against mp2p_icp <2.6.0
  • icp debug log files: save only good edges
  • F2F algorithm: save ram in offline runs
  • sm2mm pipeline yaml: expose more params via env vars
  • Expose more parameters for F2F algorithm
  • Debug feature: enable saving 3Dscene files per optimization round
  • Use Graduated Non-Convexity (GNC) optimizer for superior outlier rejection
  • FIX: Reverted logic in formula for adaptive threshold
  • Add formal CLA
  • Merge pull request #5 from MOLAorg/feat/smart-ram-lazy-unload Lazy unload keyframe clouds to keep RAM usage bounded
  • Contributors: Jose Luis Blanco-Claraco

0.2.0 (2026-03-03)

  • Fix build against different gtsam versions
  • Add optional generation of .3Dscene files with loop-closure visualizations
  • Tolerate missing external files without throwing
  • Better logging and expose more env var params
  • Add GNSS uncertainty multiplier
  • Use debug files prefix
  • Add more frame-to-frame LC selection algorithms
  • Merge pull request #4 from MOLAorg/feat/f2f-fixes Add more parameters to f2f method
  • Add new params for f2f method
  • pipeline file: expose more params and fix reversed sigma logic
  • Fix: prior should be weak for GNSS to transform to ENU frame
  • fix copyright headers
  • Merge pull request #3 from MOLAorg/feat/new-f2f-algo Add alternative frame-to-frame LC algorithm
  • Provide virtual LoopClosureInterface to select the algorithm from a CLI argument
  • Add alternative frame-to-frame LC algorithm
  • Merge pull request #2 from MOLAorg/feat/add-ci-and-badges Add CI workflows and clang-format linting infrastructure
  • package.xml: add FILE tag
  • Merge pull request #1 from MOLAorg/feature/refactor-pkg-mola-gtsam-factors Progress moving code to new package mola_gtsam_factors
  • Update dependencies after refactorization into mola_georeferencing
  • Progress moving code to new package mola_gtsam_factors
  • Protect against invalid GPS cov entries
  • Add param gnss_minimum_uncertainty_xyz; dump trajectories as TUM files.
  • simplify: remove obsolete parameters not used anymore here
  • Remove unused parameter (GPS observations are automatically detected anyway)
  • Fix: ensure minimum uncertainty in edges
  • Fix deskewing generating sm2mm for local maps
  • Implement missing loading of new LocalVelocityBuffer while doing submaps "sm2mm"
  • Don't use absolute paths for debug icplog files
  • FIX: Detect the error case of no GNSS observations in sm-georeference-cli
  • Add gicp pipeline
  • bump minimum cmake version to 3.5
  • add .clang-tidy rules and better vscode integration
  • Expose more env vars in the pipeline
  • robust kernels; optional horizontality
  • progress with submaps
  • implement submaps
  • use new mrpt enu covariance field
  • done georeferencing cli
  • progress
  • progress cli app interface
  • initial structure
  • Initial commit
  • Contributors: Jose Luis Blanco Claraco, Jose Luis Blanco-Claraco

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_sm_loop_closure at Robotics Stack Exchange

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

mola_sm_loop_closure package from mola_sm_loop_closure repo

mola_sm_loop_closure

ROS Distro
humble

Package Summary

Version 1.0.0
License GPLv3
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

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

Package Description

Simplemap loop-closure postprocessing library and CLI tool

Additional Links

Maintainers

  • Jose-Luis Blanco-Claraco

Authors

  • Jose-Luis Blanco-Claraco

CI ROS CI Check clang-format Docs

Distro Build dev Build releases Stable version
ROS 2 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 Rolling (u24.04) Build Status amd64 Build Status
arm64 Build Status
Version

mola_sm_loop_closure

Offline loop-closure engine for MOLA CSimpleMap files. Given an input simplemap produced by any MOLA odometry front-end, the package re-optimises all keyframe poses by detecting and closing loops, then writes the corrected simplemap back to disk.

Two algorithms

Algorithm Class Best for
SimplemapLoopClosure mola::SimplemapLoopClosure Long maps with noticeable drift; groups keyframes into submaps and runs heavy point-cloud ICP between submap pairs
FrameToFrameLoopClosure mola::FrameToFrameLoopClosure GNSS-augmented datasets or quick re-optimisation; runs frame-to-frame ICP with a GNC graph optimizer

CLI usage

# SimplemapLoopClosure (default algorithm):
mola-sm-lc-cli -i in.simplemap -o out.simplemap \
    -p pipelines/loop-closure-lidar3d-gicp.yaml

# FrameToFrameLoopClosure:
mola-sm-lc-cli -i in.simplemap -o out.simplemap \
    -a mola::FrameToFrameLoopClosure \
    -p pipelines/loop-closure-f2f-lidar3d-gicp.yaml

Available pipelines

YAML file Sensor type Algorithm
loop-closure-lidar3d-gicp.yaml 3-D LiDAR (GICP) SimplemapLoopClosure
loop-closure-lidar3d-icp.yaml 3-D LiDAR (point-to-point ICP) SimplemapLoopClosure
loop-closure-lidar2d.yaml 2-D LiDAR SimplemapLoopClosure
loop-closure-f2f-lidar3d-gicp.yaml 3-D LiDAR (GICP) FrameToFrameLoopClosure

Key YAML knobs

SimplemapLoopClosure

  • submap_max_absolute_length / submap_min_absolute_length — controls submap granularity.
  • assume_planar_world: true enables annealed soft planar constraints (z, roll, pitch).
    • planar_world_initial_sigma_z, planar_world_initial_sigma_ang, planar_world_annealing_rounds — tune the annealing schedule.
    • planar_world_hard_flatten: true restores the old hard-flattening behaviour.
  • use_gnss: true / gnss_add_horizontality: true — GNSS-assisted global alignment.

FrameToFrameLoopClosure

  • lc_candidate_strategyDISTANCE_STRATIFIED (default), PROXIMITY_ONLY, or MULTI_OBJECTIVE.
  • assume_planar_world: true — planar-world annealing.
  • use_gnss: true — per-keyframe GNSS factors (FactorGnssEnu).

See the online tutorial for a step-by-step example.

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_sm_loop_closure

1.0.0 (2026-04-14)

  • package.xml: add missing test-dep
  • add unit tests
  • cli: use output directory as default for debug output files, not input
  • Install pipelines so they are accessible under 'share'
  • Make the package discoverage by ament
  • Merge pull request #6 from MOLAorg/save-ram F2F algorithm: save ram in offline runs
  • More memory efficient loop
  • Bump minimum cmake version to 3.7
  • Reuse mp2p_icp::update_velocity_buffer_from_obs() from mp2p_icp Removes duplicated code in this repo now that mp2p_icp>=2.5.0 is available in all distributions
  • Fix build against mp2p_icp <2.6.0
  • icp debug log files: save only good edges
  • F2F algorithm: save ram in offline runs
  • sm2mm pipeline yaml: expose more params via env vars
  • Expose more parameters for F2F algorithm
  • Debug feature: enable saving 3Dscene files per optimization round
  • Use Graduated Non-Convexity (GNC) optimizer for superior outlier rejection
  • FIX: Reverted logic in formula for adaptive threshold
  • Add formal CLA
  • Merge pull request #5 from MOLAorg/feat/smart-ram-lazy-unload Lazy unload keyframe clouds to keep RAM usage bounded
  • Contributors: Jose Luis Blanco-Claraco

0.2.0 (2026-03-03)

  • Fix build against different gtsam versions
  • Add optional generation of .3Dscene files with loop-closure visualizations
  • Tolerate missing external files without throwing
  • Better logging and expose more env var params
  • Add GNSS uncertainty multiplier
  • Use debug files prefix
  • Add more frame-to-frame LC selection algorithms
  • Merge pull request #4 from MOLAorg/feat/f2f-fixes Add more parameters to f2f method
  • Add new params for f2f method
  • pipeline file: expose more params and fix reversed sigma logic
  • Fix: prior should be weak for GNSS to transform to ENU frame
  • fix copyright headers
  • Merge pull request #3 from MOLAorg/feat/new-f2f-algo Add alternative frame-to-frame LC algorithm
  • Provide virtual LoopClosureInterface to select the algorithm from a CLI argument
  • Add alternative frame-to-frame LC algorithm
  • Merge pull request #2 from MOLAorg/feat/add-ci-and-badges Add CI workflows and clang-format linting infrastructure
  • package.xml: add FILE tag
  • Merge pull request #1 from MOLAorg/feature/refactor-pkg-mola-gtsam-factors Progress moving code to new package mola_gtsam_factors
  • Update dependencies after refactorization into mola_georeferencing
  • Progress moving code to new package mola_gtsam_factors
  • Protect against invalid GPS cov entries
  • Add param gnss_minimum_uncertainty_xyz; dump trajectories as TUM files.
  • simplify: remove obsolete parameters not used anymore here
  • Remove unused parameter (GPS observations are automatically detected anyway)
  • Fix: ensure minimum uncertainty in edges
  • Fix deskewing generating sm2mm for local maps
  • Implement missing loading of new LocalVelocityBuffer while doing submaps "sm2mm"
  • Don't use absolute paths for debug icplog files
  • FIX: Detect the error case of no GNSS observations in sm-georeference-cli
  • Add gicp pipeline
  • bump minimum cmake version to 3.5
  • add .clang-tidy rules and better vscode integration
  • Expose more env vars in the pipeline
  • robust kernels; optional horizontality
  • progress with submaps
  • implement submaps
  • use new mrpt enu covariance field
  • done georeferencing cli
  • progress
  • progress cli app interface
  • initial structure
  • Initial commit
  • Contributors: Jose Luis Blanco Claraco, Jose Luis Blanco-Claraco

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mola_sm_loop_closure at Robotics Stack Exchange