libpointmatcher
Modular ICP library for 2D/3D point cloud registration and mapping
License
BSD-3-Clause
Overview
libpointmatcher is a modular C++ library implementing the Iterative Closest Point (ICP) algorithm for 2D and 3D point cloud registration. It provides a flexible pipeline architecture where each step (data filtering, matching, outlier rejection, error minimization) can be configured independently. Built for robotics applications including SLAM and 3D mapping, it supports various point cloud formats and integrates with ROS. The library is widely used in academic robotics research as a reference ICP implementation.
libpointmatcher is a modular C++ library that implements the Iterative Closest Point (ICP) algorithm for aligning 2D and 3D point clouds. Originally developed at ETH Zurich's Autonomous Systems Lab by Francois Pomerleau and Stephane Magnenat, it is now actively maintained by the Northern Robotics Laboratory (Norlab) at Laval University.
The library's key strength is its fully modular pipeline architecture. Each stage of the ICP process — input filtering, point matching, outlier rejection, and error minimization — is implemented as an interchangeable module. This design allows researchers to systematically test different algorithmic choices and configurations, making it a preferred tool for academic benchmarking and method development.
libpointmatcher is written in C++ for efficiency with Python bindings for rapid prototyping. It supports Docker-based deployment, integrates with ROS for real-time robotics applications, and is featured in multiple curated lists of essential robotics and LiDAR processing libraries.
Why it matters
libpointmatcher has become the standard open-source reference implementation for ICP-based point cloud registration in academic robotics. Its modular architecture allows researchers to swap individual ICP pipeline components — data filters, matchers, outlier filters, error minimizers — making it ideal for benchmarking and developing new registration approaches.
Problem it solves
Aligning point clouds from LiDAR or depth sensors is fundamental to robot mapping and localization, but ICP implementations are often monolithic and hard to customize. libpointmatcher provides a fully modular ICP pipeline where each stage can be independently configured or replaced, enabling systematic comparison of registration strategies and easy integration into larger SLAM systems.
Key takeaways
- Modular ICP pipeline with swappable data filters, matchers, outlier filters, and error minimizers
- Supports both 2D and 3D point cloud registration for mapping and localization
- Originally developed at ETH Zurich's Autonomous Systems Lab, now maintained by Norlab at Laval University
- Provides Python bindings alongside the core C++ library
- Available as Docker images for easy deployment and reproducible research
Who it is for
- Robotics researchers benchmarking or developing point cloud registration methods
- LiDAR-based SLAM developers needing a configurable ICP backend
- Autonomous vehicle engineers working on localization and mapping pipelines
- Graduate students studying 3D perception and scan matching
Limitations
- Focused specifically on ICP-based registration — does not include feature-based or learning-based matching
- Performance on very large point clouds may require careful tuning of data filters and subsampling
- Documentation is thorough but some tutorials reflect older API versions
- Depends on libnabo for nearest-neighbor search, adding a build dependency