{"id":13436406,"url":"https://github.com/norlab-ulaval/libpointmatcher","last_synced_at":"2025-05-12T09:55:07.089Z","repository":{"id":1321602,"uuid":"1266625","full_name":"norlab-ulaval/libpointmatcher","owner":"norlab-ulaval","description":"An Iterative Closest Point (ICP) library for 2D and 3D mapping in Robotics","archived":false,"fork":false,"pushed_at":"2025-05-10T22:58:14.000Z","size":22693,"stargazers_count":1709,"open_issues_count":91,"forks_count":552,"subscribers_count":82,"default_branch":"master","last_synced_at":"2025-05-10T23:26:07.857Z","etag":null,"topics":["libnabo","libpointmatcher","lidar","point-clouds","robotics","ros","ubuntu"],"latest_commit_sha":null,"homepage":"https://libpointmatcher.readthedocs.io/en/latest/","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/norlab-ulaval.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.rst","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2011-01-18T10:00:28.000Z","updated_at":"2025-05-09T06:28:06.000Z","dependencies_parsed_at":"2023-12-21T00:22:37.076Z","dependency_job_id":"efa139a2-7f23-456a-a3e0-5e770a878d80","html_url":"https://github.com/norlab-ulaval/libpointmatcher","commit_stats":{"total_commits":1290,"total_committers":74,"mean_commits":17.43243243243243,"dds":0.6937984496124031,"last_synced_commit":"e146a503c4f39160ce103bd4fba4f2ed404ef123"},"previous_names":["norlab-ulaval/libpointmatcher","ethz-asl/libpointmatcher"],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/norlab-ulaval%2Flibpointmatcher","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/norlab-ulaval%2Flibpointmatcher/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/norlab-ulaval%2Flibpointmatcher/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/norlab-ulaval%2Flibpointmatcher/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/norlab-ulaval","download_url":"https://codeload.github.com/norlab-ulaval/libpointmatcher/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253711921,"owners_count":21951660,"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":["libnabo","libpointmatcher","lidar","point-clouds","robotics","ros","ubuntu"],"created_at":"2024-07-31T03:00:47.798Z","updated_at":"2025-05-12T09:55:07.083Z","avatar_url":"https://github.com/norlab-ulaval.png","language":"C++","funding_links":[],"categories":["C++","3D视觉生成重建"],"sub_categories":["资源传输下载"],"readme":"\u003cdiv align=\"center\"\u003e\n\n![banner](doc/images/banner_light.jpeg)\n\n[//]: # ( ==== Description ====================================================================== )\n**_libpointmatcher_ is a modular library implementing the Iterative Closest Point (ICP) algorithm\u003cbr\u003e\nfor aligning point clouds. It has applications in robotics and computer vision.**\n\u003cbr\u003e\nThe library is written in C++ for efficiency with [bindings in Python](doc/index.md#python-).\n\u003cbr\u003e\n\u003cbr\u003e\n\n[//]: # (====Badges===============================================================================)\n\n\u003cimg alt=\"GitHub Repo stars\" src=\"https://img.shields.io/github/stars/norlab-ulaval/libpointmatcher\"\u003e\n\u003cimg alt=\"GitHub forks\" src=\"https://img.shields.io/github/forks/norlab-ulaval/libpointmatcher\"\u003e\n\u003cimg alt=\"GitHub License\" src=\"https://img.shields.io/github/license/norlab-ulaval/libpointmatcher\"\u003e\n\u003cimg alt=\"GitHub release (with filter)\" src=\"https://img.shields.io/github/v/release/norlab-ulaval/libpointmatcher\"\u003e\n\u003ca href=\"http://132.203.26.125:8111\"\u003e\u003cimg src=\"https://img.shields.io/static/v1?label=JetBrains TeamCity\u0026message=CI/CD\u0026color=green?style=plastic\u0026logo=teamcity\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://hub.docker.com/repository/docker/norlabulaval/libpointmatcher/\"\u003e \u003cimg alt=\"Docker Image Version (latest semver)\" src=\"https://img.shields.io/docker/v/norlabulaval/libpointmatcher?logo=docker\u0026label=libpointmatcher\"\u003e \u003c/a\u003e\n\n\u003cbr\u003e\n\u003cbr\u003e\n\n[//]: # (====Awesome badges=======================================================================)\n\n[![Mentioned in Awesome LIDAR](https://awesome.re/mentioned-badge.svg)](https://github.com/szenergy/awesome-lidar#basic-matching-algorithms)\n\u0026nbsp; \u0026nbsp; \u0026nbsp;\n[![Mentioned in Awesome Robotics Libraries](https://awesome.re/mentioned-badge.svg)](http://jslee02.github.io/awesome-robotics-libraries/#3d-mapping)\n\u0026nbsp; \u0026nbsp; \u0026nbsp;\n[![Mentioned in Awesome Robotics](https://awesome.re/mentioned-badge.svg)](https://github.com/ahundt/awesome-robotics#point-clouds)\n\u003cbr\u003e\n\u003csup\u003e\n\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp;\n\u003ca href=\"https://github.com/szenergy/awesome-lidar#basic-matching-algorithms\"\u003eLIDAR\u003c/a\u003e\n\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp;\n\u003ca href=\"https://github.com/ahundt/awesome-robotics#point-clouds\"\u003eRobotics\u003c/a\u003e\n\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp;\n\u003ca href=\"http://jslee02.github.io/awesome-robotics-libraries/#3d-mapping\"\u003eRobotics Libraries\u003c/a\u003e\n\u003c/sup\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\u003chr style=\"color:lightgray;background-color:lightgray\"\u003e\n\u003c/div\u003e\n\n\n[//]: # (====Supported OS and aarch===============================================================)\n\n### Supported OS And Architecture\n_libpointmatcher_ is tested on our build system under the following:\n- OS: Ubuntu bionic (18.04), focal (20.04) and jammy (22.04)\n- Computer architecture: x86 and arm64/v8\n\nNote:\n- _libpointmatcher_ reportedly works on Mac OS X (latest) and Windows (latest)\n\n---\n\n[//]: # (====Release note=========================================================================)\n\n### ★ Version `\u003e= 1.4.0` Release Note\nThis release of _libpointmatcher_ introduces the integration of [norlab-build-system (NBS)](https://github.com/norlab-ulaval/norlab-build-system) as a _git submodule_ for codebase development and testing.\n\nExecute the following to clone the repository with its submodule:\n```shell\ngit clone --recurse-submodules https://github.com/norlab-ulaval/libpointmatcher.git\n```\nIf _libpointmatcher_ was previously cloned, execute the following to fetch its new submodule\n```shell\ngit submodule update --remote --recursive --init\n```\n\n### ★ Contributing Instructions\nSee [contributing_instructions.md](doc/contributing/contributing_instructions.md)\nfor instructions related to bug reporting, code contribution and for setting up the `libpointmatcher-build-system`\non your workstation to speed up your local development workflow.\n\n\n[//]: # (====Body=================================================================================)\n# Documentation and Tutorials\n\n**Quick link for the tutorial pages: [Tutorials](http://libpointmatcher.readthedocs.org/).\n\nThose tutorials are written using Markdown syntax and stored in the project's `/doc` folder.  Their scope ranges from introductory material on performing point cloud registration to instructions for the more experienced developer on how to extend the library's codebase.\n\nLibpointmatcher's source code is fully documented based on doxygen to provide an easy API to developers. An example of this API can be found [here](https://norlab.ulaval.ca/libpointmatcher-doc/), but it is suggested to use the one build for your version in `doc/html`.\n\nlibpointmatcher was orginaly developed by [François Pomerleau](mailto:f.pomerleau@gmail.com) and [Stéphane Magnenat](http://stephane.magnenat.net) as part of our work at [ASL-ETH](http://www.asl.ethz.ch).\nIt is now maintained by the Northern Robotics Laboratory ([Norlab](https://norlab.ulaval.ca/)), led by François Pomerleau.\n\nYou can read the latest changes in the [release notes](doc/ReleaseNotes.md).\n\n\n\n\n# Quick Start\n\n## Docker images\nTo install docker related dependencies on ubuntu, execute the following\n```shell\ncd libpointmatcher/build_system/lpm_utility_script\n\n# Execute docker tools install script i.e. docker daemon, docker compose, docker buildx\nbash lpm_install_docker_tools.bash\n```\n\nRun the following commands to pull and run libpointmatcher in a docker container\n\n```shell\ndocker pull norlabulaval/libpointmatcher:latest-ubuntu-focal\n\ndocker run -it --rm norlabulaval/libpointmatcher:latest-ubuntu-focal\n```\n\nSee\navailable [libpointmatcher image tags](https://hub.docker.com/repository/docker/norlabulaval/libpointmatcher/)\non dockerhub.\n\n\n## Compilation and Installation\n### Installer scripts\nFor beginner users unfamiliar with compiling and installing a library in Linux, you can use the provided installer script for ubuntu:\n```shell\ncd libpointmatcher\nbash libpointmatcher_dependencies_installer.bash\nbash libpointmatcher_installer.bash --build-system-CI-install\n```\nThe first script installs all Libpointmatcher dependencies. The second script installs Libpointmatcher.\nThe `--build-system-CI-install` flag tell the installer to colocate the build and the repository.\nIf you want to install to a different location, instead use the `--install-path \u003c/dir/abs/path/\u003e` flag. \nUse the `--help` flag for more options.\n\n### Custom install\nAlthough we suggest to use the [tutorials](doc/Compilation.md), here is a quick version of it:\n\nThe library has a light dependency list:\n\n * [Eigen] version 3, a modern C++ matrix and linear-algebra library,\n * [boost] version 1.48 and up, portable C++ source libraries,\n * [libnabo] version 1.0.7, a fast K Nearest Neighbour library for low-dimensional spaces,\n\nand was compiled on:\n  * Ubuntu ([see how](/doc/CompilationUbuntu.md))\n  * Mac OS X ([see how](/doc/CompilationMac.md))\n  * Windows ([see how](/doc/CompilationWindows.md) - partially supported)\n\nIf you are comfortable with Linux and CMake and have already installed the prerequisites above, the following commands should install libpointmatcher on your system.\n\n```bash\nmkdir build \u0026\u0026 cd build\ncmake ..\nmake\nsudo make install\n```\n\n\n## Testing\n\nLibpointmatcher ships with a version of the Google testing framework [GTest](https://github.com/google/googletest).  Unit tests are located in the `utest/` directory and are compiled with libpointmatcher (CMake variable `BUILD_TESTS` must be set to `TRUE` before compiling).  To run the tests and make sure that your compiled version is working correctly, run the test executable in your build directory:\n\n```bash\ncd build\nutest/utest --path ../examples/data/\n```\n\n## Linking to external projects.\n\nWe mainly develop for __cmake projects__ and we provide example files under [`examples/demo_cmake/`](https://github.com/norlab-ulaval/libpointmatcher/tree/master/examples/demo_cmake) to help you in your own project. We also provide a __QT Creator__ example in [`examples/demo_QT/`](https://github.com/norlab-ulaval/libpointmatcher/tree/master/examples/demo_Qt), which manually lists all the dependencies in the file [`demo.pro`](https://github.com/norlab-ulaval/libpointmatcher/blob/master/examples/demo_Qt/demo.pro). You would need to ajust those paths to point at the appropriate locations on your system. For a more detailed procedure, check the [Linking Projects to libpointmatcher](doc/LinkingProjects.md) section.\n\n## File formats\n\nThe library support different file formats for importing or exporting data:\n\n* csv (Comma Separated Values)\n* vtk (Visualization Toolkit Files)\n* ply (Polygon File Format)\n* pcd (Point Cloud Library Format)\n\nThose functionnalities are available without increasing the list of dependencies at the expense of\nlimited functionality support. For more details, see the\ntutorial [Importing and Exporting Point Clouds](doc/ImportExport.md). Example executables using\nthose file formats from the command line can be found in the `/examples` directory and are\ndescribed [here](doc/ICPIntro.md) in more detail.\n\n\n---\n\n# Citing\n\nIf you use libpointmatcher in an academic context, please cite the following publication:\n\n\t@article{Pomerleau12comp,\n\t\tauthor = {Pomerleau, Fran{\\c c}ois and Colas, Francis and Siegwart, Roland and Magnenat, St{\\'e}phane},\n\t\ttitle = {{Comparing ICP Variants on Real-World Data Sets}},\n\t\tjournal = {Autonomous Robots},\n\t\tyear = {2013},\n\t\tvolume = {34},\n\t\tnumber = {3},\n\t\tpages = {133--148},\n\t\tmonth = feb\n\t}\n\nand/or\n\n\t@INPROCEEDINGS{pomerleau11tracking,\n\t\tauthor = {Fran{\\c c}ois Pomerleau and St{\\'e}phane Magnenat and Francis Colas and Ming Liu and Roland Siegwart},\n\t\ttitle = {Tracking a Depth Camera: Parameter Exploration for Fast ICP},\n\t\tbooktitle = {Proc. of the IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)},\n\t\tpublisher = {IEEE Press},\n\t\tpages = {3824--3829},\n\t\tyear = {2011}\n\t}\n\n# Extra Reading\n\nIf you are interested in learning more about different registration algorithms, we recently put together a literature review surveying multiple solutions. The review is organized in the same way as the library and many examples are provided based on real deployments.\n\nF. Pomerleau, F. Colas and R. Siegwart (2015), \"_A Review of Point Cloud Registration Algorithms for Mobile Robotics_\", __Foundations and Trends® in Robotics__: Vol. 4: No. 1, pp 1-104.  https://doi.org/10.1561/2300000035\n\nIf you don't have access to the journal, you can download it from [here](https://www.researchgate.net/publication/277558596_A_Review_of_Point_Cloud_Registration_Algorithms_for_Mobile_Robotics).\n\n# More Point Clouds\n\nWe also produced those freely available data sets to test different registration solutions:\n\n[_Challenging data sets for point cloud registration algorithms_](http://projects.asl.ethz.ch/datasets/doku.php?id=laserregistration:laserregistration)\n\n![alt tag](http://projects.asl.ethz.ch/datasets/lib/exe/fetch.php?cache=\u0026media=laserregistration:asldataset_weblarge.jpg)\n\nYou can download the files in CSV or VTK formats, which are directly supported by the library I/O module.\n\n\n# Projects and Partners\n\nIf you are using libpointmatcher in your project and you would like to have it listed here, please contact [François Pomerleau](mailto:f.pomerleau@gmail.com).\n\n * European Project [NIFTi](http://www.nifti.eu/) (FP7 ICT-247870): Search and rescue project in dynamic environments. Results: [video of multi-floor reconstruction](http://www.youtube.com/watch?v=lP5Mj-TGaiw) and [video of railyard reconstruction](http://www.youtube.com/watch?v=ygIvzWVfPYk). All results with real-time computation.\n * NASA Ames [Stereo Pipeline](https://ti.arc.nasa.gov/tech/asr/groups/intelligent-robotics/ngt/stereo/): Planetary reconstruction from satellite observations. Results: used for Mars, Moon, and Earth point clouds.\n * Armasuisse S+T UGV research program [ARTOR](http://www.artor.ethz.ch/): Development of techniques for reliable autonomous navigation of a wheeled robot in rough, outdoor terrain. Results: [video of urban and dynamic 3D reconstruction](http://www.youtube.com/watch?v=UCCAUf64tD0) and [video of open space 3D reconstruction](http://www.youtube.com/watch?v=M5Y99o7um88) with real-time computation.\n * Swiss National Science Foundation - [Limnobotics](http://www.limnobotics.ch/): Robotic solution for toxic algae monitoring in lacs. Result: [video of 3D shore reconstruction](http://www.youtube.com/watch?v=g8l-Xq4qYeE) with real-time computation.\n * [CGAL](https://www.cgal.org/) includes our library for their registration pipeline.\n * [Norlab](https://norlab.ulaval.ca/) is maintaining and using the library for its research on autonomous navigation in harsh environments.\n * [ANYbotics AG](https://www.anybotics.com) is investigating autonomous navigation algorithms using this library.\n * [Point Laz Mining LiDAR Expert](https://www.pointlaz.com/) is scanning mine shafts to ensure infrastructure safety.\n * [Point Laz Mining LiDAR Expert](https://www.pointlaz.com/) is scanning mine shafts to ensure infrastructure safety.\n * [DREAM lab](https://dream.georgiatech-metz.fr/research/woodseer/) use libpointmatcher to reconstruct wood logs in 3D.\nFor a larger list of work realized with libpointmatcher, please see the page [Applications And Publications](/doc/ApplicationsAndPub.md).\n\n\n# License\n\nlibpointmatcher is released under a permissive BSD license. Enjoy!\n\n[Ubuntu]: http://www.ubuntu.com\n[CMake]: http://www.cmake.org\n[CMake documentation]: https://cmake.org/cmake/help/v3.10/\n[git]: http://git-scm.com\n[Eigen]: http://eigen.tuxfamily.org\n[libnabo]: https://github.com/norlab-ulaval/libnabo\n[ROS]: http://www.ros.org/\n[Paraview]: http://www.paraview.org/\n[yaml-cpp]: https://github.com/jbeder/yaml-cpp\n[Doxygen]: https://www.doxygen.nl/index.html\n[boost]: http://www.boost.org/\n\n\n---\n\n\n![alt tag](doc/images/banner_dark.jpeg)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnorlab-ulaval%2Flibpointmatcher","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnorlab-ulaval%2Flibpointmatcher","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnorlab-ulaval%2Flibpointmatcher/lists"}