What is NICP?
The point cloud registration problem consists in finding the transformation that better align the common parts of two point clouds. This is a fundamental task in many areas like robotics, and computer graphics. Point cloud registration is usually used in 2D or 3D surfaces reconstruction, robot localization, path planning, simultaneous localization and mapping (SLAM) and in many others applications.
How does it work?
NICP is a variant of the well know ICP (Iterative Closest Point) algorithm. ICP is an iterative algorithm that refines an initial estimate of the relative transformation between two point clouds. At each step the algorithm tries to match pairs of points between the two clouds starting from a transform estimate. Minimizing the Euclidean distance between corresponding points leads to a better transformation that will be used as initial guess in the next iteration of the algorithm.
Differently from ICP, NICP considers each point together with the local features of the surface (normal and curvature) and it takes advantage of the 3D structure around the points for the determination of the data association between two point clouds. Moreover, it is based on a least squares formulation of the alignment problem, that minimizes an augmented error metric depending not only on the point coordinates but also on these surface characteristics.
What can this C++ library do?
With NICP C++ library you have in your hands a complete tracking system that is fast and more accurate/robust than other current methods. Given a cheap depth camera as the Microsoft Kinect or the Asus Xtion, you will be able to do things like reconstruct surfaces, map an environment, robot localization, odometry reconstruction and much more. In addition to this, NICP library can work also with 3D laser scans by means of spherical depth images, these particular images allows to store point clouds having a field of view even of 360°.
Moreover, being NICP C++ library open source, you can easily modify and extend it to match your specific needs. The following video shows the tracking of a depth camera of one of the Kinect datasets from ETH  . Both true and estimated camera trajectories are shown respectively in green and red. The orange cloud represents the whole scene registered until that moment while the blue one is the last point cloud aligned.
How does NICP perform?
If the previous video did not satisfy you in terms of NICP performance evaluation, you can see a quantitative result downloading this compressed file that contains results of the evaluation of NICP over depth camera  and 3D laser  standard benchmarking datasets. Open the result resume file to see NICP’s performance against other state-of-the-art algorithms (GICP , NDT , DVO  and KINFU )! In the table that you will find, NICP and NICP+ indicates respectively the NICP base registration algorithm and the full NICP tracking system.
In addition to the previous results, you can also check the evaluation of the NICP tracking system using our novel merging precure by downloading this file.
 Jacopo Serafin, and Giorgio Grisetti. “Using Augmented Measurements to Improve the Convergence of ICP.” In Proc. of the Int. Conf. on Simulation, Modeling and Programming for Autonomous Robots (SIMPAR), Springer, Bergamo, Italy, pp. 566-577, 2014.
 Jacopo Serafin, and Giorgio Grisetti. “NICP: Dense Normal Based Point Cloud Registration.” To Appear In Proc. of the IEEE/RSJ Int. Conf. on Intelligent Robots and Systems (IROS), Hamburg, Germany, 2015.
 Jacopo Serafin, and Giorgio Grisetti, “Using Extended Measurements and Scene Merging for Efficient and Robust Point Cloud Registration,” Robotics and Autonomous Systems (RAS), vol. 92, pp. 91-106, 2017.
 Jacopo Serafin, “Using Extended Measurements and Geometric Features for Robust Long-Term Localization and Mapping,” PhD Thesis, Rome, Italy, 2017.
 Pomerleau, François, et al. “Tracking a depth camera: Parameter exploration for fast ICP.” Intelligent Robots and Systems (IROS), 2011 IEEE/RSJ International Conference on. IEEE, 2011.
 Pomerleau, François, et al. “Challenging data sets for point cloud registration algorithms.” The International Journal of Robotics Research 31.14 (2012): 1705-1711.
 Segal, Aleksandr, Dirk Haehnel, and Sebastian Thrun. “Generalized-ICP.” Robotics: Science and Systems. Vol. 2. No. 4. 2009.
 Magnusson, Martin, Achim Lilienthal, and Tom Duckett. “Scan registration for autonomous mining vehicles using 3D‐NDT.” Journal of Field Robotics 24.10 (2007): 803-827.
 Steinbrucker, Frank, Jürgen Sturm, and Daniel Cremers. “Real-time visual odometry from dense RGB-D images.” Computer Vision Workshops (ICCV Workshops), 2011 IEEE International Conference on. IEEE, 2011.
 Newcombe, Richard A., et al. “KinectFusion: Real-time dense surface mapping and tracking.” Mixed and augmented reality (ISMAR), 2011 10th IEEE international symposium on. IEEE, 2011.