Package Summary
| Version | 2.4.1 |
| License | BSD-3-Clause |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mp2p_icp.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-02-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL Distro | Last release |
|---|---|
| ROS1 Noetic (u20.04) | |
| ROS 2 Iron (u22.04) |
mp2p_icp
C++ libraries for multi primitive-to-primitive (MP2P) ICP algorithms and flexible point cloud processing pipelines. mp2p_icp is used in the mola_lidar_odometry framework:
- Main library documentation and C++ API
- License: New BSD 3-Clause (Note that each module of MOLA has its own license)
Introduction
The project provides these C++ libraries:
-
mp2p_icp_map: Provides themp2p_icp::metric_map_tgeneric metric map container and related utilities for working with point cloud data structures. Metric map files with extension*.mmare serializations of instances of this class. -
mp2p_icp: With ICP algorithms, matchers (point-to-point, point-to-plane, point-to-line, covariance-to-covariance, adaptive), solvers (Horn, OLAE, Gauss-Newton), and quality evaluators. It depends onmp2p_icp_map. -
mp2p_icp_filters: With point cloud filtering and manipulation algorithms including decimation, voxelization, statistical outlier removal, edge/plane extraction, and various geometric transformations. It depends onmp2p_icp_map.
Command-Line Applications
The full repository also includes these applications (see apps/ directory):
Data Conversion Tools
-
kitti2mm: Converts KITTI dataset LIDAR binary files (
.bin) with (X,Y,Z, Intensity) data into mp2p_icp metric map files (.mm). Supports custom layer names, numeric IDs, and label strings. -
txt2mm: Converts plain-text point cloud data (TXT/CSV) into metric map (
.mm) files. Supports multiple formats: XYZ, XYZI, XYZIRT, XYZRGB, with configurable column mapping and layer names. -
sm2mm: Converts a simple map (
.simplemap) from a SLAM mapping session into a metric map (.mm) using a configurable processing pipeline. Essential for post-processing SLAM outputs into structured metric representations.
Data Export Tools
-
mm2ply: Exports metric map layers to PLY point cloud files. Supports both ASCII and binary formats, selective field export, and preserves all point attributes (coordinates, colors, intensities, etc.).
-
mm2txt: Exports metric map layers as space-delimited CSV/TXT files with header rows. Ideal for data analysis in spreadsheet applications or custom processing pipelines. Supports selective layer and field export.
-
mm2las: Exports metric maps to industry-standard LAS 1.4 format with Point Format 8 support. Includes automatic color mapping, extra dimensions for custom fields. Compatible with CloudCompare, QGIS, and ArcGIS.
Map Processing & Analysis Tools
-
mm-filter: Applies mp2p_icp_filters pipelines to metric map files. Can operate in pipeline mode (applying complete YAML-defined filter chains) or rename mode (simply renaming layers). Supports custom plugin loading.
-
mm-info: Displays a summary of metric map contents including layers, point counts, and metadata.
-
mm-georef: Extracts or injects geo-referencing information between metric map files (
.mm) and standalone georeferencing files (.georef).
Visualization Tools
-
mm-viewer: GUI application to visualize metric map (
.mm) files. Supports loading additional 3D scenes and trajectory files in TUM format. -
icp-log-viewer: Interactive GUI for debugging ICP pipelines. Visualizes ICP log files (
.icplog) with autoplay mode and detailed inspection of registration results. Essential for understanding and optimizing ICP algorithm performance.
ICP Execution Tools
- icp-run: Standalone program to execute ICP pipelines from the command line.
SimpleMaps Manipulation
-
sm-cli: Swiss-army knife for simple map (
.simplemap) manipulation. Commands include:info(analyze contents),cut(extract by keyframe index),trim(extract by bounding box),join(merge maps),level(make horizontal),tf(apply SE(3) transform),export-keyframes(save trajectories as TUM), andexport-rawlog(convert to RawLog format).
Key Features and Components
Key C++ classes provided by this project (see full documentation):
Core Data Structures
-
mp2p_icp::metric_map_t: A generic data type to store raw or processed point clouds, including support for multiple layers, segmented data, and discrete extracted features.
ICP Algorithms and Matchers
-
mp2p_icp::ICP: A uniform API for matching generic point clouds with support for:- Point-to-Point matching (various distance metrics)
- Point-to-Plane matching (planes extracted from point clouds)
- Point-to-Line matching (edges/lines extracted from point clouds)
- Covariance-to-Covariance matching (Gaussian distributions)
- Adaptive matching (automatically selects best matcher)
Solvers
- Horn’s method: Closed-form solution for point-to-point alignment
- OLAE (Optimal Linear Attitude Estimator): For attitude/rotation estimation
- Gauss-Newton: Iterative solver for complex matching scenarios
Filters and Generators
The mp2p_icp_filters library provides extensive filtering capabilities:
-
Decimation:
FilterDecimate,FilterDecimateVoxels,FilterDecimateAdaptive -
Outlier removal:
FilterSOR(Statistical Outlier Removal),FilterVoxelSOR
File truncated at 100 lines see the full file
Changelog for package mp2p_icp
2.4.1 (2026-01-27)
- Add more unit tests
- Update README to keep it in sync with the provided apps and libraries
- Merge pull request #29 from MOLAorg/fix/cov Fix bugs in covariance estimation for some cases
- fix covariance estimation bugs; add unit tests for cov2cov
- Update commit for mola_common
- Merge pull request #28 from MOLAorg/feat/mm-viewer-3d-layers mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- Contributors: Jose Luis Blanco-Claraco
2.4.0 (2026-01-21)
- Merge pull request #27 from MOLAorg/feat/new-filter-voxel-sor
- Add new unit test for class factory
- Add new FilterVoxelSOR filter
- Merge pull request #26 from MOLAorg/feat/mm2las
- Add mm2las CLI tool
- Contributors: Jose Luis Blanco-Claraco
2.3.1 (2026-01-14)
- Merge pull request #25 from MOLAorg/feat/naive-decimate Add trivial FilterDecimate for fast downsampling without spatial awareness
- lint fixes
- Add trivial FilterDecimate for fast downsampling without spatial awareness
- Parameterizable: add virtual base dtor
- Remove the NormalizeIntensity stage in the demo pipelines; visualization does that already
- docs: fill missing manpages
- docs: add sm2mm pipelines page
- Clarify map layers and simple maps descriptions Updated references to CMetricMap and CGenericPointsMap in the documentation for clarity and accuracy.
- Contributors: Jose Luis Blanco-Claraco
2.3.0 (2026-01-08)
- Merge pull request #24 from MOLAorg/feat/mm2txt-select-fields mm2txt and mm2ply now have a --export-fields flag
- mm2txt and mm2ply now have a --export-fields flag
- Merge pull request #23 from MOLAorg/fix/some-deprecations Fix usage of deprecated cloud types
- Provide shortcut names for common cloud field names
- More deprecated cloud usage
- FIX bug: FilterDecimateVoxel, if using flatten, did not propagate all input cloud fields
- Fix usage of some deprecated cloud types
- FilterSOR: create output layers even if input is empty
- FilterDeskew: propagate input fields even if the cloud is empty
- FilterByExpression: show debug-level stats
- FilterNormalizeIntensity: do not throw on empty clouds
- Merge pull request #22 from MOLAorg/feat/new-filters Add new filter FilterRenameLayer
- Added filter FilterRenameLayer
- mm2txt: prepare for deprecated classes in 3.0.0
- FilterAdjustTimestamps: new method 'None' to bypass filter
- Fix: sm2mm did not attach to ParameterSource the final_filter elements
- sm2mm: did not observe the optional profiler parameter for the final_filter stage
- Fix: FilterMLS did not properly copy all point fields when using upsampling
- Fix: FilterAbsoluteTimestamp now also works for accumulated points in one layer
- Contributors: Jose Luis Blanco-Claraco
2.2.1 (2026-01-06)
- Merge pull request #21 from MOLAorg/feat/abs-stamp-filter Added new filter: FilterAbsoluteTimestamp
- Fix the logic of the FilterEdgePlane filter parameters
- Added new filter: FilterAbsoluteTimestamp
- mm2txt: also export uint8 fields (missing in last release)
- Merge pull request #20 from MOLAorg/feat/more-unit-tests More unit tests
- Add generators unit tests
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| catkin | |
| mola_common | |
| mrpt_libbase | |
| mrpt_libobs | |
| mrpt_libposes | |
| mrpt_libmaps | |
| mrpt_libgui | |
| mrpt_libtclap | |
| mola_imu_preintegration |
System Dependencies
Launch files
Messages
Services
Plugins
Recent questions tagged mp2p_icp at Robotics Stack Exchange
Package Summary
| Version | 2.4.1 |
| License | BSD-3-Clause |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mp2p_icp.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-02-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL Distro | Last release |
|---|---|
| ROS1 Noetic (u20.04) | |
| ROS 2 Iron (u22.04) |
mp2p_icp
C++ libraries for multi primitive-to-primitive (MP2P) ICP algorithms and flexible point cloud processing pipelines. mp2p_icp is used in the mola_lidar_odometry framework:
- Main library documentation and C++ API
- License: New BSD 3-Clause (Note that each module of MOLA has its own license)
Introduction
The project provides these C++ libraries:
-
mp2p_icp_map: Provides themp2p_icp::metric_map_tgeneric metric map container and related utilities for working with point cloud data structures. Metric map files with extension*.mmare serializations of instances of this class. -
mp2p_icp: With ICP algorithms, matchers (point-to-point, point-to-plane, point-to-line, covariance-to-covariance, adaptive), solvers (Horn, OLAE, Gauss-Newton), and quality evaluators. It depends onmp2p_icp_map. -
mp2p_icp_filters: With point cloud filtering and manipulation algorithms including decimation, voxelization, statistical outlier removal, edge/plane extraction, and various geometric transformations. It depends onmp2p_icp_map.
Command-Line Applications
The full repository also includes these applications (see apps/ directory):
Data Conversion Tools
-
kitti2mm: Converts KITTI dataset LIDAR binary files (
.bin) with (X,Y,Z, Intensity) data into mp2p_icp metric map files (.mm). Supports custom layer names, numeric IDs, and label strings. -
txt2mm: Converts plain-text point cloud data (TXT/CSV) into metric map (
.mm) files. Supports multiple formats: XYZ, XYZI, XYZIRT, XYZRGB, with configurable column mapping and layer names. -
sm2mm: Converts a simple map (
.simplemap) from a SLAM mapping session into a metric map (.mm) using a configurable processing pipeline. Essential for post-processing SLAM outputs into structured metric representations.
Data Export Tools
-
mm2ply: Exports metric map layers to PLY point cloud files. Supports both ASCII and binary formats, selective field export, and preserves all point attributes (coordinates, colors, intensities, etc.).
-
mm2txt: Exports metric map layers as space-delimited CSV/TXT files with header rows. Ideal for data analysis in spreadsheet applications or custom processing pipelines. Supports selective layer and field export.
-
mm2las: Exports metric maps to industry-standard LAS 1.4 format with Point Format 8 support. Includes automatic color mapping, extra dimensions for custom fields. Compatible with CloudCompare, QGIS, and ArcGIS.
Map Processing & Analysis Tools
-
mm-filter: Applies mp2p_icp_filters pipelines to metric map files. Can operate in pipeline mode (applying complete YAML-defined filter chains) or rename mode (simply renaming layers). Supports custom plugin loading.
-
mm-info: Displays a summary of metric map contents including layers, point counts, and metadata.
-
mm-georef: Extracts or injects geo-referencing information between metric map files (
.mm) and standalone georeferencing files (.georef).
Visualization Tools
-
mm-viewer: GUI application to visualize metric map (
.mm) files. Supports loading additional 3D scenes and trajectory files in TUM format. -
icp-log-viewer: Interactive GUI for debugging ICP pipelines. Visualizes ICP log files (
.icplog) with autoplay mode and detailed inspection of registration results. Essential for understanding and optimizing ICP algorithm performance.
ICP Execution Tools
- icp-run: Standalone program to execute ICP pipelines from the command line.
SimpleMaps Manipulation
-
sm-cli: Swiss-army knife for simple map (
.simplemap) manipulation. Commands include:info(analyze contents),cut(extract by keyframe index),trim(extract by bounding box),join(merge maps),level(make horizontal),tf(apply SE(3) transform),export-keyframes(save trajectories as TUM), andexport-rawlog(convert to RawLog format).
Key Features and Components
Key C++ classes provided by this project (see full documentation):
Core Data Structures
-
mp2p_icp::metric_map_t: A generic data type to store raw or processed point clouds, including support for multiple layers, segmented data, and discrete extracted features.
ICP Algorithms and Matchers
-
mp2p_icp::ICP: A uniform API for matching generic point clouds with support for:- Point-to-Point matching (various distance metrics)
- Point-to-Plane matching (planes extracted from point clouds)
- Point-to-Line matching (edges/lines extracted from point clouds)
- Covariance-to-Covariance matching (Gaussian distributions)
- Adaptive matching (automatically selects best matcher)
Solvers
- Horn’s method: Closed-form solution for point-to-point alignment
- OLAE (Optimal Linear Attitude Estimator): For attitude/rotation estimation
- Gauss-Newton: Iterative solver for complex matching scenarios
Filters and Generators
The mp2p_icp_filters library provides extensive filtering capabilities:
-
Decimation:
FilterDecimate,FilterDecimateVoxels,FilterDecimateAdaptive -
Outlier removal:
FilterSOR(Statistical Outlier Removal),FilterVoxelSOR
File truncated at 100 lines see the full file
Changelog for package mp2p_icp
2.4.1 (2026-01-27)
- Add more unit tests
- Update README to keep it in sync with the provided apps and libraries
- Merge pull request #29 from MOLAorg/fix/cov Fix bugs in covariance estimation for some cases
- fix covariance estimation bugs; add unit tests for cov2cov
- Update commit for mola_common
- Merge pull request #28 from MOLAorg/feat/mm-viewer-3d-layers mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- Contributors: Jose Luis Blanco-Claraco
2.4.0 (2026-01-21)
- Merge pull request #27 from MOLAorg/feat/new-filter-voxel-sor
- Add new unit test for class factory
- Add new FilterVoxelSOR filter
- Merge pull request #26 from MOLAorg/feat/mm2las
- Add mm2las CLI tool
- Contributors: Jose Luis Blanco-Claraco
2.3.1 (2026-01-14)
- Merge pull request #25 from MOLAorg/feat/naive-decimate Add trivial FilterDecimate for fast downsampling without spatial awareness
- lint fixes
- Add trivial FilterDecimate for fast downsampling without spatial awareness
- Parameterizable: add virtual base dtor
- Remove the NormalizeIntensity stage in the demo pipelines; visualization does that already
- docs: fill missing manpages
- docs: add sm2mm pipelines page
- Clarify map layers and simple maps descriptions Updated references to CMetricMap and CGenericPointsMap in the documentation for clarity and accuracy.
- Contributors: Jose Luis Blanco-Claraco
2.3.0 (2026-01-08)
- Merge pull request #24 from MOLAorg/feat/mm2txt-select-fields mm2txt and mm2ply now have a --export-fields flag
- mm2txt and mm2ply now have a --export-fields flag
- Merge pull request #23 from MOLAorg/fix/some-deprecations Fix usage of deprecated cloud types
- Provide shortcut names for common cloud field names
- More deprecated cloud usage
- FIX bug: FilterDecimateVoxel, if using flatten, did not propagate all input cloud fields
- Fix usage of some deprecated cloud types
- FilterSOR: create output layers even if input is empty
- FilterDeskew: propagate input fields even if the cloud is empty
- FilterByExpression: show debug-level stats
- FilterNormalizeIntensity: do not throw on empty clouds
- Merge pull request #22 from MOLAorg/feat/new-filters Add new filter FilterRenameLayer
- Added filter FilterRenameLayer
- mm2txt: prepare for deprecated classes in 3.0.0
- FilterAdjustTimestamps: new method 'None' to bypass filter
- Fix: sm2mm did not attach to ParameterSource the final_filter elements
- sm2mm: did not observe the optional profiler parameter for the final_filter stage
- Fix: FilterMLS did not properly copy all point fields when using upsampling
- Fix: FilterAbsoluteTimestamp now also works for accumulated points in one layer
- Contributors: Jose Luis Blanco-Claraco
2.2.1 (2026-01-06)
- Merge pull request #21 from MOLAorg/feat/abs-stamp-filter Added new filter: FilterAbsoluteTimestamp
- Fix the logic of the FilterEdgePlane filter parameters
- Added new filter: FilterAbsoluteTimestamp
- mm2txt: also export uint8 fields (missing in last release)
- Merge pull request #20 from MOLAorg/feat/more-unit-tests More unit tests
- Add generators unit tests
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| catkin | |
| mola_common | |
| mrpt_libbase | |
| mrpt_libobs | |
| mrpt_libposes | |
| mrpt_libmaps | |
| mrpt_libgui | |
| mrpt_libtclap | |
| mola_imu_preintegration |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mp2p_icp at Robotics Stack Exchange
Package Summary
| Version | 2.4.1 |
| License | BSD-3-Clause |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mp2p_icp.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-02-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL Distro | Last release |
|---|---|
| ROS1 Noetic (u20.04) | |
| ROS 2 Iron (u22.04) |
mp2p_icp
C++ libraries for multi primitive-to-primitive (MP2P) ICP algorithms and flexible point cloud processing pipelines. mp2p_icp is used in the mola_lidar_odometry framework:
- Main library documentation and C++ API
- License: New BSD 3-Clause (Note that each module of MOLA has its own license)
Introduction
The project provides these C++ libraries:
-
mp2p_icp_map: Provides themp2p_icp::metric_map_tgeneric metric map container and related utilities for working with point cloud data structures. Metric map files with extension*.mmare serializations of instances of this class. -
mp2p_icp: With ICP algorithms, matchers (point-to-point, point-to-plane, point-to-line, covariance-to-covariance, adaptive), solvers (Horn, OLAE, Gauss-Newton), and quality evaluators. It depends onmp2p_icp_map. -
mp2p_icp_filters: With point cloud filtering and manipulation algorithms including decimation, voxelization, statistical outlier removal, edge/plane extraction, and various geometric transformations. It depends onmp2p_icp_map.
Command-Line Applications
The full repository also includes these applications (see apps/ directory):
Data Conversion Tools
-
kitti2mm: Converts KITTI dataset LIDAR binary files (
.bin) with (X,Y,Z, Intensity) data into mp2p_icp metric map files (.mm). Supports custom layer names, numeric IDs, and label strings. -
txt2mm: Converts plain-text point cloud data (TXT/CSV) into metric map (
.mm) files. Supports multiple formats: XYZ, XYZI, XYZIRT, XYZRGB, with configurable column mapping and layer names. -
sm2mm: Converts a simple map (
.simplemap) from a SLAM mapping session into a metric map (.mm) using a configurable processing pipeline. Essential for post-processing SLAM outputs into structured metric representations.
Data Export Tools
-
mm2ply: Exports metric map layers to PLY point cloud files. Supports both ASCII and binary formats, selective field export, and preserves all point attributes (coordinates, colors, intensities, etc.).
-
mm2txt: Exports metric map layers as space-delimited CSV/TXT files with header rows. Ideal for data analysis in spreadsheet applications or custom processing pipelines. Supports selective layer and field export.
-
mm2las: Exports metric maps to industry-standard LAS 1.4 format with Point Format 8 support. Includes automatic color mapping, extra dimensions for custom fields. Compatible with CloudCompare, QGIS, and ArcGIS.
Map Processing & Analysis Tools
-
mm-filter: Applies mp2p_icp_filters pipelines to metric map files. Can operate in pipeline mode (applying complete YAML-defined filter chains) or rename mode (simply renaming layers). Supports custom plugin loading.
-
mm-info: Displays a summary of metric map contents including layers, point counts, and metadata.
-
mm-georef: Extracts or injects geo-referencing information between metric map files (
.mm) and standalone georeferencing files (.georef).
Visualization Tools
-
mm-viewer: GUI application to visualize metric map (
.mm) files. Supports loading additional 3D scenes and trajectory files in TUM format. -
icp-log-viewer: Interactive GUI for debugging ICP pipelines. Visualizes ICP log files (
.icplog) with autoplay mode and detailed inspection of registration results. Essential for understanding and optimizing ICP algorithm performance.
ICP Execution Tools
- icp-run: Standalone program to execute ICP pipelines from the command line.
SimpleMaps Manipulation
-
sm-cli: Swiss-army knife for simple map (
.simplemap) manipulation. Commands include:info(analyze contents),cut(extract by keyframe index),trim(extract by bounding box),join(merge maps),level(make horizontal),tf(apply SE(3) transform),export-keyframes(save trajectories as TUM), andexport-rawlog(convert to RawLog format).
Key Features and Components
Key C++ classes provided by this project (see full documentation):
Core Data Structures
-
mp2p_icp::metric_map_t: A generic data type to store raw or processed point clouds, including support for multiple layers, segmented data, and discrete extracted features.
ICP Algorithms and Matchers
-
mp2p_icp::ICP: A uniform API for matching generic point clouds with support for:- Point-to-Point matching (various distance metrics)
- Point-to-Plane matching (planes extracted from point clouds)
- Point-to-Line matching (edges/lines extracted from point clouds)
- Covariance-to-Covariance matching (Gaussian distributions)
- Adaptive matching (automatically selects best matcher)
Solvers
- Horn’s method: Closed-form solution for point-to-point alignment
- OLAE (Optimal Linear Attitude Estimator): For attitude/rotation estimation
- Gauss-Newton: Iterative solver for complex matching scenarios
Filters and Generators
The mp2p_icp_filters library provides extensive filtering capabilities:
-
Decimation:
FilterDecimate,FilterDecimateVoxels,FilterDecimateAdaptive -
Outlier removal:
FilterSOR(Statistical Outlier Removal),FilterVoxelSOR
File truncated at 100 lines see the full file
Changelog for package mp2p_icp
2.4.1 (2026-01-27)
- Add more unit tests
- Update README to keep it in sync with the provided apps and libraries
- Merge pull request #29 from MOLAorg/fix/cov Fix bugs in covariance estimation for some cases
- fix covariance estimation bugs; add unit tests for cov2cov
- Update commit for mola_common
- Merge pull request #28 from MOLAorg/feat/mm-viewer-3d-layers mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- Contributors: Jose Luis Blanco-Claraco
2.4.0 (2026-01-21)
- Merge pull request #27 from MOLAorg/feat/new-filter-voxel-sor
- Add new unit test for class factory
- Add new FilterVoxelSOR filter
- Merge pull request #26 from MOLAorg/feat/mm2las
- Add mm2las CLI tool
- Contributors: Jose Luis Blanco-Claraco
2.3.1 (2026-01-14)
- Merge pull request #25 from MOLAorg/feat/naive-decimate Add trivial FilterDecimate for fast downsampling without spatial awareness
- lint fixes
- Add trivial FilterDecimate for fast downsampling without spatial awareness
- Parameterizable: add virtual base dtor
- Remove the NormalizeIntensity stage in the demo pipelines; visualization does that already
- docs: fill missing manpages
- docs: add sm2mm pipelines page
- Clarify map layers and simple maps descriptions Updated references to CMetricMap and CGenericPointsMap in the documentation for clarity and accuracy.
- Contributors: Jose Luis Blanco-Claraco
2.3.0 (2026-01-08)
- Merge pull request #24 from MOLAorg/feat/mm2txt-select-fields mm2txt and mm2ply now have a --export-fields flag
- mm2txt and mm2ply now have a --export-fields flag
- Merge pull request #23 from MOLAorg/fix/some-deprecations Fix usage of deprecated cloud types
- Provide shortcut names for common cloud field names
- More deprecated cloud usage
- FIX bug: FilterDecimateVoxel, if using flatten, did not propagate all input cloud fields
- Fix usage of some deprecated cloud types
- FilterSOR: create output layers even if input is empty
- FilterDeskew: propagate input fields even if the cloud is empty
- FilterByExpression: show debug-level stats
- FilterNormalizeIntensity: do not throw on empty clouds
- Merge pull request #22 from MOLAorg/feat/new-filters Add new filter FilterRenameLayer
- Added filter FilterRenameLayer
- mm2txt: prepare for deprecated classes in 3.0.0
- FilterAdjustTimestamps: new method 'None' to bypass filter
- Fix: sm2mm did not attach to ParameterSource the final_filter elements
- sm2mm: did not observe the optional profiler parameter for the final_filter stage
- Fix: FilterMLS did not properly copy all point fields when using upsampling
- Fix: FilterAbsoluteTimestamp now also works for accumulated points in one layer
- Contributors: Jose Luis Blanco-Claraco
2.2.1 (2026-01-06)
- Merge pull request #21 from MOLAorg/feat/abs-stamp-filter Added new filter: FilterAbsoluteTimestamp
- Fix the logic of the FilterEdgePlane filter parameters
- Added new filter: FilterAbsoluteTimestamp
- mm2txt: also export uint8 fields (missing in last release)
- Merge pull request #20 from MOLAorg/feat/more-unit-tests More unit tests
- Add generators unit tests
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| catkin | |
| mola_common | |
| mrpt_libbase | |
| mrpt_libobs | |
| mrpt_libposes | |
| mrpt_libmaps | |
| mrpt_libgui | |
| mrpt_libtclap | |
| mola_imu_preintegration |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged mp2p_icp at Robotics Stack Exchange
Package Summary
| Version | 2.4.1 |
| License | BSD-3-Clause |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mp2p_icp.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-02-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL Distro | Last release |
|---|---|
| ROS1 Noetic (u20.04) | |
| ROS 2 Iron (u22.04) |
mp2p_icp
C++ libraries for multi primitive-to-primitive (MP2P) ICP algorithms and flexible point cloud processing pipelines. mp2p_icp is used in the mola_lidar_odometry framework:
- Main library documentation and C++ API
- License: New BSD 3-Clause (Note that each module of MOLA has its own license)
Introduction
The project provides these C++ libraries:
-
mp2p_icp_map: Provides themp2p_icp::metric_map_tgeneric metric map container and related utilities for working with point cloud data structures. Metric map files with extension*.mmare serializations of instances of this class. -
mp2p_icp: With ICP algorithms, matchers (point-to-point, point-to-plane, point-to-line, covariance-to-covariance, adaptive), solvers (Horn, OLAE, Gauss-Newton), and quality evaluators. It depends onmp2p_icp_map. -
mp2p_icp_filters: With point cloud filtering and manipulation algorithms including decimation, voxelization, statistical outlier removal, edge/plane extraction, and various geometric transformations. It depends onmp2p_icp_map.
Command-Line Applications
The full repository also includes these applications (see apps/ directory):
Data Conversion Tools
-
kitti2mm: Converts KITTI dataset LIDAR binary files (
.bin) with (X,Y,Z, Intensity) data into mp2p_icp metric map files (.mm). Supports custom layer names, numeric IDs, and label strings. -
txt2mm: Converts plain-text point cloud data (TXT/CSV) into metric map (
.mm) files. Supports multiple formats: XYZ, XYZI, XYZIRT, XYZRGB, with configurable column mapping and layer names. -
sm2mm: Converts a simple map (
.simplemap) from a SLAM mapping session into a metric map (.mm) using a configurable processing pipeline. Essential for post-processing SLAM outputs into structured metric representations.
Data Export Tools
-
mm2ply: Exports metric map layers to PLY point cloud files. Supports both ASCII and binary formats, selective field export, and preserves all point attributes (coordinates, colors, intensities, etc.).
-
mm2txt: Exports metric map layers as space-delimited CSV/TXT files with header rows. Ideal for data analysis in spreadsheet applications or custom processing pipelines. Supports selective layer and field export.
-
mm2las: Exports metric maps to industry-standard LAS 1.4 format with Point Format 8 support. Includes automatic color mapping, extra dimensions for custom fields. Compatible with CloudCompare, QGIS, and ArcGIS.
Map Processing & Analysis Tools
-
mm-filter: Applies mp2p_icp_filters pipelines to metric map files. Can operate in pipeline mode (applying complete YAML-defined filter chains) or rename mode (simply renaming layers). Supports custom plugin loading.
-
mm-info: Displays a summary of metric map contents including layers, point counts, and metadata.
-
mm-georef: Extracts or injects geo-referencing information between metric map files (
.mm) and standalone georeferencing files (.georef).
Visualization Tools
-
mm-viewer: GUI application to visualize metric map (
.mm) files. Supports loading additional 3D scenes and trajectory files in TUM format. -
icp-log-viewer: Interactive GUI for debugging ICP pipelines. Visualizes ICP log files (
.icplog) with autoplay mode and detailed inspection of registration results. Essential for understanding and optimizing ICP algorithm performance.
ICP Execution Tools
- icp-run: Standalone program to execute ICP pipelines from the command line.
SimpleMaps Manipulation
-
sm-cli: Swiss-army knife for simple map (
.simplemap) manipulation. Commands include:info(analyze contents),cut(extract by keyframe index),trim(extract by bounding box),join(merge maps),level(make horizontal),tf(apply SE(3) transform),export-keyframes(save trajectories as TUM), andexport-rawlog(convert to RawLog format).
Key Features and Components
Key C++ classes provided by this project (see full documentation):
Core Data Structures
-
mp2p_icp::metric_map_t: A generic data type to store raw or processed point clouds, including support for multiple layers, segmented data, and discrete extracted features.
ICP Algorithms and Matchers
-
mp2p_icp::ICP: A uniform API for matching generic point clouds with support for:- Point-to-Point matching (various distance metrics)
- Point-to-Plane matching (planes extracted from point clouds)
- Point-to-Line matching (edges/lines extracted from point clouds)
- Covariance-to-Covariance matching (Gaussian distributions)
- Adaptive matching (automatically selects best matcher)
Solvers
- Horn’s method: Closed-form solution for point-to-point alignment
- OLAE (Optimal Linear Attitude Estimator): For attitude/rotation estimation
- Gauss-Newton: Iterative solver for complex matching scenarios
Filters and Generators
The mp2p_icp_filters library provides extensive filtering capabilities:
-
Decimation:
FilterDecimate,FilterDecimateVoxels,FilterDecimateAdaptive -
Outlier removal:
FilterSOR(Statistical Outlier Removal),FilterVoxelSOR
File truncated at 100 lines see the full file
Changelog for package mp2p_icp
2.4.1 (2026-01-27)
- Add more unit tests
- Update README to keep it in sync with the provided apps and libraries
- Merge pull request #29 from MOLAorg/fix/cov Fix bugs in covariance estimation for some cases
- fix covariance estimation bugs; add unit tests for cov2cov
- Update commit for mola_common
- Merge pull request #28 from MOLAorg/feat/mm-viewer-3d-layers mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- Contributors: Jose Luis Blanco-Claraco
2.4.0 (2026-01-21)
- Merge pull request #27 from MOLAorg/feat/new-filter-voxel-sor
- Add new unit test for class factory
- Add new FilterVoxelSOR filter
- Merge pull request #26 from MOLAorg/feat/mm2las
- Add mm2las CLI tool
- Contributors: Jose Luis Blanco-Claraco
2.3.1 (2026-01-14)
- Merge pull request #25 from MOLAorg/feat/naive-decimate Add trivial FilterDecimate for fast downsampling without spatial awareness
- lint fixes
- Add trivial FilterDecimate for fast downsampling without spatial awareness
- Parameterizable: add virtual base dtor
- Remove the NormalizeIntensity stage in the demo pipelines; visualization does that already
- docs: fill missing manpages
- docs: add sm2mm pipelines page
- Clarify map layers and simple maps descriptions Updated references to CMetricMap and CGenericPointsMap in the documentation for clarity and accuracy.
- Contributors: Jose Luis Blanco-Claraco
2.3.0 (2026-01-08)
- Merge pull request #24 from MOLAorg/feat/mm2txt-select-fields mm2txt and mm2ply now have a --export-fields flag
- mm2txt and mm2ply now have a --export-fields flag
- Merge pull request #23 from MOLAorg/fix/some-deprecations Fix usage of deprecated cloud types
- Provide shortcut names for common cloud field names
- More deprecated cloud usage
- FIX bug: FilterDecimateVoxel, if using flatten, did not propagate all input cloud fields
- Fix usage of some deprecated cloud types
- FilterSOR: create output layers even if input is empty
- FilterDeskew: propagate input fields even if the cloud is empty
- FilterByExpression: show debug-level stats
- FilterNormalizeIntensity: do not throw on empty clouds
- Merge pull request #22 from MOLAorg/feat/new-filters Add new filter FilterRenameLayer
- Added filter FilterRenameLayer
- mm2txt: prepare for deprecated classes in 3.0.0
- FilterAdjustTimestamps: new method 'None' to bypass filter
- Fix: sm2mm did not attach to ParameterSource the final_filter elements
- sm2mm: did not observe the optional profiler parameter for the final_filter stage
- Fix: FilterMLS did not properly copy all point fields when using upsampling
- Fix: FilterAbsoluteTimestamp now also works for accumulated points in one layer
- Contributors: Jose Luis Blanco-Claraco
2.2.1 (2026-01-06)
- Merge pull request #21 from MOLAorg/feat/abs-stamp-filter Added new filter: FilterAbsoluteTimestamp
- Fix the logic of the FilterEdgePlane filter parameters
- Added new filter: FilterAbsoluteTimestamp
- mm2txt: also export uint8 fields (missing in last release)
- Merge pull request #20 from MOLAorg/feat/more-unit-tests More unit tests
- Add generators unit tests
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| catkin | |
| mola_common | |
| mrpt_libbase | |
| mrpt_libobs | |
| mrpt_libposes | |
| mrpt_libmaps | |
| mrpt_libgui | |
| mrpt_libtclap | |
| mola_imu_preintegration |
System Dependencies
Launch files
Messages
Services
Plugins
Recent questions tagged mp2p_icp at Robotics Stack Exchange
Package Summary
| Version | 2.4.1 |
| License | BSD-3-Clause |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mp2p_icp.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-02-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL Distro | Last release |
|---|---|
| ROS1 Noetic (u20.04) | |
| ROS 2 Iron (u22.04) |
mp2p_icp
C++ libraries for multi primitive-to-primitive (MP2P) ICP algorithms and flexible point cloud processing pipelines. mp2p_icp is used in the mola_lidar_odometry framework:
- Main library documentation and C++ API
- License: New BSD 3-Clause (Note that each module of MOLA has its own license)
Introduction
The project provides these C++ libraries:
-
mp2p_icp_map: Provides themp2p_icp::metric_map_tgeneric metric map container and related utilities for working with point cloud data structures. Metric map files with extension*.mmare serializations of instances of this class. -
mp2p_icp: With ICP algorithms, matchers (point-to-point, point-to-plane, point-to-line, covariance-to-covariance, adaptive), solvers (Horn, OLAE, Gauss-Newton), and quality evaluators. It depends onmp2p_icp_map. -
mp2p_icp_filters: With point cloud filtering and manipulation algorithms including decimation, voxelization, statistical outlier removal, edge/plane extraction, and various geometric transformations. It depends onmp2p_icp_map.
Command-Line Applications
The full repository also includes these applications (see apps/ directory):
Data Conversion Tools
-
kitti2mm: Converts KITTI dataset LIDAR binary files (
.bin) with (X,Y,Z, Intensity) data into mp2p_icp metric map files (.mm). Supports custom layer names, numeric IDs, and label strings. -
txt2mm: Converts plain-text point cloud data (TXT/CSV) into metric map (
.mm) files. Supports multiple formats: XYZ, XYZI, XYZIRT, XYZRGB, with configurable column mapping and layer names. -
sm2mm: Converts a simple map (
.simplemap) from a SLAM mapping session into a metric map (.mm) using a configurable processing pipeline. Essential for post-processing SLAM outputs into structured metric representations.
Data Export Tools
-
mm2ply: Exports metric map layers to PLY point cloud files. Supports both ASCII and binary formats, selective field export, and preserves all point attributes (coordinates, colors, intensities, etc.).
-
mm2txt: Exports metric map layers as space-delimited CSV/TXT files with header rows. Ideal for data analysis in spreadsheet applications or custom processing pipelines. Supports selective layer and field export.
-
mm2las: Exports metric maps to industry-standard LAS 1.4 format with Point Format 8 support. Includes automatic color mapping, extra dimensions for custom fields. Compatible with CloudCompare, QGIS, and ArcGIS.
Map Processing & Analysis Tools
-
mm-filter: Applies mp2p_icp_filters pipelines to metric map files. Can operate in pipeline mode (applying complete YAML-defined filter chains) or rename mode (simply renaming layers). Supports custom plugin loading.
-
mm-info: Displays a summary of metric map contents including layers, point counts, and metadata.
-
mm-georef: Extracts or injects geo-referencing information between metric map files (
.mm) and standalone georeferencing files (.georef).
Visualization Tools
-
mm-viewer: GUI application to visualize metric map (
.mm) files. Supports loading additional 3D scenes and trajectory files in TUM format. -
icp-log-viewer: Interactive GUI for debugging ICP pipelines. Visualizes ICP log files (
.icplog) with autoplay mode and detailed inspection of registration results. Essential for understanding and optimizing ICP algorithm performance.
ICP Execution Tools
- icp-run: Standalone program to execute ICP pipelines from the command line.
SimpleMaps Manipulation
-
sm-cli: Swiss-army knife for simple map (
.simplemap) manipulation. Commands include:info(analyze contents),cut(extract by keyframe index),trim(extract by bounding box),join(merge maps),level(make horizontal),tf(apply SE(3) transform),export-keyframes(save trajectories as TUM), andexport-rawlog(convert to RawLog format).
Key Features and Components
Key C++ classes provided by this project (see full documentation):
Core Data Structures
-
mp2p_icp::metric_map_t: A generic data type to store raw or processed point clouds, including support for multiple layers, segmented data, and discrete extracted features.
ICP Algorithms and Matchers
-
mp2p_icp::ICP: A uniform API for matching generic point clouds with support for:- Point-to-Point matching (various distance metrics)
- Point-to-Plane matching (planes extracted from point clouds)
- Point-to-Line matching (edges/lines extracted from point clouds)
- Covariance-to-Covariance matching (Gaussian distributions)
- Adaptive matching (automatically selects best matcher)
Solvers
- Horn’s method: Closed-form solution for point-to-point alignment
- OLAE (Optimal Linear Attitude Estimator): For attitude/rotation estimation
- Gauss-Newton: Iterative solver for complex matching scenarios
Filters and Generators
The mp2p_icp_filters library provides extensive filtering capabilities:
-
Decimation:
FilterDecimate,FilterDecimateVoxels,FilterDecimateAdaptive -
Outlier removal:
FilterSOR(Statistical Outlier Removal),FilterVoxelSOR
File truncated at 100 lines see the full file
Changelog for package mp2p_icp
2.4.1 (2026-01-27)
- Add more unit tests
- Update README to keep it in sync with the provided apps and libraries
- Merge pull request #29 from MOLAorg/fix/cov Fix bugs in covariance estimation for some cases
- fix covariance estimation bugs; add unit tests for cov2cov
- Update commit for mola_common
- Merge pull request #28 from MOLAorg/feat/mm-viewer-3d-layers mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- Contributors: Jose Luis Blanco-Claraco
2.4.0 (2026-01-21)
- Merge pull request #27 from MOLAorg/feat/new-filter-voxel-sor
- Add new unit test for class factory
- Add new FilterVoxelSOR filter
- Merge pull request #26 from MOLAorg/feat/mm2las
- Add mm2las CLI tool
- Contributors: Jose Luis Blanco-Claraco
2.3.1 (2026-01-14)
- Merge pull request #25 from MOLAorg/feat/naive-decimate Add trivial FilterDecimate for fast downsampling without spatial awareness
- lint fixes
- Add trivial FilterDecimate for fast downsampling without spatial awareness
- Parameterizable: add virtual base dtor
- Remove the NormalizeIntensity stage in the demo pipelines; visualization does that already
- docs: fill missing manpages
- docs: add sm2mm pipelines page
- Clarify map layers and simple maps descriptions Updated references to CMetricMap and CGenericPointsMap in the documentation for clarity and accuracy.
- Contributors: Jose Luis Blanco-Claraco
2.3.0 (2026-01-08)
- Merge pull request #24 from MOLAorg/feat/mm2txt-select-fields mm2txt and mm2ply now have a --export-fields flag
- mm2txt and mm2ply now have a --export-fields flag
- Merge pull request #23 from MOLAorg/fix/some-deprecations Fix usage of deprecated cloud types
- Provide shortcut names for common cloud field names
- More deprecated cloud usage
- FIX bug: FilterDecimateVoxel, if using flatten, did not propagate all input cloud fields
- Fix usage of some deprecated cloud types
- FilterSOR: create output layers even if input is empty
- FilterDeskew: propagate input fields even if the cloud is empty
- FilterByExpression: show debug-level stats
- FilterNormalizeIntensity: do not throw on empty clouds
- Merge pull request #22 from MOLAorg/feat/new-filters Add new filter FilterRenameLayer
- Added filter FilterRenameLayer
- mm2txt: prepare for deprecated classes in 3.0.0
- FilterAdjustTimestamps: new method 'None' to bypass filter
- Fix: sm2mm did not attach to ParameterSource the final_filter elements
- sm2mm: did not observe the optional profiler parameter for the final_filter stage
- Fix: FilterMLS did not properly copy all point fields when using upsampling
- Fix: FilterAbsoluteTimestamp now also works for accumulated points in one layer
- Contributors: Jose Luis Blanco-Claraco
2.2.1 (2026-01-06)
- Merge pull request #21 from MOLAorg/feat/abs-stamp-filter Added new filter: FilterAbsoluteTimestamp
- Fix the logic of the FilterEdgePlane filter parameters
- Added new filter: FilterAbsoluteTimestamp
- mm2txt: also export uint8 fields (missing in last release)
- Merge pull request #20 from MOLAorg/feat/more-unit-tests More unit tests
- Add generators unit tests
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| catkin | |
| mola_common | |
| mrpt_libbase | |
| mrpt_libobs | |
| mrpt_libposes | |
| mrpt_libmaps | |
| mrpt_libgui | |
| mrpt_libtclap | |
| mola_imu_preintegration |
System Dependencies
Launch files
Messages
Services
Plugins
Recent questions tagged mp2p_icp at Robotics Stack Exchange
Package Summary
| Version | 2.4.1 |
| License | BSD-3-Clause |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mp2p_icp.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-02-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL Distro | Last release |
|---|---|
| ROS1 Noetic (u20.04) | |
| ROS 2 Iron (u22.04) |
mp2p_icp
C++ libraries for multi primitive-to-primitive (MP2P) ICP algorithms and flexible point cloud processing pipelines. mp2p_icp is used in the mola_lidar_odometry framework:
- Main library documentation and C++ API
- License: New BSD 3-Clause (Note that each module of MOLA has its own license)
Introduction
The project provides these C++ libraries:
-
mp2p_icp_map: Provides themp2p_icp::metric_map_tgeneric metric map container and related utilities for working with point cloud data structures. Metric map files with extension*.mmare serializations of instances of this class. -
mp2p_icp: With ICP algorithms, matchers (point-to-point, point-to-plane, point-to-line, covariance-to-covariance, adaptive), solvers (Horn, OLAE, Gauss-Newton), and quality evaluators. It depends onmp2p_icp_map. -
mp2p_icp_filters: With point cloud filtering and manipulation algorithms including decimation, voxelization, statistical outlier removal, edge/plane extraction, and various geometric transformations. It depends onmp2p_icp_map.
Command-Line Applications
The full repository also includes these applications (see apps/ directory):
Data Conversion Tools
-
kitti2mm: Converts KITTI dataset LIDAR binary files (
.bin) with (X,Y,Z, Intensity) data into mp2p_icp metric map files (.mm). Supports custom layer names, numeric IDs, and label strings. -
txt2mm: Converts plain-text point cloud data (TXT/CSV) into metric map (
.mm) files. Supports multiple formats: XYZ, XYZI, XYZIRT, XYZRGB, with configurable column mapping and layer names. -
sm2mm: Converts a simple map (
.simplemap) from a SLAM mapping session into a metric map (.mm) using a configurable processing pipeline. Essential for post-processing SLAM outputs into structured metric representations.
Data Export Tools
-
mm2ply: Exports metric map layers to PLY point cloud files. Supports both ASCII and binary formats, selective field export, and preserves all point attributes (coordinates, colors, intensities, etc.).
-
mm2txt: Exports metric map layers as space-delimited CSV/TXT files with header rows. Ideal for data analysis in spreadsheet applications or custom processing pipelines. Supports selective layer and field export.
-
mm2las: Exports metric maps to industry-standard LAS 1.4 format with Point Format 8 support. Includes automatic color mapping, extra dimensions for custom fields. Compatible with CloudCompare, QGIS, and ArcGIS.
Map Processing & Analysis Tools
-
mm-filter: Applies mp2p_icp_filters pipelines to metric map files. Can operate in pipeline mode (applying complete YAML-defined filter chains) or rename mode (simply renaming layers). Supports custom plugin loading.
-
mm-info: Displays a summary of metric map contents including layers, point counts, and metadata.
-
mm-georef: Extracts or injects geo-referencing information between metric map files (
.mm) and standalone georeferencing files (.georef).
Visualization Tools
-
mm-viewer: GUI application to visualize metric map (
.mm) files. Supports loading additional 3D scenes and trajectory files in TUM format. -
icp-log-viewer: Interactive GUI for debugging ICP pipelines. Visualizes ICP log files (
.icplog) with autoplay mode and detailed inspection of registration results. Essential for understanding and optimizing ICP algorithm performance.
ICP Execution Tools
- icp-run: Standalone program to execute ICP pipelines from the command line.
SimpleMaps Manipulation
-
sm-cli: Swiss-army knife for simple map (
.simplemap) manipulation. Commands include:info(analyze contents),cut(extract by keyframe index),trim(extract by bounding box),join(merge maps),level(make horizontal),tf(apply SE(3) transform),export-keyframes(save trajectories as TUM), andexport-rawlog(convert to RawLog format).
Key Features and Components
Key C++ classes provided by this project (see full documentation):
Core Data Structures
-
mp2p_icp::metric_map_t: A generic data type to store raw or processed point clouds, including support for multiple layers, segmented data, and discrete extracted features.
ICP Algorithms and Matchers
-
mp2p_icp::ICP: A uniform API for matching generic point clouds with support for:- Point-to-Point matching (various distance metrics)
- Point-to-Plane matching (planes extracted from point clouds)
- Point-to-Line matching (edges/lines extracted from point clouds)
- Covariance-to-Covariance matching (Gaussian distributions)
- Adaptive matching (automatically selects best matcher)
Solvers
- Horn’s method: Closed-form solution for point-to-point alignment
- OLAE (Optimal Linear Attitude Estimator): For attitude/rotation estimation
- Gauss-Newton: Iterative solver for complex matching scenarios
Filters and Generators
The mp2p_icp_filters library provides extensive filtering capabilities:
-
Decimation:
FilterDecimate,FilterDecimateVoxels,FilterDecimateAdaptive -
Outlier removal:
FilterSOR(Statistical Outlier Removal),FilterVoxelSOR
File truncated at 100 lines see the full file
Changelog for package mp2p_icp
2.4.1 (2026-01-27)
- Add more unit tests
- Update README to keep it in sync with the provided apps and libraries
- Merge pull request #29 from MOLAorg/fix/cov Fix bugs in covariance estimation for some cases
- fix covariance estimation bugs; add unit tests for cov2cov
- Update commit for mola_common
- Merge pull request #28 from MOLAorg/feat/mm-viewer-3d-layers mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- Contributors: Jose Luis Blanco-Claraco
2.4.0 (2026-01-21)
- Merge pull request #27 from MOLAorg/feat/new-filter-voxel-sor
- Add new unit test for class factory
- Add new FilterVoxelSOR filter
- Merge pull request #26 from MOLAorg/feat/mm2las
- Add mm2las CLI tool
- Contributors: Jose Luis Blanco-Claraco
2.3.1 (2026-01-14)
- Merge pull request #25 from MOLAorg/feat/naive-decimate Add trivial FilterDecimate for fast downsampling without spatial awareness
- lint fixes
- Add trivial FilterDecimate for fast downsampling without spatial awareness
- Parameterizable: add virtual base dtor
- Remove the NormalizeIntensity stage in the demo pipelines; visualization does that already
- docs: fill missing manpages
- docs: add sm2mm pipelines page
- Clarify map layers and simple maps descriptions Updated references to CMetricMap and CGenericPointsMap in the documentation for clarity and accuracy.
- Contributors: Jose Luis Blanco-Claraco
2.3.0 (2026-01-08)
- Merge pull request #24 from MOLAorg/feat/mm2txt-select-fields mm2txt and mm2ply now have a --export-fields flag
- mm2txt and mm2ply now have a --export-fields flag
- Merge pull request #23 from MOLAorg/fix/some-deprecations Fix usage of deprecated cloud types
- Provide shortcut names for common cloud field names
- More deprecated cloud usage
- FIX bug: FilterDecimateVoxel, if using flatten, did not propagate all input cloud fields
- Fix usage of some deprecated cloud types
- FilterSOR: create output layers even if input is empty
- FilterDeskew: propagate input fields even if the cloud is empty
- FilterByExpression: show debug-level stats
- FilterNormalizeIntensity: do not throw on empty clouds
- Merge pull request #22 from MOLAorg/feat/new-filters Add new filter FilterRenameLayer
- Added filter FilterRenameLayer
- mm2txt: prepare for deprecated classes in 3.0.0
- FilterAdjustTimestamps: new method 'None' to bypass filter
- Fix: sm2mm did not attach to ParameterSource the final_filter elements
- sm2mm: did not observe the optional profiler parameter for the final_filter stage
- Fix: FilterMLS did not properly copy all point fields when using upsampling
- Fix: FilterAbsoluteTimestamp now also works for accumulated points in one layer
- Contributors: Jose Luis Blanco-Claraco
2.2.1 (2026-01-06)
- Merge pull request #21 from MOLAorg/feat/abs-stamp-filter Added new filter: FilterAbsoluteTimestamp
- Fix the logic of the FilterEdgePlane filter parameters
- Added new filter: FilterAbsoluteTimestamp
- mm2txt: also export uint8 fields (missing in last release)
- Merge pull request #20 from MOLAorg/feat/more-unit-tests More unit tests
- Add generators unit tests
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| catkin | |
| mola_common | |
| mrpt_libbase | |
| mrpt_libobs | |
| mrpt_libposes | |
| mrpt_libmaps | |
| mrpt_libgui | |
| mrpt_libtclap | |
| mola_imu_preintegration |
System Dependencies
Launch files
Messages
Services
Plugins
Recent questions tagged mp2p_icp at Robotics Stack Exchange
Package Summary
| Version | 2.4.1 |
| License | BSD-3-Clause |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mp2p_icp.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-02-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL Distro | Last release |
|---|---|
| ROS1 Noetic (u20.04) | |
| ROS 2 Iron (u22.04) |
mp2p_icp
C++ libraries for multi primitive-to-primitive (MP2P) ICP algorithms and flexible point cloud processing pipelines. mp2p_icp is used in the mola_lidar_odometry framework:
- Main library documentation and C++ API
- License: New BSD 3-Clause (Note that each module of MOLA has its own license)
Introduction
The project provides these C++ libraries:
-
mp2p_icp_map: Provides themp2p_icp::metric_map_tgeneric metric map container and related utilities for working with point cloud data structures. Metric map files with extension*.mmare serializations of instances of this class. -
mp2p_icp: With ICP algorithms, matchers (point-to-point, point-to-plane, point-to-line, covariance-to-covariance, adaptive), solvers (Horn, OLAE, Gauss-Newton), and quality evaluators. It depends onmp2p_icp_map. -
mp2p_icp_filters: With point cloud filtering and manipulation algorithms including decimation, voxelization, statistical outlier removal, edge/plane extraction, and various geometric transformations. It depends onmp2p_icp_map.
Command-Line Applications
The full repository also includes these applications (see apps/ directory):
Data Conversion Tools
-
kitti2mm: Converts KITTI dataset LIDAR binary files (
.bin) with (X,Y,Z, Intensity) data into mp2p_icp metric map files (.mm). Supports custom layer names, numeric IDs, and label strings. -
txt2mm: Converts plain-text point cloud data (TXT/CSV) into metric map (
.mm) files. Supports multiple formats: XYZ, XYZI, XYZIRT, XYZRGB, with configurable column mapping and layer names. -
sm2mm: Converts a simple map (
.simplemap) from a SLAM mapping session into a metric map (.mm) using a configurable processing pipeline. Essential for post-processing SLAM outputs into structured metric representations.
Data Export Tools
-
mm2ply: Exports metric map layers to PLY point cloud files. Supports both ASCII and binary formats, selective field export, and preserves all point attributes (coordinates, colors, intensities, etc.).
-
mm2txt: Exports metric map layers as space-delimited CSV/TXT files with header rows. Ideal for data analysis in spreadsheet applications or custom processing pipelines. Supports selective layer and field export.
-
mm2las: Exports metric maps to industry-standard LAS 1.4 format with Point Format 8 support. Includes automatic color mapping, extra dimensions for custom fields. Compatible with CloudCompare, QGIS, and ArcGIS.
Map Processing & Analysis Tools
-
mm-filter: Applies mp2p_icp_filters pipelines to metric map files. Can operate in pipeline mode (applying complete YAML-defined filter chains) or rename mode (simply renaming layers). Supports custom plugin loading.
-
mm-info: Displays a summary of metric map contents including layers, point counts, and metadata.
-
mm-georef: Extracts or injects geo-referencing information between metric map files (
.mm) and standalone georeferencing files (.georef).
Visualization Tools
-
mm-viewer: GUI application to visualize metric map (
.mm) files. Supports loading additional 3D scenes and trajectory files in TUM format. -
icp-log-viewer: Interactive GUI for debugging ICP pipelines. Visualizes ICP log files (
.icplog) with autoplay mode and detailed inspection of registration results. Essential for understanding and optimizing ICP algorithm performance.
ICP Execution Tools
- icp-run: Standalone program to execute ICP pipelines from the command line.
SimpleMaps Manipulation
-
sm-cli: Swiss-army knife for simple map (
.simplemap) manipulation. Commands include:info(analyze contents),cut(extract by keyframe index),trim(extract by bounding box),join(merge maps),level(make horizontal),tf(apply SE(3) transform),export-keyframes(save trajectories as TUM), andexport-rawlog(convert to RawLog format).
Key Features and Components
Key C++ classes provided by this project (see full documentation):
Core Data Structures
-
mp2p_icp::metric_map_t: A generic data type to store raw or processed point clouds, including support for multiple layers, segmented data, and discrete extracted features.
ICP Algorithms and Matchers
-
mp2p_icp::ICP: A uniform API for matching generic point clouds with support for:- Point-to-Point matching (various distance metrics)
- Point-to-Plane matching (planes extracted from point clouds)
- Point-to-Line matching (edges/lines extracted from point clouds)
- Covariance-to-Covariance matching (Gaussian distributions)
- Adaptive matching (automatically selects best matcher)
Solvers
- Horn’s method: Closed-form solution for point-to-point alignment
- OLAE (Optimal Linear Attitude Estimator): For attitude/rotation estimation
- Gauss-Newton: Iterative solver for complex matching scenarios
Filters and Generators
The mp2p_icp_filters library provides extensive filtering capabilities:
-
Decimation:
FilterDecimate,FilterDecimateVoxels,FilterDecimateAdaptive -
Outlier removal:
FilterSOR(Statistical Outlier Removal),FilterVoxelSOR
File truncated at 100 lines see the full file
Changelog for package mp2p_icp
2.4.1 (2026-01-27)
- Add more unit tests
- Update README to keep it in sync with the provided apps and libraries
- Merge pull request #29 from MOLAorg/fix/cov Fix bugs in covariance estimation for some cases
- fix covariance estimation bugs; add unit tests for cov2cov
- Update commit for mola_common
- Merge pull request #28 from MOLAorg/feat/mm-viewer-3d-layers mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- Contributors: Jose Luis Blanco-Claraco
2.4.0 (2026-01-21)
- Merge pull request #27 from MOLAorg/feat/new-filter-voxel-sor
- Add new unit test for class factory
- Add new FilterVoxelSOR filter
- Merge pull request #26 from MOLAorg/feat/mm2las
- Add mm2las CLI tool
- Contributors: Jose Luis Blanco-Claraco
2.3.1 (2026-01-14)
- Merge pull request #25 from MOLAorg/feat/naive-decimate Add trivial FilterDecimate for fast downsampling without spatial awareness
- lint fixes
- Add trivial FilterDecimate for fast downsampling without spatial awareness
- Parameterizable: add virtual base dtor
- Remove the NormalizeIntensity stage in the demo pipelines; visualization does that already
- docs: fill missing manpages
- docs: add sm2mm pipelines page
- Clarify map layers and simple maps descriptions Updated references to CMetricMap and CGenericPointsMap in the documentation for clarity and accuracy.
- Contributors: Jose Luis Blanco-Claraco
2.3.0 (2026-01-08)
- Merge pull request #24 from MOLAorg/feat/mm2txt-select-fields mm2txt and mm2ply now have a --export-fields flag
- mm2txt and mm2ply now have a --export-fields flag
- Merge pull request #23 from MOLAorg/fix/some-deprecations Fix usage of deprecated cloud types
- Provide shortcut names for common cloud field names
- More deprecated cloud usage
- FIX bug: FilterDecimateVoxel, if using flatten, did not propagate all input cloud fields
- Fix usage of some deprecated cloud types
- FilterSOR: create output layers even if input is empty
- FilterDeskew: propagate input fields even if the cloud is empty
- FilterByExpression: show debug-level stats
- FilterNormalizeIntensity: do not throw on empty clouds
- Merge pull request #22 from MOLAorg/feat/new-filters Add new filter FilterRenameLayer
- Added filter FilterRenameLayer
- mm2txt: prepare for deprecated classes in 3.0.0
- FilterAdjustTimestamps: new method 'None' to bypass filter
- Fix: sm2mm did not attach to ParameterSource the final_filter elements
- sm2mm: did not observe the optional profiler parameter for the final_filter stage
- Fix: FilterMLS did not properly copy all point fields when using upsampling
- Fix: FilterAbsoluteTimestamp now also works for accumulated points in one layer
- Contributors: Jose Luis Blanco-Claraco
2.2.1 (2026-01-06)
- Merge pull request #21 from MOLAorg/feat/abs-stamp-filter Added new filter: FilterAbsoluteTimestamp
- Fix the logic of the FilterEdgePlane filter parameters
- Added new filter: FilterAbsoluteTimestamp
- mm2txt: also export uint8 fields (missing in last release)
- Merge pull request #20 from MOLAorg/feat/more-unit-tests More unit tests
- Add generators unit tests
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| catkin | |
| mola_common | |
| mrpt_libbase | |
| mrpt_libobs | |
| mrpt_libposes | |
| mrpt_libmaps | |
| mrpt_libgui | |
| mrpt_libtclap | |
| mola_imu_preintegration |
System Dependencies
Launch files
Messages
Services
Plugins
Recent questions tagged mp2p_icp at Robotics Stack Exchange
Package Summary
| Version | 2.4.1 |
| License | BSD-3-Clause |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mp2p_icp.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-02-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL Distro | Last release |
|---|---|
| ROS1 Noetic (u20.04) | |
| ROS 2 Iron (u22.04) |
mp2p_icp
C++ libraries for multi primitive-to-primitive (MP2P) ICP algorithms and flexible point cloud processing pipelines. mp2p_icp is used in the mola_lidar_odometry framework:
- Main library documentation and C++ API
- License: New BSD 3-Clause (Note that each module of MOLA has its own license)
Introduction
The project provides these C++ libraries:
-
mp2p_icp_map: Provides themp2p_icp::metric_map_tgeneric metric map container and related utilities for working with point cloud data structures. Metric map files with extension*.mmare serializations of instances of this class. -
mp2p_icp: With ICP algorithms, matchers (point-to-point, point-to-plane, point-to-line, covariance-to-covariance, adaptive), solvers (Horn, OLAE, Gauss-Newton), and quality evaluators. It depends onmp2p_icp_map. -
mp2p_icp_filters: With point cloud filtering and manipulation algorithms including decimation, voxelization, statistical outlier removal, edge/plane extraction, and various geometric transformations. It depends onmp2p_icp_map.
Command-Line Applications
The full repository also includes these applications (see apps/ directory):
Data Conversion Tools
-
kitti2mm: Converts KITTI dataset LIDAR binary files (
.bin) with (X,Y,Z, Intensity) data into mp2p_icp metric map files (.mm). Supports custom layer names, numeric IDs, and label strings. -
txt2mm: Converts plain-text point cloud data (TXT/CSV) into metric map (
.mm) files. Supports multiple formats: XYZ, XYZI, XYZIRT, XYZRGB, with configurable column mapping and layer names. -
sm2mm: Converts a simple map (
.simplemap) from a SLAM mapping session into a metric map (.mm) using a configurable processing pipeline. Essential for post-processing SLAM outputs into structured metric representations.
Data Export Tools
-
mm2ply: Exports metric map layers to PLY point cloud files. Supports both ASCII and binary formats, selective field export, and preserves all point attributes (coordinates, colors, intensities, etc.).
-
mm2txt: Exports metric map layers as space-delimited CSV/TXT files with header rows. Ideal for data analysis in spreadsheet applications or custom processing pipelines. Supports selective layer and field export.
-
mm2las: Exports metric maps to industry-standard LAS 1.4 format with Point Format 8 support. Includes automatic color mapping, extra dimensions for custom fields. Compatible with CloudCompare, QGIS, and ArcGIS.
Map Processing & Analysis Tools
-
mm-filter: Applies mp2p_icp_filters pipelines to metric map files. Can operate in pipeline mode (applying complete YAML-defined filter chains) or rename mode (simply renaming layers). Supports custom plugin loading.
-
mm-info: Displays a summary of metric map contents including layers, point counts, and metadata.
-
mm-georef: Extracts or injects geo-referencing information between metric map files (
.mm) and standalone georeferencing files (.georef).
Visualization Tools
-
mm-viewer: GUI application to visualize metric map (
.mm) files. Supports loading additional 3D scenes and trajectory files in TUM format. -
icp-log-viewer: Interactive GUI for debugging ICP pipelines. Visualizes ICP log files (
.icplog) with autoplay mode and detailed inspection of registration results. Essential for understanding and optimizing ICP algorithm performance.
ICP Execution Tools
- icp-run: Standalone program to execute ICP pipelines from the command line.
SimpleMaps Manipulation
-
sm-cli: Swiss-army knife for simple map (
.simplemap) manipulation. Commands include:info(analyze contents),cut(extract by keyframe index),trim(extract by bounding box),join(merge maps),level(make horizontal),tf(apply SE(3) transform),export-keyframes(save trajectories as TUM), andexport-rawlog(convert to RawLog format).
Key Features and Components
Key C++ classes provided by this project (see full documentation):
Core Data Structures
-
mp2p_icp::metric_map_t: A generic data type to store raw or processed point clouds, including support for multiple layers, segmented data, and discrete extracted features.
ICP Algorithms and Matchers
-
mp2p_icp::ICP: A uniform API for matching generic point clouds with support for:- Point-to-Point matching (various distance metrics)
- Point-to-Plane matching (planes extracted from point clouds)
- Point-to-Line matching (edges/lines extracted from point clouds)
- Covariance-to-Covariance matching (Gaussian distributions)
- Adaptive matching (automatically selects best matcher)
Solvers
- Horn’s method: Closed-form solution for point-to-point alignment
- OLAE (Optimal Linear Attitude Estimator): For attitude/rotation estimation
- Gauss-Newton: Iterative solver for complex matching scenarios
Filters and Generators
The mp2p_icp_filters library provides extensive filtering capabilities:
-
Decimation:
FilterDecimate,FilterDecimateVoxels,FilterDecimateAdaptive -
Outlier removal:
FilterSOR(Statistical Outlier Removal),FilterVoxelSOR
File truncated at 100 lines see the full file
Changelog for package mp2p_icp
2.4.1 (2026-01-27)
- Add more unit tests
- Update README to keep it in sync with the provided apps and libraries
- Merge pull request #29 from MOLAorg/fix/cov Fix bugs in covariance estimation for some cases
- fix covariance estimation bugs; add unit tests for cov2cov
- Update commit for mola_common
- Merge pull request #28 from MOLAorg/feat/mm-viewer-3d-layers mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- Contributors: Jose Luis Blanco-Claraco
2.4.0 (2026-01-21)
- Merge pull request #27 from MOLAorg/feat/new-filter-voxel-sor
- Add new unit test for class factory
- Add new FilterVoxelSOR filter
- Merge pull request #26 from MOLAorg/feat/mm2las
- Add mm2las CLI tool
- Contributors: Jose Luis Blanco-Claraco
2.3.1 (2026-01-14)
- Merge pull request #25 from MOLAorg/feat/naive-decimate Add trivial FilterDecimate for fast downsampling without spatial awareness
- lint fixes
- Add trivial FilterDecimate for fast downsampling without spatial awareness
- Parameterizable: add virtual base dtor
- Remove the NormalizeIntensity stage in the demo pipelines; visualization does that already
- docs: fill missing manpages
- docs: add sm2mm pipelines page
- Clarify map layers and simple maps descriptions Updated references to CMetricMap and CGenericPointsMap in the documentation for clarity and accuracy.
- Contributors: Jose Luis Blanco-Claraco
2.3.0 (2026-01-08)
- Merge pull request #24 from MOLAorg/feat/mm2txt-select-fields mm2txt and mm2ply now have a --export-fields flag
- mm2txt and mm2ply now have a --export-fields flag
- Merge pull request #23 from MOLAorg/fix/some-deprecations Fix usage of deprecated cloud types
- Provide shortcut names for common cloud field names
- More deprecated cloud usage
- FIX bug: FilterDecimateVoxel, if using flatten, did not propagate all input cloud fields
- Fix usage of some deprecated cloud types
- FilterSOR: create output layers even if input is empty
- FilterDeskew: propagate input fields even if the cloud is empty
- FilterByExpression: show debug-level stats
- FilterNormalizeIntensity: do not throw on empty clouds
- Merge pull request #22 from MOLAorg/feat/new-filters Add new filter FilterRenameLayer
- Added filter FilterRenameLayer
- mm2txt: prepare for deprecated classes in 3.0.0
- FilterAdjustTimestamps: new method 'None' to bypass filter
- Fix: sm2mm did not attach to ParameterSource the final_filter elements
- sm2mm: did not observe the optional profiler parameter for the final_filter stage
- Fix: FilterMLS did not properly copy all point fields when using upsampling
- Fix: FilterAbsoluteTimestamp now also works for accumulated points in one layer
- Contributors: Jose Luis Blanco-Claraco
2.2.1 (2026-01-06)
- Merge pull request #21 from MOLAorg/feat/abs-stamp-filter Added new filter: FilterAbsoluteTimestamp
- Fix the logic of the FilterEdgePlane filter parameters
- Added new filter: FilterAbsoluteTimestamp
- mm2txt: also export uint8 fields (missing in last release)
- Merge pull request #20 from MOLAorg/feat/more-unit-tests More unit tests
- Add generators unit tests
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| catkin | |
| mola_common | |
| mrpt_libbase | |
| mrpt_libobs | |
| mrpt_libposes | |
| mrpt_libmaps | |
| mrpt_libgui | |
| mrpt_libtclap | |
| mola_imu_preintegration |
System Dependencies
Launch files
Messages
Services
Plugins
Recent questions tagged mp2p_icp at Robotics Stack Exchange
Package Summary
| Version | 2.4.1 |
| License | BSD-3-Clause |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mp2p_icp.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-02-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL Distro | Last release |
|---|---|
| ROS1 Noetic (u20.04) | |
| ROS 2 Iron (u22.04) |
mp2p_icp
C++ libraries for multi primitive-to-primitive (MP2P) ICP algorithms and flexible point cloud processing pipelines. mp2p_icp is used in the mola_lidar_odometry framework:
- Main library documentation and C++ API
- License: New BSD 3-Clause (Note that each module of MOLA has its own license)
Introduction
The project provides these C++ libraries:
-
mp2p_icp_map: Provides themp2p_icp::metric_map_tgeneric metric map container and related utilities for working with point cloud data structures. Metric map files with extension*.mmare serializations of instances of this class. -
mp2p_icp: With ICP algorithms, matchers (point-to-point, point-to-plane, point-to-line, covariance-to-covariance, adaptive), solvers (Horn, OLAE, Gauss-Newton), and quality evaluators. It depends onmp2p_icp_map. -
mp2p_icp_filters: With point cloud filtering and manipulation algorithms including decimation, voxelization, statistical outlier removal, edge/plane extraction, and various geometric transformations. It depends onmp2p_icp_map.
Command-Line Applications
The full repository also includes these applications (see apps/ directory):
Data Conversion Tools
-
kitti2mm: Converts KITTI dataset LIDAR binary files (
.bin) with (X,Y,Z, Intensity) data into mp2p_icp metric map files (.mm). Supports custom layer names, numeric IDs, and label strings. -
txt2mm: Converts plain-text point cloud data (TXT/CSV) into metric map (
.mm) files. Supports multiple formats: XYZ, XYZI, XYZIRT, XYZRGB, with configurable column mapping and layer names. -
sm2mm: Converts a simple map (
.simplemap) from a SLAM mapping session into a metric map (.mm) using a configurable processing pipeline. Essential for post-processing SLAM outputs into structured metric representations.
Data Export Tools
-
mm2ply: Exports metric map layers to PLY point cloud files. Supports both ASCII and binary formats, selective field export, and preserves all point attributes (coordinates, colors, intensities, etc.).
-
mm2txt: Exports metric map layers as space-delimited CSV/TXT files with header rows. Ideal for data analysis in spreadsheet applications or custom processing pipelines. Supports selective layer and field export.
-
mm2las: Exports metric maps to industry-standard LAS 1.4 format with Point Format 8 support. Includes automatic color mapping, extra dimensions for custom fields. Compatible with CloudCompare, QGIS, and ArcGIS.
Map Processing & Analysis Tools
-
mm-filter: Applies mp2p_icp_filters pipelines to metric map files. Can operate in pipeline mode (applying complete YAML-defined filter chains) or rename mode (simply renaming layers). Supports custom plugin loading.
-
mm-info: Displays a summary of metric map contents including layers, point counts, and metadata.
-
mm-georef: Extracts or injects geo-referencing information between metric map files (
.mm) and standalone georeferencing files (.georef).
Visualization Tools
-
mm-viewer: GUI application to visualize metric map (
.mm) files. Supports loading additional 3D scenes and trajectory files in TUM format. -
icp-log-viewer: Interactive GUI for debugging ICP pipelines. Visualizes ICP log files (
.icplog) with autoplay mode and detailed inspection of registration results. Essential for understanding and optimizing ICP algorithm performance.
ICP Execution Tools
- icp-run: Standalone program to execute ICP pipelines from the command line.
SimpleMaps Manipulation
-
sm-cli: Swiss-army knife for simple map (
.simplemap) manipulation. Commands include:info(analyze contents),cut(extract by keyframe index),trim(extract by bounding box),join(merge maps),level(make horizontal),tf(apply SE(3) transform),export-keyframes(save trajectories as TUM), andexport-rawlog(convert to RawLog format).
Key Features and Components
Key C++ classes provided by this project (see full documentation):
Core Data Structures
-
mp2p_icp::metric_map_t: A generic data type to store raw or processed point clouds, including support for multiple layers, segmented data, and discrete extracted features.
ICP Algorithms and Matchers
-
mp2p_icp::ICP: A uniform API for matching generic point clouds with support for:- Point-to-Point matching (various distance metrics)
- Point-to-Plane matching (planes extracted from point clouds)
- Point-to-Line matching (edges/lines extracted from point clouds)
- Covariance-to-Covariance matching (Gaussian distributions)
- Adaptive matching (automatically selects best matcher)
Solvers
- Horn’s method: Closed-form solution for point-to-point alignment
- OLAE (Optimal Linear Attitude Estimator): For attitude/rotation estimation
- Gauss-Newton: Iterative solver for complex matching scenarios
Filters and Generators
The mp2p_icp_filters library provides extensive filtering capabilities:
-
Decimation:
FilterDecimate,FilterDecimateVoxels,FilterDecimateAdaptive -
Outlier removal:
FilterSOR(Statistical Outlier Removal),FilterVoxelSOR
File truncated at 100 lines see the full file
Changelog for package mp2p_icp
2.4.1 (2026-01-27)
- Add more unit tests
- Update README to keep it in sync with the provided apps and libraries
- Merge pull request #29 from MOLAorg/fix/cov Fix bugs in covariance estimation for some cases
- fix covariance estimation bugs; add unit tests for cov2cov
- Update commit for mola_common
- Merge pull request #28 from MOLAorg/feat/mm-viewer-3d-layers mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- Contributors: Jose Luis Blanco-Claraco
2.4.0 (2026-01-21)
- Merge pull request #27 from MOLAorg/feat/new-filter-voxel-sor
- Add new unit test for class factory
- Add new FilterVoxelSOR filter
- Merge pull request #26 from MOLAorg/feat/mm2las
- Add mm2las CLI tool
- Contributors: Jose Luis Blanco-Claraco
2.3.1 (2026-01-14)
- Merge pull request #25 from MOLAorg/feat/naive-decimate Add trivial FilterDecimate for fast downsampling without spatial awareness
- lint fixes
- Add trivial FilterDecimate for fast downsampling without spatial awareness
- Parameterizable: add virtual base dtor
- Remove the NormalizeIntensity stage in the demo pipelines; visualization does that already
- docs: fill missing manpages
- docs: add sm2mm pipelines page
- Clarify map layers and simple maps descriptions Updated references to CMetricMap and CGenericPointsMap in the documentation for clarity and accuracy.
- Contributors: Jose Luis Blanco-Claraco
2.3.0 (2026-01-08)
- Merge pull request #24 from MOLAorg/feat/mm2txt-select-fields mm2txt and mm2ply now have a --export-fields flag
- mm2txt and mm2ply now have a --export-fields flag
- Merge pull request #23 from MOLAorg/fix/some-deprecations Fix usage of deprecated cloud types
- Provide shortcut names for common cloud field names
- More deprecated cloud usage
- FIX bug: FilterDecimateVoxel, if using flatten, did not propagate all input cloud fields
- Fix usage of some deprecated cloud types
- FilterSOR: create output layers even if input is empty
- FilterDeskew: propagate input fields even if the cloud is empty
- FilterByExpression: show debug-level stats
- FilterNormalizeIntensity: do not throw on empty clouds
- Merge pull request #22 from MOLAorg/feat/new-filters Add new filter FilterRenameLayer
- Added filter FilterRenameLayer
- mm2txt: prepare for deprecated classes in 3.0.0
- FilterAdjustTimestamps: new method 'None' to bypass filter
- Fix: sm2mm did not attach to ParameterSource the final_filter elements
- sm2mm: did not observe the optional profiler parameter for the final_filter stage
- Fix: FilterMLS did not properly copy all point fields when using upsampling
- Fix: FilterAbsoluteTimestamp now also works for accumulated points in one layer
- Contributors: Jose Luis Blanco-Claraco
2.2.1 (2026-01-06)
- Merge pull request #21 from MOLAorg/feat/abs-stamp-filter Added new filter: FilterAbsoluteTimestamp
- Fix the logic of the FilterEdgePlane filter parameters
- Added new filter: FilterAbsoluteTimestamp
- mm2txt: also export uint8 fields (missing in last release)
- Merge pull request #20 from MOLAorg/feat/more-unit-tests More unit tests
- Add generators unit tests
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| catkin | |
| mola_common | |
| mrpt_libbase | |
| mrpt_libobs | |
| mrpt_libposes | |
| mrpt_libmaps | |
| mrpt_libgui | |
| mrpt_libtclap | |
| mola_imu_preintegration |
System Dependencies
Launch files
Messages
Services
Plugins
Recent questions tagged mp2p_icp at Robotics Stack Exchange
Package Summary
| Version | 2.4.1 |
| License | BSD-3-Clause |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mp2p_icp.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-02-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL Distro | Last release |
|---|---|
| ROS1 Noetic (u20.04) | |
| ROS 2 Iron (u22.04) |
mp2p_icp
C++ libraries for multi primitive-to-primitive (MP2P) ICP algorithms and flexible point cloud processing pipelines. mp2p_icp is used in the mola_lidar_odometry framework:
- Main library documentation and C++ API
- License: New BSD 3-Clause (Note that each module of MOLA has its own license)
Introduction
The project provides these C++ libraries:
-
mp2p_icp_map: Provides themp2p_icp::metric_map_tgeneric metric map container and related utilities for working with point cloud data structures. Metric map files with extension*.mmare serializations of instances of this class. -
mp2p_icp: With ICP algorithms, matchers (point-to-point, point-to-plane, point-to-line, covariance-to-covariance, adaptive), solvers (Horn, OLAE, Gauss-Newton), and quality evaluators. It depends onmp2p_icp_map. -
mp2p_icp_filters: With point cloud filtering and manipulation algorithms including decimation, voxelization, statistical outlier removal, edge/plane extraction, and various geometric transformations. It depends onmp2p_icp_map.
Command-Line Applications
The full repository also includes these applications (see apps/ directory):
Data Conversion Tools
-
kitti2mm: Converts KITTI dataset LIDAR binary files (
.bin) with (X,Y,Z, Intensity) data into mp2p_icp metric map files (.mm). Supports custom layer names, numeric IDs, and label strings. -
txt2mm: Converts plain-text point cloud data (TXT/CSV) into metric map (
.mm) files. Supports multiple formats: XYZ, XYZI, XYZIRT, XYZRGB, with configurable column mapping and layer names. -
sm2mm: Converts a simple map (
.simplemap) from a SLAM mapping session into a metric map (.mm) using a configurable processing pipeline. Essential for post-processing SLAM outputs into structured metric representations.
Data Export Tools
-
mm2ply: Exports metric map layers to PLY point cloud files. Supports both ASCII and binary formats, selective field export, and preserves all point attributes (coordinates, colors, intensities, etc.).
-
mm2txt: Exports metric map layers as space-delimited CSV/TXT files with header rows. Ideal for data analysis in spreadsheet applications or custom processing pipelines. Supports selective layer and field export.
-
mm2las: Exports metric maps to industry-standard LAS 1.4 format with Point Format 8 support. Includes automatic color mapping, extra dimensions for custom fields. Compatible with CloudCompare, QGIS, and ArcGIS.
Map Processing & Analysis Tools
-
mm-filter: Applies mp2p_icp_filters pipelines to metric map files. Can operate in pipeline mode (applying complete YAML-defined filter chains) or rename mode (simply renaming layers). Supports custom plugin loading.
-
mm-info: Displays a summary of metric map contents including layers, point counts, and metadata.
-
mm-georef: Extracts or injects geo-referencing information between metric map files (
.mm) and standalone georeferencing files (.georef).
Visualization Tools
-
mm-viewer: GUI application to visualize metric map (
.mm) files. Supports loading additional 3D scenes and trajectory files in TUM format. -
icp-log-viewer: Interactive GUI for debugging ICP pipelines. Visualizes ICP log files (
.icplog) with autoplay mode and detailed inspection of registration results. Essential for understanding and optimizing ICP algorithm performance.
ICP Execution Tools
- icp-run: Standalone program to execute ICP pipelines from the command line.
SimpleMaps Manipulation
-
sm-cli: Swiss-army knife for simple map (
.simplemap) manipulation. Commands include:info(analyze contents),cut(extract by keyframe index),trim(extract by bounding box),join(merge maps),level(make horizontal),tf(apply SE(3) transform),export-keyframes(save trajectories as TUM), andexport-rawlog(convert to RawLog format).
Key Features and Components
Key C++ classes provided by this project (see full documentation):
Core Data Structures
-
mp2p_icp::metric_map_t: A generic data type to store raw or processed point clouds, including support for multiple layers, segmented data, and discrete extracted features.
ICP Algorithms and Matchers
-
mp2p_icp::ICP: A uniform API for matching generic point clouds with support for:- Point-to-Point matching (various distance metrics)
- Point-to-Plane matching (planes extracted from point clouds)
- Point-to-Line matching (edges/lines extracted from point clouds)
- Covariance-to-Covariance matching (Gaussian distributions)
- Adaptive matching (automatically selects best matcher)
Solvers
- Horn’s method: Closed-form solution for point-to-point alignment
- OLAE (Optimal Linear Attitude Estimator): For attitude/rotation estimation
- Gauss-Newton: Iterative solver for complex matching scenarios
Filters and Generators
The mp2p_icp_filters library provides extensive filtering capabilities:
-
Decimation:
FilterDecimate,FilterDecimateVoxels,FilterDecimateAdaptive -
Outlier removal:
FilterSOR(Statistical Outlier Removal),FilterVoxelSOR
File truncated at 100 lines see the full file
Changelog for package mp2p_icp
2.4.1 (2026-01-27)
- Add more unit tests
- Update README to keep it in sync with the provided apps and libraries
- Merge pull request #29 from MOLAorg/fix/cov Fix bugs in covariance estimation for some cases
- fix covariance estimation bugs; add unit tests for cov2cov
- Update commit for mola_common
- Merge pull request #28 from MOLAorg/feat/mm-viewer-3d-layers mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- Contributors: Jose Luis Blanco-Claraco
2.4.0 (2026-01-21)
- Merge pull request #27 from MOLAorg/feat/new-filter-voxel-sor
- Add new unit test for class factory
- Add new FilterVoxelSOR filter
- Merge pull request #26 from MOLAorg/feat/mm2las
- Add mm2las CLI tool
- Contributors: Jose Luis Blanco-Claraco
2.3.1 (2026-01-14)
- Merge pull request #25 from MOLAorg/feat/naive-decimate Add trivial FilterDecimate for fast downsampling without spatial awareness
- lint fixes
- Add trivial FilterDecimate for fast downsampling without spatial awareness
- Parameterizable: add virtual base dtor
- Remove the NormalizeIntensity stage in the demo pipelines; visualization does that already
- docs: fill missing manpages
- docs: add sm2mm pipelines page
- Clarify map layers and simple maps descriptions Updated references to CMetricMap and CGenericPointsMap in the documentation for clarity and accuracy.
- Contributors: Jose Luis Blanco-Claraco
2.3.0 (2026-01-08)
- Merge pull request #24 from MOLAorg/feat/mm2txt-select-fields mm2txt and mm2ply now have a --export-fields flag
- mm2txt and mm2ply now have a --export-fields flag
- Merge pull request #23 from MOLAorg/fix/some-deprecations Fix usage of deprecated cloud types
- Provide shortcut names for common cloud field names
- More deprecated cloud usage
- FIX bug: FilterDecimateVoxel, if using flatten, did not propagate all input cloud fields
- Fix usage of some deprecated cloud types
- FilterSOR: create output layers even if input is empty
- FilterDeskew: propagate input fields even if the cloud is empty
- FilterByExpression: show debug-level stats
- FilterNormalizeIntensity: do not throw on empty clouds
- Merge pull request #22 from MOLAorg/feat/new-filters Add new filter FilterRenameLayer
- Added filter FilterRenameLayer
- mm2txt: prepare for deprecated classes in 3.0.0
- FilterAdjustTimestamps: new method 'None' to bypass filter
- Fix: sm2mm did not attach to ParameterSource the final_filter elements
- sm2mm: did not observe the optional profiler parameter for the final_filter stage
- Fix: FilterMLS did not properly copy all point fields when using upsampling
- Fix: FilterAbsoluteTimestamp now also works for accumulated points in one layer
- Contributors: Jose Luis Blanco-Claraco
2.2.1 (2026-01-06)
- Merge pull request #21 from MOLAorg/feat/abs-stamp-filter Added new filter: FilterAbsoluteTimestamp
- Fix the logic of the FilterEdgePlane filter parameters
- Added new filter: FilterAbsoluteTimestamp
- mm2txt: also export uint8 fields (missing in last release)
- Merge pull request #20 from MOLAorg/feat/more-unit-tests More unit tests
- Add generators unit tests
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| catkin | |
| mola_common | |
| mrpt_libbase | |
| mrpt_libobs | |
| mrpt_libposes | |
| mrpt_libmaps | |
| mrpt_libgui | |
| mrpt_libtclap | |
| mola_imu_preintegration |
System Dependencies
Launch files
Messages
Services
Plugins
Recent questions tagged mp2p_icp at Robotics Stack Exchange
Package Summary
| Version | 2.4.1 |
| License | BSD-3-Clause |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mp2p_icp.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-02-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL Distro | Last release |
|---|---|
| ROS1 Noetic (u20.04) | |
| ROS 2 Iron (u22.04) |
mp2p_icp
C++ libraries for multi primitive-to-primitive (MP2P) ICP algorithms and flexible point cloud processing pipelines. mp2p_icp is used in the mola_lidar_odometry framework:
- Main library documentation and C++ API
- License: New BSD 3-Clause (Note that each module of MOLA has its own license)
Introduction
The project provides these C++ libraries:
-
mp2p_icp_map: Provides themp2p_icp::metric_map_tgeneric metric map container and related utilities for working with point cloud data structures. Metric map files with extension*.mmare serializations of instances of this class. -
mp2p_icp: With ICP algorithms, matchers (point-to-point, point-to-plane, point-to-line, covariance-to-covariance, adaptive), solvers (Horn, OLAE, Gauss-Newton), and quality evaluators. It depends onmp2p_icp_map. -
mp2p_icp_filters: With point cloud filtering and manipulation algorithms including decimation, voxelization, statistical outlier removal, edge/plane extraction, and various geometric transformations. It depends onmp2p_icp_map.
Command-Line Applications
The full repository also includes these applications (see apps/ directory):
Data Conversion Tools
-
kitti2mm: Converts KITTI dataset LIDAR binary files (
.bin) with (X,Y,Z, Intensity) data into mp2p_icp metric map files (.mm). Supports custom layer names, numeric IDs, and label strings. -
txt2mm: Converts plain-text point cloud data (TXT/CSV) into metric map (
.mm) files. Supports multiple formats: XYZ, XYZI, XYZIRT, XYZRGB, with configurable column mapping and layer names. -
sm2mm: Converts a simple map (
.simplemap) from a SLAM mapping session into a metric map (.mm) using a configurable processing pipeline. Essential for post-processing SLAM outputs into structured metric representations.
Data Export Tools
-
mm2ply: Exports metric map layers to PLY point cloud files. Supports both ASCII and binary formats, selective field export, and preserves all point attributes (coordinates, colors, intensities, etc.).
-
mm2txt: Exports metric map layers as space-delimited CSV/TXT files with header rows. Ideal for data analysis in spreadsheet applications or custom processing pipelines. Supports selective layer and field export.
-
mm2las: Exports metric maps to industry-standard LAS 1.4 format with Point Format 8 support. Includes automatic color mapping, extra dimensions for custom fields. Compatible with CloudCompare, QGIS, and ArcGIS.
Map Processing & Analysis Tools
-
mm-filter: Applies mp2p_icp_filters pipelines to metric map files. Can operate in pipeline mode (applying complete YAML-defined filter chains) or rename mode (simply renaming layers). Supports custom plugin loading.
-
mm-info: Displays a summary of metric map contents including layers, point counts, and metadata.
-
mm-georef: Extracts or injects geo-referencing information between metric map files (
.mm) and standalone georeferencing files (.georef).
Visualization Tools
-
mm-viewer: GUI application to visualize metric map (
.mm) files. Supports loading additional 3D scenes and trajectory files in TUM format. -
icp-log-viewer: Interactive GUI for debugging ICP pipelines. Visualizes ICP log files (
.icplog) with autoplay mode and detailed inspection of registration results. Essential for understanding and optimizing ICP algorithm performance.
ICP Execution Tools
- icp-run: Standalone program to execute ICP pipelines from the command line.
SimpleMaps Manipulation
-
sm-cli: Swiss-army knife for simple map (
.simplemap) manipulation. Commands include:info(analyze contents),cut(extract by keyframe index),trim(extract by bounding box),join(merge maps),level(make horizontal),tf(apply SE(3) transform),export-keyframes(save trajectories as TUM), andexport-rawlog(convert to RawLog format).
Key Features and Components
Key C++ classes provided by this project (see full documentation):
Core Data Structures
-
mp2p_icp::metric_map_t: A generic data type to store raw or processed point clouds, including support for multiple layers, segmented data, and discrete extracted features.
ICP Algorithms and Matchers
-
mp2p_icp::ICP: A uniform API for matching generic point clouds with support for:- Point-to-Point matching (various distance metrics)
- Point-to-Plane matching (planes extracted from point clouds)
- Point-to-Line matching (edges/lines extracted from point clouds)
- Covariance-to-Covariance matching (Gaussian distributions)
- Adaptive matching (automatically selects best matcher)
Solvers
- Horn’s method: Closed-form solution for point-to-point alignment
- OLAE (Optimal Linear Attitude Estimator): For attitude/rotation estimation
- Gauss-Newton: Iterative solver for complex matching scenarios
Filters and Generators
The mp2p_icp_filters library provides extensive filtering capabilities:
-
Decimation:
FilterDecimate,FilterDecimateVoxels,FilterDecimateAdaptive -
Outlier removal:
FilterSOR(Statistical Outlier Removal),FilterVoxelSOR
File truncated at 100 lines see the full file
Changelog for package mp2p_icp
2.4.1 (2026-01-27)
- Add more unit tests
- Update README to keep it in sync with the provided apps and libraries
- Merge pull request #29 from MOLAorg/fix/cov Fix bugs in covariance estimation for some cases
- fix covariance estimation bugs; add unit tests for cov2cov
- Update commit for mola_common
- Merge pull request #28 from MOLAorg/feat/mm-viewer-3d-layers mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- Contributors: Jose Luis Blanco-Claraco
2.4.0 (2026-01-21)
- Merge pull request #27 from MOLAorg/feat/new-filter-voxel-sor
- Add new unit test for class factory
- Add new FilterVoxelSOR filter
- Merge pull request #26 from MOLAorg/feat/mm2las
- Add mm2las CLI tool
- Contributors: Jose Luis Blanco-Claraco
2.3.1 (2026-01-14)
- Merge pull request #25 from MOLAorg/feat/naive-decimate Add trivial FilterDecimate for fast downsampling without spatial awareness
- lint fixes
- Add trivial FilterDecimate for fast downsampling without spatial awareness
- Parameterizable: add virtual base dtor
- Remove the NormalizeIntensity stage in the demo pipelines; visualization does that already
- docs: fill missing manpages
- docs: add sm2mm pipelines page
- Clarify map layers and simple maps descriptions Updated references to CMetricMap and CGenericPointsMap in the documentation for clarity and accuracy.
- Contributors: Jose Luis Blanco-Claraco
2.3.0 (2026-01-08)
- Merge pull request #24 from MOLAorg/feat/mm2txt-select-fields mm2txt and mm2ply now have a --export-fields flag
- mm2txt and mm2ply now have a --export-fields flag
- Merge pull request #23 from MOLAorg/fix/some-deprecations Fix usage of deprecated cloud types
- Provide shortcut names for common cloud field names
- More deprecated cloud usage
- FIX bug: FilterDecimateVoxel, if using flatten, did not propagate all input cloud fields
- Fix usage of some deprecated cloud types
- FilterSOR: create output layers even if input is empty
- FilterDeskew: propagate input fields even if the cloud is empty
- FilterByExpression: show debug-level stats
- FilterNormalizeIntensity: do not throw on empty clouds
- Merge pull request #22 from MOLAorg/feat/new-filters Add new filter FilterRenameLayer
- Added filter FilterRenameLayer
- mm2txt: prepare for deprecated classes in 3.0.0
- FilterAdjustTimestamps: new method 'None' to bypass filter
- Fix: sm2mm did not attach to ParameterSource the final_filter elements
- sm2mm: did not observe the optional profiler parameter for the final_filter stage
- Fix: FilterMLS did not properly copy all point fields when using upsampling
- Fix: FilterAbsoluteTimestamp now also works for accumulated points in one layer
- Contributors: Jose Luis Blanco-Claraco
2.2.1 (2026-01-06)
- Merge pull request #21 from MOLAorg/feat/abs-stamp-filter Added new filter: FilterAbsoluteTimestamp
- Fix the logic of the FilterEdgePlane filter parameters
- Added new filter: FilterAbsoluteTimestamp
- mm2txt: also export uint8 fields (missing in last release)
- Merge pull request #20 from MOLAorg/feat/more-unit-tests More unit tests
- Add generators unit tests
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| catkin | |
| mola_common | |
| mrpt_libbase | |
| mrpt_libobs | |
| mrpt_libposes | |
| mrpt_libmaps | |
| mrpt_libgui | |
| mrpt_libtclap | |
| mola_imu_preintegration |
System Dependencies
Launch files
Messages
Services
Plugins
Recent questions tagged mp2p_icp at Robotics Stack Exchange
Package Summary
| Version | 2.4.1 |
| License | BSD-3-Clause |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mp2p_icp.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-02-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL Distro | Last release |
|---|---|
| ROS1 Noetic (u20.04) | |
| ROS 2 Iron (u22.04) |
mp2p_icp
C++ libraries for multi primitive-to-primitive (MP2P) ICP algorithms and flexible point cloud processing pipelines. mp2p_icp is used in the mola_lidar_odometry framework:
- Main library documentation and C++ API
- License: New BSD 3-Clause (Note that each module of MOLA has its own license)
Introduction
The project provides these C++ libraries:
-
mp2p_icp_map: Provides themp2p_icp::metric_map_tgeneric metric map container and related utilities for working with point cloud data structures. Metric map files with extension*.mmare serializations of instances of this class. -
mp2p_icp: With ICP algorithms, matchers (point-to-point, point-to-plane, point-to-line, covariance-to-covariance, adaptive), solvers (Horn, OLAE, Gauss-Newton), and quality evaluators. It depends onmp2p_icp_map. -
mp2p_icp_filters: With point cloud filtering and manipulation algorithms including decimation, voxelization, statistical outlier removal, edge/plane extraction, and various geometric transformations. It depends onmp2p_icp_map.
Command-Line Applications
The full repository also includes these applications (see apps/ directory):
Data Conversion Tools
-
kitti2mm: Converts KITTI dataset LIDAR binary files (
.bin) with (X,Y,Z, Intensity) data into mp2p_icp metric map files (.mm). Supports custom layer names, numeric IDs, and label strings. -
txt2mm: Converts plain-text point cloud data (TXT/CSV) into metric map (
.mm) files. Supports multiple formats: XYZ, XYZI, XYZIRT, XYZRGB, with configurable column mapping and layer names. -
sm2mm: Converts a simple map (
.simplemap) from a SLAM mapping session into a metric map (.mm) using a configurable processing pipeline. Essential for post-processing SLAM outputs into structured metric representations.
Data Export Tools
-
mm2ply: Exports metric map layers to PLY point cloud files. Supports both ASCII and binary formats, selective field export, and preserves all point attributes (coordinates, colors, intensities, etc.).
-
mm2txt: Exports metric map layers as space-delimited CSV/TXT files with header rows. Ideal for data analysis in spreadsheet applications or custom processing pipelines. Supports selective layer and field export.
-
mm2las: Exports metric maps to industry-standard LAS 1.4 format with Point Format 8 support. Includes automatic color mapping, extra dimensions for custom fields. Compatible with CloudCompare, QGIS, and ArcGIS.
Map Processing & Analysis Tools
-
mm-filter: Applies mp2p_icp_filters pipelines to metric map files. Can operate in pipeline mode (applying complete YAML-defined filter chains) or rename mode (simply renaming layers). Supports custom plugin loading.
-
mm-info: Displays a summary of metric map contents including layers, point counts, and metadata.
-
mm-georef: Extracts or injects geo-referencing information between metric map files (
.mm) and standalone georeferencing files (.georef).
Visualization Tools
-
mm-viewer: GUI application to visualize metric map (
.mm) files. Supports loading additional 3D scenes and trajectory files in TUM format. -
icp-log-viewer: Interactive GUI for debugging ICP pipelines. Visualizes ICP log files (
.icplog) with autoplay mode and detailed inspection of registration results. Essential for understanding and optimizing ICP algorithm performance.
ICP Execution Tools
- icp-run: Standalone program to execute ICP pipelines from the command line.
SimpleMaps Manipulation
-
sm-cli: Swiss-army knife for simple map (
.simplemap) manipulation. Commands include:info(analyze contents),cut(extract by keyframe index),trim(extract by bounding box),join(merge maps),level(make horizontal),tf(apply SE(3) transform),export-keyframes(save trajectories as TUM), andexport-rawlog(convert to RawLog format).
Key Features and Components
Key C++ classes provided by this project (see full documentation):
Core Data Structures
-
mp2p_icp::metric_map_t: A generic data type to store raw or processed point clouds, including support for multiple layers, segmented data, and discrete extracted features.
ICP Algorithms and Matchers
-
mp2p_icp::ICP: A uniform API for matching generic point clouds with support for:- Point-to-Point matching (various distance metrics)
- Point-to-Plane matching (planes extracted from point clouds)
- Point-to-Line matching (edges/lines extracted from point clouds)
- Covariance-to-Covariance matching (Gaussian distributions)
- Adaptive matching (automatically selects best matcher)
Solvers
- Horn’s method: Closed-form solution for point-to-point alignment
- OLAE (Optimal Linear Attitude Estimator): For attitude/rotation estimation
- Gauss-Newton: Iterative solver for complex matching scenarios
Filters and Generators
The mp2p_icp_filters library provides extensive filtering capabilities:
-
Decimation:
FilterDecimate,FilterDecimateVoxels,FilterDecimateAdaptive -
Outlier removal:
FilterSOR(Statistical Outlier Removal),FilterVoxelSOR
File truncated at 100 lines see the full file
Changelog for package mp2p_icp
2.4.1 (2026-01-27)
- Add more unit tests
- Update README to keep it in sync with the provided apps and libraries
- Merge pull request #29 from MOLAorg/fix/cov Fix bugs in covariance estimation for some cases
- fix covariance estimation bugs; add unit tests for cov2cov
- Update commit for mola_common
- Merge pull request #28 from MOLAorg/feat/mm-viewer-3d-layers mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- Contributors: Jose Luis Blanco-Claraco
2.4.0 (2026-01-21)
- Merge pull request #27 from MOLAorg/feat/new-filter-voxel-sor
- Add new unit test for class factory
- Add new FilterVoxelSOR filter
- Merge pull request #26 from MOLAorg/feat/mm2las
- Add mm2las CLI tool
- Contributors: Jose Luis Blanco-Claraco
2.3.1 (2026-01-14)
- Merge pull request #25 from MOLAorg/feat/naive-decimate Add trivial FilterDecimate for fast downsampling without spatial awareness
- lint fixes
- Add trivial FilterDecimate for fast downsampling without spatial awareness
- Parameterizable: add virtual base dtor
- Remove the NormalizeIntensity stage in the demo pipelines; visualization does that already
- docs: fill missing manpages
- docs: add sm2mm pipelines page
- Clarify map layers and simple maps descriptions Updated references to CMetricMap and CGenericPointsMap in the documentation for clarity and accuracy.
- Contributors: Jose Luis Blanco-Claraco
2.3.0 (2026-01-08)
- Merge pull request #24 from MOLAorg/feat/mm2txt-select-fields mm2txt and mm2ply now have a --export-fields flag
- mm2txt and mm2ply now have a --export-fields flag
- Merge pull request #23 from MOLAorg/fix/some-deprecations Fix usage of deprecated cloud types
- Provide shortcut names for common cloud field names
- More deprecated cloud usage
- FIX bug: FilterDecimateVoxel, if using flatten, did not propagate all input cloud fields
- Fix usage of some deprecated cloud types
- FilterSOR: create output layers even if input is empty
- FilterDeskew: propagate input fields even if the cloud is empty
- FilterByExpression: show debug-level stats
- FilterNormalizeIntensity: do not throw on empty clouds
- Merge pull request #22 from MOLAorg/feat/new-filters Add new filter FilterRenameLayer
- Added filter FilterRenameLayer
- mm2txt: prepare for deprecated classes in 3.0.0
- FilterAdjustTimestamps: new method 'None' to bypass filter
- Fix: sm2mm did not attach to ParameterSource the final_filter elements
- sm2mm: did not observe the optional profiler parameter for the final_filter stage
- Fix: FilterMLS did not properly copy all point fields when using upsampling
- Fix: FilterAbsoluteTimestamp now also works for accumulated points in one layer
- Contributors: Jose Luis Blanco-Claraco
2.2.1 (2026-01-06)
- Merge pull request #21 from MOLAorg/feat/abs-stamp-filter Added new filter: FilterAbsoluteTimestamp
- Fix the logic of the FilterEdgePlane filter parameters
- Added new filter: FilterAbsoluteTimestamp
- mm2txt: also export uint8 fields (missing in last release)
- Merge pull request #20 from MOLAorg/feat/more-unit-tests More unit tests
- Add generators unit tests
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| catkin | |
| mola_common | |
| mrpt_libbase | |
| mrpt_libobs | |
| mrpt_libposes | |
| mrpt_libmaps | |
| mrpt_libgui | |
| mrpt_libtclap | |
| mola_imu_preintegration |
System Dependencies
Launch files
Messages
Services
Plugins
Recent questions tagged mp2p_icp at Robotics Stack Exchange
Package Summary
| Version | 2.4.1 |
| License | BSD-3-Clause |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mp2p_icp.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-02-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL Distro | Last release |
|---|---|
| ROS1 Noetic (u20.04) | |
| ROS 2 Iron (u22.04) |
mp2p_icp
C++ libraries for multi primitive-to-primitive (MP2P) ICP algorithms and flexible point cloud processing pipelines. mp2p_icp is used in the mola_lidar_odometry framework:
- Main library documentation and C++ API
- License: New BSD 3-Clause (Note that each module of MOLA has its own license)
Introduction
The project provides these C++ libraries:
-
mp2p_icp_map: Provides themp2p_icp::metric_map_tgeneric metric map container and related utilities for working with point cloud data structures. Metric map files with extension*.mmare serializations of instances of this class. -
mp2p_icp: With ICP algorithms, matchers (point-to-point, point-to-plane, point-to-line, covariance-to-covariance, adaptive), solvers (Horn, OLAE, Gauss-Newton), and quality evaluators. It depends onmp2p_icp_map. -
mp2p_icp_filters: With point cloud filtering and manipulation algorithms including decimation, voxelization, statistical outlier removal, edge/plane extraction, and various geometric transformations. It depends onmp2p_icp_map.
Command-Line Applications
The full repository also includes these applications (see apps/ directory):
Data Conversion Tools
-
kitti2mm: Converts KITTI dataset LIDAR binary files (
.bin) with (X,Y,Z, Intensity) data into mp2p_icp metric map files (.mm). Supports custom layer names, numeric IDs, and label strings. -
txt2mm: Converts plain-text point cloud data (TXT/CSV) into metric map (
.mm) files. Supports multiple formats: XYZ, XYZI, XYZIRT, XYZRGB, with configurable column mapping and layer names. -
sm2mm: Converts a simple map (
.simplemap) from a SLAM mapping session into a metric map (.mm) using a configurable processing pipeline. Essential for post-processing SLAM outputs into structured metric representations.
Data Export Tools
-
mm2ply: Exports metric map layers to PLY point cloud files. Supports both ASCII and binary formats, selective field export, and preserves all point attributes (coordinates, colors, intensities, etc.).
-
mm2txt: Exports metric map layers as space-delimited CSV/TXT files with header rows. Ideal for data analysis in spreadsheet applications or custom processing pipelines. Supports selective layer and field export.
-
mm2las: Exports metric maps to industry-standard LAS 1.4 format with Point Format 8 support. Includes automatic color mapping, extra dimensions for custom fields. Compatible with CloudCompare, QGIS, and ArcGIS.
Map Processing & Analysis Tools
-
mm-filter: Applies mp2p_icp_filters pipelines to metric map files. Can operate in pipeline mode (applying complete YAML-defined filter chains) or rename mode (simply renaming layers). Supports custom plugin loading.
-
mm-info: Displays a summary of metric map contents including layers, point counts, and metadata.
-
mm-georef: Extracts or injects geo-referencing information between metric map files (
.mm) and standalone georeferencing files (.georef).
Visualization Tools
-
mm-viewer: GUI application to visualize metric map (
.mm) files. Supports loading additional 3D scenes and trajectory files in TUM format. -
icp-log-viewer: Interactive GUI for debugging ICP pipelines. Visualizes ICP log files (
.icplog) with autoplay mode and detailed inspection of registration results. Essential for understanding and optimizing ICP algorithm performance.
ICP Execution Tools
- icp-run: Standalone program to execute ICP pipelines from the command line.
SimpleMaps Manipulation
-
sm-cli: Swiss-army knife for simple map (
.simplemap) manipulation. Commands include:info(analyze contents),cut(extract by keyframe index),trim(extract by bounding box),join(merge maps),level(make horizontal),tf(apply SE(3) transform),export-keyframes(save trajectories as TUM), andexport-rawlog(convert to RawLog format).
Key Features and Components
Key C++ classes provided by this project (see full documentation):
Core Data Structures
-
mp2p_icp::metric_map_t: A generic data type to store raw or processed point clouds, including support for multiple layers, segmented data, and discrete extracted features.
ICP Algorithms and Matchers
-
mp2p_icp::ICP: A uniform API for matching generic point clouds with support for:- Point-to-Point matching (various distance metrics)
- Point-to-Plane matching (planes extracted from point clouds)
- Point-to-Line matching (edges/lines extracted from point clouds)
- Covariance-to-Covariance matching (Gaussian distributions)
- Adaptive matching (automatically selects best matcher)
Solvers
- Horn’s method: Closed-form solution for point-to-point alignment
- OLAE (Optimal Linear Attitude Estimator): For attitude/rotation estimation
- Gauss-Newton: Iterative solver for complex matching scenarios
Filters and Generators
The mp2p_icp_filters library provides extensive filtering capabilities:
-
Decimation:
FilterDecimate,FilterDecimateVoxels,FilterDecimateAdaptive -
Outlier removal:
FilterSOR(Statistical Outlier Removal),FilterVoxelSOR
File truncated at 100 lines see the full file
Changelog for package mp2p_icp
2.4.1 (2026-01-27)
- Add more unit tests
- Update README to keep it in sync with the provided apps and libraries
- Merge pull request #29 from MOLAorg/fix/cov Fix bugs in covariance estimation for some cases
- fix covariance estimation bugs; add unit tests for cov2cov
- Update commit for mola_common
- Merge pull request #28 from MOLAorg/feat/mm-viewer-3d-layers mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- Contributors: Jose Luis Blanco-Claraco
2.4.0 (2026-01-21)
- Merge pull request #27 from MOLAorg/feat/new-filter-voxel-sor
- Add new unit test for class factory
- Add new FilterVoxelSOR filter
- Merge pull request #26 from MOLAorg/feat/mm2las
- Add mm2las CLI tool
- Contributors: Jose Luis Blanco-Claraco
2.3.1 (2026-01-14)
- Merge pull request #25 from MOLAorg/feat/naive-decimate Add trivial FilterDecimate for fast downsampling without spatial awareness
- lint fixes
- Add trivial FilterDecimate for fast downsampling without spatial awareness
- Parameterizable: add virtual base dtor
- Remove the NormalizeIntensity stage in the demo pipelines; visualization does that already
- docs: fill missing manpages
- docs: add sm2mm pipelines page
- Clarify map layers and simple maps descriptions Updated references to CMetricMap and CGenericPointsMap in the documentation for clarity and accuracy.
- Contributors: Jose Luis Blanco-Claraco
2.3.0 (2026-01-08)
- Merge pull request #24 from MOLAorg/feat/mm2txt-select-fields mm2txt and mm2ply now have a --export-fields flag
- mm2txt and mm2ply now have a --export-fields flag
- Merge pull request #23 from MOLAorg/fix/some-deprecations Fix usage of deprecated cloud types
- Provide shortcut names for common cloud field names
- More deprecated cloud usage
- FIX bug: FilterDecimateVoxel, if using flatten, did not propagate all input cloud fields
- Fix usage of some deprecated cloud types
- FilterSOR: create output layers even if input is empty
- FilterDeskew: propagate input fields even if the cloud is empty
- FilterByExpression: show debug-level stats
- FilterNormalizeIntensity: do not throw on empty clouds
- Merge pull request #22 from MOLAorg/feat/new-filters Add new filter FilterRenameLayer
- Added filter FilterRenameLayer
- mm2txt: prepare for deprecated classes in 3.0.0
- FilterAdjustTimestamps: new method 'None' to bypass filter
- Fix: sm2mm did not attach to ParameterSource the final_filter elements
- sm2mm: did not observe the optional profiler parameter for the final_filter stage
- Fix: FilterMLS did not properly copy all point fields when using upsampling
- Fix: FilterAbsoluteTimestamp now also works for accumulated points in one layer
- Contributors: Jose Luis Blanco-Claraco
2.2.1 (2026-01-06)
- Merge pull request #21 from MOLAorg/feat/abs-stamp-filter Added new filter: FilterAbsoluteTimestamp
- Fix the logic of the FilterEdgePlane filter parameters
- Added new filter: FilterAbsoluteTimestamp
- mm2txt: also export uint8 fields (missing in last release)
- Merge pull request #20 from MOLAorg/feat/more-unit-tests More unit tests
- Add generators unit tests
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| catkin | |
| mola_common | |
| mrpt_libbase | |
| mrpt_libobs | |
| mrpt_libposes | |
| mrpt_libmaps | |
| mrpt_libgui | |
| mrpt_libtclap | |
| mola_imu_preintegration |
System Dependencies
Launch files
Messages
Services
Plugins
Recent questions tagged mp2p_icp at Robotics Stack Exchange
Package Summary
| Version | 2.4.1 |
| License | BSD-3-Clause |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mp2p_icp.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-02-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL Distro | Last release |
|---|---|
| ROS1 Noetic (u20.04) | |
| ROS 2 Iron (u22.04) |
mp2p_icp
C++ libraries for multi primitive-to-primitive (MP2P) ICP algorithms and flexible point cloud processing pipelines. mp2p_icp is used in the mola_lidar_odometry framework:
- Main library documentation and C++ API
- License: New BSD 3-Clause (Note that each module of MOLA has its own license)
Introduction
The project provides these C++ libraries:
-
mp2p_icp_map: Provides themp2p_icp::metric_map_tgeneric metric map container and related utilities for working with point cloud data structures. Metric map files with extension*.mmare serializations of instances of this class. -
mp2p_icp: With ICP algorithms, matchers (point-to-point, point-to-plane, point-to-line, covariance-to-covariance, adaptive), solvers (Horn, OLAE, Gauss-Newton), and quality evaluators. It depends onmp2p_icp_map. -
mp2p_icp_filters: With point cloud filtering and manipulation algorithms including decimation, voxelization, statistical outlier removal, edge/plane extraction, and various geometric transformations. It depends onmp2p_icp_map.
Command-Line Applications
The full repository also includes these applications (see apps/ directory):
Data Conversion Tools
-
kitti2mm: Converts KITTI dataset LIDAR binary files (
.bin) with (X,Y,Z, Intensity) data into mp2p_icp metric map files (.mm). Supports custom layer names, numeric IDs, and label strings. -
txt2mm: Converts plain-text point cloud data (TXT/CSV) into metric map (
.mm) files. Supports multiple formats: XYZ, XYZI, XYZIRT, XYZRGB, with configurable column mapping and layer names. -
sm2mm: Converts a simple map (
.simplemap) from a SLAM mapping session into a metric map (.mm) using a configurable processing pipeline. Essential for post-processing SLAM outputs into structured metric representations.
Data Export Tools
-
mm2ply: Exports metric map layers to PLY point cloud files. Supports both ASCII and binary formats, selective field export, and preserves all point attributes (coordinates, colors, intensities, etc.).
-
mm2txt: Exports metric map layers as space-delimited CSV/TXT files with header rows. Ideal for data analysis in spreadsheet applications or custom processing pipelines. Supports selective layer and field export.
-
mm2las: Exports metric maps to industry-standard LAS 1.4 format with Point Format 8 support. Includes automatic color mapping, extra dimensions for custom fields. Compatible with CloudCompare, QGIS, and ArcGIS.
Map Processing & Analysis Tools
-
mm-filter: Applies mp2p_icp_filters pipelines to metric map files. Can operate in pipeline mode (applying complete YAML-defined filter chains) or rename mode (simply renaming layers). Supports custom plugin loading.
-
mm-info: Displays a summary of metric map contents including layers, point counts, and metadata.
-
mm-georef: Extracts or injects geo-referencing information between metric map files (
.mm) and standalone georeferencing files (.georef).
Visualization Tools
-
mm-viewer: GUI application to visualize metric map (
.mm) files. Supports loading additional 3D scenes and trajectory files in TUM format. -
icp-log-viewer: Interactive GUI for debugging ICP pipelines. Visualizes ICP log files (
.icplog) with autoplay mode and detailed inspection of registration results. Essential for understanding and optimizing ICP algorithm performance.
ICP Execution Tools
- icp-run: Standalone program to execute ICP pipelines from the command line.
SimpleMaps Manipulation
-
sm-cli: Swiss-army knife for simple map (
.simplemap) manipulation. Commands include:info(analyze contents),cut(extract by keyframe index),trim(extract by bounding box),join(merge maps),level(make horizontal),tf(apply SE(3) transform),export-keyframes(save trajectories as TUM), andexport-rawlog(convert to RawLog format).
Key Features and Components
Key C++ classes provided by this project (see full documentation):
Core Data Structures
-
mp2p_icp::metric_map_t: A generic data type to store raw or processed point clouds, including support for multiple layers, segmented data, and discrete extracted features.
ICP Algorithms and Matchers
-
mp2p_icp::ICP: A uniform API for matching generic point clouds with support for:- Point-to-Point matching (various distance metrics)
- Point-to-Plane matching (planes extracted from point clouds)
- Point-to-Line matching (edges/lines extracted from point clouds)
- Covariance-to-Covariance matching (Gaussian distributions)
- Adaptive matching (automatically selects best matcher)
Solvers
- Horn’s method: Closed-form solution for point-to-point alignment
- OLAE (Optimal Linear Attitude Estimator): For attitude/rotation estimation
- Gauss-Newton: Iterative solver for complex matching scenarios
Filters and Generators
The mp2p_icp_filters library provides extensive filtering capabilities:
-
Decimation:
FilterDecimate,FilterDecimateVoxels,FilterDecimateAdaptive -
Outlier removal:
FilterSOR(Statistical Outlier Removal),FilterVoxelSOR
File truncated at 100 lines see the full file
Changelog for package mp2p_icp
2.4.1 (2026-01-27)
- Add more unit tests
- Update README to keep it in sync with the provided apps and libraries
- Merge pull request #29 from MOLAorg/fix/cov Fix bugs in covariance estimation for some cases
- fix covariance estimation bugs; add unit tests for cov2cov
- Update commit for mola_common
- Merge pull request #28 from MOLAorg/feat/mm-viewer-3d-layers mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- Contributors: Jose Luis Blanco-Claraco
2.4.0 (2026-01-21)
- Merge pull request #27 from MOLAorg/feat/new-filter-voxel-sor
- Add new unit test for class factory
- Add new FilterVoxelSOR filter
- Merge pull request #26 from MOLAorg/feat/mm2las
- Add mm2las CLI tool
- Contributors: Jose Luis Blanco-Claraco
2.3.1 (2026-01-14)
- Merge pull request #25 from MOLAorg/feat/naive-decimate Add trivial FilterDecimate for fast downsampling without spatial awareness
- lint fixes
- Add trivial FilterDecimate for fast downsampling without spatial awareness
- Parameterizable: add virtual base dtor
- Remove the NormalizeIntensity stage in the demo pipelines; visualization does that already
- docs: fill missing manpages
- docs: add sm2mm pipelines page
- Clarify map layers and simple maps descriptions Updated references to CMetricMap and CGenericPointsMap in the documentation for clarity and accuracy.
- Contributors: Jose Luis Blanco-Claraco
2.3.0 (2026-01-08)
- Merge pull request #24 from MOLAorg/feat/mm2txt-select-fields mm2txt and mm2ply now have a --export-fields flag
- mm2txt and mm2ply now have a --export-fields flag
- Merge pull request #23 from MOLAorg/fix/some-deprecations Fix usage of deprecated cloud types
- Provide shortcut names for common cloud field names
- More deprecated cloud usage
- FIX bug: FilterDecimateVoxel, if using flatten, did not propagate all input cloud fields
- Fix usage of some deprecated cloud types
- FilterSOR: create output layers even if input is empty
- FilterDeskew: propagate input fields even if the cloud is empty
- FilterByExpression: show debug-level stats
- FilterNormalizeIntensity: do not throw on empty clouds
- Merge pull request #22 from MOLAorg/feat/new-filters Add new filter FilterRenameLayer
- Added filter FilterRenameLayer
- mm2txt: prepare for deprecated classes in 3.0.0
- FilterAdjustTimestamps: new method 'None' to bypass filter
- Fix: sm2mm did not attach to ParameterSource the final_filter elements
- sm2mm: did not observe the optional profiler parameter for the final_filter stage
- Fix: FilterMLS did not properly copy all point fields when using upsampling
- Fix: FilterAbsoluteTimestamp now also works for accumulated points in one layer
- Contributors: Jose Luis Blanco-Claraco
2.2.1 (2026-01-06)
- Merge pull request #21 from MOLAorg/feat/abs-stamp-filter Added new filter: FilterAbsoluteTimestamp
- Fix the logic of the FilterEdgePlane filter parameters
- Added new filter: FilterAbsoluteTimestamp
- mm2txt: also export uint8 fields (missing in last release)
- Merge pull request #20 from MOLAorg/feat/more-unit-tests More unit tests
- Add generators unit tests
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| catkin | |
| mola_common | |
| mrpt_libbase | |
| mrpt_libobs | |
| mrpt_libposes | |
| mrpt_libmaps | |
| mrpt_libgui | |
| mrpt_libtclap | |
| mola_imu_preintegration |
System Dependencies
Launch files
Messages
Services
Plugins
Recent questions tagged mp2p_icp at Robotics Stack Exchange
Package Summary
| Version | 2.4.1 |
| License | BSD-3-Clause |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mp2p_icp.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-02-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL Distro | Last release |
|---|---|
| ROS1 Noetic (u20.04) | |
| ROS 2 Iron (u22.04) |
mp2p_icp
C++ libraries for multi primitive-to-primitive (MP2P) ICP algorithms and flexible point cloud processing pipelines. mp2p_icp is used in the mola_lidar_odometry framework:
- Main library documentation and C++ API
- License: New BSD 3-Clause (Note that each module of MOLA has its own license)
Introduction
The project provides these C++ libraries:
-
mp2p_icp_map: Provides themp2p_icp::metric_map_tgeneric metric map container and related utilities for working with point cloud data structures. Metric map files with extension*.mmare serializations of instances of this class. -
mp2p_icp: With ICP algorithms, matchers (point-to-point, point-to-plane, point-to-line, covariance-to-covariance, adaptive), solvers (Horn, OLAE, Gauss-Newton), and quality evaluators. It depends onmp2p_icp_map. -
mp2p_icp_filters: With point cloud filtering and manipulation algorithms including decimation, voxelization, statistical outlier removal, edge/plane extraction, and various geometric transformations. It depends onmp2p_icp_map.
Command-Line Applications
The full repository also includes these applications (see apps/ directory):
Data Conversion Tools
-
kitti2mm: Converts KITTI dataset LIDAR binary files (
.bin) with (X,Y,Z, Intensity) data into mp2p_icp metric map files (.mm). Supports custom layer names, numeric IDs, and label strings. -
txt2mm: Converts plain-text point cloud data (TXT/CSV) into metric map (
.mm) files. Supports multiple formats: XYZ, XYZI, XYZIRT, XYZRGB, with configurable column mapping and layer names. -
sm2mm: Converts a simple map (
.simplemap) from a SLAM mapping session into a metric map (.mm) using a configurable processing pipeline. Essential for post-processing SLAM outputs into structured metric representations.
Data Export Tools
-
mm2ply: Exports metric map layers to PLY point cloud files. Supports both ASCII and binary formats, selective field export, and preserves all point attributes (coordinates, colors, intensities, etc.).
-
mm2txt: Exports metric map layers as space-delimited CSV/TXT files with header rows. Ideal for data analysis in spreadsheet applications or custom processing pipelines. Supports selective layer and field export.
-
mm2las: Exports metric maps to industry-standard LAS 1.4 format with Point Format 8 support. Includes automatic color mapping, extra dimensions for custom fields. Compatible with CloudCompare, QGIS, and ArcGIS.
Map Processing & Analysis Tools
-
mm-filter: Applies mp2p_icp_filters pipelines to metric map files. Can operate in pipeline mode (applying complete YAML-defined filter chains) or rename mode (simply renaming layers). Supports custom plugin loading.
-
mm-info: Displays a summary of metric map contents including layers, point counts, and metadata.
-
mm-georef: Extracts or injects geo-referencing information between metric map files (
.mm) and standalone georeferencing files (.georef).
Visualization Tools
-
mm-viewer: GUI application to visualize metric map (
.mm) files. Supports loading additional 3D scenes and trajectory files in TUM format. -
icp-log-viewer: Interactive GUI for debugging ICP pipelines. Visualizes ICP log files (
.icplog) with autoplay mode and detailed inspection of registration results. Essential for understanding and optimizing ICP algorithm performance.
ICP Execution Tools
- icp-run: Standalone program to execute ICP pipelines from the command line.
SimpleMaps Manipulation
-
sm-cli: Swiss-army knife for simple map (
.simplemap) manipulation. Commands include:info(analyze contents),cut(extract by keyframe index),trim(extract by bounding box),join(merge maps),level(make horizontal),tf(apply SE(3) transform),export-keyframes(save trajectories as TUM), andexport-rawlog(convert to RawLog format).
Key Features and Components
Key C++ classes provided by this project (see full documentation):
Core Data Structures
-
mp2p_icp::metric_map_t: A generic data type to store raw or processed point clouds, including support for multiple layers, segmented data, and discrete extracted features.
ICP Algorithms and Matchers
-
mp2p_icp::ICP: A uniform API for matching generic point clouds with support for:- Point-to-Point matching (various distance metrics)
- Point-to-Plane matching (planes extracted from point clouds)
- Point-to-Line matching (edges/lines extracted from point clouds)
- Covariance-to-Covariance matching (Gaussian distributions)
- Adaptive matching (automatically selects best matcher)
Solvers
- Horn’s method: Closed-form solution for point-to-point alignment
- OLAE (Optimal Linear Attitude Estimator): For attitude/rotation estimation
- Gauss-Newton: Iterative solver for complex matching scenarios
Filters and Generators
The mp2p_icp_filters library provides extensive filtering capabilities:
-
Decimation:
FilterDecimate,FilterDecimateVoxels,FilterDecimateAdaptive -
Outlier removal:
FilterSOR(Statistical Outlier Removal),FilterVoxelSOR
File truncated at 100 lines see the full file
Changelog for package mp2p_icp
2.4.1 (2026-01-27)
- Add more unit tests
- Update README to keep it in sync with the provided apps and libraries
- Merge pull request #29 from MOLAorg/fix/cov Fix bugs in covariance estimation for some cases
- fix covariance estimation bugs; add unit tests for cov2cov
- Update commit for mola_common
- Merge pull request #28 from MOLAorg/feat/mm-viewer-3d-layers mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- Contributors: Jose Luis Blanco-Claraco
2.4.0 (2026-01-21)
- Merge pull request #27 from MOLAorg/feat/new-filter-voxel-sor
- Add new unit test for class factory
- Add new FilterVoxelSOR filter
- Merge pull request #26 from MOLAorg/feat/mm2las
- Add mm2las CLI tool
- Contributors: Jose Luis Blanco-Claraco
2.3.1 (2026-01-14)
- Merge pull request #25 from MOLAorg/feat/naive-decimate Add trivial FilterDecimate for fast downsampling without spatial awareness
- lint fixes
- Add trivial FilterDecimate for fast downsampling without spatial awareness
- Parameterizable: add virtual base dtor
- Remove the NormalizeIntensity stage in the demo pipelines; visualization does that already
- docs: fill missing manpages
- docs: add sm2mm pipelines page
- Clarify map layers and simple maps descriptions Updated references to CMetricMap and CGenericPointsMap in the documentation for clarity and accuracy.
- Contributors: Jose Luis Blanco-Claraco
2.3.0 (2026-01-08)
- Merge pull request #24 from MOLAorg/feat/mm2txt-select-fields mm2txt and mm2ply now have a --export-fields flag
- mm2txt and mm2ply now have a --export-fields flag
- Merge pull request #23 from MOLAorg/fix/some-deprecations Fix usage of deprecated cloud types
- Provide shortcut names for common cloud field names
- More deprecated cloud usage
- FIX bug: FilterDecimateVoxel, if using flatten, did not propagate all input cloud fields
- Fix usage of some deprecated cloud types
- FilterSOR: create output layers even if input is empty
- FilterDeskew: propagate input fields even if the cloud is empty
- FilterByExpression: show debug-level stats
- FilterNormalizeIntensity: do not throw on empty clouds
- Merge pull request #22 from MOLAorg/feat/new-filters Add new filter FilterRenameLayer
- Added filter FilterRenameLayer
- mm2txt: prepare for deprecated classes in 3.0.0
- FilterAdjustTimestamps: new method 'None' to bypass filter
- Fix: sm2mm did not attach to ParameterSource the final_filter elements
- sm2mm: did not observe the optional profiler parameter for the final_filter stage
- Fix: FilterMLS did not properly copy all point fields when using upsampling
- Fix: FilterAbsoluteTimestamp now also works for accumulated points in one layer
- Contributors: Jose Luis Blanco-Claraco
2.2.1 (2026-01-06)
- Merge pull request #21 from MOLAorg/feat/abs-stamp-filter Added new filter: FilterAbsoluteTimestamp
- Fix the logic of the FilterEdgePlane filter parameters
- Added new filter: FilterAbsoluteTimestamp
- mm2txt: also export uint8 fields (missing in last release)
- Merge pull request #20 from MOLAorg/feat/more-unit-tests More unit tests
- Add generators unit tests
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| catkin | |
| mola_common | |
| mrpt_libbase | |
| mrpt_libobs | |
| mrpt_libposes | |
| mrpt_libmaps | |
| mrpt_libgui | |
| mrpt_libtclap | |
| mola_imu_preintegration |
System Dependencies
Launch files
Messages
Services
Plugins
Recent questions tagged mp2p_icp at Robotics Stack Exchange
Package Summary
| Version | 2.4.1 |
| License | BSD-3-Clause |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mp2p_icp.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-02-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL Distro | Last release |
|---|---|
| ROS1 Noetic (u20.04) | |
| ROS 2 Iron (u22.04) |
mp2p_icp
C++ libraries for multi primitive-to-primitive (MP2P) ICP algorithms and flexible point cloud processing pipelines. mp2p_icp is used in the mola_lidar_odometry framework:
- Main library documentation and C++ API
- License: New BSD 3-Clause (Note that each module of MOLA has its own license)
Introduction
The project provides these C++ libraries:
-
mp2p_icp_map: Provides themp2p_icp::metric_map_tgeneric metric map container and related utilities for working with point cloud data structures. Metric map files with extension*.mmare serializations of instances of this class. -
mp2p_icp: With ICP algorithms, matchers (point-to-point, point-to-plane, point-to-line, covariance-to-covariance, adaptive), solvers (Horn, OLAE, Gauss-Newton), and quality evaluators. It depends onmp2p_icp_map. -
mp2p_icp_filters: With point cloud filtering and manipulation algorithms including decimation, voxelization, statistical outlier removal, edge/plane extraction, and various geometric transformations. It depends onmp2p_icp_map.
Command-Line Applications
The full repository also includes these applications (see apps/ directory):
Data Conversion Tools
-
kitti2mm: Converts KITTI dataset LIDAR binary files (
.bin) with (X,Y,Z, Intensity) data into mp2p_icp metric map files (.mm). Supports custom layer names, numeric IDs, and label strings. -
txt2mm: Converts plain-text point cloud data (TXT/CSV) into metric map (
.mm) files. Supports multiple formats: XYZ, XYZI, XYZIRT, XYZRGB, with configurable column mapping and layer names. -
sm2mm: Converts a simple map (
.simplemap) from a SLAM mapping session into a metric map (.mm) using a configurable processing pipeline. Essential for post-processing SLAM outputs into structured metric representations.
Data Export Tools
-
mm2ply: Exports metric map layers to PLY point cloud files. Supports both ASCII and binary formats, selective field export, and preserves all point attributes (coordinates, colors, intensities, etc.).
-
mm2txt: Exports metric map layers as space-delimited CSV/TXT files with header rows. Ideal for data analysis in spreadsheet applications or custom processing pipelines. Supports selective layer and field export.
-
mm2las: Exports metric maps to industry-standard LAS 1.4 format with Point Format 8 support. Includes automatic color mapping, extra dimensions for custom fields. Compatible with CloudCompare, QGIS, and ArcGIS.
Map Processing & Analysis Tools
-
mm-filter: Applies mp2p_icp_filters pipelines to metric map files. Can operate in pipeline mode (applying complete YAML-defined filter chains) or rename mode (simply renaming layers). Supports custom plugin loading.
-
mm-info: Displays a summary of metric map contents including layers, point counts, and metadata.
-
mm-georef: Extracts or injects geo-referencing information between metric map files (
.mm) and standalone georeferencing files (.georef).
Visualization Tools
-
mm-viewer: GUI application to visualize metric map (
.mm) files. Supports loading additional 3D scenes and trajectory files in TUM format. -
icp-log-viewer: Interactive GUI for debugging ICP pipelines. Visualizes ICP log files (
.icplog) with autoplay mode and detailed inspection of registration results. Essential for understanding and optimizing ICP algorithm performance.
ICP Execution Tools
- icp-run: Standalone program to execute ICP pipelines from the command line.
SimpleMaps Manipulation
-
sm-cli: Swiss-army knife for simple map (
.simplemap) manipulation. Commands include:info(analyze contents),cut(extract by keyframe index),trim(extract by bounding box),join(merge maps),level(make horizontal),tf(apply SE(3) transform),export-keyframes(save trajectories as TUM), andexport-rawlog(convert to RawLog format).
Key Features and Components
Key C++ classes provided by this project (see full documentation):
Core Data Structures
-
mp2p_icp::metric_map_t: A generic data type to store raw or processed point clouds, including support for multiple layers, segmented data, and discrete extracted features.
ICP Algorithms and Matchers
-
mp2p_icp::ICP: A uniform API for matching generic point clouds with support for:- Point-to-Point matching (various distance metrics)
- Point-to-Plane matching (planes extracted from point clouds)
- Point-to-Line matching (edges/lines extracted from point clouds)
- Covariance-to-Covariance matching (Gaussian distributions)
- Adaptive matching (automatically selects best matcher)
Solvers
- Horn’s method: Closed-form solution for point-to-point alignment
- OLAE (Optimal Linear Attitude Estimator): For attitude/rotation estimation
- Gauss-Newton: Iterative solver for complex matching scenarios
Filters and Generators
The mp2p_icp_filters library provides extensive filtering capabilities:
-
Decimation:
FilterDecimate,FilterDecimateVoxels,FilterDecimateAdaptive -
Outlier removal:
FilterSOR(Statistical Outlier Removal),FilterVoxelSOR
File truncated at 100 lines see the full file
Changelog for package mp2p_icp
2.4.1 (2026-01-27)
- Add more unit tests
- Update README to keep it in sync with the provided apps and libraries
- Merge pull request #29 from MOLAorg/fix/cov Fix bugs in covariance estimation for some cases
- fix covariance estimation bugs; add unit tests for cov2cov
- Update commit for mola_common
- Merge pull request #28 from MOLAorg/feat/mm-viewer-3d-layers mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- Contributors: Jose Luis Blanco-Claraco
2.4.0 (2026-01-21)
- Merge pull request #27 from MOLAorg/feat/new-filter-voxel-sor
- Add new unit test for class factory
- Add new FilterVoxelSOR filter
- Merge pull request #26 from MOLAorg/feat/mm2las
- Add mm2las CLI tool
- Contributors: Jose Luis Blanco-Claraco
2.3.1 (2026-01-14)
- Merge pull request #25 from MOLAorg/feat/naive-decimate Add trivial FilterDecimate for fast downsampling without spatial awareness
- lint fixes
- Add trivial FilterDecimate for fast downsampling without spatial awareness
- Parameterizable: add virtual base dtor
- Remove the NormalizeIntensity stage in the demo pipelines; visualization does that already
- docs: fill missing manpages
- docs: add sm2mm pipelines page
- Clarify map layers and simple maps descriptions Updated references to CMetricMap and CGenericPointsMap in the documentation for clarity and accuracy.
- Contributors: Jose Luis Blanco-Claraco
2.3.0 (2026-01-08)
- Merge pull request #24 from MOLAorg/feat/mm2txt-select-fields mm2txt and mm2ply now have a --export-fields flag
- mm2txt and mm2ply now have a --export-fields flag
- Merge pull request #23 from MOLAorg/fix/some-deprecations Fix usage of deprecated cloud types
- Provide shortcut names for common cloud field names
- More deprecated cloud usage
- FIX bug: FilterDecimateVoxel, if using flatten, did not propagate all input cloud fields
- Fix usage of some deprecated cloud types
- FilterSOR: create output layers even if input is empty
- FilterDeskew: propagate input fields even if the cloud is empty
- FilterByExpression: show debug-level stats
- FilterNormalizeIntensity: do not throw on empty clouds
- Merge pull request #22 from MOLAorg/feat/new-filters Add new filter FilterRenameLayer
- Added filter FilterRenameLayer
- mm2txt: prepare for deprecated classes in 3.0.0
- FilterAdjustTimestamps: new method 'None' to bypass filter
- Fix: sm2mm did not attach to ParameterSource the final_filter elements
- sm2mm: did not observe the optional profiler parameter for the final_filter stage
- Fix: FilterMLS did not properly copy all point fields when using upsampling
- Fix: FilterAbsoluteTimestamp now also works for accumulated points in one layer
- Contributors: Jose Luis Blanco-Claraco
2.2.1 (2026-01-06)
- Merge pull request #21 from MOLAorg/feat/abs-stamp-filter Added new filter: FilterAbsoluteTimestamp
- Fix the logic of the FilterEdgePlane filter parameters
- Added new filter: FilterAbsoluteTimestamp
- mm2txt: also export uint8 fields (missing in last release)
- Merge pull request #20 from MOLAorg/feat/more-unit-tests More unit tests
- Add generators unit tests
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| catkin | |
| mola_common | |
| mrpt_libbase | |
| mrpt_libobs | |
| mrpt_libposes | |
| mrpt_libmaps | |
| mrpt_libgui | |
| mrpt_libtclap | |
| mola_imu_preintegration |
System Dependencies
Launch files
Messages
Services
Plugins
Recent questions tagged mp2p_icp at Robotics Stack Exchange
Package Summary
| Version | 2.4.1 |
| License | BSD-3-Clause |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mp2p_icp.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-02-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL Distro | Last release |
|---|---|
| ROS1 Noetic (u20.04) | |
| ROS 2 Iron (u22.04) |
mp2p_icp
C++ libraries for multi primitive-to-primitive (MP2P) ICP algorithms and flexible point cloud processing pipelines. mp2p_icp is used in the mola_lidar_odometry framework:
- Main library documentation and C++ API
- License: New BSD 3-Clause (Note that each module of MOLA has its own license)
Introduction
The project provides these C++ libraries:
-
mp2p_icp_map: Provides themp2p_icp::metric_map_tgeneric metric map container and related utilities for working with point cloud data structures. Metric map files with extension*.mmare serializations of instances of this class. -
mp2p_icp: With ICP algorithms, matchers (point-to-point, point-to-plane, point-to-line, covariance-to-covariance, adaptive), solvers (Horn, OLAE, Gauss-Newton), and quality evaluators. It depends onmp2p_icp_map. -
mp2p_icp_filters: With point cloud filtering and manipulation algorithms including decimation, voxelization, statistical outlier removal, edge/plane extraction, and various geometric transformations. It depends onmp2p_icp_map.
Command-Line Applications
The full repository also includes these applications (see apps/ directory):
Data Conversion Tools
-
kitti2mm: Converts KITTI dataset LIDAR binary files (
.bin) with (X,Y,Z, Intensity) data into mp2p_icp metric map files (.mm). Supports custom layer names, numeric IDs, and label strings. -
txt2mm: Converts plain-text point cloud data (TXT/CSV) into metric map (
.mm) files. Supports multiple formats: XYZ, XYZI, XYZIRT, XYZRGB, with configurable column mapping and layer names. -
sm2mm: Converts a simple map (
.simplemap) from a SLAM mapping session into a metric map (.mm) using a configurable processing pipeline. Essential for post-processing SLAM outputs into structured metric representations.
Data Export Tools
-
mm2ply: Exports metric map layers to PLY point cloud files. Supports both ASCII and binary formats, selective field export, and preserves all point attributes (coordinates, colors, intensities, etc.).
-
mm2txt: Exports metric map layers as space-delimited CSV/TXT files with header rows. Ideal for data analysis in spreadsheet applications or custom processing pipelines. Supports selective layer and field export.
-
mm2las: Exports metric maps to industry-standard LAS 1.4 format with Point Format 8 support. Includes automatic color mapping, extra dimensions for custom fields. Compatible with CloudCompare, QGIS, and ArcGIS.
Map Processing & Analysis Tools
-
mm-filter: Applies mp2p_icp_filters pipelines to metric map files. Can operate in pipeline mode (applying complete YAML-defined filter chains) or rename mode (simply renaming layers). Supports custom plugin loading.
-
mm-info: Displays a summary of metric map contents including layers, point counts, and metadata.
-
mm-georef: Extracts or injects geo-referencing information between metric map files (
.mm) and standalone georeferencing files (.georef).
Visualization Tools
-
mm-viewer: GUI application to visualize metric map (
.mm) files. Supports loading additional 3D scenes and trajectory files in TUM format. -
icp-log-viewer: Interactive GUI for debugging ICP pipelines. Visualizes ICP log files (
.icplog) with autoplay mode and detailed inspection of registration results. Essential for understanding and optimizing ICP algorithm performance.
ICP Execution Tools
- icp-run: Standalone program to execute ICP pipelines from the command line.
SimpleMaps Manipulation
-
sm-cli: Swiss-army knife for simple map (
.simplemap) manipulation. Commands include:info(analyze contents),cut(extract by keyframe index),trim(extract by bounding box),join(merge maps),level(make horizontal),tf(apply SE(3) transform),export-keyframes(save trajectories as TUM), andexport-rawlog(convert to RawLog format).
Key Features and Components
Key C++ classes provided by this project (see full documentation):
Core Data Structures
-
mp2p_icp::metric_map_t: A generic data type to store raw or processed point clouds, including support for multiple layers, segmented data, and discrete extracted features.
ICP Algorithms and Matchers
-
mp2p_icp::ICP: A uniform API for matching generic point clouds with support for:- Point-to-Point matching (various distance metrics)
- Point-to-Plane matching (planes extracted from point clouds)
- Point-to-Line matching (edges/lines extracted from point clouds)
- Covariance-to-Covariance matching (Gaussian distributions)
- Adaptive matching (automatically selects best matcher)
Solvers
- Horn’s method: Closed-form solution for point-to-point alignment
- OLAE (Optimal Linear Attitude Estimator): For attitude/rotation estimation
- Gauss-Newton: Iterative solver for complex matching scenarios
Filters and Generators
The mp2p_icp_filters library provides extensive filtering capabilities:
-
Decimation:
FilterDecimate,FilterDecimateVoxels,FilterDecimateAdaptive -
Outlier removal:
FilterSOR(Statistical Outlier Removal),FilterVoxelSOR
File truncated at 100 lines see the full file
Changelog for package mp2p_icp
2.4.1 (2026-01-27)
- Add more unit tests
- Update README to keep it in sync with the provided apps and libraries
- Merge pull request #29 from MOLAorg/fix/cov Fix bugs in covariance estimation for some cases
- fix covariance estimation bugs; add unit tests for cov2cov
- Update commit for mola_common
- Merge pull request #28 from MOLAorg/feat/mm-viewer-3d-layers mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- Contributors: Jose Luis Blanco-Claraco
2.4.0 (2026-01-21)
- Merge pull request #27 from MOLAorg/feat/new-filter-voxel-sor
- Add new unit test for class factory
- Add new FilterVoxelSOR filter
- Merge pull request #26 from MOLAorg/feat/mm2las
- Add mm2las CLI tool
- Contributors: Jose Luis Blanco-Claraco
2.3.1 (2026-01-14)
- Merge pull request #25 from MOLAorg/feat/naive-decimate Add trivial FilterDecimate for fast downsampling without spatial awareness
- lint fixes
- Add trivial FilterDecimate for fast downsampling without spatial awareness
- Parameterizable: add virtual base dtor
- Remove the NormalizeIntensity stage in the demo pipelines; visualization does that already
- docs: fill missing manpages
- docs: add sm2mm pipelines page
- Clarify map layers and simple maps descriptions Updated references to CMetricMap and CGenericPointsMap in the documentation for clarity and accuracy.
- Contributors: Jose Luis Blanco-Claraco
2.3.0 (2026-01-08)
- Merge pull request #24 from MOLAorg/feat/mm2txt-select-fields mm2txt and mm2ply now have a --export-fields flag
- mm2txt and mm2ply now have a --export-fields flag
- Merge pull request #23 from MOLAorg/fix/some-deprecations Fix usage of deprecated cloud types
- Provide shortcut names for common cloud field names
- More deprecated cloud usage
- FIX bug: FilterDecimateVoxel, if using flatten, did not propagate all input cloud fields
- Fix usage of some deprecated cloud types
- FilterSOR: create output layers even if input is empty
- FilterDeskew: propagate input fields even if the cloud is empty
- FilterByExpression: show debug-level stats
- FilterNormalizeIntensity: do not throw on empty clouds
- Merge pull request #22 from MOLAorg/feat/new-filters Add new filter FilterRenameLayer
- Added filter FilterRenameLayer
- mm2txt: prepare for deprecated classes in 3.0.0
- FilterAdjustTimestamps: new method 'None' to bypass filter
- Fix: sm2mm did not attach to ParameterSource the final_filter elements
- sm2mm: did not observe the optional profiler parameter for the final_filter stage
- Fix: FilterMLS did not properly copy all point fields when using upsampling
- Fix: FilterAbsoluteTimestamp now also works for accumulated points in one layer
- Contributors: Jose Luis Blanco-Claraco
2.2.1 (2026-01-06)
- Merge pull request #21 from MOLAorg/feat/abs-stamp-filter Added new filter: FilterAbsoluteTimestamp
- Fix the logic of the FilterEdgePlane filter parameters
- Added new filter: FilterAbsoluteTimestamp
- mm2txt: also export uint8 fields (missing in last release)
- Merge pull request #20 from MOLAorg/feat/more-unit-tests More unit tests
- Add generators unit tests
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| catkin | |
| mola_common | |
| mrpt_libbase | |
| mrpt_libobs | |
| mrpt_libposes | |
| mrpt_libmaps | |
| mrpt_libgui | |
| mrpt_libtclap | |
| mola_imu_preintegration |
System Dependencies
Launch files
Messages
Services
Plugins
Recent questions tagged mp2p_icp at Robotics Stack Exchange
Package Summary
| Version | 2.4.1 |
| License | BSD-3-Clause |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mp2p_icp.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-02-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL Distro | Last release |
|---|---|
| ROS1 Noetic (u20.04) | |
| ROS 2 Iron (u22.04) |
mp2p_icp
C++ libraries for multi primitive-to-primitive (MP2P) ICP algorithms and flexible point cloud processing pipelines. mp2p_icp is used in the mola_lidar_odometry framework:
- Main library documentation and C++ API
- License: New BSD 3-Clause (Note that each module of MOLA has its own license)
Introduction
The project provides these C++ libraries:
-
mp2p_icp_map: Provides themp2p_icp::metric_map_tgeneric metric map container and related utilities for working with point cloud data structures. Metric map files with extension*.mmare serializations of instances of this class. -
mp2p_icp: With ICP algorithms, matchers (point-to-point, point-to-plane, point-to-line, covariance-to-covariance, adaptive), solvers (Horn, OLAE, Gauss-Newton), and quality evaluators. It depends onmp2p_icp_map. -
mp2p_icp_filters: With point cloud filtering and manipulation algorithms including decimation, voxelization, statistical outlier removal, edge/plane extraction, and various geometric transformations. It depends onmp2p_icp_map.
Command-Line Applications
The full repository also includes these applications (see apps/ directory):
Data Conversion Tools
-
kitti2mm: Converts KITTI dataset LIDAR binary files (
.bin) with (X,Y,Z, Intensity) data into mp2p_icp metric map files (.mm). Supports custom layer names, numeric IDs, and label strings. -
txt2mm: Converts plain-text point cloud data (TXT/CSV) into metric map (
.mm) files. Supports multiple formats: XYZ, XYZI, XYZIRT, XYZRGB, with configurable column mapping and layer names. -
sm2mm: Converts a simple map (
.simplemap) from a SLAM mapping session into a metric map (.mm) using a configurable processing pipeline. Essential for post-processing SLAM outputs into structured metric representations.
Data Export Tools
-
mm2ply: Exports metric map layers to PLY point cloud files. Supports both ASCII and binary formats, selective field export, and preserves all point attributes (coordinates, colors, intensities, etc.).
-
mm2txt: Exports metric map layers as space-delimited CSV/TXT files with header rows. Ideal for data analysis in spreadsheet applications or custom processing pipelines. Supports selective layer and field export.
-
mm2las: Exports metric maps to industry-standard LAS 1.4 format with Point Format 8 support. Includes automatic color mapping, extra dimensions for custom fields. Compatible with CloudCompare, QGIS, and ArcGIS.
Map Processing & Analysis Tools
-
mm-filter: Applies mp2p_icp_filters pipelines to metric map files. Can operate in pipeline mode (applying complete YAML-defined filter chains) or rename mode (simply renaming layers). Supports custom plugin loading.
-
mm-info: Displays a summary of metric map contents including layers, point counts, and metadata.
-
mm-georef: Extracts or injects geo-referencing information between metric map files (
.mm) and standalone georeferencing files (.georef).
Visualization Tools
-
mm-viewer: GUI application to visualize metric map (
.mm) files. Supports loading additional 3D scenes and trajectory files in TUM format. -
icp-log-viewer: Interactive GUI for debugging ICP pipelines. Visualizes ICP log files (
.icplog) with autoplay mode and detailed inspection of registration results. Essential for understanding and optimizing ICP algorithm performance.
ICP Execution Tools
- icp-run: Standalone program to execute ICP pipelines from the command line.
SimpleMaps Manipulation
-
sm-cli: Swiss-army knife for simple map (
.simplemap) manipulation. Commands include:info(analyze contents),cut(extract by keyframe index),trim(extract by bounding box),join(merge maps),level(make horizontal),tf(apply SE(3) transform),export-keyframes(save trajectories as TUM), andexport-rawlog(convert to RawLog format).
Key Features and Components
Key C++ classes provided by this project (see full documentation):
Core Data Structures
-
mp2p_icp::metric_map_t: A generic data type to store raw or processed point clouds, including support for multiple layers, segmented data, and discrete extracted features.
ICP Algorithms and Matchers
-
mp2p_icp::ICP: A uniform API for matching generic point clouds with support for:- Point-to-Point matching (various distance metrics)
- Point-to-Plane matching (planes extracted from point clouds)
- Point-to-Line matching (edges/lines extracted from point clouds)
- Covariance-to-Covariance matching (Gaussian distributions)
- Adaptive matching (automatically selects best matcher)
Solvers
- Horn’s method: Closed-form solution for point-to-point alignment
- OLAE (Optimal Linear Attitude Estimator): For attitude/rotation estimation
- Gauss-Newton: Iterative solver for complex matching scenarios
Filters and Generators
The mp2p_icp_filters library provides extensive filtering capabilities:
-
Decimation:
FilterDecimate,FilterDecimateVoxels,FilterDecimateAdaptive -
Outlier removal:
FilterSOR(Statistical Outlier Removal),FilterVoxelSOR
File truncated at 100 lines see the full file
Changelog for package mp2p_icp
2.4.1 (2026-01-27)
- Add more unit tests
- Update README to keep it in sync with the provided apps and libraries
- Merge pull request #29 from MOLAorg/fix/cov Fix bugs in covariance estimation for some cases
- fix covariance estimation bugs; add unit tests for cov2cov
- Update commit for mola_common
- Merge pull request #28 from MOLAorg/feat/mm-viewer-3d-layers mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- Contributors: Jose Luis Blanco-Claraco
2.4.0 (2026-01-21)
- Merge pull request #27 from MOLAorg/feat/new-filter-voxel-sor
- Add new unit test for class factory
- Add new FilterVoxelSOR filter
- Merge pull request #26 from MOLAorg/feat/mm2las
- Add mm2las CLI tool
- Contributors: Jose Luis Blanco-Claraco
2.3.1 (2026-01-14)
- Merge pull request #25 from MOLAorg/feat/naive-decimate Add trivial FilterDecimate for fast downsampling without spatial awareness
- lint fixes
- Add trivial FilterDecimate for fast downsampling without spatial awareness
- Parameterizable: add virtual base dtor
- Remove the NormalizeIntensity stage in the demo pipelines; visualization does that already
- docs: fill missing manpages
- docs: add sm2mm pipelines page
- Clarify map layers and simple maps descriptions Updated references to CMetricMap and CGenericPointsMap in the documentation for clarity and accuracy.
- Contributors: Jose Luis Blanco-Claraco
2.3.0 (2026-01-08)
- Merge pull request #24 from MOLAorg/feat/mm2txt-select-fields mm2txt and mm2ply now have a --export-fields flag
- mm2txt and mm2ply now have a --export-fields flag
- Merge pull request #23 from MOLAorg/fix/some-deprecations Fix usage of deprecated cloud types
- Provide shortcut names for common cloud field names
- More deprecated cloud usage
- FIX bug: FilterDecimateVoxel, if using flatten, did not propagate all input cloud fields
- Fix usage of some deprecated cloud types
- FilterSOR: create output layers even if input is empty
- FilterDeskew: propagate input fields even if the cloud is empty
- FilterByExpression: show debug-level stats
- FilterNormalizeIntensity: do not throw on empty clouds
- Merge pull request #22 from MOLAorg/feat/new-filters Add new filter FilterRenameLayer
- Added filter FilterRenameLayer
- mm2txt: prepare for deprecated classes in 3.0.0
- FilterAdjustTimestamps: new method 'None' to bypass filter
- Fix: sm2mm did not attach to ParameterSource the final_filter elements
- sm2mm: did not observe the optional profiler parameter for the final_filter stage
- Fix: FilterMLS did not properly copy all point fields when using upsampling
- Fix: FilterAbsoluteTimestamp now also works for accumulated points in one layer
- Contributors: Jose Luis Blanco-Claraco
2.2.1 (2026-01-06)
- Merge pull request #21 from MOLAorg/feat/abs-stamp-filter Added new filter: FilterAbsoluteTimestamp
- Fix the logic of the FilterEdgePlane filter parameters
- Added new filter: FilterAbsoluteTimestamp
- mm2txt: also export uint8 fields (missing in last release)
- Merge pull request #20 from MOLAorg/feat/more-unit-tests More unit tests
- Add generators unit tests
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| catkin | |
| mola_common | |
| mrpt_libbase | |
| mrpt_libobs | |
| mrpt_libposes | |
| mrpt_libmaps | |
| mrpt_libgui | |
| mrpt_libtclap | |
| mola_imu_preintegration |
System Dependencies
Launch files
Messages
Services
Plugins
Recent questions tagged mp2p_icp at Robotics Stack Exchange
Package Summary
| Version | 2.4.1 |
| License | BSD-3-Clause |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/MOLAorg/mp2p_icp.git |
| VCS Type | git |
| VCS Version | develop |
| Last Updated | 2026-02-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Jose-Luis Blanco-Claraco
Authors
| Distro | Build dev | Build releases | Stable version |
|---|---|---|---|
| ROS 2 Humble (u22.04) | amd64 arm64 |
||
| ROS 2 Jazzy @ u24.04 | amd64 arm64 |
||
| ROS 2 Kilted @ u24.04 | amd64 arm64 |
||
| ROS 2 Rolling (u24.04) | amd64 arm64 |
| EOL Distro | Last release |
|---|---|
| ROS1 Noetic (u20.04) | |
| ROS 2 Iron (u22.04) |
mp2p_icp
C++ libraries for multi primitive-to-primitive (MP2P) ICP algorithms and flexible point cloud processing pipelines. mp2p_icp is used in the mola_lidar_odometry framework:
- Main library documentation and C++ API
- License: New BSD 3-Clause (Note that each module of MOLA has its own license)
Introduction
The project provides these C++ libraries:
-
mp2p_icp_map: Provides themp2p_icp::metric_map_tgeneric metric map container and related utilities for working with point cloud data structures. Metric map files with extension*.mmare serializations of instances of this class. -
mp2p_icp: With ICP algorithms, matchers (point-to-point, point-to-plane, point-to-line, covariance-to-covariance, adaptive), solvers (Horn, OLAE, Gauss-Newton), and quality evaluators. It depends onmp2p_icp_map. -
mp2p_icp_filters: With point cloud filtering and manipulation algorithms including decimation, voxelization, statistical outlier removal, edge/plane extraction, and various geometric transformations. It depends onmp2p_icp_map.
Command-Line Applications
The full repository also includes these applications (see apps/ directory):
Data Conversion Tools
-
kitti2mm: Converts KITTI dataset LIDAR binary files (
.bin) with (X,Y,Z, Intensity) data into mp2p_icp metric map files (.mm). Supports custom layer names, numeric IDs, and label strings. -
txt2mm: Converts plain-text point cloud data (TXT/CSV) into metric map (
.mm) files. Supports multiple formats: XYZ, XYZI, XYZIRT, XYZRGB, with configurable column mapping and layer names. -
sm2mm: Converts a simple map (
.simplemap) from a SLAM mapping session into a metric map (.mm) using a configurable processing pipeline. Essential for post-processing SLAM outputs into structured metric representations.
Data Export Tools
-
mm2ply: Exports metric map layers to PLY point cloud files. Supports both ASCII and binary formats, selective field export, and preserves all point attributes (coordinates, colors, intensities, etc.).
-
mm2txt: Exports metric map layers as space-delimited CSV/TXT files with header rows. Ideal for data analysis in spreadsheet applications or custom processing pipelines. Supports selective layer and field export.
-
mm2las: Exports metric maps to industry-standard LAS 1.4 format with Point Format 8 support. Includes automatic color mapping, extra dimensions for custom fields. Compatible with CloudCompare, QGIS, and ArcGIS.
Map Processing & Analysis Tools
-
mm-filter: Applies mp2p_icp_filters pipelines to metric map files. Can operate in pipeline mode (applying complete YAML-defined filter chains) or rename mode (simply renaming layers). Supports custom plugin loading.
-
mm-info: Displays a summary of metric map contents including layers, point counts, and metadata.
-
mm-georef: Extracts or injects geo-referencing information between metric map files (
.mm) and standalone georeferencing files (.georef).
Visualization Tools
-
mm-viewer: GUI application to visualize metric map (
.mm) files. Supports loading additional 3D scenes and trajectory files in TUM format. -
icp-log-viewer: Interactive GUI for debugging ICP pipelines. Visualizes ICP log files (
.icplog) with autoplay mode and detailed inspection of registration results. Essential for understanding and optimizing ICP algorithm performance.
ICP Execution Tools
- icp-run: Standalone program to execute ICP pipelines from the command line.
SimpleMaps Manipulation
-
sm-cli: Swiss-army knife for simple map (
.simplemap) manipulation. Commands include:info(analyze contents),cut(extract by keyframe index),trim(extract by bounding box),join(merge maps),level(make horizontal),tf(apply SE(3) transform),export-keyframes(save trajectories as TUM), andexport-rawlog(convert to RawLog format).
Key Features and Components
Key C++ classes provided by this project (see full documentation):
Core Data Structures
-
mp2p_icp::metric_map_t: A generic data type to store raw or processed point clouds, including support for multiple layers, segmented data, and discrete extracted features.
ICP Algorithms and Matchers
-
mp2p_icp::ICP: A uniform API for matching generic point clouds with support for:- Point-to-Point matching (various distance metrics)
- Point-to-Plane matching (planes extracted from point clouds)
- Point-to-Line matching (edges/lines extracted from point clouds)
- Covariance-to-Covariance matching (Gaussian distributions)
- Adaptive matching (automatically selects best matcher)
Solvers
- Horn’s method: Closed-form solution for point-to-point alignment
- OLAE (Optimal Linear Attitude Estimator): For attitude/rotation estimation
- Gauss-Newton: Iterative solver for complex matching scenarios
Filters and Generators
The mp2p_icp_filters library provides extensive filtering capabilities:
-
Decimation:
FilterDecimate,FilterDecimateVoxels,FilterDecimateAdaptive -
Outlier removal:
FilterSOR(Statistical Outlier Removal),FilterVoxelSOR
File truncated at 100 lines see the full file
Changelog for package mp2p_icp
2.4.1 (2026-01-27)
- Add more unit tests
- Update README to keep it in sync with the provided apps and libraries
- Merge pull request #29 from MOLAorg/fix/cov Fix bugs in covariance estimation for some cases
- fix covariance estimation bugs; add unit tests for cov2cov
- Update commit for mola_common
- Merge pull request #28 from MOLAorg/feat/mm-viewer-3d-layers mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- mm-viewer: add CLI flags to load overlaid 3D scenes for visualization
- Contributors: Jose Luis Blanco-Claraco
2.4.0 (2026-01-21)
- Merge pull request #27 from MOLAorg/feat/new-filter-voxel-sor
- Add new unit test for class factory
- Add new FilterVoxelSOR filter
- Merge pull request #26 from MOLAorg/feat/mm2las
- Add mm2las CLI tool
- Contributors: Jose Luis Blanco-Claraco
2.3.1 (2026-01-14)
- Merge pull request #25 from MOLAorg/feat/naive-decimate Add trivial FilterDecimate for fast downsampling without spatial awareness
- lint fixes
- Add trivial FilterDecimate for fast downsampling without spatial awareness
- Parameterizable: add virtual base dtor
- Remove the NormalizeIntensity stage in the demo pipelines; visualization does that already
- docs: fill missing manpages
- docs: add sm2mm pipelines page
- Clarify map layers and simple maps descriptions Updated references to CMetricMap and CGenericPointsMap in the documentation for clarity and accuracy.
- Contributors: Jose Luis Blanco-Claraco
2.3.0 (2026-01-08)
- Merge pull request #24 from MOLAorg/feat/mm2txt-select-fields mm2txt and mm2ply now have a --export-fields flag
- mm2txt and mm2ply now have a --export-fields flag
- Merge pull request #23 from MOLAorg/fix/some-deprecations Fix usage of deprecated cloud types
- Provide shortcut names for common cloud field names
- More deprecated cloud usage
- FIX bug: FilterDecimateVoxel, if using flatten, did not propagate all input cloud fields
- Fix usage of some deprecated cloud types
- FilterSOR: create output layers even if input is empty
- FilterDeskew: propagate input fields even if the cloud is empty
- FilterByExpression: show debug-level stats
- FilterNormalizeIntensity: do not throw on empty clouds
- Merge pull request #22 from MOLAorg/feat/new-filters Add new filter FilterRenameLayer
- Added filter FilterRenameLayer
- mm2txt: prepare for deprecated classes in 3.0.0
- FilterAdjustTimestamps: new method 'None' to bypass filter
- Fix: sm2mm did not attach to ParameterSource the final_filter elements
- sm2mm: did not observe the optional profiler parameter for the final_filter stage
- Fix: FilterMLS did not properly copy all point fields when using upsampling
- Fix: FilterAbsoluteTimestamp now also works for accumulated points in one layer
- Contributors: Jose Luis Blanco-Claraco
2.2.1 (2026-01-06)
- Merge pull request #21 from MOLAorg/feat/abs-stamp-filter Added new filter: FilterAbsoluteTimestamp
- Fix the logic of the FilterEdgePlane filter parameters
- Added new filter: FilterAbsoluteTimestamp
- mm2txt: also export uint8 fields (missing in last release)
- Merge pull request #20 from MOLAorg/feat/more-unit-tests More unit tests
- Add generators unit tests
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ros_environment | |
| catkin | |
| mola_common | |
| mrpt_libbase | |
| mrpt_libobs | |
| mrpt_libposes | |
| mrpt_libmaps | |
| mrpt_libgui | |
| mrpt_libtclap | |
| mola_imu_preintegration |