+
![banner](doc/images/banner_light.jpeg)
+[//]: # (====Awesome badges=======================================================================)
+
+[![Mentioned in Awesome LIDAR](https://awesome.re/mentioned-badge.svg)](https://github.com/szenergy/awesome-lidar#basic-matching-algorithms)
+
+[![Mentioned in Awesome Robotics Libraries](https://awesome.re/mentioned-badge.svg)](http://jslee02.github.io/awesome-robotics-libraries/#3d-mapping)
+
+[![Mentioned in Awesome Robotics](https://awesome.re/mentioned-badge.svg)](https://github.com/ahundt/awesome-robotics#point-clouds)
+
+
+
+LIDAR
+
+Robotics
+
+Robotics Libraries
+
+
+
+[//]: # (====GitHub badges========================================================================)
+
+
+
+
+
+
+
+
+
+
+
+[//]: # (====Supported OS and aarch===============================================================)
+
+`libpointmatcher` is tested on our build system under the following architecture and OS:
+- x86 and arm64/v8
+- Ubuntu bionic (18.04) and focal (20.04)
+
+Note:
+- support for Ubuntu jammy (22.04) comming soon
+- `libpointmatcher` reportedly works on MacOs OsX (latest) and Windows (latest)
+
---
+[//]: # (====Release note=========================================================================)
+
+### ★ Version `1.4.0` release note (important)
+This 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.
+
+Execute the following to clone the repository with its submodule:
+```shell
+git clone --recurse-submodules https://github.com/norlab-ulaval/libpointmatcher.git
+```
+If _libpointmatcher_ was previously cloned, execute the following to fetch its new submodule
+```shell
+git submodule update --remote --recursive --init
+```
+[//]: # (====Body=================================================================================)
# Documentation and Tutorials
libpointmatcher is a modular library implementing the Iterative Closest Point (ICP) algorithm for aligning point clouds. It has applications in robotics and computer vision.
-The library is written in C++ for effeciency with [bindings in Python](https://github.com/ethz-asl/libpointmatcher/blob/master/doc/index.md#python-).
-
-**Quick link for the tutorial pages: [Tutorials](doc/index.md) (also available on [readthedocs.org](http://libpointmatcher.readthedocs.org/)).**
+The library is written in C++ for effeciency with [bindings in Python](https://github.com/norlab-ulaval/libpointmatcher/blob/master/doc/index.md#python-).
+
+**Quick link for the tutorial pages: [Tutorials](doc/index.md)** (also available on [readthedocs.org](http://libpointmatcher.readthedocs.org/) but might not be up-to-date).
Those 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.
Libpointmatcher'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`.
-libpointmatcher is being 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).
+libpointmatcher 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).
+It is now maintained by the Northern Robotics Laboratory ([Norlab](https://norlab.ulaval.ca/)), led by François Pomerleau.
You can read the latest changes in the [release notes](doc/ReleaseNotes.md).
-# Quick Start
+
+
+# Quick Start
Although we suggest to use the [tutorials](doc/index.md), here is a quick version of it:
The library has a light dependency list:
@@ -37,7 +95,8 @@ and was compiled on:
### Compilation & Installation
-For beginner users who are not familiar with compiling and installing a library in Linux, go [here](doc/CompilationUbuntu.md) for detailed instructions on how to compile libpointmatcher from the source code. If you are comfortable with Linux and CMake and have already installed the prerequisites above, the following commands should install libpointmatcher on your system.
+For beginner users unfamiliar with compiling and installing a library in Linux, go [here](doc/CompilationUbuntu.md) for detailed instructions on compiling libpointmatcher from the source code.
+If you are comfortable with Linux and CMake and have already installed the prerequisites above, the following commands should install libpointmatcher on your system.
```bash
mkdir build && cd build
@@ -57,21 +116,120 @@ utest/utest --path ../examples/data/
### Linking to external projects.
-We mainly develop for __cmake projects__ and we provide example files under [`examples/demo_cmake/`](https://github.com/ethz-asl/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/ethz-asl/libpointmatcher/tree/master/examples/demo_Qt), which manually list all the dependencies in the file [`demo.pro`](https://github.com/ethz-asl/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 detailled procedure, check the [Linking Projects to libpointmatcher](doc/LinkingProjects.md) section.
+We 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.
+## File formats
-### Bug reporting
+The library support different file formats for importing or exporting data:
-Please use our [github's issue tracker](http://github.com/ethz-asl/libpointmatcher/issues) to report bugs. If you are running the library on Ubuntu, copy-paste the output of the script [listVersionsUbuntu.sh](https://github.com/ethz-asl/libpointmatcher/blob/master/utest/listVersionsUbuntu.sh) to simplify the search of an answer.
+* csv (Comma Separated Values)
+* vtk (Visualization Toolkit Files)
+* ply (Polygon File Format)
+* pcd (Point Cloud Library Format)
-## File formats
-The library support different file formats for importing or exporting data:
- * csv (Comma Separated Values)
- * vtk (Visualization Toolkit Files)
- * ply (Polygon File Format)
- * pcd (Point Cloud Library Format)
+Those functionnalities are available without increasing the list of dependencies at the expense of
+limited functionality support. For more details, see the
+tutorial [Importing and Exporting Point Clouds](doc/ImportExport.md). Example executables using
+those file formats from the command line can be found in the `/examples` directory and are
+described [here](doc/ICPIntro.md) in more detail.
+
+---
+
+# Contributing
-Those functionnalities are available without increasing the list of dependencies at the expense of a limited functionality support. For more details, see the tutorial [Importing and Exporting Point Clouds](doc/ImportExport.md). Example executables using those file formats from the command line can be found in the `/examples` directory and are described [here](doc/ICPIntro.md) in more details.
+## Bug reporting
+
+Please use our [github's issue tracker](http://github.com/ethz-asl/libpointmatcher/issues) to report bugs. If you are running the library on Ubuntu, copy-paste the output of the script [listVersionsUbuntu.sh](https://github.com/norlab-ulaval/libpointmatcher/blob/master/utest/listVersionsUbuntu.sh) to simplify the search of an answer.
+
+## Codebase development
+
+Libpointmatcher codebase now integrate [norlab-build-system (NBS)](https://github.com/norlab-ulaval/norlab-build-system) and [norlab-shell-script-tools (N2ST)](https://github.com/norlab-ulaval/norlab-shell-script-tools).
+`NBS` is a build-infrastructure-agnostic build system custom-made to meet our needs in robotic software engineering at NorLab and `N2ST` is a library of shell script functions as well as a shell testing tools leveraging _**bats-core**_ and _**docker**_ .
+`N2ST` purpose is to speed up shell script development and improve reliability.
+
+`NBS` is deployed on our [TeamCity](https://www.jetbrains.com/teamcity/) continuous integration/deployment server and oversees protected branches of the [libpointmatcher](https://github.com/norlab-ulaval/libpointmatcher) GitHub repository:
+
+- The `develop` branch can only be merged through a pull-request from any `