|
mola_metric_maps package from mola repomola mola_bridge_ros2 mola_demos mola_input_lidar_bin_dataset mola_input_rawlog mola_input_rosbag2 mola_input_video mola_kernel mola_launcher mola_metric_maps mola_msgs mola_pose_list mola_relocalization mola_traj_tools mola_viz mola_viz_imgui mola_yaml |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mola.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-05-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
mola_metric_maps
Advanced metric map classes for LiDAR odometry and SLAM, built on the
generic mrpt::maps::CMetricMap interface. All maps are serializable,
visualizable, and integrate with the mp2p_icp
registration library.
Map classes
Production-quality maps
| Class | Header | Description |
|---|---|---|
mola::HashedVoxelPointCloud |
HashedVoxelPointCloud.h |
Flat sparse hash map of cubic voxels. Up to 32 points per voxel stored without heap allocation (fixed array SSO). Backend: tsl::robin_map. Implements NearestNeighborsCapable. |
mola::SparseVoxelPointCloud |
SparseVoxelPointCloud.h |
Two-level voxel map: sparse outer blocks + 32³ inner FixedDenseGrid3D. Tracks per-voxel point means; supports voxel-mean ICP matching. Implements NearestNeighborsCapable. The primary workhorse map in MOLA LO/SLAM. |
mola::NDT |
NDT.h |
Normal Distributions Transform map (Magnusson 2007). Fits a Gaussian per voxel; planar voxels expose NearestPlaneCapable, non-planar ones expose NearestNeighborsCapable. Enables automatic point-to-point vs. point-to-plane pairing selection. |
mola::KeyframePointCloudMap |
KeyframePointCloudMap.h |
Keyframe-based map: each keyframe holds a local point cloud plus a SE(3) pose. Supports map corrections without re-inserting points (just update poses). Implements IcpPrepareCapable, NearestPointWithCovCapable, MetricMapMergeCapable, and KeyframeMapCapable. |
Experimental / work-in-progress maps
| Class | Header | Status |
|---|---|---|
mola::SparseTreesPointCloud |
SparseTreesPointCloud.h |
Coarse 3D grid of independent CSimplePointsMap sub-maps, each with its own KD-tree. Functionally complete but not benchmarked against the hash-based alternatives for typical SLAM workloads. |
mola::OccGrid |
OccGrid.h |
Wraps mrpt::maps::COccupancyGridMap2D with a super-resolution likelihood cache. The cache infrastructure is in place but likelihood population is not yet implemented (// TODO). Not used in any production pipeline. |
Utility / internal classes
| Class | Header | Description |
|---|---|---|
mola::index3d_t<T> |
index3d_t.h |
Discrete 3D integer index. Works as key in std::map and std::unordered_map / tsl::robin_map via the index3d_hash functor, which implements the Teschner et al. (2003) spatial hash. |
mola::FixedDenseGrid3D<T,N,C> |
FixedDenseGrid3D.h |
Dense NxNxN grid (N=2^SIDE_NUM_BITS) allocated with calloc for fast zero-init. Used as the inner block in SparseVoxelPointCloud. Requires trivially-copyable cell types. |
Build and install
Refer to the root MOLA repository.
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 for research and evaluation purposes only. Commercial licenses available upon request, for this package alone or in combination with the complete SLAM system.
Changelog for package mola_metric_maps
2.9.0 (2026-05-11)
- fix: KeyframePointCloudMap viz should honor pointSize
- Merge pull request #143 from MOLAorg/bump-cmake-version bump min req cmake version to 3.22
- bump min req cmake version to 3.22
- Merge pull request #142 from MOLAorg/feat/add-keyframe-map-capable-api feat: Add keyframe map capable API
- feat: Add keyframe map capable API
- Contributors: Jose Luis Blanco-Claraco
2.8.0 (2026-04-29)
-
Merge pull request #139 from MOLAorg/fix/monothonic-kf-ids Fix: ensure monothonic KF ids
-
Fix: ensure monothonic KF ids
-
Merge pull request #138 from MOLAorg/fix/kf-map fix: robustify edge cases from last API changes
-
fix: robustify edge cases from last API changes
-
Merge pull request #137 from MOLAorg/feat/metric-map-changes-for-lo-grav-align mola_metric_maps: per-KF pose plumbing for online gravity rebake
-
feat(mola_metric_maps): per-KF pose plumbing for online gravity rebake Add the KeyframePointCloudMap APIs needed by mola_lidar_odometry's online gravity-rebake feature:
- cloneKFPoses: snapshot of all KF poses keyed by id
- setKeyframePose: per-KF pose overwrite with cache invalidation
- lastInsertedKeyFrameID / nextFreeKeyFrameID_public: id introspection
- drainEvictedKeyFrameIDs: pull-then-clear list of KFs dropped during remove_frames_farther_than-driven evictions inside insertObservation Also exports the MOLA_METRIC_MAPS_HAS_KFM_POSE_PLUMBING feature macro so downstream packages in separate repos (mola_lidar_odometry) can guard usage with __has_include + this macro and stay buildable against older mola_metric_maps checkouts. Adds unit-test coverage for the new APIs in test-mola_metric_maps_keyframemap. Co-Authored-By: Claude Opus 4.7 <<noreply@anthropic.com>>
-
Merge pull request #134 from Zeal-Robotics/perf/keyframe-prewarm-global-submap perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global
-
perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global icp_get_prepared_as_global() was building, on the search submap, only the local-frame KD-tree and per-point covariances (via KeyFrame::buildCache):
- bbox
- kdTreeEnsureIndexBuilt3D() on pointcloud_ (local frame)
- computeCovariancesAndDensity() (local frame) The very first call to nn_search_cov2cov() then lazily materialized the global-frame counterparts on the caller thread:
- pointcloud_global() (deep copy of pointcloud_ rotated by pose())
- kdTreeEnsureIndexBuilt3D() on the global cloud
- covariancesGlobal() (rotated covariances) For a non-trivial preloaded local map this stalled the first ICP align() by several seconds (e.g. ~6 s on a typical localization map), defeating the purpose of having a separate "prepare global" hook. Front-ends that explicitly pre-warm via icp_get_prepared_as_global() at startup were hit hardest, since the remaining lazy work then showed up on the very first scan instead of being amortized across startup. Pre-trigger the same three calls at the end of icp_get_prepared_as_global() so the search submap is fully ready by the time ICP::align() / nn_search_cov2cov() runs.
-
Contributors: Jose Luis Blanco-Claraco, Robin Van Cauwenbergh
2.7.0 (2026-04-22)
- Reorganize website
- Merge pull request #121 from MOLAorg/fix/clean-up-old-mrpt-version-checks Clean up: remove old mrpt version fallback code sections
- Contributors: Jose Luis Blanco-Claraco
2.6.1 (2026-04-02)
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| ament_cmake_xmllint | |
| ament_cmake_gtest | |
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| mola_common | |
| mola_kernel | |
| mrpt_libmaps | |
| mp2p_icp |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mola | |
| mola_lidar_odometry | |
| mola_sm_loop_closure |
Launch files
Messages
Services
Plugins
Recent questions tagged mola_metric_maps at Robotics Stack Exchange
|
mola_metric_maps package from mola repomola mola_bridge_ros2 mola_demos mola_input_lidar_bin_dataset mola_input_rawlog mola_input_rosbag2 mola_input_video mola_kernel mola_launcher mola_metric_maps mola_msgs mola_pose_list mola_relocalization mola_traj_tools mola_viz mola_viz_imgui mola_yaml |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mola.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-05-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
mola_metric_maps
Advanced metric map classes for LiDAR odometry and SLAM, built on the
generic mrpt::maps::CMetricMap interface. All maps are serializable,
visualizable, and integrate with the mp2p_icp
registration library.
Map classes
Production-quality maps
| Class | Header | Description |
|---|---|---|
mola::HashedVoxelPointCloud |
HashedVoxelPointCloud.h |
Flat sparse hash map of cubic voxels. Up to 32 points per voxel stored without heap allocation (fixed array SSO). Backend: tsl::robin_map. Implements NearestNeighborsCapable. |
mola::SparseVoxelPointCloud |
SparseVoxelPointCloud.h |
Two-level voxel map: sparse outer blocks + 32³ inner FixedDenseGrid3D. Tracks per-voxel point means; supports voxel-mean ICP matching. Implements NearestNeighborsCapable. The primary workhorse map in MOLA LO/SLAM. |
mola::NDT |
NDT.h |
Normal Distributions Transform map (Magnusson 2007). Fits a Gaussian per voxel; planar voxels expose NearestPlaneCapable, non-planar ones expose NearestNeighborsCapable. Enables automatic point-to-point vs. point-to-plane pairing selection. |
mola::KeyframePointCloudMap |
KeyframePointCloudMap.h |
Keyframe-based map: each keyframe holds a local point cloud plus a SE(3) pose. Supports map corrections without re-inserting points (just update poses). Implements IcpPrepareCapable, NearestPointWithCovCapable, MetricMapMergeCapable, and KeyframeMapCapable. |
Experimental / work-in-progress maps
| Class | Header | Status |
|---|---|---|
mola::SparseTreesPointCloud |
SparseTreesPointCloud.h |
Coarse 3D grid of independent CSimplePointsMap sub-maps, each with its own KD-tree. Functionally complete but not benchmarked against the hash-based alternatives for typical SLAM workloads. |
mola::OccGrid |
OccGrid.h |
Wraps mrpt::maps::COccupancyGridMap2D with a super-resolution likelihood cache. The cache infrastructure is in place but likelihood population is not yet implemented (// TODO). Not used in any production pipeline. |
Utility / internal classes
| Class | Header | Description |
|---|---|---|
mola::index3d_t<T> |
index3d_t.h |
Discrete 3D integer index. Works as key in std::map and std::unordered_map / tsl::robin_map via the index3d_hash functor, which implements the Teschner et al. (2003) spatial hash. |
mola::FixedDenseGrid3D<T,N,C> |
FixedDenseGrid3D.h |
Dense NxNxN grid (N=2^SIDE_NUM_BITS) allocated with calloc for fast zero-init. Used as the inner block in SparseVoxelPointCloud. Requires trivially-copyable cell types. |
Build and install
Refer to the root MOLA repository.
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 for research and evaluation purposes only. Commercial licenses available upon request, for this package alone or in combination with the complete SLAM system.
Changelog for package mola_metric_maps
2.9.0 (2026-05-11)
- fix: KeyframePointCloudMap viz should honor pointSize
- Merge pull request #143 from MOLAorg/bump-cmake-version bump min req cmake version to 3.22
- bump min req cmake version to 3.22
- Merge pull request #142 from MOLAorg/feat/add-keyframe-map-capable-api feat: Add keyframe map capable API
- feat: Add keyframe map capable API
- Contributors: Jose Luis Blanco-Claraco
2.8.0 (2026-04-29)
-
Merge pull request #139 from MOLAorg/fix/monothonic-kf-ids Fix: ensure monothonic KF ids
-
Fix: ensure monothonic KF ids
-
Merge pull request #138 from MOLAorg/fix/kf-map fix: robustify edge cases from last API changes
-
fix: robustify edge cases from last API changes
-
Merge pull request #137 from MOLAorg/feat/metric-map-changes-for-lo-grav-align mola_metric_maps: per-KF pose plumbing for online gravity rebake
-
feat(mola_metric_maps): per-KF pose plumbing for online gravity rebake Add the KeyframePointCloudMap APIs needed by mola_lidar_odometry's online gravity-rebake feature:
- cloneKFPoses: snapshot of all KF poses keyed by id
- setKeyframePose: per-KF pose overwrite with cache invalidation
- lastInsertedKeyFrameID / nextFreeKeyFrameID_public: id introspection
- drainEvictedKeyFrameIDs: pull-then-clear list of KFs dropped during remove_frames_farther_than-driven evictions inside insertObservation Also exports the MOLA_METRIC_MAPS_HAS_KFM_POSE_PLUMBING feature macro so downstream packages in separate repos (mola_lidar_odometry) can guard usage with __has_include + this macro and stay buildable against older mola_metric_maps checkouts. Adds unit-test coverage for the new APIs in test-mola_metric_maps_keyframemap. Co-Authored-By: Claude Opus 4.7 <<noreply@anthropic.com>>
-
Merge pull request #134 from Zeal-Robotics/perf/keyframe-prewarm-global-submap perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global
-
perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global icp_get_prepared_as_global() was building, on the search submap, only the local-frame KD-tree and per-point covariances (via KeyFrame::buildCache):
- bbox
- kdTreeEnsureIndexBuilt3D() on pointcloud_ (local frame)
- computeCovariancesAndDensity() (local frame) The very first call to nn_search_cov2cov() then lazily materialized the global-frame counterparts on the caller thread:
- pointcloud_global() (deep copy of pointcloud_ rotated by pose())
- kdTreeEnsureIndexBuilt3D() on the global cloud
- covariancesGlobal() (rotated covariances) For a non-trivial preloaded local map this stalled the first ICP align() by several seconds (e.g. ~6 s on a typical localization map), defeating the purpose of having a separate "prepare global" hook. Front-ends that explicitly pre-warm via icp_get_prepared_as_global() at startup were hit hardest, since the remaining lazy work then showed up on the very first scan instead of being amortized across startup. Pre-trigger the same three calls at the end of icp_get_prepared_as_global() so the search submap is fully ready by the time ICP::align() / nn_search_cov2cov() runs.
-
Contributors: Jose Luis Blanco-Claraco, Robin Van Cauwenbergh
2.7.0 (2026-04-22)
- Reorganize website
- Merge pull request #121 from MOLAorg/fix/clean-up-old-mrpt-version-checks Clean up: remove old mrpt version fallback code sections
- Contributors: Jose Luis Blanco-Claraco
2.6.1 (2026-04-02)
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| ament_cmake_xmllint | |
| ament_cmake_gtest | |
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| mola_common | |
| mola_kernel | |
| mrpt_libmaps | |
| mp2p_icp |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mola | |
| mola_lidar_odometry | |
| mola_sm_loop_closure |
Launch files
Messages
Services
Plugins
Recent questions tagged mola_metric_maps at Robotics Stack Exchange
|
mola_metric_maps package from mola repomola mola_bridge_ros2 mola_demos mola_input_lidar_bin_dataset mola_input_rawlog mola_input_rosbag2 mola_input_video mola_kernel mola_launcher mola_metric_maps mola_msgs mola_pose_list mola_relocalization mola_traj_tools mola_viz mola_viz_imgui mola_yaml |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mola.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-05-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
mola_metric_maps
Advanced metric map classes for LiDAR odometry and SLAM, built on the
generic mrpt::maps::CMetricMap interface. All maps are serializable,
visualizable, and integrate with the mp2p_icp
registration library.
Map classes
Production-quality maps
| Class | Header | Description |
|---|---|---|
mola::HashedVoxelPointCloud |
HashedVoxelPointCloud.h |
Flat sparse hash map of cubic voxels. Up to 32 points per voxel stored without heap allocation (fixed array SSO). Backend: tsl::robin_map. Implements NearestNeighborsCapable. |
mola::SparseVoxelPointCloud |
SparseVoxelPointCloud.h |
Two-level voxel map: sparse outer blocks + 32³ inner FixedDenseGrid3D. Tracks per-voxel point means; supports voxel-mean ICP matching. Implements NearestNeighborsCapable. The primary workhorse map in MOLA LO/SLAM. |
mola::NDT |
NDT.h |
Normal Distributions Transform map (Magnusson 2007). Fits a Gaussian per voxel; planar voxels expose NearestPlaneCapable, non-planar ones expose NearestNeighborsCapable. Enables automatic point-to-point vs. point-to-plane pairing selection. |
mola::KeyframePointCloudMap |
KeyframePointCloudMap.h |
Keyframe-based map: each keyframe holds a local point cloud plus a SE(3) pose. Supports map corrections without re-inserting points (just update poses). Implements IcpPrepareCapable, NearestPointWithCovCapable, MetricMapMergeCapable, and KeyframeMapCapable. |
Experimental / work-in-progress maps
| Class | Header | Status |
|---|---|---|
mola::SparseTreesPointCloud |
SparseTreesPointCloud.h |
Coarse 3D grid of independent CSimplePointsMap sub-maps, each with its own KD-tree. Functionally complete but not benchmarked against the hash-based alternatives for typical SLAM workloads. |
mola::OccGrid |
OccGrid.h |
Wraps mrpt::maps::COccupancyGridMap2D with a super-resolution likelihood cache. The cache infrastructure is in place but likelihood population is not yet implemented (// TODO). Not used in any production pipeline. |
Utility / internal classes
| Class | Header | Description |
|---|---|---|
mola::index3d_t<T> |
index3d_t.h |
Discrete 3D integer index. Works as key in std::map and std::unordered_map / tsl::robin_map via the index3d_hash functor, which implements the Teschner et al. (2003) spatial hash. |
mola::FixedDenseGrid3D<T,N,C> |
FixedDenseGrid3D.h |
Dense NxNxN grid (N=2^SIDE_NUM_BITS) allocated with calloc for fast zero-init. Used as the inner block in SparseVoxelPointCloud. Requires trivially-copyable cell types. |
Build and install
Refer to the root MOLA repository.
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 for research and evaluation purposes only. Commercial licenses available upon request, for this package alone or in combination with the complete SLAM system.
Changelog for package mola_metric_maps
2.9.0 (2026-05-11)
- fix: KeyframePointCloudMap viz should honor pointSize
- Merge pull request #143 from MOLAorg/bump-cmake-version bump min req cmake version to 3.22
- bump min req cmake version to 3.22
- Merge pull request #142 from MOLAorg/feat/add-keyframe-map-capable-api feat: Add keyframe map capable API
- feat: Add keyframe map capable API
- Contributors: Jose Luis Blanco-Claraco
2.8.0 (2026-04-29)
-
Merge pull request #139 from MOLAorg/fix/monothonic-kf-ids Fix: ensure monothonic KF ids
-
Fix: ensure monothonic KF ids
-
Merge pull request #138 from MOLAorg/fix/kf-map fix: robustify edge cases from last API changes
-
fix: robustify edge cases from last API changes
-
Merge pull request #137 from MOLAorg/feat/metric-map-changes-for-lo-grav-align mola_metric_maps: per-KF pose plumbing for online gravity rebake
-
feat(mola_metric_maps): per-KF pose plumbing for online gravity rebake Add the KeyframePointCloudMap APIs needed by mola_lidar_odometry's online gravity-rebake feature:
- cloneKFPoses: snapshot of all KF poses keyed by id
- setKeyframePose: per-KF pose overwrite with cache invalidation
- lastInsertedKeyFrameID / nextFreeKeyFrameID_public: id introspection
- drainEvictedKeyFrameIDs: pull-then-clear list of KFs dropped during remove_frames_farther_than-driven evictions inside insertObservation Also exports the MOLA_METRIC_MAPS_HAS_KFM_POSE_PLUMBING feature macro so downstream packages in separate repos (mola_lidar_odometry) can guard usage with __has_include + this macro and stay buildable against older mola_metric_maps checkouts. Adds unit-test coverage for the new APIs in test-mola_metric_maps_keyframemap. Co-Authored-By: Claude Opus 4.7 <<noreply@anthropic.com>>
-
Merge pull request #134 from Zeal-Robotics/perf/keyframe-prewarm-global-submap perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global
-
perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global icp_get_prepared_as_global() was building, on the search submap, only the local-frame KD-tree and per-point covariances (via KeyFrame::buildCache):
- bbox
- kdTreeEnsureIndexBuilt3D() on pointcloud_ (local frame)
- computeCovariancesAndDensity() (local frame) The very first call to nn_search_cov2cov() then lazily materialized the global-frame counterparts on the caller thread:
- pointcloud_global() (deep copy of pointcloud_ rotated by pose())
- kdTreeEnsureIndexBuilt3D() on the global cloud
- covariancesGlobal() (rotated covariances) For a non-trivial preloaded local map this stalled the first ICP align() by several seconds (e.g. ~6 s on a typical localization map), defeating the purpose of having a separate "prepare global" hook. Front-ends that explicitly pre-warm via icp_get_prepared_as_global() at startup were hit hardest, since the remaining lazy work then showed up on the very first scan instead of being amortized across startup. Pre-trigger the same three calls at the end of icp_get_prepared_as_global() so the search submap is fully ready by the time ICP::align() / nn_search_cov2cov() runs.
-
Contributors: Jose Luis Blanco-Claraco, Robin Van Cauwenbergh
2.7.0 (2026-04-22)
- Reorganize website
- Merge pull request #121 from MOLAorg/fix/clean-up-old-mrpt-version-checks Clean up: remove old mrpt version fallback code sections
- Contributors: Jose Luis Blanco-Claraco
2.6.1 (2026-04-02)
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| ament_cmake_xmllint | |
| ament_cmake_gtest | |
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| mola_common | |
| mola_kernel | |
| mrpt_libmaps | |
| mp2p_icp |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mola | |
| mola_lidar_odometry | |
| mola_sm_loop_closure |
Launch files
Messages
Services
Plugins
Recent questions tagged mola_metric_maps at Robotics Stack Exchange
|
mola_metric_maps package from mola repomola mola_bridge_ros2 mola_demos mola_input_lidar_bin_dataset mola_input_rawlog mola_input_rosbag2 mola_input_video mola_kernel mola_launcher mola_metric_maps mola_msgs mola_pose_list mola_relocalization mola_traj_tools mola_viz mola_viz_imgui mola_yaml |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mola.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-05-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
mola_metric_maps
Advanced metric map classes for LiDAR odometry and SLAM, built on the
generic mrpt::maps::CMetricMap interface. All maps are serializable,
visualizable, and integrate with the mp2p_icp
registration library.
Map classes
Production-quality maps
| Class | Header | Description |
|---|---|---|
mola::HashedVoxelPointCloud |
HashedVoxelPointCloud.h |
Flat sparse hash map of cubic voxels. Up to 32 points per voxel stored without heap allocation (fixed array SSO). Backend: tsl::robin_map. Implements NearestNeighborsCapable. |
mola::SparseVoxelPointCloud |
SparseVoxelPointCloud.h |
Two-level voxel map: sparse outer blocks + 32³ inner FixedDenseGrid3D. Tracks per-voxel point means; supports voxel-mean ICP matching. Implements NearestNeighborsCapable. The primary workhorse map in MOLA LO/SLAM. |
mola::NDT |
NDT.h |
Normal Distributions Transform map (Magnusson 2007). Fits a Gaussian per voxel; planar voxels expose NearestPlaneCapable, non-planar ones expose NearestNeighborsCapable. Enables automatic point-to-point vs. point-to-plane pairing selection. |
mola::KeyframePointCloudMap |
KeyframePointCloudMap.h |
Keyframe-based map: each keyframe holds a local point cloud plus a SE(3) pose. Supports map corrections without re-inserting points (just update poses). Implements IcpPrepareCapable, NearestPointWithCovCapable, MetricMapMergeCapable, and KeyframeMapCapable. |
Experimental / work-in-progress maps
| Class | Header | Status |
|---|---|---|
mola::SparseTreesPointCloud |
SparseTreesPointCloud.h |
Coarse 3D grid of independent CSimplePointsMap sub-maps, each with its own KD-tree. Functionally complete but not benchmarked against the hash-based alternatives for typical SLAM workloads. |
mola::OccGrid |
OccGrid.h |
Wraps mrpt::maps::COccupancyGridMap2D with a super-resolution likelihood cache. The cache infrastructure is in place but likelihood population is not yet implemented (// TODO). Not used in any production pipeline. |
Utility / internal classes
| Class | Header | Description |
|---|---|---|
mola::index3d_t<T> |
index3d_t.h |
Discrete 3D integer index. Works as key in std::map and std::unordered_map / tsl::robin_map via the index3d_hash functor, which implements the Teschner et al. (2003) spatial hash. |
mola::FixedDenseGrid3D<T,N,C> |
FixedDenseGrid3D.h |
Dense NxNxN grid (N=2^SIDE_NUM_BITS) allocated with calloc for fast zero-init. Used as the inner block in SparseVoxelPointCloud. Requires trivially-copyable cell types. |
Build and install
Refer to the root MOLA repository.
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 for research and evaluation purposes only. Commercial licenses available upon request, for this package alone or in combination with the complete SLAM system.
Changelog for package mola_metric_maps
2.9.0 (2026-05-11)
- fix: KeyframePointCloudMap viz should honor pointSize
- Merge pull request #143 from MOLAorg/bump-cmake-version bump min req cmake version to 3.22
- bump min req cmake version to 3.22
- Merge pull request #142 from MOLAorg/feat/add-keyframe-map-capable-api feat: Add keyframe map capable API
- feat: Add keyframe map capable API
- Contributors: Jose Luis Blanco-Claraco
2.8.0 (2026-04-29)
-
Merge pull request #139 from MOLAorg/fix/monothonic-kf-ids Fix: ensure monothonic KF ids
-
Fix: ensure monothonic KF ids
-
Merge pull request #138 from MOLAorg/fix/kf-map fix: robustify edge cases from last API changes
-
fix: robustify edge cases from last API changes
-
Merge pull request #137 from MOLAorg/feat/metric-map-changes-for-lo-grav-align mola_metric_maps: per-KF pose plumbing for online gravity rebake
-
feat(mola_metric_maps): per-KF pose plumbing for online gravity rebake Add the KeyframePointCloudMap APIs needed by mola_lidar_odometry's online gravity-rebake feature:
- cloneKFPoses: snapshot of all KF poses keyed by id
- setKeyframePose: per-KF pose overwrite with cache invalidation
- lastInsertedKeyFrameID / nextFreeKeyFrameID_public: id introspection
- drainEvictedKeyFrameIDs: pull-then-clear list of KFs dropped during remove_frames_farther_than-driven evictions inside insertObservation Also exports the MOLA_METRIC_MAPS_HAS_KFM_POSE_PLUMBING feature macro so downstream packages in separate repos (mola_lidar_odometry) can guard usage with __has_include + this macro and stay buildable against older mola_metric_maps checkouts. Adds unit-test coverage for the new APIs in test-mola_metric_maps_keyframemap. Co-Authored-By: Claude Opus 4.7 <<noreply@anthropic.com>>
-
Merge pull request #134 from Zeal-Robotics/perf/keyframe-prewarm-global-submap perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global
-
perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global icp_get_prepared_as_global() was building, on the search submap, only the local-frame KD-tree and per-point covariances (via KeyFrame::buildCache):
- bbox
- kdTreeEnsureIndexBuilt3D() on pointcloud_ (local frame)
- computeCovariancesAndDensity() (local frame) The very first call to nn_search_cov2cov() then lazily materialized the global-frame counterparts on the caller thread:
- pointcloud_global() (deep copy of pointcloud_ rotated by pose())
- kdTreeEnsureIndexBuilt3D() on the global cloud
- covariancesGlobal() (rotated covariances) For a non-trivial preloaded local map this stalled the first ICP align() by several seconds (e.g. ~6 s on a typical localization map), defeating the purpose of having a separate "prepare global" hook. Front-ends that explicitly pre-warm via icp_get_prepared_as_global() at startup were hit hardest, since the remaining lazy work then showed up on the very first scan instead of being amortized across startup. Pre-trigger the same three calls at the end of icp_get_prepared_as_global() so the search submap is fully ready by the time ICP::align() / nn_search_cov2cov() runs.
-
Contributors: Jose Luis Blanco-Claraco, Robin Van Cauwenbergh
2.7.0 (2026-04-22)
- Reorganize website
- Merge pull request #121 from MOLAorg/fix/clean-up-old-mrpt-version-checks Clean up: remove old mrpt version fallback code sections
- Contributors: Jose Luis Blanco-Claraco
2.6.1 (2026-04-02)
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| ament_cmake_xmllint | |
| ament_cmake_gtest | |
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| mola_common | |
| mola_kernel | |
| mrpt_libmaps | |
| mp2p_icp |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mola | |
| mola_lidar_odometry | |
| mola_sm_loop_closure |
Launch files
Messages
Services
Plugins
Recent questions tagged mola_metric_maps at Robotics Stack Exchange
|
mola_metric_maps package from mola repomola mola_bridge_ros2 mola_demos mola_input_lidar_bin_dataset mola_input_rawlog mola_input_rosbag2 mola_input_video mola_kernel mola_launcher mola_metric_maps mola_msgs mola_pose_list mola_relocalization mola_traj_tools mola_viz mola_viz_imgui mola_yaml |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mola.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-05-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
mola_metric_maps
Advanced metric map classes for LiDAR odometry and SLAM, built on the
generic mrpt::maps::CMetricMap interface. All maps are serializable,
visualizable, and integrate with the mp2p_icp
registration library.
Map classes
Production-quality maps
| Class | Header | Description |
|---|---|---|
mola::HashedVoxelPointCloud |
HashedVoxelPointCloud.h |
Flat sparse hash map of cubic voxels. Up to 32 points per voxel stored without heap allocation (fixed array SSO). Backend: tsl::robin_map. Implements NearestNeighborsCapable. |
mola::SparseVoxelPointCloud |
SparseVoxelPointCloud.h |
Two-level voxel map: sparse outer blocks + 32³ inner FixedDenseGrid3D. Tracks per-voxel point means; supports voxel-mean ICP matching. Implements NearestNeighborsCapable. The primary workhorse map in MOLA LO/SLAM. |
mola::NDT |
NDT.h |
Normal Distributions Transform map (Magnusson 2007). Fits a Gaussian per voxel; planar voxels expose NearestPlaneCapable, non-planar ones expose NearestNeighborsCapable. Enables automatic point-to-point vs. point-to-plane pairing selection. |
mola::KeyframePointCloudMap |
KeyframePointCloudMap.h |
Keyframe-based map: each keyframe holds a local point cloud plus a SE(3) pose. Supports map corrections without re-inserting points (just update poses). Implements IcpPrepareCapable, NearestPointWithCovCapable, MetricMapMergeCapable, and KeyframeMapCapable. |
Experimental / work-in-progress maps
| Class | Header | Status |
|---|---|---|
mola::SparseTreesPointCloud |
SparseTreesPointCloud.h |
Coarse 3D grid of independent CSimplePointsMap sub-maps, each with its own KD-tree. Functionally complete but not benchmarked against the hash-based alternatives for typical SLAM workloads. |
mola::OccGrid |
OccGrid.h |
Wraps mrpt::maps::COccupancyGridMap2D with a super-resolution likelihood cache. The cache infrastructure is in place but likelihood population is not yet implemented (// TODO). Not used in any production pipeline. |
Utility / internal classes
| Class | Header | Description |
|---|---|---|
mola::index3d_t<T> |
index3d_t.h |
Discrete 3D integer index. Works as key in std::map and std::unordered_map / tsl::robin_map via the index3d_hash functor, which implements the Teschner et al. (2003) spatial hash. |
mola::FixedDenseGrid3D<T,N,C> |
FixedDenseGrid3D.h |
Dense NxNxN grid (N=2^SIDE_NUM_BITS) allocated with calloc for fast zero-init. Used as the inner block in SparseVoxelPointCloud. Requires trivially-copyable cell types. |
Build and install
Refer to the root MOLA repository.
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 for research and evaluation purposes only. Commercial licenses available upon request, for this package alone or in combination with the complete SLAM system.
Changelog for package mola_metric_maps
2.9.0 (2026-05-11)
- fix: KeyframePointCloudMap viz should honor pointSize
- Merge pull request #143 from MOLAorg/bump-cmake-version bump min req cmake version to 3.22
- bump min req cmake version to 3.22
- Merge pull request #142 from MOLAorg/feat/add-keyframe-map-capable-api feat: Add keyframe map capable API
- feat: Add keyframe map capable API
- Contributors: Jose Luis Blanco-Claraco
2.8.0 (2026-04-29)
-
Merge pull request #139 from MOLAorg/fix/monothonic-kf-ids Fix: ensure monothonic KF ids
-
Fix: ensure monothonic KF ids
-
Merge pull request #138 from MOLAorg/fix/kf-map fix: robustify edge cases from last API changes
-
fix: robustify edge cases from last API changes
-
Merge pull request #137 from MOLAorg/feat/metric-map-changes-for-lo-grav-align mola_metric_maps: per-KF pose plumbing for online gravity rebake
-
feat(mola_metric_maps): per-KF pose plumbing for online gravity rebake Add the KeyframePointCloudMap APIs needed by mola_lidar_odometry's online gravity-rebake feature:
- cloneKFPoses: snapshot of all KF poses keyed by id
- setKeyframePose: per-KF pose overwrite with cache invalidation
- lastInsertedKeyFrameID / nextFreeKeyFrameID_public: id introspection
- drainEvictedKeyFrameIDs: pull-then-clear list of KFs dropped during remove_frames_farther_than-driven evictions inside insertObservation Also exports the MOLA_METRIC_MAPS_HAS_KFM_POSE_PLUMBING feature macro so downstream packages in separate repos (mola_lidar_odometry) can guard usage with __has_include + this macro and stay buildable against older mola_metric_maps checkouts. Adds unit-test coverage for the new APIs in test-mola_metric_maps_keyframemap. Co-Authored-By: Claude Opus 4.7 <<noreply@anthropic.com>>
-
Merge pull request #134 from Zeal-Robotics/perf/keyframe-prewarm-global-submap perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global
-
perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global icp_get_prepared_as_global() was building, on the search submap, only the local-frame KD-tree and per-point covariances (via KeyFrame::buildCache):
- bbox
- kdTreeEnsureIndexBuilt3D() on pointcloud_ (local frame)
- computeCovariancesAndDensity() (local frame) The very first call to nn_search_cov2cov() then lazily materialized the global-frame counterparts on the caller thread:
- pointcloud_global() (deep copy of pointcloud_ rotated by pose())
- kdTreeEnsureIndexBuilt3D() on the global cloud
- covariancesGlobal() (rotated covariances) For a non-trivial preloaded local map this stalled the first ICP align() by several seconds (e.g. ~6 s on a typical localization map), defeating the purpose of having a separate "prepare global" hook. Front-ends that explicitly pre-warm via icp_get_prepared_as_global() at startup were hit hardest, since the remaining lazy work then showed up on the very first scan instead of being amortized across startup. Pre-trigger the same three calls at the end of icp_get_prepared_as_global() so the search submap is fully ready by the time ICP::align() / nn_search_cov2cov() runs.
-
Contributors: Jose Luis Blanco-Claraco, Robin Van Cauwenbergh
2.7.0 (2026-04-22)
- Reorganize website
- Merge pull request #121 from MOLAorg/fix/clean-up-old-mrpt-version-checks Clean up: remove old mrpt version fallback code sections
- Contributors: Jose Luis Blanco-Claraco
2.6.1 (2026-04-02)
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| ament_cmake_xmllint | |
| ament_cmake_gtest | |
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| mola_common | |
| mola_kernel | |
| mrpt_libmaps | |
| mp2p_icp |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mola | |
| mola_lidar_odometry | |
| mola_sm_loop_closure |
Launch files
Messages
Services
Plugins
Recent questions tagged mola_metric_maps at Robotics Stack Exchange
|
mola_metric_maps package from mola repomola mola_bridge_ros2 mola_demos mola_input_lidar_bin_dataset mola_input_rawlog mola_input_rosbag2 mola_input_video mola_kernel mola_launcher mola_metric_maps mola_msgs mola_pose_list mola_relocalization mola_traj_tools mola_viz mola_viz_imgui mola_yaml |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mola.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-05-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
mola_metric_maps
Advanced metric map classes for LiDAR odometry and SLAM, built on the
generic mrpt::maps::CMetricMap interface. All maps are serializable,
visualizable, and integrate with the mp2p_icp
registration library.
Map classes
Production-quality maps
| Class | Header | Description |
|---|---|---|
mola::HashedVoxelPointCloud |
HashedVoxelPointCloud.h |
Flat sparse hash map of cubic voxels. Up to 32 points per voxel stored without heap allocation (fixed array SSO). Backend: tsl::robin_map. Implements NearestNeighborsCapable. |
mola::SparseVoxelPointCloud |
SparseVoxelPointCloud.h |
Two-level voxel map: sparse outer blocks + 32³ inner FixedDenseGrid3D. Tracks per-voxel point means; supports voxel-mean ICP matching. Implements NearestNeighborsCapable. The primary workhorse map in MOLA LO/SLAM. |
mola::NDT |
NDT.h |
Normal Distributions Transform map (Magnusson 2007). Fits a Gaussian per voxel; planar voxels expose NearestPlaneCapable, non-planar ones expose NearestNeighborsCapable. Enables automatic point-to-point vs. point-to-plane pairing selection. |
mola::KeyframePointCloudMap |
KeyframePointCloudMap.h |
Keyframe-based map: each keyframe holds a local point cloud plus a SE(3) pose. Supports map corrections without re-inserting points (just update poses). Implements IcpPrepareCapable, NearestPointWithCovCapable, MetricMapMergeCapable, and KeyframeMapCapable. |
Experimental / work-in-progress maps
| Class | Header | Status |
|---|---|---|
mola::SparseTreesPointCloud |
SparseTreesPointCloud.h |
Coarse 3D grid of independent CSimplePointsMap sub-maps, each with its own KD-tree. Functionally complete but not benchmarked against the hash-based alternatives for typical SLAM workloads. |
mola::OccGrid |
OccGrid.h |
Wraps mrpt::maps::COccupancyGridMap2D with a super-resolution likelihood cache. The cache infrastructure is in place but likelihood population is not yet implemented (// TODO). Not used in any production pipeline. |
Utility / internal classes
| Class | Header | Description |
|---|---|---|
mola::index3d_t<T> |
index3d_t.h |
Discrete 3D integer index. Works as key in std::map and std::unordered_map / tsl::robin_map via the index3d_hash functor, which implements the Teschner et al. (2003) spatial hash. |
mola::FixedDenseGrid3D<T,N,C> |
FixedDenseGrid3D.h |
Dense NxNxN grid (N=2^SIDE_NUM_BITS) allocated with calloc for fast zero-init. Used as the inner block in SparseVoxelPointCloud. Requires trivially-copyable cell types. |
Build and install
Refer to the root MOLA repository.
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 for research and evaluation purposes only. Commercial licenses available upon request, for this package alone or in combination with the complete SLAM system.
Changelog for package mola_metric_maps
2.9.0 (2026-05-11)
- fix: KeyframePointCloudMap viz should honor pointSize
- Merge pull request #143 from MOLAorg/bump-cmake-version bump min req cmake version to 3.22
- bump min req cmake version to 3.22
- Merge pull request #142 from MOLAorg/feat/add-keyframe-map-capable-api feat: Add keyframe map capable API
- feat: Add keyframe map capable API
- Contributors: Jose Luis Blanco-Claraco
2.8.0 (2026-04-29)
-
Merge pull request #139 from MOLAorg/fix/monothonic-kf-ids Fix: ensure monothonic KF ids
-
Fix: ensure monothonic KF ids
-
Merge pull request #138 from MOLAorg/fix/kf-map fix: robustify edge cases from last API changes
-
fix: robustify edge cases from last API changes
-
Merge pull request #137 from MOLAorg/feat/metric-map-changes-for-lo-grav-align mola_metric_maps: per-KF pose plumbing for online gravity rebake
-
feat(mola_metric_maps): per-KF pose plumbing for online gravity rebake Add the KeyframePointCloudMap APIs needed by mola_lidar_odometry's online gravity-rebake feature:
- cloneKFPoses: snapshot of all KF poses keyed by id
- setKeyframePose: per-KF pose overwrite with cache invalidation
- lastInsertedKeyFrameID / nextFreeKeyFrameID_public: id introspection
- drainEvictedKeyFrameIDs: pull-then-clear list of KFs dropped during remove_frames_farther_than-driven evictions inside insertObservation Also exports the MOLA_METRIC_MAPS_HAS_KFM_POSE_PLUMBING feature macro so downstream packages in separate repos (mola_lidar_odometry) can guard usage with __has_include + this macro and stay buildable against older mola_metric_maps checkouts. Adds unit-test coverage for the new APIs in test-mola_metric_maps_keyframemap. Co-Authored-By: Claude Opus 4.7 <<noreply@anthropic.com>>
-
Merge pull request #134 from Zeal-Robotics/perf/keyframe-prewarm-global-submap perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global
-
perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global icp_get_prepared_as_global() was building, on the search submap, only the local-frame KD-tree and per-point covariances (via KeyFrame::buildCache):
- bbox
- kdTreeEnsureIndexBuilt3D() on pointcloud_ (local frame)
- computeCovariancesAndDensity() (local frame) The very first call to nn_search_cov2cov() then lazily materialized the global-frame counterparts on the caller thread:
- pointcloud_global() (deep copy of pointcloud_ rotated by pose())
- kdTreeEnsureIndexBuilt3D() on the global cloud
- covariancesGlobal() (rotated covariances) For a non-trivial preloaded local map this stalled the first ICP align() by several seconds (e.g. ~6 s on a typical localization map), defeating the purpose of having a separate "prepare global" hook. Front-ends that explicitly pre-warm via icp_get_prepared_as_global() at startup were hit hardest, since the remaining lazy work then showed up on the very first scan instead of being amortized across startup. Pre-trigger the same three calls at the end of icp_get_prepared_as_global() so the search submap is fully ready by the time ICP::align() / nn_search_cov2cov() runs.
-
Contributors: Jose Luis Blanco-Claraco, Robin Van Cauwenbergh
2.7.0 (2026-04-22)
- Reorganize website
- Merge pull request #121 from MOLAorg/fix/clean-up-old-mrpt-version-checks Clean up: remove old mrpt version fallback code sections
- Contributors: Jose Luis Blanco-Claraco
2.6.1 (2026-04-02)
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| ament_cmake_xmllint | |
| ament_cmake_gtest | |
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| mola_common | |
| mola_kernel | |
| mrpt_libmaps | |
| mp2p_icp |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mola | |
| mola_lidar_odometry | |
| mola_sm_loop_closure |
Launch files
Messages
Services
Plugins
Recent questions tagged mola_metric_maps at Robotics Stack Exchange
|
mola_metric_maps package from mola repomola mola_bridge_ros2 mola_demos mola_input_lidar_bin_dataset mola_input_rawlog mola_input_rosbag2 mola_input_video mola_kernel mola_launcher mola_metric_maps mola_msgs mola_pose_list mola_relocalization mola_traj_tools mola_viz mola_viz_imgui mola_yaml |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mola.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-05-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
mola_metric_maps
Advanced metric map classes for LiDAR odometry and SLAM, built on the
generic mrpt::maps::CMetricMap interface. All maps are serializable,
visualizable, and integrate with the mp2p_icp
registration library.
Map classes
Production-quality maps
| Class | Header | Description |
|---|---|---|
mola::HashedVoxelPointCloud |
HashedVoxelPointCloud.h |
Flat sparse hash map of cubic voxels. Up to 32 points per voxel stored without heap allocation (fixed array SSO). Backend: tsl::robin_map. Implements NearestNeighborsCapable. |
mola::SparseVoxelPointCloud |
SparseVoxelPointCloud.h |
Two-level voxel map: sparse outer blocks + 32³ inner FixedDenseGrid3D. Tracks per-voxel point means; supports voxel-mean ICP matching. Implements NearestNeighborsCapable. The primary workhorse map in MOLA LO/SLAM. |
mola::NDT |
NDT.h |
Normal Distributions Transform map (Magnusson 2007). Fits a Gaussian per voxel; planar voxels expose NearestPlaneCapable, non-planar ones expose NearestNeighborsCapable. Enables automatic point-to-point vs. point-to-plane pairing selection. |
mola::KeyframePointCloudMap |
KeyframePointCloudMap.h |
Keyframe-based map: each keyframe holds a local point cloud plus a SE(3) pose. Supports map corrections without re-inserting points (just update poses). Implements IcpPrepareCapable, NearestPointWithCovCapable, MetricMapMergeCapable, and KeyframeMapCapable. |
Experimental / work-in-progress maps
| Class | Header | Status |
|---|---|---|
mola::SparseTreesPointCloud |
SparseTreesPointCloud.h |
Coarse 3D grid of independent CSimplePointsMap sub-maps, each with its own KD-tree. Functionally complete but not benchmarked against the hash-based alternatives for typical SLAM workloads. |
mola::OccGrid |
OccGrid.h |
Wraps mrpt::maps::COccupancyGridMap2D with a super-resolution likelihood cache. The cache infrastructure is in place but likelihood population is not yet implemented (// TODO). Not used in any production pipeline. |
Utility / internal classes
| Class | Header | Description |
|---|---|---|
mola::index3d_t<T> |
index3d_t.h |
Discrete 3D integer index. Works as key in std::map and std::unordered_map / tsl::robin_map via the index3d_hash functor, which implements the Teschner et al. (2003) spatial hash. |
mola::FixedDenseGrid3D<T,N,C> |
FixedDenseGrid3D.h |
Dense NxNxN grid (N=2^SIDE_NUM_BITS) allocated with calloc for fast zero-init. Used as the inner block in SparseVoxelPointCloud. Requires trivially-copyable cell types. |
Build and install
Refer to the root MOLA repository.
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 for research and evaluation purposes only. Commercial licenses available upon request, for this package alone or in combination with the complete SLAM system.
Changelog for package mola_metric_maps
2.9.0 (2026-05-11)
- fix: KeyframePointCloudMap viz should honor pointSize
- Merge pull request #143 from MOLAorg/bump-cmake-version bump min req cmake version to 3.22
- bump min req cmake version to 3.22
- Merge pull request #142 from MOLAorg/feat/add-keyframe-map-capable-api feat: Add keyframe map capable API
- feat: Add keyframe map capable API
- Contributors: Jose Luis Blanco-Claraco
2.8.0 (2026-04-29)
-
Merge pull request #139 from MOLAorg/fix/monothonic-kf-ids Fix: ensure monothonic KF ids
-
Fix: ensure monothonic KF ids
-
Merge pull request #138 from MOLAorg/fix/kf-map fix: robustify edge cases from last API changes
-
fix: robustify edge cases from last API changes
-
Merge pull request #137 from MOLAorg/feat/metric-map-changes-for-lo-grav-align mola_metric_maps: per-KF pose plumbing for online gravity rebake
-
feat(mola_metric_maps): per-KF pose plumbing for online gravity rebake Add the KeyframePointCloudMap APIs needed by mola_lidar_odometry's online gravity-rebake feature:
- cloneKFPoses: snapshot of all KF poses keyed by id
- setKeyframePose: per-KF pose overwrite with cache invalidation
- lastInsertedKeyFrameID / nextFreeKeyFrameID_public: id introspection
- drainEvictedKeyFrameIDs: pull-then-clear list of KFs dropped during remove_frames_farther_than-driven evictions inside insertObservation Also exports the MOLA_METRIC_MAPS_HAS_KFM_POSE_PLUMBING feature macro so downstream packages in separate repos (mola_lidar_odometry) can guard usage with __has_include + this macro and stay buildable against older mola_metric_maps checkouts. Adds unit-test coverage for the new APIs in test-mola_metric_maps_keyframemap. Co-Authored-By: Claude Opus 4.7 <<noreply@anthropic.com>>
-
Merge pull request #134 from Zeal-Robotics/perf/keyframe-prewarm-global-submap perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global
-
perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global icp_get_prepared_as_global() was building, on the search submap, only the local-frame KD-tree and per-point covariances (via KeyFrame::buildCache):
- bbox
- kdTreeEnsureIndexBuilt3D() on pointcloud_ (local frame)
- computeCovariancesAndDensity() (local frame) The very first call to nn_search_cov2cov() then lazily materialized the global-frame counterparts on the caller thread:
- pointcloud_global() (deep copy of pointcloud_ rotated by pose())
- kdTreeEnsureIndexBuilt3D() on the global cloud
- covariancesGlobal() (rotated covariances) For a non-trivial preloaded local map this stalled the first ICP align() by several seconds (e.g. ~6 s on a typical localization map), defeating the purpose of having a separate "prepare global" hook. Front-ends that explicitly pre-warm via icp_get_prepared_as_global() at startup were hit hardest, since the remaining lazy work then showed up on the very first scan instead of being amortized across startup. Pre-trigger the same three calls at the end of icp_get_prepared_as_global() so the search submap is fully ready by the time ICP::align() / nn_search_cov2cov() runs.
-
Contributors: Jose Luis Blanco-Claraco, Robin Van Cauwenbergh
2.7.0 (2026-04-22)
- Reorganize website
- Merge pull request #121 from MOLAorg/fix/clean-up-old-mrpt-version-checks Clean up: remove old mrpt version fallback code sections
- Contributors: Jose Luis Blanco-Claraco
2.6.1 (2026-04-02)
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| ament_cmake_xmllint | |
| ament_cmake_gtest | |
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| mola_common | |
| mola_kernel | |
| mrpt_libmaps | |
| mp2p_icp |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mola | |
| mola_lidar_odometry | |
| mola_sm_loop_closure |
Launch files
Messages
Services
Plugins
Recent questions tagged mola_metric_maps at Robotics Stack Exchange
|
mola_metric_maps package from mola repomola mola_bridge_ros2 mola_demos mola_input_lidar_bin_dataset mola_input_rawlog mola_input_rosbag2 mola_input_video mola_kernel mola_launcher mola_metric_maps mola_msgs mola_pose_list mola_relocalization mola_traj_tools mola_viz mola_viz_imgui mola_yaml |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mola.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-05-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
mola_metric_maps
Advanced metric map classes for LiDAR odometry and SLAM, built on the
generic mrpt::maps::CMetricMap interface. All maps are serializable,
visualizable, and integrate with the mp2p_icp
registration library.
Map classes
Production-quality maps
| Class | Header | Description |
|---|---|---|
mola::HashedVoxelPointCloud |
HashedVoxelPointCloud.h |
Flat sparse hash map of cubic voxels. Up to 32 points per voxel stored without heap allocation (fixed array SSO). Backend: tsl::robin_map. Implements NearestNeighborsCapable. |
mola::SparseVoxelPointCloud |
SparseVoxelPointCloud.h |
Two-level voxel map: sparse outer blocks + 32³ inner FixedDenseGrid3D. Tracks per-voxel point means; supports voxel-mean ICP matching. Implements NearestNeighborsCapable. The primary workhorse map in MOLA LO/SLAM. |
mola::NDT |
NDT.h |
Normal Distributions Transform map (Magnusson 2007). Fits a Gaussian per voxel; planar voxels expose NearestPlaneCapable, non-planar ones expose NearestNeighborsCapable. Enables automatic point-to-point vs. point-to-plane pairing selection. |
mola::KeyframePointCloudMap |
KeyframePointCloudMap.h |
Keyframe-based map: each keyframe holds a local point cloud plus a SE(3) pose. Supports map corrections without re-inserting points (just update poses). Implements IcpPrepareCapable, NearestPointWithCovCapable, MetricMapMergeCapable, and KeyframeMapCapable. |
Experimental / work-in-progress maps
| Class | Header | Status |
|---|---|---|
mola::SparseTreesPointCloud |
SparseTreesPointCloud.h |
Coarse 3D grid of independent CSimplePointsMap sub-maps, each with its own KD-tree. Functionally complete but not benchmarked against the hash-based alternatives for typical SLAM workloads. |
mola::OccGrid |
OccGrid.h |
Wraps mrpt::maps::COccupancyGridMap2D with a super-resolution likelihood cache. The cache infrastructure is in place but likelihood population is not yet implemented (// TODO). Not used in any production pipeline. |
Utility / internal classes
| Class | Header | Description |
|---|---|---|
mola::index3d_t<T> |
index3d_t.h |
Discrete 3D integer index. Works as key in std::map and std::unordered_map / tsl::robin_map via the index3d_hash functor, which implements the Teschner et al. (2003) spatial hash. |
mola::FixedDenseGrid3D<T,N,C> |
FixedDenseGrid3D.h |
Dense NxNxN grid (N=2^SIDE_NUM_BITS) allocated with calloc for fast zero-init. Used as the inner block in SparseVoxelPointCloud. Requires trivially-copyable cell types. |
Build and install
Refer to the root MOLA repository.
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 for research and evaluation purposes only. Commercial licenses available upon request, for this package alone or in combination with the complete SLAM system.
Changelog for package mola_metric_maps
2.9.0 (2026-05-11)
- fix: KeyframePointCloudMap viz should honor pointSize
- Merge pull request #143 from MOLAorg/bump-cmake-version bump min req cmake version to 3.22
- bump min req cmake version to 3.22
- Merge pull request #142 from MOLAorg/feat/add-keyframe-map-capable-api feat: Add keyframe map capable API
- feat: Add keyframe map capable API
- Contributors: Jose Luis Blanco-Claraco
2.8.0 (2026-04-29)
-
Merge pull request #139 from MOLAorg/fix/monothonic-kf-ids Fix: ensure monothonic KF ids
-
Fix: ensure monothonic KF ids
-
Merge pull request #138 from MOLAorg/fix/kf-map fix: robustify edge cases from last API changes
-
fix: robustify edge cases from last API changes
-
Merge pull request #137 from MOLAorg/feat/metric-map-changes-for-lo-grav-align mola_metric_maps: per-KF pose plumbing for online gravity rebake
-
feat(mola_metric_maps): per-KF pose plumbing for online gravity rebake Add the KeyframePointCloudMap APIs needed by mola_lidar_odometry's online gravity-rebake feature:
- cloneKFPoses: snapshot of all KF poses keyed by id
- setKeyframePose: per-KF pose overwrite with cache invalidation
- lastInsertedKeyFrameID / nextFreeKeyFrameID_public: id introspection
- drainEvictedKeyFrameIDs: pull-then-clear list of KFs dropped during remove_frames_farther_than-driven evictions inside insertObservation Also exports the MOLA_METRIC_MAPS_HAS_KFM_POSE_PLUMBING feature macro so downstream packages in separate repos (mola_lidar_odometry) can guard usage with __has_include + this macro and stay buildable against older mola_metric_maps checkouts. Adds unit-test coverage for the new APIs in test-mola_metric_maps_keyframemap. Co-Authored-By: Claude Opus 4.7 <<noreply@anthropic.com>>
-
Merge pull request #134 from Zeal-Robotics/perf/keyframe-prewarm-global-submap perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global
-
perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global icp_get_prepared_as_global() was building, on the search submap, only the local-frame KD-tree and per-point covariances (via KeyFrame::buildCache):
- bbox
- kdTreeEnsureIndexBuilt3D() on pointcloud_ (local frame)
- computeCovariancesAndDensity() (local frame) The very first call to nn_search_cov2cov() then lazily materialized the global-frame counterparts on the caller thread:
- pointcloud_global() (deep copy of pointcloud_ rotated by pose())
- kdTreeEnsureIndexBuilt3D() on the global cloud
- covariancesGlobal() (rotated covariances) For a non-trivial preloaded local map this stalled the first ICP align() by several seconds (e.g. ~6 s on a typical localization map), defeating the purpose of having a separate "prepare global" hook. Front-ends that explicitly pre-warm via icp_get_prepared_as_global() at startup were hit hardest, since the remaining lazy work then showed up on the very first scan instead of being amortized across startup. Pre-trigger the same three calls at the end of icp_get_prepared_as_global() so the search submap is fully ready by the time ICP::align() / nn_search_cov2cov() runs.
-
Contributors: Jose Luis Blanco-Claraco, Robin Van Cauwenbergh
2.7.0 (2026-04-22)
- Reorganize website
- Merge pull request #121 from MOLAorg/fix/clean-up-old-mrpt-version-checks Clean up: remove old mrpt version fallback code sections
- Contributors: Jose Luis Blanco-Claraco
2.6.1 (2026-04-02)
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| ament_cmake_xmllint | |
| ament_cmake_gtest | |
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| mola_common | |
| mola_kernel | |
| mrpt_libmaps | |
| mp2p_icp |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mola | |
| mola_lidar_odometry | |
| mola_sm_loop_closure |
Launch files
Messages
Services
Plugins
Recent questions tagged mola_metric_maps at Robotics Stack Exchange
|
mola_metric_maps package from mola repomola mola_bridge_ros2 mola_demos mola_input_lidar_bin_dataset mola_input_rawlog mola_input_rosbag2 mola_input_video mola_kernel mola_launcher mola_metric_maps mola_msgs mola_pose_list mola_relocalization mola_traj_tools mola_viz mola_viz_imgui mola_yaml |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mola.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-05-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
mola_metric_maps
Advanced metric map classes for LiDAR odometry and SLAM, built on the
generic mrpt::maps::CMetricMap interface. All maps are serializable,
visualizable, and integrate with the mp2p_icp
registration library.
Map classes
Production-quality maps
| Class | Header | Description |
|---|---|---|
mola::HashedVoxelPointCloud |
HashedVoxelPointCloud.h |
Flat sparse hash map of cubic voxels. Up to 32 points per voxel stored without heap allocation (fixed array SSO). Backend: tsl::robin_map. Implements NearestNeighborsCapable. |
mola::SparseVoxelPointCloud |
SparseVoxelPointCloud.h |
Two-level voxel map: sparse outer blocks + 32³ inner FixedDenseGrid3D. Tracks per-voxel point means; supports voxel-mean ICP matching. Implements NearestNeighborsCapable. The primary workhorse map in MOLA LO/SLAM. |
mola::NDT |
NDT.h |
Normal Distributions Transform map (Magnusson 2007). Fits a Gaussian per voxel; planar voxels expose NearestPlaneCapable, non-planar ones expose NearestNeighborsCapable. Enables automatic point-to-point vs. point-to-plane pairing selection. |
mola::KeyframePointCloudMap |
KeyframePointCloudMap.h |
Keyframe-based map: each keyframe holds a local point cloud plus a SE(3) pose. Supports map corrections without re-inserting points (just update poses). Implements IcpPrepareCapable, NearestPointWithCovCapable, MetricMapMergeCapable, and KeyframeMapCapable. |
Experimental / work-in-progress maps
| Class | Header | Status |
|---|---|---|
mola::SparseTreesPointCloud |
SparseTreesPointCloud.h |
Coarse 3D grid of independent CSimplePointsMap sub-maps, each with its own KD-tree. Functionally complete but not benchmarked against the hash-based alternatives for typical SLAM workloads. |
mola::OccGrid |
OccGrid.h |
Wraps mrpt::maps::COccupancyGridMap2D with a super-resolution likelihood cache. The cache infrastructure is in place but likelihood population is not yet implemented (// TODO). Not used in any production pipeline. |
Utility / internal classes
| Class | Header | Description |
|---|---|---|
mola::index3d_t<T> |
index3d_t.h |
Discrete 3D integer index. Works as key in std::map and std::unordered_map / tsl::robin_map via the index3d_hash functor, which implements the Teschner et al. (2003) spatial hash. |
mola::FixedDenseGrid3D<T,N,C> |
FixedDenseGrid3D.h |
Dense NxNxN grid (N=2^SIDE_NUM_BITS) allocated with calloc for fast zero-init. Used as the inner block in SparseVoxelPointCloud. Requires trivially-copyable cell types. |
Build and install
Refer to the root MOLA repository.
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 for research and evaluation purposes only. Commercial licenses available upon request, for this package alone or in combination with the complete SLAM system.
Changelog for package mola_metric_maps
2.9.0 (2026-05-11)
- fix: KeyframePointCloudMap viz should honor pointSize
- Merge pull request #143 from MOLAorg/bump-cmake-version bump min req cmake version to 3.22
- bump min req cmake version to 3.22
- Merge pull request #142 from MOLAorg/feat/add-keyframe-map-capable-api feat: Add keyframe map capable API
- feat: Add keyframe map capable API
- Contributors: Jose Luis Blanco-Claraco
2.8.0 (2026-04-29)
-
Merge pull request #139 from MOLAorg/fix/monothonic-kf-ids Fix: ensure monothonic KF ids
-
Fix: ensure monothonic KF ids
-
Merge pull request #138 from MOLAorg/fix/kf-map fix: robustify edge cases from last API changes
-
fix: robustify edge cases from last API changes
-
Merge pull request #137 from MOLAorg/feat/metric-map-changes-for-lo-grav-align mola_metric_maps: per-KF pose plumbing for online gravity rebake
-
feat(mola_metric_maps): per-KF pose plumbing for online gravity rebake Add the KeyframePointCloudMap APIs needed by mola_lidar_odometry's online gravity-rebake feature:
- cloneKFPoses: snapshot of all KF poses keyed by id
- setKeyframePose: per-KF pose overwrite with cache invalidation
- lastInsertedKeyFrameID / nextFreeKeyFrameID_public: id introspection
- drainEvictedKeyFrameIDs: pull-then-clear list of KFs dropped during remove_frames_farther_than-driven evictions inside insertObservation Also exports the MOLA_METRIC_MAPS_HAS_KFM_POSE_PLUMBING feature macro so downstream packages in separate repos (mola_lidar_odometry) can guard usage with __has_include + this macro and stay buildable against older mola_metric_maps checkouts. Adds unit-test coverage for the new APIs in test-mola_metric_maps_keyframemap. Co-Authored-By: Claude Opus 4.7 <<noreply@anthropic.com>>
-
Merge pull request #134 from Zeal-Robotics/perf/keyframe-prewarm-global-submap perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global
-
perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global icp_get_prepared_as_global() was building, on the search submap, only the local-frame KD-tree and per-point covariances (via KeyFrame::buildCache):
- bbox
- kdTreeEnsureIndexBuilt3D() on pointcloud_ (local frame)
- computeCovariancesAndDensity() (local frame) The very first call to nn_search_cov2cov() then lazily materialized the global-frame counterparts on the caller thread:
- pointcloud_global() (deep copy of pointcloud_ rotated by pose())
- kdTreeEnsureIndexBuilt3D() on the global cloud
- covariancesGlobal() (rotated covariances) For a non-trivial preloaded local map this stalled the first ICP align() by several seconds (e.g. ~6 s on a typical localization map), defeating the purpose of having a separate "prepare global" hook. Front-ends that explicitly pre-warm via icp_get_prepared_as_global() at startup were hit hardest, since the remaining lazy work then showed up on the very first scan instead of being amortized across startup. Pre-trigger the same three calls at the end of icp_get_prepared_as_global() so the search submap is fully ready by the time ICP::align() / nn_search_cov2cov() runs.
-
Contributors: Jose Luis Blanco-Claraco, Robin Van Cauwenbergh
2.7.0 (2026-04-22)
- Reorganize website
- Merge pull request #121 from MOLAorg/fix/clean-up-old-mrpt-version-checks Clean up: remove old mrpt version fallback code sections
- Contributors: Jose Luis Blanco-Claraco
2.6.1 (2026-04-02)
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| ament_cmake_xmllint | |
| ament_cmake_gtest | |
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| mola_common | |
| mola_kernel | |
| mrpt_libmaps | |
| mp2p_icp |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mola | |
| mola_lidar_odometry | |
| mola_sm_loop_closure |
Launch files
Messages
Services
Plugins
Recent questions tagged mola_metric_maps at Robotics Stack Exchange
|
mola_metric_maps package from mola repomola mola_bridge_ros2 mola_demos mola_input_lidar_bin_dataset mola_input_rawlog mola_input_rosbag2 mola_input_video mola_kernel mola_launcher mola_metric_maps mola_msgs mola_pose_list mola_relocalization mola_traj_tools mola_viz mola_viz_imgui mola_yaml |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mola.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-05-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
mola_metric_maps
Advanced metric map classes for LiDAR odometry and SLAM, built on the
generic mrpt::maps::CMetricMap interface. All maps are serializable,
visualizable, and integrate with the mp2p_icp
registration library.
Map classes
Production-quality maps
| Class | Header | Description |
|---|---|---|
mola::HashedVoxelPointCloud |
HashedVoxelPointCloud.h |
Flat sparse hash map of cubic voxels. Up to 32 points per voxel stored without heap allocation (fixed array SSO). Backend: tsl::robin_map. Implements NearestNeighborsCapable. |
mola::SparseVoxelPointCloud |
SparseVoxelPointCloud.h |
Two-level voxel map: sparse outer blocks + 32³ inner FixedDenseGrid3D. Tracks per-voxel point means; supports voxel-mean ICP matching. Implements NearestNeighborsCapable. The primary workhorse map in MOLA LO/SLAM. |
mola::NDT |
NDT.h |
Normal Distributions Transform map (Magnusson 2007). Fits a Gaussian per voxel; planar voxels expose NearestPlaneCapable, non-planar ones expose NearestNeighborsCapable. Enables automatic point-to-point vs. point-to-plane pairing selection. |
mola::KeyframePointCloudMap |
KeyframePointCloudMap.h |
Keyframe-based map: each keyframe holds a local point cloud plus a SE(3) pose. Supports map corrections without re-inserting points (just update poses). Implements IcpPrepareCapable, NearestPointWithCovCapable, MetricMapMergeCapable, and KeyframeMapCapable. |
Experimental / work-in-progress maps
| Class | Header | Status |
|---|---|---|
mola::SparseTreesPointCloud |
SparseTreesPointCloud.h |
Coarse 3D grid of independent CSimplePointsMap sub-maps, each with its own KD-tree. Functionally complete but not benchmarked against the hash-based alternatives for typical SLAM workloads. |
mola::OccGrid |
OccGrid.h |
Wraps mrpt::maps::COccupancyGridMap2D with a super-resolution likelihood cache. The cache infrastructure is in place but likelihood population is not yet implemented (// TODO). Not used in any production pipeline. |
Utility / internal classes
| Class | Header | Description |
|---|---|---|
mola::index3d_t<T> |
index3d_t.h |
Discrete 3D integer index. Works as key in std::map and std::unordered_map / tsl::robin_map via the index3d_hash functor, which implements the Teschner et al. (2003) spatial hash. |
mola::FixedDenseGrid3D<T,N,C> |
FixedDenseGrid3D.h |
Dense NxNxN grid (N=2^SIDE_NUM_BITS) allocated with calloc for fast zero-init. Used as the inner block in SparseVoxelPointCloud. Requires trivially-copyable cell types. |
Build and install
Refer to the root MOLA repository.
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 for research and evaluation purposes only. Commercial licenses available upon request, for this package alone or in combination with the complete SLAM system.
Changelog for package mola_metric_maps
2.9.0 (2026-05-11)
- fix: KeyframePointCloudMap viz should honor pointSize
- Merge pull request #143 from MOLAorg/bump-cmake-version bump min req cmake version to 3.22
- bump min req cmake version to 3.22
- Merge pull request #142 from MOLAorg/feat/add-keyframe-map-capable-api feat: Add keyframe map capable API
- feat: Add keyframe map capable API
- Contributors: Jose Luis Blanco-Claraco
2.8.0 (2026-04-29)
-
Merge pull request #139 from MOLAorg/fix/monothonic-kf-ids Fix: ensure monothonic KF ids
-
Fix: ensure monothonic KF ids
-
Merge pull request #138 from MOLAorg/fix/kf-map fix: robustify edge cases from last API changes
-
fix: robustify edge cases from last API changes
-
Merge pull request #137 from MOLAorg/feat/metric-map-changes-for-lo-grav-align mola_metric_maps: per-KF pose plumbing for online gravity rebake
-
feat(mola_metric_maps): per-KF pose plumbing for online gravity rebake Add the KeyframePointCloudMap APIs needed by mola_lidar_odometry's online gravity-rebake feature:
- cloneKFPoses: snapshot of all KF poses keyed by id
- setKeyframePose: per-KF pose overwrite with cache invalidation
- lastInsertedKeyFrameID / nextFreeKeyFrameID_public: id introspection
- drainEvictedKeyFrameIDs: pull-then-clear list of KFs dropped during remove_frames_farther_than-driven evictions inside insertObservation Also exports the MOLA_METRIC_MAPS_HAS_KFM_POSE_PLUMBING feature macro so downstream packages in separate repos (mola_lidar_odometry) can guard usage with __has_include + this macro and stay buildable against older mola_metric_maps checkouts. Adds unit-test coverage for the new APIs in test-mola_metric_maps_keyframemap. Co-Authored-By: Claude Opus 4.7 <<noreply@anthropic.com>>
-
Merge pull request #134 from Zeal-Robotics/perf/keyframe-prewarm-global-submap perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global
-
perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global icp_get_prepared_as_global() was building, on the search submap, only the local-frame KD-tree and per-point covariances (via KeyFrame::buildCache):
- bbox
- kdTreeEnsureIndexBuilt3D() on pointcloud_ (local frame)
- computeCovariancesAndDensity() (local frame) The very first call to nn_search_cov2cov() then lazily materialized the global-frame counterparts on the caller thread:
- pointcloud_global() (deep copy of pointcloud_ rotated by pose())
- kdTreeEnsureIndexBuilt3D() on the global cloud
- covariancesGlobal() (rotated covariances) For a non-trivial preloaded local map this stalled the first ICP align() by several seconds (e.g. ~6 s on a typical localization map), defeating the purpose of having a separate "prepare global" hook. Front-ends that explicitly pre-warm via icp_get_prepared_as_global() at startup were hit hardest, since the remaining lazy work then showed up on the very first scan instead of being amortized across startup. Pre-trigger the same three calls at the end of icp_get_prepared_as_global() so the search submap is fully ready by the time ICP::align() / nn_search_cov2cov() runs.
-
Contributors: Jose Luis Blanco-Claraco, Robin Van Cauwenbergh
2.7.0 (2026-04-22)
- Reorganize website
- Merge pull request #121 from MOLAorg/fix/clean-up-old-mrpt-version-checks Clean up: remove old mrpt version fallback code sections
- Contributors: Jose Luis Blanco-Claraco
2.6.1 (2026-04-02)
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| ament_cmake_xmllint | |
| ament_cmake_gtest | |
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| mola_common | |
| mola_kernel | |
| mrpt_libmaps | |
| mp2p_icp |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mola | |
| mola_lidar_odometry | |
| mola_sm_loop_closure |
Launch files
Messages
Services
Plugins
Recent questions tagged mola_metric_maps at Robotics Stack Exchange
|
mola_metric_maps package from mola repomola mola_bridge_ros2 mola_demos mola_input_lidar_bin_dataset mola_input_rawlog mola_input_rosbag2 mola_input_video mola_kernel mola_launcher mola_metric_maps mola_msgs mola_pose_list mola_relocalization mola_traj_tools mola_viz mola_viz_imgui mola_yaml |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mola.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-05-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
mola_metric_maps
Advanced metric map classes for LiDAR odometry and SLAM, built on the
generic mrpt::maps::CMetricMap interface. All maps are serializable,
visualizable, and integrate with the mp2p_icp
registration library.
Map classes
Production-quality maps
| Class | Header | Description |
|---|---|---|
mola::HashedVoxelPointCloud |
HashedVoxelPointCloud.h |
Flat sparse hash map of cubic voxels. Up to 32 points per voxel stored without heap allocation (fixed array SSO). Backend: tsl::robin_map. Implements NearestNeighborsCapable. |
mola::SparseVoxelPointCloud |
SparseVoxelPointCloud.h |
Two-level voxel map: sparse outer blocks + 32³ inner FixedDenseGrid3D. Tracks per-voxel point means; supports voxel-mean ICP matching. Implements NearestNeighborsCapable. The primary workhorse map in MOLA LO/SLAM. |
mola::NDT |
NDT.h |
Normal Distributions Transform map (Magnusson 2007). Fits a Gaussian per voxel; planar voxels expose NearestPlaneCapable, non-planar ones expose NearestNeighborsCapable. Enables automatic point-to-point vs. point-to-plane pairing selection. |
mola::KeyframePointCloudMap |
KeyframePointCloudMap.h |
Keyframe-based map: each keyframe holds a local point cloud plus a SE(3) pose. Supports map corrections without re-inserting points (just update poses). Implements IcpPrepareCapable, NearestPointWithCovCapable, MetricMapMergeCapable, and KeyframeMapCapable. |
Experimental / work-in-progress maps
| Class | Header | Status |
|---|---|---|
mola::SparseTreesPointCloud |
SparseTreesPointCloud.h |
Coarse 3D grid of independent CSimplePointsMap sub-maps, each with its own KD-tree. Functionally complete but not benchmarked against the hash-based alternatives for typical SLAM workloads. |
mola::OccGrid |
OccGrid.h |
Wraps mrpt::maps::COccupancyGridMap2D with a super-resolution likelihood cache. The cache infrastructure is in place but likelihood population is not yet implemented (// TODO). Not used in any production pipeline. |
Utility / internal classes
| Class | Header | Description |
|---|---|---|
mola::index3d_t<T> |
index3d_t.h |
Discrete 3D integer index. Works as key in std::map and std::unordered_map / tsl::robin_map via the index3d_hash functor, which implements the Teschner et al. (2003) spatial hash. |
mola::FixedDenseGrid3D<T,N,C> |
FixedDenseGrid3D.h |
Dense NxNxN grid (N=2^SIDE_NUM_BITS) allocated with calloc for fast zero-init. Used as the inner block in SparseVoxelPointCloud. Requires trivially-copyable cell types. |
Build and install
Refer to the root MOLA repository.
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 for research and evaluation purposes only. Commercial licenses available upon request, for this package alone or in combination with the complete SLAM system.
Changelog for package mola_metric_maps
2.9.0 (2026-05-11)
- fix: KeyframePointCloudMap viz should honor pointSize
- Merge pull request #143 from MOLAorg/bump-cmake-version bump min req cmake version to 3.22
- bump min req cmake version to 3.22
- Merge pull request #142 from MOLAorg/feat/add-keyframe-map-capable-api feat: Add keyframe map capable API
- feat: Add keyframe map capable API
- Contributors: Jose Luis Blanco-Claraco
2.8.0 (2026-04-29)
-
Merge pull request #139 from MOLAorg/fix/monothonic-kf-ids Fix: ensure monothonic KF ids
-
Fix: ensure monothonic KF ids
-
Merge pull request #138 from MOLAorg/fix/kf-map fix: robustify edge cases from last API changes
-
fix: robustify edge cases from last API changes
-
Merge pull request #137 from MOLAorg/feat/metric-map-changes-for-lo-grav-align mola_metric_maps: per-KF pose plumbing for online gravity rebake
-
feat(mola_metric_maps): per-KF pose plumbing for online gravity rebake Add the KeyframePointCloudMap APIs needed by mola_lidar_odometry's online gravity-rebake feature:
- cloneKFPoses: snapshot of all KF poses keyed by id
- setKeyframePose: per-KF pose overwrite with cache invalidation
- lastInsertedKeyFrameID / nextFreeKeyFrameID_public: id introspection
- drainEvictedKeyFrameIDs: pull-then-clear list of KFs dropped during remove_frames_farther_than-driven evictions inside insertObservation Also exports the MOLA_METRIC_MAPS_HAS_KFM_POSE_PLUMBING feature macro so downstream packages in separate repos (mola_lidar_odometry) can guard usage with __has_include + this macro and stay buildable against older mola_metric_maps checkouts. Adds unit-test coverage for the new APIs in test-mola_metric_maps_keyframemap. Co-Authored-By: Claude Opus 4.7 <<noreply@anthropic.com>>
-
Merge pull request #134 from Zeal-Robotics/perf/keyframe-prewarm-global-submap perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global
-
perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global icp_get_prepared_as_global() was building, on the search submap, only the local-frame KD-tree and per-point covariances (via KeyFrame::buildCache):
- bbox
- kdTreeEnsureIndexBuilt3D() on pointcloud_ (local frame)
- computeCovariancesAndDensity() (local frame) The very first call to nn_search_cov2cov() then lazily materialized the global-frame counterparts on the caller thread:
- pointcloud_global() (deep copy of pointcloud_ rotated by pose())
- kdTreeEnsureIndexBuilt3D() on the global cloud
- covariancesGlobal() (rotated covariances) For a non-trivial preloaded local map this stalled the first ICP align() by several seconds (e.g. ~6 s on a typical localization map), defeating the purpose of having a separate "prepare global" hook. Front-ends that explicitly pre-warm via icp_get_prepared_as_global() at startup were hit hardest, since the remaining lazy work then showed up on the very first scan instead of being amortized across startup. Pre-trigger the same three calls at the end of icp_get_prepared_as_global() so the search submap is fully ready by the time ICP::align() / nn_search_cov2cov() runs.
-
Contributors: Jose Luis Blanco-Claraco, Robin Van Cauwenbergh
2.7.0 (2026-04-22)
- Reorganize website
- Merge pull request #121 from MOLAorg/fix/clean-up-old-mrpt-version-checks Clean up: remove old mrpt version fallback code sections
- Contributors: Jose Luis Blanco-Claraco
2.6.1 (2026-04-02)
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| ament_cmake_xmllint | |
| ament_cmake_gtest | |
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| mola_common | |
| mola_kernel | |
| mrpt_libmaps | |
| mp2p_icp |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mola | |
| mola_lidar_odometry | |
| mola_sm_loop_closure |
Launch files
Messages
Services
Plugins
Recent questions tagged mola_metric_maps at Robotics Stack Exchange
|
mola_metric_maps package from mola repomola mola_bridge_ros2 mola_demos mola_input_lidar_bin_dataset mola_input_rawlog mola_input_rosbag2 mola_input_video mola_kernel mola_launcher mola_metric_maps mola_msgs mola_pose_list mola_relocalization mola_traj_tools mola_viz mola_viz_imgui mola_yaml |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mola.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-05-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
mola_metric_maps
Advanced metric map classes for LiDAR odometry and SLAM, built on the
generic mrpt::maps::CMetricMap interface. All maps are serializable,
visualizable, and integrate with the mp2p_icp
registration library.
Map classes
Production-quality maps
| Class | Header | Description |
|---|---|---|
mola::HashedVoxelPointCloud |
HashedVoxelPointCloud.h |
Flat sparse hash map of cubic voxels. Up to 32 points per voxel stored without heap allocation (fixed array SSO). Backend: tsl::robin_map. Implements NearestNeighborsCapable. |
mola::SparseVoxelPointCloud |
SparseVoxelPointCloud.h |
Two-level voxel map: sparse outer blocks + 32³ inner FixedDenseGrid3D. Tracks per-voxel point means; supports voxel-mean ICP matching. Implements NearestNeighborsCapable. The primary workhorse map in MOLA LO/SLAM. |
mola::NDT |
NDT.h |
Normal Distributions Transform map (Magnusson 2007). Fits a Gaussian per voxel; planar voxels expose NearestPlaneCapable, non-planar ones expose NearestNeighborsCapable. Enables automatic point-to-point vs. point-to-plane pairing selection. |
mola::KeyframePointCloudMap |
KeyframePointCloudMap.h |
Keyframe-based map: each keyframe holds a local point cloud plus a SE(3) pose. Supports map corrections without re-inserting points (just update poses). Implements IcpPrepareCapable, NearestPointWithCovCapable, MetricMapMergeCapable, and KeyframeMapCapable. |
Experimental / work-in-progress maps
| Class | Header | Status |
|---|---|---|
mola::SparseTreesPointCloud |
SparseTreesPointCloud.h |
Coarse 3D grid of independent CSimplePointsMap sub-maps, each with its own KD-tree. Functionally complete but not benchmarked against the hash-based alternatives for typical SLAM workloads. |
mola::OccGrid |
OccGrid.h |
Wraps mrpt::maps::COccupancyGridMap2D with a super-resolution likelihood cache. The cache infrastructure is in place but likelihood population is not yet implemented (// TODO). Not used in any production pipeline. |
Utility / internal classes
| Class | Header | Description |
|---|---|---|
mola::index3d_t<T> |
index3d_t.h |
Discrete 3D integer index. Works as key in std::map and std::unordered_map / tsl::robin_map via the index3d_hash functor, which implements the Teschner et al. (2003) spatial hash. |
mola::FixedDenseGrid3D<T,N,C> |
FixedDenseGrid3D.h |
Dense NxNxN grid (N=2^SIDE_NUM_BITS) allocated with calloc for fast zero-init. Used as the inner block in SparseVoxelPointCloud. Requires trivially-copyable cell types. |
Build and install
Refer to the root MOLA repository.
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 for research and evaluation purposes only. Commercial licenses available upon request, for this package alone or in combination with the complete SLAM system.
Changelog for package mola_metric_maps
2.9.0 (2026-05-11)
- fix: KeyframePointCloudMap viz should honor pointSize
- Merge pull request #143 from MOLAorg/bump-cmake-version bump min req cmake version to 3.22
- bump min req cmake version to 3.22
- Merge pull request #142 from MOLAorg/feat/add-keyframe-map-capable-api feat: Add keyframe map capable API
- feat: Add keyframe map capable API
- Contributors: Jose Luis Blanco-Claraco
2.8.0 (2026-04-29)
-
Merge pull request #139 from MOLAorg/fix/monothonic-kf-ids Fix: ensure monothonic KF ids
-
Fix: ensure monothonic KF ids
-
Merge pull request #138 from MOLAorg/fix/kf-map fix: robustify edge cases from last API changes
-
fix: robustify edge cases from last API changes
-
Merge pull request #137 from MOLAorg/feat/metric-map-changes-for-lo-grav-align mola_metric_maps: per-KF pose plumbing for online gravity rebake
-
feat(mola_metric_maps): per-KF pose plumbing for online gravity rebake Add the KeyframePointCloudMap APIs needed by mola_lidar_odometry's online gravity-rebake feature:
- cloneKFPoses: snapshot of all KF poses keyed by id
- setKeyframePose: per-KF pose overwrite with cache invalidation
- lastInsertedKeyFrameID / nextFreeKeyFrameID_public: id introspection
- drainEvictedKeyFrameIDs: pull-then-clear list of KFs dropped during remove_frames_farther_than-driven evictions inside insertObservation Also exports the MOLA_METRIC_MAPS_HAS_KFM_POSE_PLUMBING feature macro so downstream packages in separate repos (mola_lidar_odometry) can guard usage with __has_include + this macro and stay buildable against older mola_metric_maps checkouts. Adds unit-test coverage for the new APIs in test-mola_metric_maps_keyframemap. Co-Authored-By: Claude Opus 4.7 <<noreply@anthropic.com>>
-
Merge pull request #134 from Zeal-Robotics/perf/keyframe-prewarm-global-submap perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global
-
perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global icp_get_prepared_as_global() was building, on the search submap, only the local-frame KD-tree and per-point covariances (via KeyFrame::buildCache):
- bbox
- kdTreeEnsureIndexBuilt3D() on pointcloud_ (local frame)
- computeCovariancesAndDensity() (local frame) The very first call to nn_search_cov2cov() then lazily materialized the global-frame counterparts on the caller thread:
- pointcloud_global() (deep copy of pointcloud_ rotated by pose())
- kdTreeEnsureIndexBuilt3D() on the global cloud
- covariancesGlobal() (rotated covariances) For a non-trivial preloaded local map this stalled the first ICP align() by several seconds (e.g. ~6 s on a typical localization map), defeating the purpose of having a separate "prepare global" hook. Front-ends that explicitly pre-warm via icp_get_prepared_as_global() at startup were hit hardest, since the remaining lazy work then showed up on the very first scan instead of being amortized across startup. Pre-trigger the same three calls at the end of icp_get_prepared_as_global() so the search submap is fully ready by the time ICP::align() / nn_search_cov2cov() runs.
-
Contributors: Jose Luis Blanco-Claraco, Robin Van Cauwenbergh
2.7.0 (2026-04-22)
- Reorganize website
- Merge pull request #121 from MOLAorg/fix/clean-up-old-mrpt-version-checks Clean up: remove old mrpt version fallback code sections
- Contributors: Jose Luis Blanco-Claraco
2.6.1 (2026-04-02)
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| ament_cmake_xmllint | |
| ament_cmake_gtest | |
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| mola_common | |
| mola_kernel | |
| mrpt_libmaps | |
| mp2p_icp |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mola | |
| mola_lidar_odometry |
Launch files
Messages
Services
Plugins
Recent questions tagged mola_metric_maps at Robotics Stack Exchange
|
mola_metric_maps package from mola repomola mola_bridge_ros2 mola_demos mola_input_lidar_bin_dataset mola_input_rawlog mola_input_rosbag2 mola_input_video mola_kernel mola_launcher mola_metric_maps mola_msgs mola_pose_list mola_relocalization mola_traj_tools mola_viz mola_viz_imgui mola_yaml |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mola.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-05-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
mola_metric_maps
Advanced metric map classes for LiDAR odometry and SLAM, built on the
generic mrpt::maps::CMetricMap interface. All maps are serializable,
visualizable, and integrate with the mp2p_icp
registration library.
Map classes
Production-quality maps
| Class | Header | Description |
|---|---|---|
mola::HashedVoxelPointCloud |
HashedVoxelPointCloud.h |
Flat sparse hash map of cubic voxels. Up to 32 points per voxel stored without heap allocation (fixed array SSO). Backend: tsl::robin_map. Implements NearestNeighborsCapable. |
mola::SparseVoxelPointCloud |
SparseVoxelPointCloud.h |
Two-level voxel map: sparse outer blocks + 32³ inner FixedDenseGrid3D. Tracks per-voxel point means; supports voxel-mean ICP matching. Implements NearestNeighborsCapable. The primary workhorse map in MOLA LO/SLAM. |
mola::NDT |
NDT.h |
Normal Distributions Transform map (Magnusson 2007). Fits a Gaussian per voxel; planar voxels expose NearestPlaneCapable, non-planar ones expose NearestNeighborsCapable. Enables automatic point-to-point vs. point-to-plane pairing selection. |
mola::KeyframePointCloudMap |
KeyframePointCloudMap.h |
Keyframe-based map: each keyframe holds a local point cloud plus a SE(3) pose. Supports map corrections without re-inserting points (just update poses). Implements IcpPrepareCapable, NearestPointWithCovCapable, MetricMapMergeCapable, and KeyframeMapCapable. |
Experimental / work-in-progress maps
| Class | Header | Status |
|---|---|---|
mola::SparseTreesPointCloud |
SparseTreesPointCloud.h |
Coarse 3D grid of independent CSimplePointsMap sub-maps, each with its own KD-tree. Functionally complete but not benchmarked against the hash-based alternatives for typical SLAM workloads. |
mola::OccGrid |
OccGrid.h |
Wraps mrpt::maps::COccupancyGridMap2D with a super-resolution likelihood cache. The cache infrastructure is in place but likelihood population is not yet implemented (// TODO). Not used in any production pipeline. |
Utility / internal classes
| Class | Header | Description |
|---|---|---|
mola::index3d_t<T> |
index3d_t.h |
Discrete 3D integer index. Works as key in std::map and std::unordered_map / tsl::robin_map via the index3d_hash functor, which implements the Teschner et al. (2003) spatial hash. |
mola::FixedDenseGrid3D<T,N,C> |
FixedDenseGrid3D.h |
Dense NxNxN grid (N=2^SIDE_NUM_BITS) allocated with calloc for fast zero-init. Used as the inner block in SparseVoxelPointCloud. Requires trivially-copyable cell types. |
Build and install
Refer to the root MOLA repository.
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 for research and evaluation purposes only. Commercial licenses available upon request, for this package alone or in combination with the complete SLAM system.
Changelog for package mola_metric_maps
2.9.0 (2026-05-11)
- fix: KeyframePointCloudMap viz should honor pointSize
- Merge pull request #143 from MOLAorg/bump-cmake-version bump min req cmake version to 3.22
- bump min req cmake version to 3.22
- Merge pull request #142 from MOLAorg/feat/add-keyframe-map-capable-api feat: Add keyframe map capable API
- feat: Add keyframe map capable API
- Contributors: Jose Luis Blanco-Claraco
2.8.0 (2026-04-29)
-
Merge pull request #139 from MOLAorg/fix/monothonic-kf-ids Fix: ensure monothonic KF ids
-
Fix: ensure monothonic KF ids
-
Merge pull request #138 from MOLAorg/fix/kf-map fix: robustify edge cases from last API changes
-
fix: robustify edge cases from last API changes
-
Merge pull request #137 from MOLAorg/feat/metric-map-changes-for-lo-grav-align mola_metric_maps: per-KF pose plumbing for online gravity rebake
-
feat(mola_metric_maps): per-KF pose plumbing for online gravity rebake Add the KeyframePointCloudMap APIs needed by mola_lidar_odometry's online gravity-rebake feature:
- cloneKFPoses: snapshot of all KF poses keyed by id
- setKeyframePose: per-KF pose overwrite with cache invalidation
- lastInsertedKeyFrameID / nextFreeKeyFrameID_public: id introspection
- drainEvictedKeyFrameIDs: pull-then-clear list of KFs dropped during remove_frames_farther_than-driven evictions inside insertObservation Also exports the MOLA_METRIC_MAPS_HAS_KFM_POSE_PLUMBING feature macro so downstream packages in separate repos (mola_lidar_odometry) can guard usage with __has_include + this macro and stay buildable against older mola_metric_maps checkouts. Adds unit-test coverage for the new APIs in test-mola_metric_maps_keyframemap. Co-Authored-By: Claude Opus 4.7 <<noreply@anthropic.com>>
-
Merge pull request #134 from Zeal-Robotics/perf/keyframe-prewarm-global-submap perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global
-
perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global icp_get_prepared_as_global() was building, on the search submap, only the local-frame KD-tree and per-point covariances (via KeyFrame::buildCache):
- bbox
- kdTreeEnsureIndexBuilt3D() on pointcloud_ (local frame)
- computeCovariancesAndDensity() (local frame) The very first call to nn_search_cov2cov() then lazily materialized the global-frame counterparts on the caller thread:
- pointcloud_global() (deep copy of pointcloud_ rotated by pose())
- kdTreeEnsureIndexBuilt3D() on the global cloud
- covariancesGlobal() (rotated covariances) For a non-trivial preloaded local map this stalled the first ICP align() by several seconds (e.g. ~6 s on a typical localization map), defeating the purpose of having a separate "prepare global" hook. Front-ends that explicitly pre-warm via icp_get_prepared_as_global() at startup were hit hardest, since the remaining lazy work then showed up on the very first scan instead of being amortized across startup. Pre-trigger the same three calls at the end of icp_get_prepared_as_global() so the search submap is fully ready by the time ICP::align() / nn_search_cov2cov() runs.
-
Contributors: Jose Luis Blanco-Claraco, Robin Van Cauwenbergh
2.7.0 (2026-04-22)
- Reorganize website
- Merge pull request #121 from MOLAorg/fix/clean-up-old-mrpt-version-checks Clean up: remove old mrpt version fallback code sections
- Contributors: Jose Luis Blanco-Claraco
2.6.1 (2026-04-02)
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| ament_cmake_xmllint | |
| ament_cmake_gtest | |
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| mola_common | |
| mola_kernel | |
| mrpt_libmaps | |
| mp2p_icp |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mola | |
| mola_lidar_odometry | |
| mola_sm_loop_closure |
Launch files
Messages
Services
Plugins
Recent questions tagged mola_metric_maps at Robotics Stack Exchange
|
mola_metric_maps package from mola repomola mola_bridge_ros2 mola_demos mola_input_lidar_bin_dataset mola_input_rawlog mola_input_rosbag2 mola_input_video mola_kernel mola_launcher mola_metric_maps mola_msgs mola_pose_list mola_relocalization mola_traj_tools mola_viz mola_viz_imgui mola_yaml |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mola.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-05-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
mola_metric_maps
Advanced metric map classes for LiDAR odometry and SLAM, built on the
generic mrpt::maps::CMetricMap interface. All maps are serializable,
visualizable, and integrate with the mp2p_icp
registration library.
Map classes
Production-quality maps
| Class | Header | Description |
|---|---|---|
mola::HashedVoxelPointCloud |
HashedVoxelPointCloud.h |
Flat sparse hash map of cubic voxels. Up to 32 points per voxel stored without heap allocation (fixed array SSO). Backend: tsl::robin_map. Implements NearestNeighborsCapable. |
mola::SparseVoxelPointCloud |
SparseVoxelPointCloud.h |
Two-level voxel map: sparse outer blocks + 32³ inner FixedDenseGrid3D. Tracks per-voxel point means; supports voxel-mean ICP matching. Implements NearestNeighborsCapable. The primary workhorse map in MOLA LO/SLAM. |
mola::NDT |
NDT.h |
Normal Distributions Transform map (Magnusson 2007). Fits a Gaussian per voxel; planar voxels expose NearestPlaneCapable, non-planar ones expose NearestNeighborsCapable. Enables automatic point-to-point vs. point-to-plane pairing selection. |
mola::KeyframePointCloudMap |
KeyframePointCloudMap.h |
Keyframe-based map: each keyframe holds a local point cloud plus a SE(3) pose. Supports map corrections without re-inserting points (just update poses). Implements IcpPrepareCapable, NearestPointWithCovCapable, MetricMapMergeCapable, and KeyframeMapCapable. |
Experimental / work-in-progress maps
| Class | Header | Status |
|---|---|---|
mola::SparseTreesPointCloud |
SparseTreesPointCloud.h |
Coarse 3D grid of independent CSimplePointsMap sub-maps, each with its own KD-tree. Functionally complete but not benchmarked against the hash-based alternatives for typical SLAM workloads. |
mola::OccGrid |
OccGrid.h |
Wraps mrpt::maps::COccupancyGridMap2D with a super-resolution likelihood cache. The cache infrastructure is in place but likelihood population is not yet implemented (// TODO). Not used in any production pipeline. |
Utility / internal classes
| Class | Header | Description |
|---|---|---|
mola::index3d_t<T> |
index3d_t.h |
Discrete 3D integer index. Works as key in std::map and std::unordered_map / tsl::robin_map via the index3d_hash functor, which implements the Teschner et al. (2003) spatial hash. |
mola::FixedDenseGrid3D<T,N,C> |
FixedDenseGrid3D.h |
Dense NxNxN grid (N=2^SIDE_NUM_BITS) allocated with calloc for fast zero-init. Used as the inner block in SparseVoxelPointCloud. Requires trivially-copyable cell types. |
Build and install
Refer to the root MOLA repository.
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 for research and evaluation purposes only. Commercial licenses available upon request, for this package alone or in combination with the complete SLAM system.
Changelog for package mola_metric_maps
2.9.0 (2026-05-11)
- fix: KeyframePointCloudMap viz should honor pointSize
- Merge pull request #143 from MOLAorg/bump-cmake-version bump min req cmake version to 3.22
- bump min req cmake version to 3.22
- Merge pull request #142 from MOLAorg/feat/add-keyframe-map-capable-api feat: Add keyframe map capable API
- feat: Add keyframe map capable API
- Contributors: Jose Luis Blanco-Claraco
2.8.0 (2026-04-29)
-
Merge pull request #139 from MOLAorg/fix/monothonic-kf-ids Fix: ensure monothonic KF ids
-
Fix: ensure monothonic KF ids
-
Merge pull request #138 from MOLAorg/fix/kf-map fix: robustify edge cases from last API changes
-
fix: robustify edge cases from last API changes
-
Merge pull request #137 from MOLAorg/feat/metric-map-changes-for-lo-grav-align mola_metric_maps: per-KF pose plumbing for online gravity rebake
-
feat(mola_metric_maps): per-KF pose plumbing for online gravity rebake Add the KeyframePointCloudMap APIs needed by mola_lidar_odometry's online gravity-rebake feature:
- cloneKFPoses: snapshot of all KF poses keyed by id
- setKeyframePose: per-KF pose overwrite with cache invalidation
- lastInsertedKeyFrameID / nextFreeKeyFrameID_public: id introspection
- drainEvictedKeyFrameIDs: pull-then-clear list of KFs dropped during remove_frames_farther_than-driven evictions inside insertObservation Also exports the MOLA_METRIC_MAPS_HAS_KFM_POSE_PLUMBING feature macro so downstream packages in separate repos (mola_lidar_odometry) can guard usage with __has_include + this macro and stay buildable against older mola_metric_maps checkouts. Adds unit-test coverage for the new APIs in test-mola_metric_maps_keyframemap. Co-Authored-By: Claude Opus 4.7 <<noreply@anthropic.com>>
-
Merge pull request #134 from Zeal-Robotics/perf/keyframe-prewarm-global-submap perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global
-
perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global icp_get_prepared_as_global() was building, on the search submap, only the local-frame KD-tree and per-point covariances (via KeyFrame::buildCache):
- bbox
- kdTreeEnsureIndexBuilt3D() on pointcloud_ (local frame)
- computeCovariancesAndDensity() (local frame) The very first call to nn_search_cov2cov() then lazily materialized the global-frame counterparts on the caller thread:
- pointcloud_global() (deep copy of pointcloud_ rotated by pose())
- kdTreeEnsureIndexBuilt3D() on the global cloud
- covariancesGlobal() (rotated covariances) For a non-trivial preloaded local map this stalled the first ICP align() by several seconds (e.g. ~6 s on a typical localization map), defeating the purpose of having a separate "prepare global" hook. Front-ends that explicitly pre-warm via icp_get_prepared_as_global() at startup were hit hardest, since the remaining lazy work then showed up on the very first scan instead of being amortized across startup. Pre-trigger the same three calls at the end of icp_get_prepared_as_global() so the search submap is fully ready by the time ICP::align() / nn_search_cov2cov() runs.
-
Contributors: Jose Luis Blanco-Claraco, Robin Van Cauwenbergh
2.7.0 (2026-04-22)
- Reorganize website
- Merge pull request #121 from MOLAorg/fix/clean-up-old-mrpt-version-checks Clean up: remove old mrpt version fallback code sections
- Contributors: Jose Luis Blanco-Claraco
2.6.1 (2026-04-02)
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| ament_cmake_xmllint | |
| ament_cmake_gtest | |
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| mola_common | |
| mola_kernel | |
| mrpt_libmaps | |
| mp2p_icp |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mola | |
| mola_lidar_odometry | |
| mola_sm_loop_closure |
Launch files
Messages
Services
Plugins
Recent questions tagged mola_metric_maps at Robotics Stack Exchange
|
mola_metric_maps package from mola repomola mola_bridge_ros2 mola_demos mola_input_lidar_bin_dataset mola_input_rawlog mola_input_rosbag2 mola_input_video mola_kernel mola_launcher mola_metric_maps mola_msgs mola_pose_list mola_relocalization mola_traj_tools mola_viz mola_viz_imgui mola_yaml |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mola.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-05-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
mola_metric_maps
Advanced metric map classes for LiDAR odometry and SLAM, built on the
generic mrpt::maps::CMetricMap interface. All maps are serializable,
visualizable, and integrate with the mp2p_icp
registration library.
Map classes
Production-quality maps
| Class | Header | Description |
|---|---|---|
mola::HashedVoxelPointCloud |
HashedVoxelPointCloud.h |
Flat sparse hash map of cubic voxels. Up to 32 points per voxel stored without heap allocation (fixed array SSO). Backend: tsl::robin_map. Implements NearestNeighborsCapable. |
mola::SparseVoxelPointCloud |
SparseVoxelPointCloud.h |
Two-level voxel map: sparse outer blocks + 32³ inner FixedDenseGrid3D. Tracks per-voxel point means; supports voxel-mean ICP matching. Implements NearestNeighborsCapable. The primary workhorse map in MOLA LO/SLAM. |
mola::NDT |
NDT.h |
Normal Distributions Transform map (Magnusson 2007). Fits a Gaussian per voxel; planar voxels expose NearestPlaneCapable, non-planar ones expose NearestNeighborsCapable. Enables automatic point-to-point vs. point-to-plane pairing selection. |
mola::KeyframePointCloudMap |
KeyframePointCloudMap.h |
Keyframe-based map: each keyframe holds a local point cloud plus a SE(3) pose. Supports map corrections without re-inserting points (just update poses). Implements IcpPrepareCapable, NearestPointWithCovCapable, MetricMapMergeCapable, and KeyframeMapCapable. |
Experimental / work-in-progress maps
| Class | Header | Status |
|---|---|---|
mola::SparseTreesPointCloud |
SparseTreesPointCloud.h |
Coarse 3D grid of independent CSimplePointsMap sub-maps, each with its own KD-tree. Functionally complete but not benchmarked against the hash-based alternatives for typical SLAM workloads. |
mola::OccGrid |
OccGrid.h |
Wraps mrpt::maps::COccupancyGridMap2D with a super-resolution likelihood cache. The cache infrastructure is in place but likelihood population is not yet implemented (// TODO). Not used in any production pipeline. |
Utility / internal classes
| Class | Header | Description |
|---|---|---|
mola::index3d_t<T> |
index3d_t.h |
Discrete 3D integer index. Works as key in std::map and std::unordered_map / tsl::robin_map via the index3d_hash functor, which implements the Teschner et al. (2003) spatial hash. |
mola::FixedDenseGrid3D<T,N,C> |
FixedDenseGrid3D.h |
Dense NxNxN grid (N=2^SIDE_NUM_BITS) allocated with calloc for fast zero-init. Used as the inner block in SparseVoxelPointCloud. Requires trivially-copyable cell types. |
Build and install
Refer to the root MOLA repository.
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 for research and evaluation purposes only. Commercial licenses available upon request, for this package alone or in combination with the complete SLAM system.
Changelog for package mola_metric_maps
2.9.0 (2026-05-11)
- fix: KeyframePointCloudMap viz should honor pointSize
- Merge pull request #143 from MOLAorg/bump-cmake-version bump min req cmake version to 3.22
- bump min req cmake version to 3.22
- Merge pull request #142 from MOLAorg/feat/add-keyframe-map-capable-api feat: Add keyframe map capable API
- feat: Add keyframe map capable API
- Contributors: Jose Luis Blanco-Claraco
2.8.0 (2026-04-29)
-
Merge pull request #139 from MOLAorg/fix/monothonic-kf-ids Fix: ensure monothonic KF ids
-
Fix: ensure monothonic KF ids
-
Merge pull request #138 from MOLAorg/fix/kf-map fix: robustify edge cases from last API changes
-
fix: robustify edge cases from last API changes
-
Merge pull request #137 from MOLAorg/feat/metric-map-changes-for-lo-grav-align mola_metric_maps: per-KF pose plumbing for online gravity rebake
-
feat(mola_metric_maps): per-KF pose plumbing for online gravity rebake Add the KeyframePointCloudMap APIs needed by mola_lidar_odometry's online gravity-rebake feature:
- cloneKFPoses: snapshot of all KF poses keyed by id
- setKeyframePose: per-KF pose overwrite with cache invalidation
- lastInsertedKeyFrameID / nextFreeKeyFrameID_public: id introspection
- drainEvictedKeyFrameIDs: pull-then-clear list of KFs dropped during remove_frames_farther_than-driven evictions inside insertObservation Also exports the MOLA_METRIC_MAPS_HAS_KFM_POSE_PLUMBING feature macro so downstream packages in separate repos (mola_lidar_odometry) can guard usage with __has_include + this macro and stay buildable against older mola_metric_maps checkouts. Adds unit-test coverage for the new APIs in test-mola_metric_maps_keyframemap. Co-Authored-By: Claude Opus 4.7 <<noreply@anthropic.com>>
-
Merge pull request #134 from Zeal-Robotics/perf/keyframe-prewarm-global-submap perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global
-
perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global icp_get_prepared_as_global() was building, on the search submap, only the local-frame KD-tree and per-point covariances (via KeyFrame::buildCache):
- bbox
- kdTreeEnsureIndexBuilt3D() on pointcloud_ (local frame)
- computeCovariancesAndDensity() (local frame) The very first call to nn_search_cov2cov() then lazily materialized the global-frame counterparts on the caller thread:
- pointcloud_global() (deep copy of pointcloud_ rotated by pose())
- kdTreeEnsureIndexBuilt3D() on the global cloud
- covariancesGlobal() (rotated covariances) For a non-trivial preloaded local map this stalled the first ICP align() by several seconds (e.g. ~6 s on a typical localization map), defeating the purpose of having a separate "prepare global" hook. Front-ends that explicitly pre-warm via icp_get_prepared_as_global() at startup were hit hardest, since the remaining lazy work then showed up on the very first scan instead of being amortized across startup. Pre-trigger the same three calls at the end of icp_get_prepared_as_global() so the search submap is fully ready by the time ICP::align() / nn_search_cov2cov() runs.
-
Contributors: Jose Luis Blanco-Claraco, Robin Van Cauwenbergh
2.7.0 (2026-04-22)
- Reorganize website
- Merge pull request #121 from MOLAorg/fix/clean-up-old-mrpt-version-checks Clean up: remove old mrpt version fallback code sections
- Contributors: Jose Luis Blanco-Claraco
2.6.1 (2026-04-02)
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| ament_cmake_xmllint | |
| ament_cmake_gtest | |
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| mola_common | |
| mola_kernel | |
| mrpt_libmaps | |
| mp2p_icp |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mola | |
| mola_lidar_odometry | |
| mola_sm_loop_closure |
Launch files
Messages
Services
Plugins
Recent questions tagged mola_metric_maps at Robotics Stack Exchange
|
mola_metric_maps package from mola repomola mola_bridge_ros2 mola_demos mola_input_lidar_bin_dataset mola_input_rawlog mola_input_rosbag2 mola_input_video mola_kernel mola_launcher mola_metric_maps mola_msgs mola_pose_list mola_relocalization mola_traj_tools mola_viz mola_viz_imgui mola_yaml |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mola.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-05-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
mola_metric_maps
Advanced metric map classes for LiDAR odometry and SLAM, built on the
generic mrpt::maps::CMetricMap interface. All maps are serializable,
visualizable, and integrate with the mp2p_icp
registration library.
Map classes
Production-quality maps
| Class | Header | Description |
|---|---|---|
mola::HashedVoxelPointCloud |
HashedVoxelPointCloud.h |
Flat sparse hash map of cubic voxels. Up to 32 points per voxel stored without heap allocation (fixed array SSO). Backend: tsl::robin_map. Implements NearestNeighborsCapable. |
mola::SparseVoxelPointCloud |
SparseVoxelPointCloud.h |
Two-level voxel map: sparse outer blocks + 32³ inner FixedDenseGrid3D. Tracks per-voxel point means; supports voxel-mean ICP matching. Implements NearestNeighborsCapable. The primary workhorse map in MOLA LO/SLAM. |
mola::NDT |
NDT.h |
Normal Distributions Transform map (Magnusson 2007). Fits a Gaussian per voxel; planar voxels expose NearestPlaneCapable, non-planar ones expose NearestNeighborsCapable. Enables automatic point-to-point vs. point-to-plane pairing selection. |
mola::KeyframePointCloudMap |
KeyframePointCloudMap.h |
Keyframe-based map: each keyframe holds a local point cloud plus a SE(3) pose. Supports map corrections without re-inserting points (just update poses). Implements IcpPrepareCapable, NearestPointWithCovCapable, MetricMapMergeCapable, and KeyframeMapCapable. |
Experimental / work-in-progress maps
| Class | Header | Status |
|---|---|---|
mola::SparseTreesPointCloud |
SparseTreesPointCloud.h |
Coarse 3D grid of independent CSimplePointsMap sub-maps, each with its own KD-tree. Functionally complete but not benchmarked against the hash-based alternatives for typical SLAM workloads. |
mola::OccGrid |
OccGrid.h |
Wraps mrpt::maps::COccupancyGridMap2D with a super-resolution likelihood cache. The cache infrastructure is in place but likelihood population is not yet implemented (// TODO). Not used in any production pipeline. |
Utility / internal classes
| Class | Header | Description |
|---|---|---|
mola::index3d_t<T> |
index3d_t.h |
Discrete 3D integer index. Works as key in std::map and std::unordered_map / tsl::robin_map via the index3d_hash functor, which implements the Teschner et al. (2003) spatial hash. |
mola::FixedDenseGrid3D<T,N,C> |
FixedDenseGrid3D.h |
Dense NxNxN grid (N=2^SIDE_NUM_BITS) allocated with calloc for fast zero-init. Used as the inner block in SparseVoxelPointCloud. Requires trivially-copyable cell types. |
Build and install
Refer to the root MOLA repository.
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 for research and evaluation purposes only. Commercial licenses available upon request, for this package alone or in combination with the complete SLAM system.
Changelog for package mola_metric_maps
2.9.0 (2026-05-11)
- fix: KeyframePointCloudMap viz should honor pointSize
- Merge pull request #143 from MOLAorg/bump-cmake-version bump min req cmake version to 3.22
- bump min req cmake version to 3.22
- Merge pull request #142 from MOLAorg/feat/add-keyframe-map-capable-api feat: Add keyframe map capable API
- feat: Add keyframe map capable API
- Contributors: Jose Luis Blanco-Claraco
2.8.0 (2026-04-29)
-
Merge pull request #139 from MOLAorg/fix/monothonic-kf-ids Fix: ensure monothonic KF ids
-
Fix: ensure monothonic KF ids
-
Merge pull request #138 from MOLAorg/fix/kf-map fix: robustify edge cases from last API changes
-
fix: robustify edge cases from last API changes
-
Merge pull request #137 from MOLAorg/feat/metric-map-changes-for-lo-grav-align mola_metric_maps: per-KF pose plumbing for online gravity rebake
-
feat(mola_metric_maps): per-KF pose plumbing for online gravity rebake Add the KeyframePointCloudMap APIs needed by mola_lidar_odometry's online gravity-rebake feature:
- cloneKFPoses: snapshot of all KF poses keyed by id
- setKeyframePose: per-KF pose overwrite with cache invalidation
- lastInsertedKeyFrameID / nextFreeKeyFrameID_public: id introspection
- drainEvictedKeyFrameIDs: pull-then-clear list of KFs dropped during remove_frames_farther_than-driven evictions inside insertObservation Also exports the MOLA_METRIC_MAPS_HAS_KFM_POSE_PLUMBING feature macro so downstream packages in separate repos (mola_lidar_odometry) can guard usage with __has_include + this macro and stay buildable against older mola_metric_maps checkouts. Adds unit-test coverage for the new APIs in test-mola_metric_maps_keyframemap. Co-Authored-By: Claude Opus 4.7 <<noreply@anthropic.com>>
-
Merge pull request #134 from Zeal-Robotics/perf/keyframe-prewarm-global-submap perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global
-
perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global icp_get_prepared_as_global() was building, on the search submap, only the local-frame KD-tree and per-point covariances (via KeyFrame::buildCache):
- bbox
- kdTreeEnsureIndexBuilt3D() on pointcloud_ (local frame)
- computeCovariancesAndDensity() (local frame) The very first call to nn_search_cov2cov() then lazily materialized the global-frame counterparts on the caller thread:
- pointcloud_global() (deep copy of pointcloud_ rotated by pose())
- kdTreeEnsureIndexBuilt3D() on the global cloud
- covariancesGlobal() (rotated covariances) For a non-trivial preloaded local map this stalled the first ICP align() by several seconds (e.g. ~6 s on a typical localization map), defeating the purpose of having a separate "prepare global" hook. Front-ends that explicitly pre-warm via icp_get_prepared_as_global() at startup were hit hardest, since the remaining lazy work then showed up on the very first scan instead of being amortized across startup. Pre-trigger the same three calls at the end of icp_get_prepared_as_global() so the search submap is fully ready by the time ICP::align() / nn_search_cov2cov() runs.
-
Contributors: Jose Luis Blanco-Claraco, Robin Van Cauwenbergh
2.7.0 (2026-04-22)
- Reorganize website
- Merge pull request #121 from MOLAorg/fix/clean-up-old-mrpt-version-checks Clean up: remove old mrpt version fallback code sections
- Contributors: Jose Luis Blanco-Claraco
2.6.1 (2026-04-02)
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| ament_cmake_xmllint | |
| ament_cmake_gtest | |
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| mola_common | |
| mola_kernel | |
| mrpt_libmaps | |
| mp2p_icp |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mola | |
| mola_lidar_odometry | |
| mola_sm_loop_closure |
Launch files
Messages
Services
Plugins
Recent questions tagged mola_metric_maps at Robotics Stack Exchange
|
mola_metric_maps package from mola repomola mola_bridge_ros2 mola_demos mola_input_lidar_bin_dataset mola_input_rawlog mola_input_rosbag2 mola_input_video mola_kernel mola_launcher mola_metric_maps mola_msgs mola_pose_list mola_relocalization mola_traj_tools mola_viz mola_viz_imgui mola_yaml |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mola.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-05-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
mola_metric_maps
Advanced metric map classes for LiDAR odometry and SLAM, built on the
generic mrpt::maps::CMetricMap interface. All maps are serializable,
visualizable, and integrate with the mp2p_icp
registration library.
Map classes
Production-quality maps
| Class | Header | Description |
|---|---|---|
mola::HashedVoxelPointCloud |
HashedVoxelPointCloud.h |
Flat sparse hash map of cubic voxels. Up to 32 points per voxel stored without heap allocation (fixed array SSO). Backend: tsl::robin_map. Implements NearestNeighborsCapable. |
mola::SparseVoxelPointCloud |
SparseVoxelPointCloud.h |
Two-level voxel map: sparse outer blocks + 32³ inner FixedDenseGrid3D. Tracks per-voxel point means; supports voxel-mean ICP matching. Implements NearestNeighborsCapable. The primary workhorse map in MOLA LO/SLAM. |
mola::NDT |
NDT.h |
Normal Distributions Transform map (Magnusson 2007). Fits a Gaussian per voxel; planar voxels expose NearestPlaneCapable, non-planar ones expose NearestNeighborsCapable. Enables automatic point-to-point vs. point-to-plane pairing selection. |
mola::KeyframePointCloudMap |
KeyframePointCloudMap.h |
Keyframe-based map: each keyframe holds a local point cloud plus a SE(3) pose. Supports map corrections without re-inserting points (just update poses). Implements IcpPrepareCapable, NearestPointWithCovCapable, MetricMapMergeCapable, and KeyframeMapCapable. |
Experimental / work-in-progress maps
| Class | Header | Status |
|---|---|---|
mola::SparseTreesPointCloud |
SparseTreesPointCloud.h |
Coarse 3D grid of independent CSimplePointsMap sub-maps, each with its own KD-tree. Functionally complete but not benchmarked against the hash-based alternatives for typical SLAM workloads. |
mola::OccGrid |
OccGrid.h |
Wraps mrpt::maps::COccupancyGridMap2D with a super-resolution likelihood cache. The cache infrastructure is in place but likelihood population is not yet implemented (// TODO). Not used in any production pipeline. |
Utility / internal classes
| Class | Header | Description |
|---|---|---|
mola::index3d_t<T> |
index3d_t.h |
Discrete 3D integer index. Works as key in std::map and std::unordered_map / tsl::robin_map via the index3d_hash functor, which implements the Teschner et al. (2003) spatial hash. |
mola::FixedDenseGrid3D<T,N,C> |
FixedDenseGrid3D.h |
Dense NxNxN grid (N=2^SIDE_NUM_BITS) allocated with calloc for fast zero-init. Used as the inner block in SparseVoxelPointCloud. Requires trivially-copyable cell types. |
Build and install
Refer to the root MOLA repository.
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 for research and evaluation purposes only. Commercial licenses available upon request, for this package alone or in combination with the complete SLAM system.
Changelog for package mola_metric_maps
2.9.0 (2026-05-11)
- fix: KeyframePointCloudMap viz should honor pointSize
- Merge pull request #143 from MOLAorg/bump-cmake-version bump min req cmake version to 3.22
- bump min req cmake version to 3.22
- Merge pull request #142 from MOLAorg/feat/add-keyframe-map-capable-api feat: Add keyframe map capable API
- feat: Add keyframe map capable API
- Contributors: Jose Luis Blanco-Claraco
2.8.0 (2026-04-29)
-
Merge pull request #139 from MOLAorg/fix/monothonic-kf-ids Fix: ensure monothonic KF ids
-
Fix: ensure monothonic KF ids
-
Merge pull request #138 from MOLAorg/fix/kf-map fix: robustify edge cases from last API changes
-
fix: robustify edge cases from last API changes
-
Merge pull request #137 from MOLAorg/feat/metric-map-changes-for-lo-grav-align mola_metric_maps: per-KF pose plumbing for online gravity rebake
-
feat(mola_metric_maps): per-KF pose plumbing for online gravity rebake Add the KeyframePointCloudMap APIs needed by mola_lidar_odometry's online gravity-rebake feature:
- cloneKFPoses: snapshot of all KF poses keyed by id
- setKeyframePose: per-KF pose overwrite with cache invalidation
- lastInsertedKeyFrameID / nextFreeKeyFrameID_public: id introspection
- drainEvictedKeyFrameIDs: pull-then-clear list of KFs dropped during remove_frames_farther_than-driven evictions inside insertObservation Also exports the MOLA_METRIC_MAPS_HAS_KFM_POSE_PLUMBING feature macro so downstream packages in separate repos (mola_lidar_odometry) can guard usage with __has_include + this macro and stay buildable against older mola_metric_maps checkouts. Adds unit-test coverage for the new APIs in test-mola_metric_maps_keyframemap. Co-Authored-By: Claude Opus 4.7 <<noreply@anthropic.com>>
-
Merge pull request #134 from Zeal-Robotics/perf/keyframe-prewarm-global-submap perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global
-
perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global icp_get_prepared_as_global() was building, on the search submap, only the local-frame KD-tree and per-point covariances (via KeyFrame::buildCache):
- bbox
- kdTreeEnsureIndexBuilt3D() on pointcloud_ (local frame)
- computeCovariancesAndDensity() (local frame) The very first call to nn_search_cov2cov() then lazily materialized the global-frame counterparts on the caller thread:
- pointcloud_global() (deep copy of pointcloud_ rotated by pose())
- kdTreeEnsureIndexBuilt3D() on the global cloud
- covariancesGlobal() (rotated covariances) For a non-trivial preloaded local map this stalled the first ICP align() by several seconds (e.g. ~6 s on a typical localization map), defeating the purpose of having a separate "prepare global" hook. Front-ends that explicitly pre-warm via icp_get_prepared_as_global() at startup were hit hardest, since the remaining lazy work then showed up on the very first scan instead of being amortized across startup. Pre-trigger the same three calls at the end of icp_get_prepared_as_global() so the search submap is fully ready by the time ICP::align() / nn_search_cov2cov() runs.
-
Contributors: Jose Luis Blanco-Claraco, Robin Van Cauwenbergh
2.7.0 (2026-04-22)
- Reorganize website
- Merge pull request #121 from MOLAorg/fix/clean-up-old-mrpt-version-checks Clean up: remove old mrpt version fallback code sections
- Contributors: Jose Luis Blanco-Claraco
2.6.1 (2026-04-02)
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| ament_cmake_xmllint | |
| ament_cmake_gtest | |
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| mola_common | |
| mola_kernel | |
| mrpt_libmaps | |
| mp2p_icp |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mola | |
| mola_lidar_odometry | |
| mola_sm_loop_closure |
Launch files
Messages
Services
Plugins
Recent questions tagged mola_metric_maps at Robotics Stack Exchange
|
mola_metric_maps package from mola repomola mola_bridge_ros2 mola_demos mola_input_lidar_bin_dataset mola_input_rawlog mola_input_rosbag2 mola_input_video mola_kernel mola_launcher mola_metric_maps mola_msgs mola_pose_list mola_relocalization mola_traj_tools mola_viz mola_viz_imgui mola_yaml |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mola.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-05-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
mola_metric_maps
Advanced metric map classes for LiDAR odometry and SLAM, built on the
generic mrpt::maps::CMetricMap interface. All maps are serializable,
visualizable, and integrate with the mp2p_icp
registration library.
Map classes
Production-quality maps
| Class | Header | Description |
|---|---|---|
mola::HashedVoxelPointCloud |
HashedVoxelPointCloud.h |
Flat sparse hash map of cubic voxels. Up to 32 points per voxel stored without heap allocation (fixed array SSO). Backend: tsl::robin_map. Implements NearestNeighborsCapable. |
mola::SparseVoxelPointCloud |
SparseVoxelPointCloud.h |
Two-level voxel map: sparse outer blocks + 32³ inner FixedDenseGrid3D. Tracks per-voxel point means; supports voxel-mean ICP matching. Implements NearestNeighborsCapable. The primary workhorse map in MOLA LO/SLAM. |
mola::NDT |
NDT.h |
Normal Distributions Transform map (Magnusson 2007). Fits a Gaussian per voxel; planar voxels expose NearestPlaneCapable, non-planar ones expose NearestNeighborsCapable. Enables automatic point-to-point vs. point-to-plane pairing selection. |
mola::KeyframePointCloudMap |
KeyframePointCloudMap.h |
Keyframe-based map: each keyframe holds a local point cloud plus a SE(3) pose. Supports map corrections without re-inserting points (just update poses). Implements IcpPrepareCapable, NearestPointWithCovCapable, MetricMapMergeCapable, and KeyframeMapCapable. |
Experimental / work-in-progress maps
| Class | Header | Status |
|---|---|---|
mola::SparseTreesPointCloud |
SparseTreesPointCloud.h |
Coarse 3D grid of independent CSimplePointsMap sub-maps, each with its own KD-tree. Functionally complete but not benchmarked against the hash-based alternatives for typical SLAM workloads. |
mola::OccGrid |
OccGrid.h |
Wraps mrpt::maps::COccupancyGridMap2D with a super-resolution likelihood cache. The cache infrastructure is in place but likelihood population is not yet implemented (// TODO). Not used in any production pipeline. |
Utility / internal classes
| Class | Header | Description |
|---|---|---|
mola::index3d_t<T> |
index3d_t.h |
Discrete 3D integer index. Works as key in std::map and std::unordered_map / tsl::robin_map via the index3d_hash functor, which implements the Teschner et al. (2003) spatial hash. |
mola::FixedDenseGrid3D<T,N,C> |
FixedDenseGrid3D.h |
Dense NxNxN grid (N=2^SIDE_NUM_BITS) allocated with calloc for fast zero-init. Used as the inner block in SparseVoxelPointCloud. Requires trivially-copyable cell types. |
Build and install
Refer to the root MOLA repository.
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 for research and evaluation purposes only. Commercial licenses available upon request, for this package alone or in combination with the complete SLAM system.
Changelog for package mola_metric_maps
2.9.0 (2026-05-11)
- fix: KeyframePointCloudMap viz should honor pointSize
- Merge pull request #143 from MOLAorg/bump-cmake-version bump min req cmake version to 3.22
- bump min req cmake version to 3.22
- Merge pull request #142 from MOLAorg/feat/add-keyframe-map-capable-api feat: Add keyframe map capable API
- feat: Add keyframe map capable API
- Contributors: Jose Luis Blanco-Claraco
2.8.0 (2026-04-29)
-
Merge pull request #139 from MOLAorg/fix/monothonic-kf-ids Fix: ensure monothonic KF ids
-
Fix: ensure monothonic KF ids
-
Merge pull request #138 from MOLAorg/fix/kf-map fix: robustify edge cases from last API changes
-
fix: robustify edge cases from last API changes
-
Merge pull request #137 from MOLAorg/feat/metric-map-changes-for-lo-grav-align mola_metric_maps: per-KF pose plumbing for online gravity rebake
-
feat(mola_metric_maps): per-KF pose plumbing for online gravity rebake Add the KeyframePointCloudMap APIs needed by mola_lidar_odometry's online gravity-rebake feature:
- cloneKFPoses: snapshot of all KF poses keyed by id
- setKeyframePose: per-KF pose overwrite with cache invalidation
- lastInsertedKeyFrameID / nextFreeKeyFrameID_public: id introspection
- drainEvictedKeyFrameIDs: pull-then-clear list of KFs dropped during remove_frames_farther_than-driven evictions inside insertObservation Also exports the MOLA_METRIC_MAPS_HAS_KFM_POSE_PLUMBING feature macro so downstream packages in separate repos (mola_lidar_odometry) can guard usage with __has_include + this macro and stay buildable against older mola_metric_maps checkouts. Adds unit-test coverage for the new APIs in test-mola_metric_maps_keyframemap. Co-Authored-By: Claude Opus 4.7 <<noreply@anthropic.com>>
-
Merge pull request #134 from Zeal-Robotics/perf/keyframe-prewarm-global-submap perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global
-
perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global icp_get_prepared_as_global() was building, on the search submap, only the local-frame KD-tree and per-point covariances (via KeyFrame::buildCache):
- bbox
- kdTreeEnsureIndexBuilt3D() on pointcloud_ (local frame)
- computeCovariancesAndDensity() (local frame) The very first call to nn_search_cov2cov() then lazily materialized the global-frame counterparts on the caller thread:
- pointcloud_global() (deep copy of pointcloud_ rotated by pose())
- kdTreeEnsureIndexBuilt3D() on the global cloud
- covariancesGlobal() (rotated covariances) For a non-trivial preloaded local map this stalled the first ICP align() by several seconds (e.g. ~6 s on a typical localization map), defeating the purpose of having a separate "prepare global" hook. Front-ends that explicitly pre-warm via icp_get_prepared_as_global() at startup were hit hardest, since the remaining lazy work then showed up on the very first scan instead of being amortized across startup. Pre-trigger the same three calls at the end of icp_get_prepared_as_global() so the search submap is fully ready by the time ICP::align() / nn_search_cov2cov() runs.
-
Contributors: Jose Luis Blanco-Claraco, Robin Van Cauwenbergh
2.7.0 (2026-04-22)
- Reorganize website
- Merge pull request #121 from MOLAorg/fix/clean-up-old-mrpt-version-checks Clean up: remove old mrpt version fallback code sections
- Contributors: Jose Luis Blanco-Claraco
2.6.1 (2026-04-02)
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| ament_cmake_xmllint | |
| ament_cmake_gtest | |
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| mola_common | |
| mola_kernel | |
| mrpt_libmaps | |
| mp2p_icp |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mola | |
| mola_lidar_odometry | |
| mola_sm_loop_closure |
Launch files
Messages
Services
Plugins
Recent questions tagged mola_metric_maps at Robotics Stack Exchange
|
mola_metric_maps package from mola repomola mola_bridge_ros2 mola_demos mola_input_lidar_bin_dataset mola_input_rawlog mola_input_rosbag2 mola_input_video mola_kernel mola_launcher mola_metric_maps mola_msgs mola_pose_list mola_relocalization mola_traj_tools mola_viz mola_viz_imgui mola_yaml |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | GPLv3 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mola.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-05-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
mola_metric_maps
Advanced metric map classes for LiDAR odometry and SLAM, built on the
generic mrpt::maps::CMetricMap interface. All maps are serializable,
visualizable, and integrate with the mp2p_icp
registration library.
Map classes
Production-quality maps
| Class | Header | Description |
|---|---|---|
mola::HashedVoxelPointCloud |
HashedVoxelPointCloud.h |
Flat sparse hash map of cubic voxels. Up to 32 points per voxel stored without heap allocation (fixed array SSO). Backend: tsl::robin_map. Implements NearestNeighborsCapable. |
mola::SparseVoxelPointCloud |
SparseVoxelPointCloud.h |
Two-level voxel map: sparse outer blocks + 32³ inner FixedDenseGrid3D. Tracks per-voxel point means; supports voxel-mean ICP matching. Implements NearestNeighborsCapable. The primary workhorse map in MOLA LO/SLAM. |
mola::NDT |
NDT.h |
Normal Distributions Transform map (Magnusson 2007). Fits a Gaussian per voxel; planar voxels expose NearestPlaneCapable, non-planar ones expose NearestNeighborsCapable. Enables automatic point-to-point vs. point-to-plane pairing selection. |
mola::KeyframePointCloudMap |
KeyframePointCloudMap.h |
Keyframe-based map: each keyframe holds a local point cloud plus a SE(3) pose. Supports map corrections without re-inserting points (just update poses). Implements IcpPrepareCapable, NearestPointWithCovCapable, MetricMapMergeCapable, and KeyframeMapCapable. |
Experimental / work-in-progress maps
| Class | Header | Status |
|---|---|---|
mola::SparseTreesPointCloud |
SparseTreesPointCloud.h |
Coarse 3D grid of independent CSimplePointsMap sub-maps, each with its own KD-tree. Functionally complete but not benchmarked against the hash-based alternatives for typical SLAM workloads. |
mola::OccGrid |
OccGrid.h |
Wraps mrpt::maps::COccupancyGridMap2D with a super-resolution likelihood cache. The cache infrastructure is in place but likelihood population is not yet implemented (// TODO). Not used in any production pipeline. |
Utility / internal classes
| Class | Header | Description |
|---|---|---|
mola::index3d_t<T> |
index3d_t.h |
Discrete 3D integer index. Works as key in std::map and std::unordered_map / tsl::robin_map via the index3d_hash functor, which implements the Teschner et al. (2003) spatial hash. |
mola::FixedDenseGrid3D<T,N,C> |
FixedDenseGrid3D.h |
Dense NxNxN grid (N=2^SIDE_NUM_BITS) allocated with calloc for fast zero-init. Used as the inner block in SparseVoxelPointCloud. Requires trivially-copyable cell types. |
Build and install
Refer to the root MOLA repository.
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 for research and evaluation purposes only. Commercial licenses available upon request, for this package alone or in combination with the complete SLAM system.
Changelog for package mola_metric_maps
2.9.0 (2026-05-11)
- fix: KeyframePointCloudMap viz should honor pointSize
- Merge pull request #143 from MOLAorg/bump-cmake-version bump min req cmake version to 3.22
- bump min req cmake version to 3.22
- Merge pull request #142 from MOLAorg/feat/add-keyframe-map-capable-api feat: Add keyframe map capable API
- feat: Add keyframe map capable API
- Contributors: Jose Luis Blanco-Claraco
2.8.0 (2026-04-29)
-
Merge pull request #139 from MOLAorg/fix/monothonic-kf-ids Fix: ensure monothonic KF ids
-
Fix: ensure monothonic KF ids
-
Merge pull request #138 from MOLAorg/fix/kf-map fix: robustify edge cases from last API changes
-
fix: robustify edge cases from last API changes
-
Merge pull request #137 from MOLAorg/feat/metric-map-changes-for-lo-grav-align mola_metric_maps: per-KF pose plumbing for online gravity rebake
-
feat(mola_metric_maps): per-KF pose plumbing for online gravity rebake Add the KeyframePointCloudMap APIs needed by mola_lidar_odometry's online gravity-rebake feature:
- cloneKFPoses: snapshot of all KF poses keyed by id
- setKeyframePose: per-KF pose overwrite with cache invalidation
- lastInsertedKeyFrameID / nextFreeKeyFrameID_public: id introspection
- drainEvictedKeyFrameIDs: pull-then-clear list of KFs dropped during remove_frames_farther_than-driven evictions inside insertObservation Also exports the MOLA_METRIC_MAPS_HAS_KFM_POSE_PLUMBING feature macro so downstream packages in separate repos (mola_lidar_odometry) can guard usage with __has_include + this macro and stay buildable against older mola_metric_maps checkouts. Adds unit-test coverage for the new APIs in test-mola_metric_maps_keyframemap. Co-Authored-By: Claude Opus 4.7 <<noreply@anthropic.com>>
-
Merge pull request #134 from Zeal-Robotics/perf/keyframe-prewarm-global-submap perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global
-
perf(mola_metric_maps): pre-warm global-frame submap data in icp_get_prepared_as_global icp_get_prepared_as_global() was building, on the search submap, only the local-frame KD-tree and per-point covariances (via KeyFrame::buildCache):
- bbox
- kdTreeEnsureIndexBuilt3D() on pointcloud_ (local frame)
- computeCovariancesAndDensity() (local frame) The very first call to nn_search_cov2cov() then lazily materialized the global-frame counterparts on the caller thread:
- pointcloud_global() (deep copy of pointcloud_ rotated by pose())
- kdTreeEnsureIndexBuilt3D() on the global cloud
- covariancesGlobal() (rotated covariances) For a non-trivial preloaded local map this stalled the first ICP align() by several seconds (e.g. ~6 s on a typical localization map), defeating the purpose of having a separate "prepare global" hook. Front-ends that explicitly pre-warm via icp_get_prepared_as_global() at startup were hit hardest, since the remaining lazy work then showed up on the very first scan instead of being amortized across startup. Pre-trigger the same three calls at the end of icp_get_prepared_as_global() so the search submap is fully ready by the time ICP::align() / nn_search_cov2cov() runs.
-
Contributors: Jose Luis Blanco-Claraco, Robin Van Cauwenbergh
2.7.0 (2026-04-22)
- Reorganize website
- Merge pull request #121 from MOLAorg/fix/clean-up-old-mrpt-version-checks Clean up: remove old mrpt version fallback code sections
- Contributors: Jose Luis Blanco-Claraco
2.6.1 (2026-04-02)
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| ament_cmake_xmllint | |
| ament_cmake_gtest | |
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| mola_common | |
| mola_kernel | |
| mrpt_libmaps | |
| mp2p_icp |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mola | |
| mola_lidar_odometry | |
| mola_sm_loop_closure |