{"id":14235022,"url":"https://github.com/koide3/fast_gicp","last_synced_at":"2025-05-14T12:07:49.896Z","repository":{"id":38028587,"uuid":"238426550","full_name":"koide3/fast_gicp","owner":"koide3","description":"A collection of GICP-based fast point cloud registration algorithms","archived":false,"fork":false,"pushed_at":"2025-02-21T05:31:38.000Z","size":6710,"stargazers_count":1404,"open_issues_count":70,"forks_count":325,"subscribers_count":33,"default_branch":"master","last_synced_at":"2025-04-04T06:00:29.329Z","etag":null,"topics":["cpp","cuda","gicp","gpu","icp","multithreading","pcl","point-cloud","python","registration","scan-matching","vgicp"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/koide3.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-02-05T10:43:57.000Z","updated_at":"2025-04-03T06:58:02.000Z","dependencies_parsed_at":"2023-02-15T05:15:51.683Z","dependency_job_id":"0aebe586-48f8-45a2-bcc9-304af242073f","html_url":"https://github.com/koide3/fast_gicp","commit_stats":{"total_commits":133,"total_committers":16,"mean_commits":8.3125,"dds":0.368421052631579,"last_synced_commit":"df839a89a3cc04b8e94cbfecf46330a7c01fbea4"},"previous_names":["koide3/fast_gicp"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koide3%2Ffast_gicp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koide3%2Ffast_gicp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koide3%2Ffast_gicp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koide3%2Ffast_gicp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/koide3","download_url":"https://codeload.github.com/koide3/fast_gicp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248384519,"owners_count":21094731,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","cuda","gicp","gpu","icp","multithreading","pcl","point-cloud","python","registration","scan-matching","vgicp"],"created_at":"2024-08-20T21:00:54.606Z","updated_at":"2025-04-11T11:35:02.458Z","avatar_url":"https://github.com/koide3.png","language":"C++","funding_links":[],"categories":["C++"],"sub_categories":[],"readme":"\n# Note: New faster library is released\n\nWe released [small_gicp](https://github.com/koide3/small_gicp) that is twice as fast as fast_gicp and with minimum dependencies and clean interfaces.\n\n# fast_gicp\n\nThis package is a collection of GICP-based fast point cloud registration algorithms. It constains a multi-threaded GICP as well as multi-thread and GPU implementations of our voxelized GICP (VGICP) algorithm. All the implemented algorithms have the PCL registration interface so that they can be used as an inplace replacement for GICP in PCL.\n\n- FastGICP: multi-threaded GICP algorithm (**\\~40FPS**)\n- FastGICPSingleThread: GICP algorithm optimized for single-threading (**\\~15FPS**)\n- FastVGICP: multi-threaded and voxelized GICP algorithm (**\\~70FPS**)\n- FastVGICPCuda: CUDA-accelerated voxelized GICP algorithm (**\\~120FPS**)\n- NDTCuda: CUDA-accelerated D2D NDT algorithm (**\\~500FPS**)\n![proctime](data/proctime.png)\n\n[![Build](https://github.com/SMRT-AIST/fast_gicp/actions/workflows/build.yml/badge.svg)](https://github.com/SMRT-AIST/fast_gicp/actions/workflows/build.yml) on melodic \u0026 noetic\n\n## Installation\n\n### Dependencies\n- PCL\n- Eigen\n- OpenMP\n- CUDA (optional)\n- [Sophus](https://github.com/strasdat/Sophus)\n- [nvbio](https://github.com/NVlabs/nvbio)\n\nWe have tested this package on Ubuntu 18.04/20.04 and CUDA 11.1.\n\nOn macOS when using `brew`, you might have to set up your depenencies like this\n\n```\ncmake .. \"-DCMAKE_PREFIX_PATH=$(brew --prefix libomp)[;other-custom-prefixes]\" -DQt5_DIR=$(brew --prefix qt@5)lib/cmake/Qt5\n```\n\n### CUDA\n\nTo enable the CUDA-powered implementations, set ```BUILD_VGICP_CUDA``` cmake option to ```ON```.\n\n### ROS\n```bash\ncd ~/catkin_ws/src\ngit clone https://github.com/SMRT-AIST/fast_gicp --recursive\ncd .. \u0026\u0026 catkin_make -DCMAKE_BUILD_TYPE=Release\n# enable cuda-based implementations\n# cd .. \u0026\u0026 catkin_make -DCMAKE_BUILD_TYPE=Release -DBUILD_VGICP_CUDA=ON\n```\n\n### Non-ROS\n```bash\ngit clone https://github.com/SMRT-AIST/fast_gicp --recursive\nmkdir fast_gicp/build \u0026\u0026 cd fast_gicp/build\ncmake .. -DCMAKE_BUILD_TYPE=Release\n# enable cuda-based implementations\n# cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_VGICP_CUDA=ON\nmake -j8\n```\n\n### Python bindings\n```bash\ncd fast_gicp\npython3 setup.py install --user\n```\nNote: If you are on a catkin-enabled environment and the installation doesn't work well, comment out ```find_package(catkin)``` in CMakeLists.txt and run the above installation command again.\n\n\n```python\nimport pygicp\n\ntarget = # Nx3 numpy array\nsource = # Mx3 numpy array\n\n# 1. function interface\nmatrix = pygicp.align_points(target, source)\n\n# optional arguments\n# initial_guess               : Initial guess of the relative pose (4x4 matrix)\n# method                      : GICP, VGICP, VGICP_CUDA, or NDT_CUDA\n# downsample_resolution       : Downsampling resolution (used only if positive)\n# k_correspondences           : Number of points used for covariance estimation\n# max_correspondence_distance : Maximum distance for corresponding point search\n# voxel_resolution            : Resolution of voxel-based algorithms\n# neighbor_search_method      : DIRECT1, DIRECT7, DIRECT27, or DIRECT_RADIUS\n# neighbor_search_radius      : Neighbor voxel search radius (for GPU-based methods)\n# num_threads                 : Number of threads\n\n\n# 2. class interface\n# you may want to downsample the input clouds before registration\ntarget = pygicp.downsample(target, 0.25)\nsource = pygicp.downsample(source, 0.25)\n\n# pygicp.FastGICP has more or less the same interfaces as the C++ version\ngicp = pygicp.FastGICP()\ngicp.set_input_target(target)\ngicp.set_input_source(source)\nmatrix = gicp.align()\n\n# optional\ngicp.set_num_threads(4)\ngicp.set_max_correspondence_distance(1.0)\ngicp.get_final_transformation()\ngicp.get_final_hessian()\n```\n\n## Benchmark\nCPU:Core i9-9900K GPU:GeForce RTX2080Ti\n\n```bash\nroscd fast_gicp/data\nrosrun fast_gicp gicp_align 251370668.pcd 251371071.pcd\n```\n\n```\ntarget:17249[pts] source:17518[pts]\n--- pcl_gicp ---\nsingle:127.508[msec] 100times:12549.4[msec] fitness_score:0.204892\n--- pcl_ndt ---\nsingle:53.5904[msec] 100times:5467.16[msec] fitness_score:0.229616\n--- fgicp_st ---\nsingle:111.324[msec] 100times:10662.7[msec] 100times_reuse:6794.59[msec] fitness_score:0.204379\n--- fgicp_mt ---\nsingle:20.1602[msec] 100times:1585[msec] 100times_reuse:1017.74[msec] fitness_score:0.204412\n--- vgicp_st ---\nsingle:112.001[msec] 100times:7959.9[msec] 100times_reuse:4408.22[msec] fitness_score:0.204067\n--- vgicp_mt ---\nsingle:18.1106[msec] 100times:1381[msec] 100times_reuse:806.53[msec] fitness_score:0.204067\n--- vgicp_cuda (parallel_kdtree) ---\nsingle:15.9587[msec] 100times:1451.85[msec] 100times_reuse:695.48[msec] fitness_score:0.204061\n--- vgicp_cuda (gpu_bruteforce) ---\nsingle:53.9113[msec] 100times:3463.5[msec] 100times_reuse:1703.41[msec] fitness_score:0.204049\n--- vgicp_cuda (gpu_rbf_kernel) ---\nsingle:5.91508[msec] 100times:590.725[msec] 100times_reuse:226.787[msec] fitness_score:0.20557\n```\n\nSee [src/align.cpp](https://github.com/SMRT-AIST/fast_gicp/blob/master/src/align.cpp) for the detailed usage.\n\n## Test on KITTI\n\n### C++\n\n```bash\n# Perform frame-by-frame registration\nrosrun fast_gicp gicp_kitti /your/kitti/path/sequences/00/velodyne\n```\n\n![kitti00](https://user-images.githubusercontent.com/31344317/86207074-b98ac280-bba8-11ea-9687-e65f03aaf25b.png)\n\n### Python\n\n```bash\ncd fast_gicp/src\npython3 kitti.py /your/kitti/path/sequences/00/velodyne\n```\n\n## Note\n\nIn some environments, setting a fewer number of threads rather than the (default) maximum number of threads may result in faster processing (see https://github.com/SMRT-AIST/fast_gicp/issues/145#issuecomment-1890885373).\n\n## Related packages\n- [ndt_omp](https://github.com/koide3/ndt_omp)\n- [fast_gicp](https://github.com/SMRT-AIST/fast_gicp)\n\n\n## Papers\n- Kenji Koide, Masashi Yokozuka, Shuji Oishi, and Atsuhiko Banno, Voxelized GICP for fast and accurate 3D point cloud registration, ICRA2021 [[link]](https://easychair.org/publications/preprint/ftvV)\n\n## Contact\nKenji Koide, k.koide@aist.go.jp\n\nHuman-Centered Mobility Research Center, National Institute of Advanced Industrial Science and Technology, Japan  [\\[URL\\]](https://unit.aist.go.jp/rirc/en/team/smart_mobility.html)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkoide3%2Ffast_gicp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkoide3%2Ffast_gicp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkoide3%2Ffast_gicp/lists"}