Repo symbol

small_gicp repository

python multi-threading cpp registration pcl icp pointcloud open3d scan-matching point-cloud-regstration
Repo symbol

small_gicp repository

python multi-threading cpp registration pcl icp pointcloud open3d scan-matching point-cloud-regstration
Repo symbol

small_gicp repository

python multi-threading cpp registration pcl icp pointcloud open3d scan-matching point-cloud-regstration
Repo symbol

small_gicp repository

python multi-threading cpp registration pcl icp pointcloud open3d scan-matching point-cloud-regstration
Repo symbol

small_gicp repository

python multi-threading cpp registration pcl icp pointcloud open3d scan-matching point-cloud-regstration small_gicp

Repository Summary

Description Efficient and parallel algorithms for point cloud registration [C++, Python]
Checkout URI https://github.com/koide3/small_gicp.git
VCS Type git
VCS Version master
Last Updated 2025-06-10
Dev Status UNKNOWN
Released UNRELEASED
Tags python multi-threading cpp registration pcl icp pointcloud open3d scan-matching point-cloud-regstration
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
small_gicp 1.0.0

README

small_gicp

small_gicp is a header-only C++ library providing efficient and parallelized algorithms for fine point cloud registration (ICP, Point-to-Plane ICP, GICP, VGICP, etc.). It is a refined and optimized version of its predecessor, fast_gicp, re-written from scratch with the following features.

  • Highly Optimized : The core registration algorithm implementation has been further optimized from fast_gicp, achieving up to 2x speed gain.
  • Fully parallerized : small_gicp offers parallel implementations of several preprocessing algorithms, making the entire registration process parallelized (e.g., Downsampling, KdTree construction, Normal/Covariance estimation). It supports OpenMP and Intel TBB as parallelism backends.
  • Minimum dependencies : The library requires only Eigen along with the bundled nanoflann and Sophus. Optionally, it supports a PCL registration interface for use as a drop-in replacement
  • Customizable : small_gicp allows the integration of any custom point cloud class into the registration algorithm via traits. Its template-based implementation enables customization of the registration process with original correspondence estimators and registration factors.
  • Python bindings : By being isolated from PCL, small_gicp’s Python bindings are more portable and can be used seamlessly with other libraries such as Open3D.

Note that GPU-based implementations are NOT included in this package.

If you find this package useful for your project, please consider leaving a comment here. It would help the author receive recognition in his organization and keep working on this project. Please also cite the corresponding software paper if you use this software in an academic work.

status Build(Linux) macos Build(Windows) Test codecov

Requirements

This library uses C++17 features. The PCL interface is not compatible with PCL older than 1.11 that uses boost::shared_ptr.

Dependencies

Installation

C++

small_gicp is a header-only library. You can just download and drop it in your project directory to use it.

If you need only basic point cloud registration functions, you can build and install the helper library as follows.

sudo apt-get install libeigen3-dev libomp-dev

cd small_gicp
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release && make -j
sudo make install

Python (Linux / Windows / MacOS)

Install from PyPI

pip install small_gicp

Install from source

cd small_gicp
pip install .

# [Optional (linux)] Install stubs for autocomplete (If you know a better way, let me know...)
pip install pybind11-stubgen
cd ~/.local/lib/python3.10/site-packages
pybind11-stubgen -o . --ignore-invalid=all small_gicp

Documentation

Usage (C++)

The following examples assume using namespace small_gicp is placed somewhere.

Using helper library (01_basic_registration.cpp)

The helper library (registration_helper.hpp) enables easily processing point clouds represented as std::vector<Eigen::Vector(3|4)(f|d)>.

Expand `small_gicp::align` takes two point clouds (`std::vectors` of `Eigen::Vector(3|4)(f|d)`) and returns a registration result (estimated transformation and some information on the optimization result). This is the easiest way to use small_gicp but causes an overhead for duplicated preprocessing. ```cpp #include <small_gicp/registration/registration_helper.hpp> std::vector<Eigen::Vector3d> target_points = ...; // Any of Eigen::Vector(3|4)(f|d) can be used std::vector<Eigen::Vector3d> source_points = ...; // RegistrationSetting setting; setting.num_threads = 4; // Number of threads to be used setting.downsampling_resolution = 0.25; // Downsampling resolution setting.max_correspondence_distance = 1.0; // Maximum correspondence distance between points (e.g., triming threshold) Eigen::Isometry3d init_T_target_source = Eigen::Isometry3d::Identity(); RegistrationResult result = align(target_points, source_points, init_T_target_source, setting); Eigen::Isometry3d T = result.T_target_source; // Estimated transformation size_t num_inliers = result.num_inliers; // Number of inlier source points Eigen::Matrix<double, 6, 6> H = result.H; // Final Hessian matrix (6x6) ``` There is also a way to perform preprocessing and registration separately. This enables saving time for preprocessing in case registration is performed several times for the same point cloud (e.g., typical odometry estimation based on scan-to-scan matching). File truncated at 100 lines [see the full file](https://github.com/koide3/small_gicp/tree/master/README.md)

CONTRIBUTING

Contributing

Thank you for your support of this package. Your contribution for improving the package is welcome as long as you follow the Code of Conduct.

Issues

Please open issues to report bugs and propose feature requests. When creating a new issue, please use a issue template and fill each item to better tell your situation to the maintainers.

Pull Requests

Please take a look at the Github official document GitHub for general recommendations to create a PR. In addition, please let your PR focus on a single topic (improvement or bugfix) and keep it as minimal as possible to reduce the review effort.

## Contributing Thank you for your support of this package. Your contribution for improving the package is welcome as long as you follow the [Code of Conduct](CODE_OF_CONDUCT.md). ## Issues Please open issues to report bugs and propose feature requests. When creating a new issue, please use a issue template and fill each item to better tell your situation to the maintainers. ## Pull Requests Please take a look at the Github official document [GitHub](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request) for general recommendations to create a PR. In addition, please let your PR focus on a single topic (improvement or bugfix) and keep it as minimal as possible to reduce the review effort.
Repo symbol

small_gicp repository

python multi-threading cpp registration pcl icp pointcloud open3d scan-matching point-cloud-regstration
Repo symbol

small_gicp repository

python multi-threading cpp registration pcl icp pointcloud open3d scan-matching point-cloud-regstration
Repo symbol

small_gicp repository

python multi-threading cpp registration pcl icp pointcloud open3d scan-matching point-cloud-regstration
Repo symbol

small_gicp repository

python multi-threading cpp registration pcl icp pointcloud open3d scan-matching point-cloud-regstration