Package Summary
| Version | 2.10.0 |
| 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-05-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.10.0 (2026-05-02)
- CI: Update actions for new ROS rolling
- icp-log-viewer: better formatting of uncertainties
- demo sm2mm file: store as independent keyframes
- Merge pull request #60 from MOLAorg/feat/censi3d-covariance Feat: Censi3D covariance method
- feat: Add new covariance method (Censi, 3D version)
- demo sm2mm files: add Keyframe map variant
- Contributors: Jose Luis Blanco-Claraco
2.9.1 (2026-04-29)
-
Merge pull request #59 from MOLAorg/fix/cov2cov-covariance-whitening Fix cov2cov whitening and add residual-variance scaling in covariance()
-
Fix cov2cov whitening and add residual-variance scaling in covariance() The cov2cov branch in covariance.cpp whitened residuals with the full information matrix (cov_inv * e), so the assembled Hessian became J\^T * cov_inv\^2 * J instead of J\^T * cov_inv * J. Combined with hundreds of pairings this drove down to ~1e-20 and made the estimate unusable.
- Use the Cholesky factor L\^T (with L L\^T = cov_inv) to whiten the cov2cov residual, matching what optimal_tf_gauss_newton accumulates.
- Multiply the inverse-Hessian by chi\^2 / (m - 6), the standard a-posteriori unit-weight variance, to rescale the (otherwise optimistic) result by the empirical residual level.
-
Merge pull request #58 from MOLAorg/feat/icp-viewer-show-prior feat: icp-logs now store the prior SE(3) PDF
-
feat: icp-logs now store the prior SE(3) PDF
-
icp-log-viewer: safer against exceptions in gui thread
-
demo sm2mm files: ignore_accelerometer=true in all deskew stages by default (prevent noisy maps from low-quality IMUs)
-
Contributors: Jose Luis Blanco-Claraco
2.9.0 (2026-04-22)
- Merge pull request #57 from MOLAorg/feat/deskew-filter-ignore-acc FilterDeskew: add new option "ignore_accelerometer"
- Merge pull request #55 from MOLAorg/feat/mm-viewer-read-bin-files mm-viewer: can be also open .bin files with serialized CGenericPointsMap
- Merge pull request #54 from MOLAorg/feat/mm-apps-plugins mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Optimization in PointCloudToVoxelGridSingle
- Add <stdexcept> to all required files (don't depend on transitive includes)
- mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Merge branch 'generator-generic-cloud' into develop
- cloud rendering: Implement observing the autoBoundingBoxOutliersPercentile
- Merge pull request #53 from MOLAorg/generator-generic-cloud Generator: creates CGenericPointsMap by default; add sanity checks in most filters
- remove more old mrpt version guards
- New sanity check function: warn_on_field_padding_mismatch()
- FilterDeskew: guard against new MRPT behavior to keep all field lengths in sync
- Add sanity checks in filters
- Bump minimum MRPT version to 2.15.4 (and remove now old dead code)
- Generator new param 'filterOutPointsAtZero', set to true in demo pipelines
- Generator: now has a param 'default_pointcloud_class' which defaults to 'CGenericPointsMap'
- Code clean up (remove now dead code; mrpt backwards compatibility)
- Merge pull request #52 from MOLAorg/icp-log-viewer-quality-filter icp-log-viewer: add --min-quality filter CLI flag
- Contributors: Jose Luis Blanco-Claraco
2.8.1 (2026-04-06)
- Merge pull request #51 from MOLAorg/fix/new-mrpt-api Update to build against mrpt >=2.15.13
- Update to build against mrpt >=2.15.13 (pointcloud field names as std::string instead of string_view)
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.10.0 |
| 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-05-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.10.0 (2026-05-02)
- CI: Update actions for new ROS rolling
- icp-log-viewer: better formatting of uncertainties
- demo sm2mm file: store as independent keyframes
- Merge pull request #60 from MOLAorg/feat/censi3d-covariance Feat: Censi3D covariance method
- feat: Add new covariance method (Censi, 3D version)
- demo sm2mm files: add Keyframe map variant
- Contributors: Jose Luis Blanco-Claraco
2.9.1 (2026-04-29)
-
Merge pull request #59 from MOLAorg/fix/cov2cov-covariance-whitening Fix cov2cov whitening and add residual-variance scaling in covariance()
-
Fix cov2cov whitening and add residual-variance scaling in covariance() The cov2cov branch in covariance.cpp whitened residuals with the full information matrix (cov_inv * e), so the assembled Hessian became J\^T * cov_inv\^2 * J instead of J\^T * cov_inv * J. Combined with hundreds of pairings this drove down to ~1e-20 and made the estimate unusable.
- Use the Cholesky factor L\^T (with L L\^T = cov_inv) to whiten the cov2cov residual, matching what optimal_tf_gauss_newton accumulates.
- Multiply the inverse-Hessian by chi\^2 / (m - 6), the standard a-posteriori unit-weight variance, to rescale the (otherwise optimistic) result by the empirical residual level.
-
Merge pull request #58 from MOLAorg/feat/icp-viewer-show-prior feat: icp-logs now store the prior SE(3) PDF
-
feat: icp-logs now store the prior SE(3) PDF
-
icp-log-viewer: safer against exceptions in gui thread
-
demo sm2mm files: ignore_accelerometer=true in all deskew stages by default (prevent noisy maps from low-quality IMUs)
-
Contributors: Jose Luis Blanco-Claraco
2.9.0 (2026-04-22)
- Merge pull request #57 from MOLAorg/feat/deskew-filter-ignore-acc FilterDeskew: add new option "ignore_accelerometer"
- Merge pull request #55 from MOLAorg/feat/mm-viewer-read-bin-files mm-viewer: can be also open .bin files with serialized CGenericPointsMap
- Merge pull request #54 from MOLAorg/feat/mm-apps-plugins mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Optimization in PointCloudToVoxelGridSingle
- Add <stdexcept> to all required files (don't depend on transitive includes)
- mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Merge branch 'generator-generic-cloud' into develop
- cloud rendering: Implement observing the autoBoundingBoxOutliersPercentile
- Merge pull request #53 from MOLAorg/generator-generic-cloud Generator: creates CGenericPointsMap by default; add sanity checks in most filters
- remove more old mrpt version guards
- New sanity check function: warn_on_field_padding_mismatch()
- FilterDeskew: guard against new MRPT behavior to keep all field lengths in sync
- Add sanity checks in filters
- Bump minimum MRPT version to 2.15.4 (and remove now old dead code)
- Generator new param 'filterOutPointsAtZero', set to true in demo pipelines
- Generator: now has a param 'default_pointcloud_class' which defaults to 'CGenericPointsMap'
- Code clean up (remove now dead code; mrpt backwards compatibility)
- Merge pull request #52 from MOLAorg/icp-log-viewer-quality-filter icp-log-viewer: add --min-quality filter CLI flag
- Contributors: Jose Luis Blanco-Claraco
2.8.1 (2026-04-06)
- Merge pull request #51 from MOLAorg/fix/new-mrpt-api Update to build against mrpt >=2.15.13
- Update to build against mrpt >=2.15.13 (pointcloud field names as std::string instead of string_view)
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.10.0 |
| 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-05-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.10.0 (2026-05-02)
- CI: Update actions for new ROS rolling
- icp-log-viewer: better formatting of uncertainties
- demo sm2mm file: store as independent keyframes
- Merge pull request #60 from MOLAorg/feat/censi3d-covariance Feat: Censi3D covariance method
- feat: Add new covariance method (Censi, 3D version)
- demo sm2mm files: add Keyframe map variant
- Contributors: Jose Luis Blanco-Claraco
2.9.1 (2026-04-29)
-
Merge pull request #59 from MOLAorg/fix/cov2cov-covariance-whitening Fix cov2cov whitening and add residual-variance scaling in covariance()
-
Fix cov2cov whitening and add residual-variance scaling in covariance() The cov2cov branch in covariance.cpp whitened residuals with the full information matrix (cov_inv * e), so the assembled Hessian became J\^T * cov_inv\^2 * J instead of J\^T * cov_inv * J. Combined with hundreds of pairings this drove down to ~1e-20 and made the estimate unusable.
- Use the Cholesky factor L\^T (with L L\^T = cov_inv) to whiten the cov2cov residual, matching what optimal_tf_gauss_newton accumulates.
- Multiply the inverse-Hessian by chi\^2 / (m - 6), the standard a-posteriori unit-weight variance, to rescale the (otherwise optimistic) result by the empirical residual level.
-
Merge pull request #58 from MOLAorg/feat/icp-viewer-show-prior feat: icp-logs now store the prior SE(3) PDF
-
feat: icp-logs now store the prior SE(3) PDF
-
icp-log-viewer: safer against exceptions in gui thread
-
demo sm2mm files: ignore_accelerometer=true in all deskew stages by default (prevent noisy maps from low-quality IMUs)
-
Contributors: Jose Luis Blanco-Claraco
2.9.0 (2026-04-22)
- Merge pull request #57 from MOLAorg/feat/deskew-filter-ignore-acc FilterDeskew: add new option "ignore_accelerometer"
- Merge pull request #55 from MOLAorg/feat/mm-viewer-read-bin-files mm-viewer: can be also open .bin files with serialized CGenericPointsMap
- Merge pull request #54 from MOLAorg/feat/mm-apps-plugins mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Optimization in PointCloudToVoxelGridSingle
- Add <stdexcept> to all required files (don't depend on transitive includes)
- mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Merge branch 'generator-generic-cloud' into develop
- cloud rendering: Implement observing the autoBoundingBoxOutliersPercentile
- Merge pull request #53 from MOLAorg/generator-generic-cloud Generator: creates CGenericPointsMap by default; add sanity checks in most filters
- remove more old mrpt version guards
- New sanity check function: warn_on_field_padding_mismatch()
- FilterDeskew: guard against new MRPT behavior to keep all field lengths in sync
- Add sanity checks in filters
- Bump minimum MRPT version to 2.15.4 (and remove now old dead code)
- Generator new param 'filterOutPointsAtZero', set to true in demo pipelines
- Generator: now has a param 'default_pointcloud_class' which defaults to 'CGenericPointsMap'
- Code clean up (remove now dead code; mrpt backwards compatibility)
- Merge pull request #52 from MOLAorg/icp-log-viewer-quality-filter icp-log-viewer: add --min-quality filter CLI flag
- Contributors: Jose Luis Blanco-Claraco
2.8.1 (2026-04-06)
- Merge pull request #51 from MOLAorg/fix/new-mrpt-api Update to build against mrpt >=2.15.13
- Update to build against mrpt >=2.15.13 (pointcloud field names as std::string instead of string_view)
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.10.0 |
| 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-05-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.10.0 (2026-05-02)
- CI: Update actions for new ROS rolling
- icp-log-viewer: better formatting of uncertainties
- demo sm2mm file: store as independent keyframes
- Merge pull request #60 from MOLAorg/feat/censi3d-covariance Feat: Censi3D covariance method
- feat: Add new covariance method (Censi, 3D version)
- demo sm2mm files: add Keyframe map variant
- Contributors: Jose Luis Blanco-Claraco
2.9.1 (2026-04-29)
-
Merge pull request #59 from MOLAorg/fix/cov2cov-covariance-whitening Fix cov2cov whitening and add residual-variance scaling in covariance()
-
Fix cov2cov whitening and add residual-variance scaling in covariance() The cov2cov branch in covariance.cpp whitened residuals with the full information matrix (cov_inv * e), so the assembled Hessian became J\^T * cov_inv\^2 * J instead of J\^T * cov_inv * J. Combined with hundreds of pairings this drove down to ~1e-20 and made the estimate unusable.
- Use the Cholesky factor L\^T (with L L\^T = cov_inv) to whiten the cov2cov residual, matching what optimal_tf_gauss_newton accumulates.
- Multiply the inverse-Hessian by chi\^2 / (m - 6), the standard a-posteriori unit-weight variance, to rescale the (otherwise optimistic) result by the empirical residual level.
-
Merge pull request #58 from MOLAorg/feat/icp-viewer-show-prior feat: icp-logs now store the prior SE(3) PDF
-
feat: icp-logs now store the prior SE(3) PDF
-
icp-log-viewer: safer against exceptions in gui thread
-
demo sm2mm files: ignore_accelerometer=true in all deskew stages by default (prevent noisy maps from low-quality IMUs)
-
Contributors: Jose Luis Blanco-Claraco
2.9.0 (2026-04-22)
- Merge pull request #57 from MOLAorg/feat/deskew-filter-ignore-acc FilterDeskew: add new option "ignore_accelerometer"
- Merge pull request #55 from MOLAorg/feat/mm-viewer-read-bin-files mm-viewer: can be also open .bin files with serialized CGenericPointsMap
- Merge pull request #54 from MOLAorg/feat/mm-apps-plugins mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Optimization in PointCloudToVoxelGridSingle
- Add <stdexcept> to all required files (don't depend on transitive includes)
- mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Merge branch 'generator-generic-cloud' into develop
- cloud rendering: Implement observing the autoBoundingBoxOutliersPercentile
- Merge pull request #53 from MOLAorg/generator-generic-cloud Generator: creates CGenericPointsMap by default; add sanity checks in most filters
- remove more old mrpt version guards
- New sanity check function: warn_on_field_padding_mismatch()
- FilterDeskew: guard against new MRPT behavior to keep all field lengths in sync
- Add sanity checks in filters
- Bump minimum MRPT version to 2.15.4 (and remove now old dead code)
- Generator new param 'filterOutPointsAtZero', set to true in demo pipelines
- Generator: now has a param 'default_pointcloud_class' which defaults to 'CGenericPointsMap'
- Code clean up (remove now dead code; mrpt backwards compatibility)
- Merge pull request #52 from MOLAorg/icp-log-viewer-quality-filter icp-log-viewer: add --min-quality filter CLI flag
- Contributors: Jose Luis Blanco-Claraco
2.8.1 (2026-04-06)
- Merge pull request #51 from MOLAorg/fix/new-mrpt-api Update to build against mrpt >=2.15.13
- Update to build against mrpt >=2.15.13 (pointcloud field names as std::string instead of string_view)
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.10.0 |
| 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-05-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.10.0 (2026-05-02)
- CI: Update actions for new ROS rolling
- icp-log-viewer: better formatting of uncertainties
- demo sm2mm file: store as independent keyframes
- Merge pull request #60 from MOLAorg/feat/censi3d-covariance Feat: Censi3D covariance method
- feat: Add new covariance method (Censi, 3D version)
- demo sm2mm files: add Keyframe map variant
- Contributors: Jose Luis Blanco-Claraco
2.9.1 (2026-04-29)
-
Merge pull request #59 from MOLAorg/fix/cov2cov-covariance-whitening Fix cov2cov whitening and add residual-variance scaling in covariance()
-
Fix cov2cov whitening and add residual-variance scaling in covariance() The cov2cov branch in covariance.cpp whitened residuals with the full information matrix (cov_inv * e), so the assembled Hessian became J\^T * cov_inv\^2 * J instead of J\^T * cov_inv * J. Combined with hundreds of pairings this drove down to ~1e-20 and made the estimate unusable.
- Use the Cholesky factor L\^T (with L L\^T = cov_inv) to whiten the cov2cov residual, matching what optimal_tf_gauss_newton accumulates.
- Multiply the inverse-Hessian by chi\^2 / (m - 6), the standard a-posteriori unit-weight variance, to rescale the (otherwise optimistic) result by the empirical residual level.
-
Merge pull request #58 from MOLAorg/feat/icp-viewer-show-prior feat: icp-logs now store the prior SE(3) PDF
-
feat: icp-logs now store the prior SE(3) PDF
-
icp-log-viewer: safer against exceptions in gui thread
-
demo sm2mm files: ignore_accelerometer=true in all deskew stages by default (prevent noisy maps from low-quality IMUs)
-
Contributors: Jose Luis Blanco-Claraco
2.9.0 (2026-04-22)
- Merge pull request #57 from MOLAorg/feat/deskew-filter-ignore-acc FilterDeskew: add new option "ignore_accelerometer"
- Merge pull request #55 from MOLAorg/feat/mm-viewer-read-bin-files mm-viewer: can be also open .bin files with serialized CGenericPointsMap
- Merge pull request #54 from MOLAorg/feat/mm-apps-plugins mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Optimization in PointCloudToVoxelGridSingle
- Add <stdexcept> to all required files (don't depend on transitive includes)
- mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Merge branch 'generator-generic-cloud' into develop
- cloud rendering: Implement observing the autoBoundingBoxOutliersPercentile
- Merge pull request #53 from MOLAorg/generator-generic-cloud Generator: creates CGenericPointsMap by default; add sanity checks in most filters
- remove more old mrpt version guards
- New sanity check function: warn_on_field_padding_mismatch()
- FilterDeskew: guard against new MRPT behavior to keep all field lengths in sync
- Add sanity checks in filters
- Bump minimum MRPT version to 2.15.4 (and remove now old dead code)
- Generator new param 'filterOutPointsAtZero', set to true in demo pipelines
- Generator: now has a param 'default_pointcloud_class' which defaults to 'CGenericPointsMap'
- Code clean up (remove now dead code; mrpt backwards compatibility)
- Merge pull request #52 from MOLAorg/icp-log-viewer-quality-filter icp-log-viewer: add --min-quality filter CLI flag
- Contributors: Jose Luis Blanco-Claraco
2.8.1 (2026-04-06)
- Merge pull request #51 from MOLAorg/fix/new-mrpt-api Update to build against mrpt >=2.15.13
- Update to build against mrpt >=2.15.13 (pointcloud field names as std::string instead of string_view)
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.10.0 |
| 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-05-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.10.0 (2026-05-02)
- CI: Update actions for new ROS rolling
- icp-log-viewer: better formatting of uncertainties
- demo sm2mm file: store as independent keyframes
- Merge pull request #60 from MOLAorg/feat/censi3d-covariance Feat: Censi3D covariance method
- feat: Add new covariance method (Censi, 3D version)
- demo sm2mm files: add Keyframe map variant
- Contributors: Jose Luis Blanco-Claraco
2.9.1 (2026-04-29)
-
Merge pull request #59 from MOLAorg/fix/cov2cov-covariance-whitening Fix cov2cov whitening and add residual-variance scaling in covariance()
-
Fix cov2cov whitening and add residual-variance scaling in covariance() The cov2cov branch in covariance.cpp whitened residuals with the full information matrix (cov_inv * e), so the assembled Hessian became J\^T * cov_inv\^2 * J instead of J\^T * cov_inv * J. Combined with hundreds of pairings this drove down to ~1e-20 and made the estimate unusable.
- Use the Cholesky factor L\^T (with L L\^T = cov_inv) to whiten the cov2cov residual, matching what optimal_tf_gauss_newton accumulates.
- Multiply the inverse-Hessian by chi\^2 / (m - 6), the standard a-posteriori unit-weight variance, to rescale the (otherwise optimistic) result by the empirical residual level.
-
Merge pull request #58 from MOLAorg/feat/icp-viewer-show-prior feat: icp-logs now store the prior SE(3) PDF
-
feat: icp-logs now store the prior SE(3) PDF
-
icp-log-viewer: safer against exceptions in gui thread
-
demo sm2mm files: ignore_accelerometer=true in all deskew stages by default (prevent noisy maps from low-quality IMUs)
-
Contributors: Jose Luis Blanco-Claraco
2.9.0 (2026-04-22)
- Merge pull request #57 from MOLAorg/feat/deskew-filter-ignore-acc FilterDeskew: add new option "ignore_accelerometer"
- Merge pull request #55 from MOLAorg/feat/mm-viewer-read-bin-files mm-viewer: can be also open .bin files with serialized CGenericPointsMap
- Merge pull request #54 from MOLAorg/feat/mm-apps-plugins mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Optimization in PointCloudToVoxelGridSingle
- Add <stdexcept> to all required files (don't depend on transitive includes)
- mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Merge branch 'generator-generic-cloud' into develop
- cloud rendering: Implement observing the autoBoundingBoxOutliersPercentile
- Merge pull request #53 from MOLAorg/generator-generic-cloud Generator: creates CGenericPointsMap by default; add sanity checks in most filters
- remove more old mrpt version guards
- New sanity check function: warn_on_field_padding_mismatch()
- FilterDeskew: guard against new MRPT behavior to keep all field lengths in sync
- Add sanity checks in filters
- Bump minimum MRPT version to 2.15.4 (and remove now old dead code)
- Generator new param 'filterOutPointsAtZero', set to true in demo pipelines
- Generator: now has a param 'default_pointcloud_class' which defaults to 'CGenericPointsMap'
- Code clean up (remove now dead code; mrpt backwards compatibility)
- Merge pull request #52 from MOLAorg/icp-log-viewer-quality-filter icp-log-viewer: add --min-quality filter CLI flag
- Contributors: Jose Luis Blanco-Claraco
2.8.1 (2026-04-06)
- Merge pull request #51 from MOLAorg/fix/new-mrpt-api Update to build against mrpt >=2.15.13
- Update to build against mrpt >=2.15.13 (pointcloud field names as std::string instead of string_view)
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.10.0 |
| 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-05-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.10.0 (2026-05-02)
- CI: Update actions for new ROS rolling
- icp-log-viewer: better formatting of uncertainties
- demo sm2mm file: store as independent keyframes
- Merge pull request #60 from MOLAorg/feat/censi3d-covariance Feat: Censi3D covariance method
- feat: Add new covariance method (Censi, 3D version)
- demo sm2mm files: add Keyframe map variant
- Contributors: Jose Luis Blanco-Claraco
2.9.1 (2026-04-29)
-
Merge pull request #59 from MOLAorg/fix/cov2cov-covariance-whitening Fix cov2cov whitening and add residual-variance scaling in covariance()
-
Fix cov2cov whitening and add residual-variance scaling in covariance() The cov2cov branch in covariance.cpp whitened residuals with the full information matrix (cov_inv * e), so the assembled Hessian became J\^T * cov_inv\^2 * J instead of J\^T * cov_inv * J. Combined with hundreds of pairings this drove down to ~1e-20 and made the estimate unusable.
- Use the Cholesky factor L\^T (with L L\^T = cov_inv) to whiten the cov2cov residual, matching what optimal_tf_gauss_newton accumulates.
- Multiply the inverse-Hessian by chi\^2 / (m - 6), the standard a-posteriori unit-weight variance, to rescale the (otherwise optimistic) result by the empirical residual level.
-
Merge pull request #58 from MOLAorg/feat/icp-viewer-show-prior feat: icp-logs now store the prior SE(3) PDF
-
feat: icp-logs now store the prior SE(3) PDF
-
icp-log-viewer: safer against exceptions in gui thread
-
demo sm2mm files: ignore_accelerometer=true in all deskew stages by default (prevent noisy maps from low-quality IMUs)
-
Contributors: Jose Luis Blanco-Claraco
2.9.0 (2026-04-22)
- Merge pull request #57 from MOLAorg/feat/deskew-filter-ignore-acc FilterDeskew: add new option "ignore_accelerometer"
- Merge pull request #55 from MOLAorg/feat/mm-viewer-read-bin-files mm-viewer: can be also open .bin files with serialized CGenericPointsMap
- Merge pull request #54 from MOLAorg/feat/mm-apps-plugins mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Optimization in PointCloudToVoxelGridSingle
- Add <stdexcept> to all required files (don't depend on transitive includes)
- mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Merge branch 'generator-generic-cloud' into develop
- cloud rendering: Implement observing the autoBoundingBoxOutliersPercentile
- Merge pull request #53 from MOLAorg/generator-generic-cloud Generator: creates CGenericPointsMap by default; add sanity checks in most filters
- remove more old mrpt version guards
- New sanity check function: warn_on_field_padding_mismatch()
- FilterDeskew: guard against new MRPT behavior to keep all field lengths in sync
- Add sanity checks in filters
- Bump minimum MRPT version to 2.15.4 (and remove now old dead code)
- Generator new param 'filterOutPointsAtZero', set to true in demo pipelines
- Generator: now has a param 'default_pointcloud_class' which defaults to 'CGenericPointsMap'
- Code clean up (remove now dead code; mrpt backwards compatibility)
- Merge pull request #52 from MOLAorg/icp-log-viewer-quality-filter icp-log-viewer: add --min-quality filter CLI flag
- Contributors: Jose Luis Blanco-Claraco
2.8.1 (2026-04-06)
- Merge pull request #51 from MOLAorg/fix/new-mrpt-api Update to build against mrpt >=2.15.13
- Update to build against mrpt >=2.15.13 (pointcloud field names as std::string instead of string_view)
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.10.0 |
| 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-05-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.10.0 (2026-05-02)
- CI: Update actions for new ROS rolling
- icp-log-viewer: better formatting of uncertainties
- demo sm2mm file: store as independent keyframes
- Merge pull request #60 from MOLAorg/feat/censi3d-covariance Feat: Censi3D covariance method
- feat: Add new covariance method (Censi, 3D version)
- demo sm2mm files: add Keyframe map variant
- Contributors: Jose Luis Blanco-Claraco
2.9.1 (2026-04-29)
-
Merge pull request #59 from MOLAorg/fix/cov2cov-covariance-whitening Fix cov2cov whitening and add residual-variance scaling in covariance()
-
Fix cov2cov whitening and add residual-variance scaling in covariance() The cov2cov branch in covariance.cpp whitened residuals with the full information matrix (cov_inv * e), so the assembled Hessian became J\^T * cov_inv\^2 * J instead of J\^T * cov_inv * J. Combined with hundreds of pairings this drove down to ~1e-20 and made the estimate unusable.
- Use the Cholesky factor L\^T (with L L\^T = cov_inv) to whiten the cov2cov residual, matching what optimal_tf_gauss_newton accumulates.
- Multiply the inverse-Hessian by chi\^2 / (m - 6), the standard a-posteriori unit-weight variance, to rescale the (otherwise optimistic) result by the empirical residual level.
-
Merge pull request #58 from MOLAorg/feat/icp-viewer-show-prior feat: icp-logs now store the prior SE(3) PDF
-
feat: icp-logs now store the prior SE(3) PDF
-
icp-log-viewer: safer against exceptions in gui thread
-
demo sm2mm files: ignore_accelerometer=true in all deskew stages by default (prevent noisy maps from low-quality IMUs)
-
Contributors: Jose Luis Blanco-Claraco
2.9.0 (2026-04-22)
- Merge pull request #57 from MOLAorg/feat/deskew-filter-ignore-acc FilterDeskew: add new option "ignore_accelerometer"
- Merge pull request #55 from MOLAorg/feat/mm-viewer-read-bin-files mm-viewer: can be also open .bin files with serialized CGenericPointsMap
- Merge pull request #54 from MOLAorg/feat/mm-apps-plugins mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Optimization in PointCloudToVoxelGridSingle
- Add <stdexcept> to all required files (don't depend on transitive includes)
- mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Merge branch 'generator-generic-cloud' into develop
- cloud rendering: Implement observing the autoBoundingBoxOutliersPercentile
- Merge pull request #53 from MOLAorg/generator-generic-cloud Generator: creates CGenericPointsMap by default; add sanity checks in most filters
- remove more old mrpt version guards
- New sanity check function: warn_on_field_padding_mismatch()
- FilterDeskew: guard against new MRPT behavior to keep all field lengths in sync
- Add sanity checks in filters
- Bump minimum MRPT version to 2.15.4 (and remove now old dead code)
- Generator new param 'filterOutPointsAtZero', set to true in demo pipelines
- Generator: now has a param 'default_pointcloud_class' which defaults to 'CGenericPointsMap'
- Code clean up (remove now dead code; mrpt backwards compatibility)
- Merge pull request #52 from MOLAorg/icp-log-viewer-quality-filter icp-log-viewer: add --min-quality filter CLI flag
- Contributors: Jose Luis Blanco-Claraco
2.8.1 (2026-04-06)
- Merge pull request #51 from MOLAorg/fix/new-mrpt-api Update to build against mrpt >=2.15.13
- Update to build against mrpt >=2.15.13 (pointcloud field names as std::string instead of string_view)
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.10.0 |
| 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-05-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.10.0 (2026-05-02)
- CI: Update actions for new ROS rolling
- icp-log-viewer: better formatting of uncertainties
- demo sm2mm file: store as independent keyframes
- Merge pull request #60 from MOLAorg/feat/censi3d-covariance Feat: Censi3D covariance method
- feat: Add new covariance method (Censi, 3D version)
- demo sm2mm files: add Keyframe map variant
- Contributors: Jose Luis Blanco-Claraco
2.9.1 (2026-04-29)
-
Merge pull request #59 from MOLAorg/fix/cov2cov-covariance-whitening Fix cov2cov whitening and add residual-variance scaling in covariance()
-
Fix cov2cov whitening and add residual-variance scaling in covariance() The cov2cov branch in covariance.cpp whitened residuals with the full information matrix (cov_inv * e), so the assembled Hessian became J\^T * cov_inv\^2 * J instead of J\^T * cov_inv * J. Combined with hundreds of pairings this drove down to ~1e-20 and made the estimate unusable.
- Use the Cholesky factor L\^T (with L L\^T = cov_inv) to whiten the cov2cov residual, matching what optimal_tf_gauss_newton accumulates.
- Multiply the inverse-Hessian by chi\^2 / (m - 6), the standard a-posteriori unit-weight variance, to rescale the (otherwise optimistic) result by the empirical residual level.
-
Merge pull request #58 from MOLAorg/feat/icp-viewer-show-prior feat: icp-logs now store the prior SE(3) PDF
-
feat: icp-logs now store the prior SE(3) PDF
-
icp-log-viewer: safer against exceptions in gui thread
-
demo sm2mm files: ignore_accelerometer=true in all deskew stages by default (prevent noisy maps from low-quality IMUs)
-
Contributors: Jose Luis Blanco-Claraco
2.9.0 (2026-04-22)
- Merge pull request #57 from MOLAorg/feat/deskew-filter-ignore-acc FilterDeskew: add new option "ignore_accelerometer"
- Merge pull request #55 from MOLAorg/feat/mm-viewer-read-bin-files mm-viewer: can be also open .bin files with serialized CGenericPointsMap
- Merge pull request #54 from MOLAorg/feat/mm-apps-plugins mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Optimization in PointCloudToVoxelGridSingle
- Add <stdexcept> to all required files (don't depend on transitive includes)
- mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Merge branch 'generator-generic-cloud' into develop
- cloud rendering: Implement observing the autoBoundingBoxOutliersPercentile
- Merge pull request #53 from MOLAorg/generator-generic-cloud Generator: creates CGenericPointsMap by default; add sanity checks in most filters
- remove more old mrpt version guards
- New sanity check function: warn_on_field_padding_mismatch()
- FilterDeskew: guard against new MRPT behavior to keep all field lengths in sync
- Add sanity checks in filters
- Bump minimum MRPT version to 2.15.4 (and remove now old dead code)
- Generator new param 'filterOutPointsAtZero', set to true in demo pipelines
- Generator: now has a param 'default_pointcloud_class' which defaults to 'CGenericPointsMap'
- Code clean up (remove now dead code; mrpt backwards compatibility)
- Merge pull request #52 from MOLAorg/icp-log-viewer-quality-filter icp-log-viewer: add --min-quality filter CLI flag
- Contributors: Jose Luis Blanco-Claraco
2.8.1 (2026-04-06)
- Merge pull request #51 from MOLAorg/fix/new-mrpt-api Update to build against mrpt >=2.15.13
- Update to build against mrpt >=2.15.13 (pointcloud field names as std::string instead of string_view)
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.10.0 |
| 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-05-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.10.0 (2026-05-02)
- CI: Update actions for new ROS rolling
- icp-log-viewer: better formatting of uncertainties
- demo sm2mm file: store as independent keyframes
- Merge pull request #60 from MOLAorg/feat/censi3d-covariance Feat: Censi3D covariance method
- feat: Add new covariance method (Censi, 3D version)
- demo sm2mm files: add Keyframe map variant
- Contributors: Jose Luis Blanco-Claraco
2.9.1 (2026-04-29)
-
Merge pull request #59 from MOLAorg/fix/cov2cov-covariance-whitening Fix cov2cov whitening and add residual-variance scaling in covariance()
-
Fix cov2cov whitening and add residual-variance scaling in covariance() The cov2cov branch in covariance.cpp whitened residuals with the full information matrix (cov_inv * e), so the assembled Hessian became J\^T * cov_inv\^2 * J instead of J\^T * cov_inv * J. Combined with hundreds of pairings this drove down to ~1e-20 and made the estimate unusable.
- Use the Cholesky factor L\^T (with L L\^T = cov_inv) to whiten the cov2cov residual, matching what optimal_tf_gauss_newton accumulates.
- Multiply the inverse-Hessian by chi\^2 / (m - 6), the standard a-posteriori unit-weight variance, to rescale the (otherwise optimistic) result by the empirical residual level.
-
Merge pull request #58 from MOLAorg/feat/icp-viewer-show-prior feat: icp-logs now store the prior SE(3) PDF
-
feat: icp-logs now store the prior SE(3) PDF
-
icp-log-viewer: safer against exceptions in gui thread
-
demo sm2mm files: ignore_accelerometer=true in all deskew stages by default (prevent noisy maps from low-quality IMUs)
-
Contributors: Jose Luis Blanco-Claraco
2.9.0 (2026-04-22)
- Merge pull request #57 from MOLAorg/feat/deskew-filter-ignore-acc FilterDeskew: add new option "ignore_accelerometer"
- Merge pull request #55 from MOLAorg/feat/mm-viewer-read-bin-files mm-viewer: can be also open .bin files with serialized CGenericPointsMap
- Merge pull request #54 from MOLAorg/feat/mm-apps-plugins mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Optimization in PointCloudToVoxelGridSingle
- Add <stdexcept> to all required files (don't depend on transitive includes)
- mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Merge branch 'generator-generic-cloud' into develop
- cloud rendering: Implement observing the autoBoundingBoxOutliersPercentile
- Merge pull request #53 from MOLAorg/generator-generic-cloud Generator: creates CGenericPointsMap by default; add sanity checks in most filters
- remove more old mrpt version guards
- New sanity check function: warn_on_field_padding_mismatch()
- FilterDeskew: guard against new MRPT behavior to keep all field lengths in sync
- Add sanity checks in filters
- Bump minimum MRPT version to 2.15.4 (and remove now old dead code)
- Generator new param 'filterOutPointsAtZero', set to true in demo pipelines
- Generator: now has a param 'default_pointcloud_class' which defaults to 'CGenericPointsMap'
- Code clean up (remove now dead code; mrpt backwards compatibility)
- Merge pull request #52 from MOLAorg/icp-log-viewer-quality-filter icp-log-viewer: add --min-quality filter CLI flag
- Contributors: Jose Luis Blanco-Claraco
2.8.1 (2026-04-06)
- Merge pull request #51 from MOLAorg/fix/new-mrpt-api Update to build against mrpt >=2.15.13
- Update to build against mrpt >=2.15.13 (pointcloud field names as std::string instead of string_view)
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.10.0 |
| 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-05-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.10.0 (2026-05-02)
- CI: Update actions for new ROS rolling
- icp-log-viewer: better formatting of uncertainties
- demo sm2mm file: store as independent keyframes
- Merge pull request #60 from MOLAorg/feat/censi3d-covariance Feat: Censi3D covariance method
- feat: Add new covariance method (Censi, 3D version)
- demo sm2mm files: add Keyframe map variant
- Contributors: Jose Luis Blanco-Claraco
2.9.1 (2026-04-29)
-
Merge pull request #59 from MOLAorg/fix/cov2cov-covariance-whitening Fix cov2cov whitening and add residual-variance scaling in covariance()
-
Fix cov2cov whitening and add residual-variance scaling in covariance() The cov2cov branch in covariance.cpp whitened residuals with the full information matrix (cov_inv * e), so the assembled Hessian became J\^T * cov_inv\^2 * J instead of J\^T * cov_inv * J. Combined with hundreds of pairings this drove down to ~1e-20 and made the estimate unusable.
- Use the Cholesky factor L\^T (with L L\^T = cov_inv) to whiten the cov2cov residual, matching what optimal_tf_gauss_newton accumulates.
- Multiply the inverse-Hessian by chi\^2 / (m - 6), the standard a-posteriori unit-weight variance, to rescale the (otherwise optimistic) result by the empirical residual level.
-
Merge pull request #58 from MOLAorg/feat/icp-viewer-show-prior feat: icp-logs now store the prior SE(3) PDF
-
feat: icp-logs now store the prior SE(3) PDF
-
icp-log-viewer: safer against exceptions in gui thread
-
demo sm2mm files: ignore_accelerometer=true in all deskew stages by default (prevent noisy maps from low-quality IMUs)
-
Contributors: Jose Luis Blanco-Claraco
2.9.0 (2026-04-22)
- Merge pull request #57 from MOLAorg/feat/deskew-filter-ignore-acc FilterDeskew: add new option "ignore_accelerometer"
- Merge pull request #55 from MOLAorg/feat/mm-viewer-read-bin-files mm-viewer: can be also open .bin files with serialized CGenericPointsMap
- Merge pull request #54 from MOLAorg/feat/mm-apps-plugins mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Optimization in PointCloudToVoxelGridSingle
- Add <stdexcept> to all required files (don't depend on transitive includes)
- mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Merge branch 'generator-generic-cloud' into develop
- cloud rendering: Implement observing the autoBoundingBoxOutliersPercentile
- Merge pull request #53 from MOLAorg/generator-generic-cloud Generator: creates CGenericPointsMap by default; add sanity checks in most filters
- remove more old mrpt version guards
- New sanity check function: warn_on_field_padding_mismatch()
- FilterDeskew: guard against new MRPT behavior to keep all field lengths in sync
- Add sanity checks in filters
- Bump minimum MRPT version to 2.15.4 (and remove now old dead code)
- Generator new param 'filterOutPointsAtZero', set to true in demo pipelines
- Generator: now has a param 'default_pointcloud_class' which defaults to 'CGenericPointsMap'
- Code clean up (remove now dead code; mrpt backwards compatibility)
- Merge pull request #52 from MOLAorg/icp-log-viewer-quality-filter icp-log-viewer: add --min-quality filter CLI flag
- Contributors: Jose Luis Blanco-Claraco
2.8.1 (2026-04-06)
- Merge pull request #51 from MOLAorg/fix/new-mrpt-api Update to build against mrpt >=2.15.13
- Update to build against mrpt >=2.15.13 (pointcloud field names as std::string instead of string_view)
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.10.0 |
| 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-05-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.10.0 (2026-05-02)
- CI: Update actions for new ROS rolling
- icp-log-viewer: better formatting of uncertainties
- demo sm2mm file: store as independent keyframes
- Merge pull request #60 from MOLAorg/feat/censi3d-covariance Feat: Censi3D covariance method
- feat: Add new covariance method (Censi, 3D version)
- demo sm2mm files: add Keyframe map variant
- Contributors: Jose Luis Blanco-Claraco
2.9.1 (2026-04-29)
-
Merge pull request #59 from MOLAorg/fix/cov2cov-covariance-whitening Fix cov2cov whitening and add residual-variance scaling in covariance()
-
Fix cov2cov whitening and add residual-variance scaling in covariance() The cov2cov branch in covariance.cpp whitened residuals with the full information matrix (cov_inv * e), so the assembled Hessian became J\^T * cov_inv\^2 * J instead of J\^T * cov_inv * J. Combined with hundreds of pairings this drove down to ~1e-20 and made the estimate unusable.
- Use the Cholesky factor L\^T (with L L\^T = cov_inv) to whiten the cov2cov residual, matching what optimal_tf_gauss_newton accumulates.
- Multiply the inverse-Hessian by chi\^2 / (m - 6), the standard a-posteriori unit-weight variance, to rescale the (otherwise optimistic) result by the empirical residual level.
-
Merge pull request #58 from MOLAorg/feat/icp-viewer-show-prior feat: icp-logs now store the prior SE(3) PDF
-
feat: icp-logs now store the prior SE(3) PDF
-
icp-log-viewer: safer against exceptions in gui thread
-
demo sm2mm files: ignore_accelerometer=true in all deskew stages by default (prevent noisy maps from low-quality IMUs)
-
Contributors: Jose Luis Blanco-Claraco
2.9.0 (2026-04-22)
- Merge pull request #57 from MOLAorg/feat/deskew-filter-ignore-acc FilterDeskew: add new option "ignore_accelerometer"
- Merge pull request #55 from MOLAorg/feat/mm-viewer-read-bin-files mm-viewer: can be also open .bin files with serialized CGenericPointsMap
- Merge pull request #54 from MOLAorg/feat/mm-apps-plugins mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Optimization in PointCloudToVoxelGridSingle
- Add <stdexcept> to all required files (don't depend on transitive includes)
- mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Merge branch 'generator-generic-cloud' into develop
- cloud rendering: Implement observing the autoBoundingBoxOutliersPercentile
- Merge pull request #53 from MOLAorg/generator-generic-cloud Generator: creates CGenericPointsMap by default; add sanity checks in most filters
- remove more old mrpt version guards
- New sanity check function: warn_on_field_padding_mismatch()
- FilterDeskew: guard against new MRPT behavior to keep all field lengths in sync
- Add sanity checks in filters
- Bump minimum MRPT version to 2.15.4 (and remove now old dead code)
- Generator new param 'filterOutPointsAtZero', set to true in demo pipelines
- Generator: now has a param 'default_pointcloud_class' which defaults to 'CGenericPointsMap'
- Code clean up (remove now dead code; mrpt backwards compatibility)
- Merge pull request #52 from MOLAorg/icp-log-viewer-quality-filter icp-log-viewer: add --min-quality filter CLI flag
- Contributors: Jose Luis Blanco-Claraco
2.8.1 (2026-04-06)
- Merge pull request #51 from MOLAorg/fix/new-mrpt-api Update to build against mrpt >=2.15.13
- Update to build against mrpt >=2.15.13 (pointcloud field names as std::string instead of string_view)
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.10.0 |
| 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-05-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.10.0 (2026-05-02)
- CI: Update actions for new ROS rolling
- icp-log-viewer: better formatting of uncertainties
- demo sm2mm file: store as independent keyframes
- Merge pull request #60 from MOLAorg/feat/censi3d-covariance Feat: Censi3D covariance method
- feat: Add new covariance method (Censi, 3D version)
- demo sm2mm files: add Keyframe map variant
- Contributors: Jose Luis Blanco-Claraco
2.9.1 (2026-04-29)
-
Merge pull request #59 from MOLAorg/fix/cov2cov-covariance-whitening Fix cov2cov whitening and add residual-variance scaling in covariance()
-
Fix cov2cov whitening and add residual-variance scaling in covariance() The cov2cov branch in covariance.cpp whitened residuals with the full information matrix (cov_inv * e), so the assembled Hessian became J\^T * cov_inv\^2 * J instead of J\^T * cov_inv * J. Combined with hundreds of pairings this drove down to ~1e-20 and made the estimate unusable.
- Use the Cholesky factor L\^T (with L L\^T = cov_inv) to whiten the cov2cov residual, matching what optimal_tf_gauss_newton accumulates.
- Multiply the inverse-Hessian by chi\^2 / (m - 6), the standard a-posteriori unit-weight variance, to rescale the (otherwise optimistic) result by the empirical residual level.
-
Merge pull request #58 from MOLAorg/feat/icp-viewer-show-prior feat: icp-logs now store the prior SE(3) PDF
-
feat: icp-logs now store the prior SE(3) PDF
-
icp-log-viewer: safer against exceptions in gui thread
-
demo sm2mm files: ignore_accelerometer=true in all deskew stages by default (prevent noisy maps from low-quality IMUs)
-
Contributors: Jose Luis Blanco-Claraco
2.9.0 (2026-04-22)
- Merge pull request #57 from MOLAorg/feat/deskew-filter-ignore-acc FilterDeskew: add new option "ignore_accelerometer"
- Merge pull request #55 from MOLAorg/feat/mm-viewer-read-bin-files mm-viewer: can be also open .bin files with serialized CGenericPointsMap
- Merge pull request #54 from MOLAorg/feat/mm-apps-plugins mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Optimization in PointCloudToVoxelGridSingle
- Add <stdexcept> to all required files (don't depend on transitive includes)
- mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Merge branch 'generator-generic-cloud' into develop
- cloud rendering: Implement observing the autoBoundingBoxOutliersPercentile
- Merge pull request #53 from MOLAorg/generator-generic-cloud Generator: creates CGenericPointsMap by default; add sanity checks in most filters
- remove more old mrpt version guards
- New sanity check function: warn_on_field_padding_mismatch()
- FilterDeskew: guard against new MRPT behavior to keep all field lengths in sync
- Add sanity checks in filters
- Bump minimum MRPT version to 2.15.4 (and remove now old dead code)
- Generator new param 'filterOutPointsAtZero', set to true in demo pipelines
- Generator: now has a param 'default_pointcloud_class' which defaults to 'CGenericPointsMap'
- Code clean up (remove now dead code; mrpt backwards compatibility)
- Merge pull request #52 from MOLAorg/icp-log-viewer-quality-filter icp-log-viewer: add --min-quality filter CLI flag
- Contributors: Jose Luis Blanco-Claraco
2.8.1 (2026-04-06)
- Merge pull request #51 from MOLAorg/fix/new-mrpt-api Update to build against mrpt >=2.15.13
- Update to build against mrpt >=2.15.13 (pointcloud field names as std::string instead of string_view)
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.10.0 |
| 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-05-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.10.0 (2026-05-02)
- CI: Update actions for new ROS rolling
- icp-log-viewer: better formatting of uncertainties
- demo sm2mm file: store as independent keyframes
- Merge pull request #60 from MOLAorg/feat/censi3d-covariance Feat: Censi3D covariance method
- feat: Add new covariance method (Censi, 3D version)
- demo sm2mm files: add Keyframe map variant
- Contributors: Jose Luis Blanco-Claraco
2.9.1 (2026-04-29)
-
Merge pull request #59 from MOLAorg/fix/cov2cov-covariance-whitening Fix cov2cov whitening and add residual-variance scaling in covariance()
-
Fix cov2cov whitening and add residual-variance scaling in covariance() The cov2cov branch in covariance.cpp whitened residuals with the full information matrix (cov_inv * e), so the assembled Hessian became J\^T * cov_inv\^2 * J instead of J\^T * cov_inv * J. Combined with hundreds of pairings this drove down to ~1e-20 and made the estimate unusable.
- Use the Cholesky factor L\^T (with L L\^T = cov_inv) to whiten the cov2cov residual, matching what optimal_tf_gauss_newton accumulates.
- Multiply the inverse-Hessian by chi\^2 / (m - 6), the standard a-posteriori unit-weight variance, to rescale the (otherwise optimistic) result by the empirical residual level.
-
Merge pull request #58 from MOLAorg/feat/icp-viewer-show-prior feat: icp-logs now store the prior SE(3) PDF
-
feat: icp-logs now store the prior SE(3) PDF
-
icp-log-viewer: safer against exceptions in gui thread
-
demo sm2mm files: ignore_accelerometer=true in all deskew stages by default (prevent noisy maps from low-quality IMUs)
-
Contributors: Jose Luis Blanco-Claraco
2.9.0 (2026-04-22)
- Merge pull request #57 from MOLAorg/feat/deskew-filter-ignore-acc FilterDeskew: add new option "ignore_accelerometer"
- Merge pull request #55 from MOLAorg/feat/mm-viewer-read-bin-files mm-viewer: can be also open .bin files with serialized CGenericPointsMap
- Merge pull request #54 from MOLAorg/feat/mm-apps-plugins mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Optimization in PointCloudToVoxelGridSingle
- Add <stdexcept> to all required files (don't depend on transitive includes)
- mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Merge branch 'generator-generic-cloud' into develop
- cloud rendering: Implement observing the autoBoundingBoxOutliersPercentile
- Merge pull request #53 from MOLAorg/generator-generic-cloud Generator: creates CGenericPointsMap by default; add sanity checks in most filters
- remove more old mrpt version guards
- New sanity check function: warn_on_field_padding_mismatch()
- FilterDeskew: guard against new MRPT behavior to keep all field lengths in sync
- Add sanity checks in filters
- Bump minimum MRPT version to 2.15.4 (and remove now old dead code)
- Generator new param 'filterOutPointsAtZero', set to true in demo pipelines
- Generator: now has a param 'default_pointcloud_class' which defaults to 'CGenericPointsMap'
- Code clean up (remove now dead code; mrpt backwards compatibility)
- Merge pull request #52 from MOLAorg/icp-log-viewer-quality-filter icp-log-viewer: add --min-quality filter CLI flag
- Contributors: Jose Luis Blanco-Claraco
2.8.1 (2026-04-06)
- Merge pull request #51 from MOLAorg/fix/new-mrpt-api Update to build against mrpt >=2.15.13
- Update to build against mrpt >=2.15.13 (pointcloud field names as std::string instead of string_view)
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.10.0 |
| 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-05-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.10.0 (2026-05-02)
- CI: Update actions for new ROS rolling
- icp-log-viewer: better formatting of uncertainties
- demo sm2mm file: store as independent keyframes
- Merge pull request #60 from MOLAorg/feat/censi3d-covariance Feat: Censi3D covariance method
- feat: Add new covariance method (Censi, 3D version)
- demo sm2mm files: add Keyframe map variant
- Contributors: Jose Luis Blanco-Claraco
2.9.1 (2026-04-29)
-
Merge pull request #59 from MOLAorg/fix/cov2cov-covariance-whitening Fix cov2cov whitening and add residual-variance scaling in covariance()
-
Fix cov2cov whitening and add residual-variance scaling in covariance() The cov2cov branch in covariance.cpp whitened residuals with the full information matrix (cov_inv * e), so the assembled Hessian became J\^T * cov_inv\^2 * J instead of J\^T * cov_inv * J. Combined with hundreds of pairings this drove down to ~1e-20 and made the estimate unusable.
- Use the Cholesky factor L\^T (with L L\^T = cov_inv) to whiten the cov2cov residual, matching what optimal_tf_gauss_newton accumulates.
- Multiply the inverse-Hessian by chi\^2 / (m - 6), the standard a-posteriori unit-weight variance, to rescale the (otherwise optimistic) result by the empirical residual level.
-
Merge pull request #58 from MOLAorg/feat/icp-viewer-show-prior feat: icp-logs now store the prior SE(3) PDF
-
feat: icp-logs now store the prior SE(3) PDF
-
icp-log-viewer: safer against exceptions in gui thread
-
demo sm2mm files: ignore_accelerometer=true in all deskew stages by default (prevent noisy maps from low-quality IMUs)
-
Contributors: Jose Luis Blanco-Claraco
2.9.0 (2026-04-22)
- Merge pull request #57 from MOLAorg/feat/deskew-filter-ignore-acc FilterDeskew: add new option "ignore_accelerometer"
- Merge pull request #55 from MOLAorg/feat/mm-viewer-read-bin-files mm-viewer: can be also open .bin files with serialized CGenericPointsMap
- Merge pull request #54 from MOLAorg/feat/mm-apps-plugins mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Optimization in PointCloudToVoxelGridSingle
- Add <stdexcept> to all required files (don't depend on transitive includes)
- mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Merge branch 'generator-generic-cloud' into develop
- cloud rendering: Implement observing the autoBoundingBoxOutliersPercentile
- Merge pull request #53 from MOLAorg/generator-generic-cloud Generator: creates CGenericPointsMap by default; add sanity checks in most filters
- remove more old mrpt version guards
- New sanity check function: warn_on_field_padding_mismatch()
- FilterDeskew: guard against new MRPT behavior to keep all field lengths in sync
- Add sanity checks in filters
- Bump minimum MRPT version to 2.15.4 (and remove now old dead code)
- Generator new param 'filterOutPointsAtZero', set to true in demo pipelines
- Generator: now has a param 'default_pointcloud_class' which defaults to 'CGenericPointsMap'
- Code clean up (remove now dead code; mrpt backwards compatibility)
- Merge pull request #52 from MOLAorg/icp-log-viewer-quality-filter icp-log-viewer: add --min-quality filter CLI flag
- Contributors: Jose Luis Blanco-Claraco
2.8.1 (2026-04-06)
- Merge pull request #51 from MOLAorg/fix/new-mrpt-api Update to build against mrpt >=2.15.13
- Update to build against mrpt >=2.15.13 (pointcloud field names as std::string instead of string_view)
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.10.0 |
| 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-05-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.10.0 (2026-05-02)
- CI: Update actions for new ROS rolling
- icp-log-viewer: better formatting of uncertainties
- demo sm2mm file: store as independent keyframes
- Merge pull request #60 from MOLAorg/feat/censi3d-covariance Feat: Censi3D covariance method
- feat: Add new covariance method (Censi, 3D version)
- demo sm2mm files: add Keyframe map variant
- Contributors: Jose Luis Blanco-Claraco
2.9.1 (2026-04-29)
-
Merge pull request #59 from MOLAorg/fix/cov2cov-covariance-whitening Fix cov2cov whitening and add residual-variance scaling in covariance()
-
Fix cov2cov whitening and add residual-variance scaling in covariance() The cov2cov branch in covariance.cpp whitened residuals with the full information matrix (cov_inv * e), so the assembled Hessian became J\^T * cov_inv\^2 * J instead of J\^T * cov_inv * J. Combined with hundreds of pairings this drove down to ~1e-20 and made the estimate unusable.
- Use the Cholesky factor L\^T (with L L\^T = cov_inv) to whiten the cov2cov residual, matching what optimal_tf_gauss_newton accumulates.
- Multiply the inverse-Hessian by chi\^2 / (m - 6), the standard a-posteriori unit-weight variance, to rescale the (otherwise optimistic) result by the empirical residual level.
-
Merge pull request #58 from MOLAorg/feat/icp-viewer-show-prior feat: icp-logs now store the prior SE(3) PDF
-
feat: icp-logs now store the prior SE(3) PDF
-
icp-log-viewer: safer against exceptions in gui thread
-
demo sm2mm files: ignore_accelerometer=true in all deskew stages by default (prevent noisy maps from low-quality IMUs)
-
Contributors: Jose Luis Blanco-Claraco
2.9.0 (2026-04-22)
- Merge pull request #57 from MOLAorg/feat/deskew-filter-ignore-acc FilterDeskew: add new option "ignore_accelerometer"
- Merge pull request #55 from MOLAorg/feat/mm-viewer-read-bin-files mm-viewer: can be also open .bin files with serialized CGenericPointsMap
- Merge pull request #54 from MOLAorg/feat/mm-apps-plugins mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Optimization in PointCloudToVoxelGridSingle
- Add <stdexcept> to all required files (don't depend on transitive includes)
- mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Merge branch 'generator-generic-cloud' into develop
- cloud rendering: Implement observing the autoBoundingBoxOutliersPercentile
- Merge pull request #53 from MOLAorg/generator-generic-cloud Generator: creates CGenericPointsMap by default; add sanity checks in most filters
- remove more old mrpt version guards
- New sanity check function: warn_on_field_padding_mismatch()
- FilterDeskew: guard against new MRPT behavior to keep all field lengths in sync
- Add sanity checks in filters
- Bump minimum MRPT version to 2.15.4 (and remove now old dead code)
- Generator new param 'filterOutPointsAtZero', set to true in demo pipelines
- Generator: now has a param 'default_pointcloud_class' which defaults to 'CGenericPointsMap'
- Code clean up (remove now dead code; mrpt backwards compatibility)
- Merge pull request #52 from MOLAorg/icp-log-viewer-quality-filter icp-log-viewer: add --min-quality filter CLI flag
- Contributors: Jose Luis Blanco-Claraco
2.8.1 (2026-04-06)
- Merge pull request #51 from MOLAorg/fix/new-mrpt-api Update to build against mrpt >=2.15.13
- Update to build against mrpt >=2.15.13 (pointcloud field names as std::string instead of string_view)
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.10.0 |
| 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-05-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.10.0 (2026-05-02)
- CI: Update actions for new ROS rolling
- icp-log-viewer: better formatting of uncertainties
- demo sm2mm file: store as independent keyframes
- Merge pull request #60 from MOLAorg/feat/censi3d-covariance Feat: Censi3D covariance method
- feat: Add new covariance method (Censi, 3D version)
- demo sm2mm files: add Keyframe map variant
- Contributors: Jose Luis Blanco-Claraco
2.9.1 (2026-04-29)
-
Merge pull request #59 from MOLAorg/fix/cov2cov-covariance-whitening Fix cov2cov whitening and add residual-variance scaling in covariance()
-
Fix cov2cov whitening and add residual-variance scaling in covariance() The cov2cov branch in covariance.cpp whitened residuals with the full information matrix (cov_inv * e), so the assembled Hessian became J\^T * cov_inv\^2 * J instead of J\^T * cov_inv * J. Combined with hundreds of pairings this drove down to ~1e-20 and made the estimate unusable.
- Use the Cholesky factor L\^T (with L L\^T = cov_inv) to whiten the cov2cov residual, matching what optimal_tf_gauss_newton accumulates.
- Multiply the inverse-Hessian by chi\^2 / (m - 6), the standard a-posteriori unit-weight variance, to rescale the (otherwise optimistic) result by the empirical residual level.
-
Merge pull request #58 from MOLAorg/feat/icp-viewer-show-prior feat: icp-logs now store the prior SE(3) PDF
-
feat: icp-logs now store the prior SE(3) PDF
-
icp-log-viewer: safer against exceptions in gui thread
-
demo sm2mm files: ignore_accelerometer=true in all deskew stages by default (prevent noisy maps from low-quality IMUs)
-
Contributors: Jose Luis Blanco-Claraco
2.9.0 (2026-04-22)
- Merge pull request #57 from MOLAorg/feat/deskew-filter-ignore-acc FilterDeskew: add new option "ignore_accelerometer"
- Merge pull request #55 from MOLAorg/feat/mm-viewer-read-bin-files mm-viewer: can be also open .bin files with serialized CGenericPointsMap
- Merge pull request #54 from MOLAorg/feat/mm-apps-plugins mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Optimization in PointCloudToVoxelGridSingle
- Add <stdexcept> to all required files (don't depend on transitive includes)
- mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Merge branch 'generator-generic-cloud' into develop
- cloud rendering: Implement observing the autoBoundingBoxOutliersPercentile
- Merge pull request #53 from MOLAorg/generator-generic-cloud Generator: creates CGenericPointsMap by default; add sanity checks in most filters
- remove more old mrpt version guards
- New sanity check function: warn_on_field_padding_mismatch()
- FilterDeskew: guard against new MRPT behavior to keep all field lengths in sync
- Add sanity checks in filters
- Bump minimum MRPT version to 2.15.4 (and remove now old dead code)
- Generator new param 'filterOutPointsAtZero', set to true in demo pipelines
- Generator: now has a param 'default_pointcloud_class' which defaults to 'CGenericPointsMap'
- Code clean up (remove now dead code; mrpt backwards compatibility)
- Merge pull request #52 from MOLAorg/icp-log-viewer-quality-filter icp-log-viewer: add --min-quality filter CLI flag
- Contributors: Jose Luis Blanco-Claraco
2.8.1 (2026-04-06)
- Merge pull request #51 from MOLAorg/fix/new-mrpt-api Update to build against mrpt >=2.15.13
- Update to build against mrpt >=2.15.13 (pointcloud field names as std::string instead of string_view)
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.10.0 |
| 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-05-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.10.0 (2026-05-02)
- CI: Update actions for new ROS rolling
- icp-log-viewer: better formatting of uncertainties
- demo sm2mm file: store as independent keyframes
- Merge pull request #60 from MOLAorg/feat/censi3d-covariance Feat: Censi3D covariance method
- feat: Add new covariance method (Censi, 3D version)
- demo sm2mm files: add Keyframe map variant
- Contributors: Jose Luis Blanco-Claraco
2.9.1 (2026-04-29)
-
Merge pull request #59 from MOLAorg/fix/cov2cov-covariance-whitening Fix cov2cov whitening and add residual-variance scaling in covariance()
-
Fix cov2cov whitening and add residual-variance scaling in covariance() The cov2cov branch in covariance.cpp whitened residuals with the full information matrix (cov_inv * e), so the assembled Hessian became J\^T * cov_inv\^2 * J instead of J\^T * cov_inv * J. Combined with hundreds of pairings this drove down to ~1e-20 and made the estimate unusable.
- Use the Cholesky factor L\^T (with L L\^T = cov_inv) to whiten the cov2cov residual, matching what optimal_tf_gauss_newton accumulates.
- Multiply the inverse-Hessian by chi\^2 / (m - 6), the standard a-posteriori unit-weight variance, to rescale the (otherwise optimistic) result by the empirical residual level.
-
Merge pull request #58 from MOLAorg/feat/icp-viewer-show-prior feat: icp-logs now store the prior SE(3) PDF
-
feat: icp-logs now store the prior SE(3) PDF
-
icp-log-viewer: safer against exceptions in gui thread
-
demo sm2mm files: ignore_accelerometer=true in all deskew stages by default (prevent noisy maps from low-quality IMUs)
-
Contributors: Jose Luis Blanco-Claraco
2.9.0 (2026-04-22)
- Merge pull request #57 from MOLAorg/feat/deskew-filter-ignore-acc FilterDeskew: add new option "ignore_accelerometer"
- Merge pull request #55 from MOLAorg/feat/mm-viewer-read-bin-files mm-viewer: can be also open .bin files with serialized CGenericPointsMap
- Merge pull request #54 from MOLAorg/feat/mm-apps-plugins mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Optimization in PointCloudToVoxelGridSingle
- Add <stdexcept> to all required files (don't depend on transitive includes)
- mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Merge branch 'generator-generic-cloud' into develop
- cloud rendering: Implement observing the autoBoundingBoxOutliersPercentile
- Merge pull request #53 from MOLAorg/generator-generic-cloud Generator: creates CGenericPointsMap by default; add sanity checks in most filters
- remove more old mrpt version guards
- New sanity check function: warn_on_field_padding_mismatch()
- FilterDeskew: guard against new MRPT behavior to keep all field lengths in sync
- Add sanity checks in filters
- Bump minimum MRPT version to 2.15.4 (and remove now old dead code)
- Generator new param 'filterOutPointsAtZero', set to true in demo pipelines
- Generator: now has a param 'default_pointcloud_class' which defaults to 'CGenericPointsMap'
- Code clean up (remove now dead code; mrpt backwards compatibility)
- Merge pull request #52 from MOLAorg/icp-log-viewer-quality-filter icp-log-viewer: add --min-quality filter CLI flag
- Contributors: Jose Luis Blanco-Claraco
2.8.1 (2026-04-06)
- Merge pull request #51 from MOLAorg/fix/new-mrpt-api Update to build against mrpt >=2.15.13
- Update to build against mrpt >=2.15.13 (pointcloud field names as std::string instead of string_view)
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.10.0 |
| 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-05-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.10.0 (2026-05-02)
- CI: Update actions for new ROS rolling
- icp-log-viewer: better formatting of uncertainties
- demo sm2mm file: store as independent keyframes
- Merge pull request #60 from MOLAorg/feat/censi3d-covariance Feat: Censi3D covariance method
- feat: Add new covariance method (Censi, 3D version)
- demo sm2mm files: add Keyframe map variant
- Contributors: Jose Luis Blanco-Claraco
2.9.1 (2026-04-29)
-
Merge pull request #59 from MOLAorg/fix/cov2cov-covariance-whitening Fix cov2cov whitening and add residual-variance scaling in covariance()
-
Fix cov2cov whitening and add residual-variance scaling in covariance() The cov2cov branch in covariance.cpp whitened residuals with the full information matrix (cov_inv * e), so the assembled Hessian became J\^T * cov_inv\^2 * J instead of J\^T * cov_inv * J. Combined with hundreds of pairings this drove down to ~1e-20 and made the estimate unusable.
- Use the Cholesky factor L\^T (with L L\^T = cov_inv) to whiten the cov2cov residual, matching what optimal_tf_gauss_newton accumulates.
- Multiply the inverse-Hessian by chi\^2 / (m - 6), the standard a-posteriori unit-weight variance, to rescale the (otherwise optimistic) result by the empirical residual level.
-
Merge pull request #58 from MOLAorg/feat/icp-viewer-show-prior feat: icp-logs now store the prior SE(3) PDF
-
feat: icp-logs now store the prior SE(3) PDF
-
icp-log-viewer: safer against exceptions in gui thread
-
demo sm2mm files: ignore_accelerometer=true in all deskew stages by default (prevent noisy maps from low-quality IMUs)
-
Contributors: Jose Luis Blanco-Claraco
2.9.0 (2026-04-22)
- Merge pull request #57 from MOLAorg/feat/deskew-filter-ignore-acc FilterDeskew: add new option "ignore_accelerometer"
- Merge pull request #55 from MOLAorg/feat/mm-viewer-read-bin-files mm-viewer: can be also open .bin files with serialized CGenericPointsMap
- Merge pull request #54 from MOLAorg/feat/mm-apps-plugins mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Optimization in PointCloudToVoxelGridSingle
- Add <stdexcept> to all required files (don't depend on transitive includes)
- mm-info, mm2grid, mm2las, mm2ply, mm2txt now have a --load-plugins flag
- Merge branch 'generator-generic-cloud' into develop
- cloud rendering: Implement observing the autoBoundingBoxOutliersPercentile
- Merge pull request #53 from MOLAorg/generator-generic-cloud Generator: creates CGenericPointsMap by default; add sanity checks in most filters
- remove more old mrpt version guards
- New sanity check function: warn_on_field_padding_mismatch()
- FilterDeskew: guard against new MRPT behavior to keep all field lengths in sync
- Add sanity checks in filters
- Bump minimum MRPT version to 2.15.4 (and remove now old dead code)
- Generator new param 'filterOutPointsAtZero', set to true in demo pipelines
- Generator: now has a param 'default_pointcloud_class' which defaults to 'CGenericPointsMap'
- Code clean up (remove now dead code; mrpt backwards compatibility)
- Merge pull request #52 from MOLAorg/icp-log-viewer-quality-filter icp-log-viewer: add --min-quality filter CLI flag
- Contributors: Jose Luis Blanco-Claraco
2.8.1 (2026-04-06)
- Merge pull request #51 from MOLAorg/fix/new-mrpt-api Update to build against mrpt >=2.15.13
- Update to build against mrpt >=2.15.13 (pointcloud field names as std::string instead of string_view)
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 |