Description
Felix Herrmann's GSoC 2020 submission.
Overview
CGAL recently added wrappers to their library to enable global and local point-cloud registration using the OpenGR library. In the current version, registration can only be performed between two point-clouds. The goal of this project was to extend the package to multiple point-clouds, by implementing into OpenGR the approach described in the following paper: Global Registration of Multiple Point Clouds Using Semidefinite Programming, K. N. Chaudhury, Y. Khoo, and A. Singer, SIAM J. Optim., 25(1), 468501. (34 pages).
Project Summary
The development of the registration algorithm for OpenGR was done under gret-sdp branch of my fork of the OpenGR library [1]. A pull request [2] was opened to the official OpenGR github repository, STORM-IRIT/OpenGR [3].
The development of the OpenGR wrapper for CGAL was done under gsoc2020-Point_set_processing_3-global_registration_wrapper-felix branch of my fork of the CGAL library [4]. A pull request [5] was opened to the official CGAL github repository, CGAL/cgal [6].
To summarize, two pull-requests were created from the complete work, waiting for merging:
OpenGR PR and CGAL PR.
What was done?
The design, the implementation, and the documentation of the followings items were done:
- the GRET-SDP algorithm for OpenGR library,
- the OpenGR wrapper for CGAL.
The abovementioned changes were tested using appropriate test mechanisms in conformity with the library specific conventions.
The commits section shows the list of commits done for achieving the above work. On top of those commits, detailed investigations of libraries, design patterns, programming language constructs, and detailed discussions on the design of the abovementioned changes with mentors were done.
What is left to be done?
Pull requests were opened on OpenGR and CGAL repositories to merge the complete work. The reviewing process may result in feedback that requires changes. Therefore, the remaining work is to rectify the code to meet the possible requests from the review process. I will also hold this work voluntarily after the GSoC program ends.
Commits
In the following, all commits regarding the GSoC 2020 project are listed with their brief descriptions.
Commits to gret-sdp branch of my fork of the OpenGR library:
beautifulv0id/OpenGR@81fe056 change gret-sdp test to construct patches from stanford config file
beautifulv0id/OpenGR@60909cd update documentation
beautifulv0id/OpenGR@f2b8fbd update documentation
beautifulv0id/OpenGR@b4ca0d4 Fix cmake package
beautifulv0id/OpenGR@2387863 New export variables to check solver availability
beautifulv0id/OpenGR@745a172 Fix FindSDPA on ubuntu
beautifulv0id/OpenGR@9b13253 Add options to enable SDPA and MOSEK
beautifulv0id/OpenGR@fc0be46 fix no initialization of matrices bug + cleanup + add small_problem
beautifulv0id/OpenGR@629599c remove base solver class, copy gret-sdp-data when gret-sdp is build
beautifulv0id/OpenGR@d03c9cf add GRET_SDP_SOLVER class
beautifulv0id/OpenGR@041cf99 add mosek to cmake
beautifulv0id/OpenGR@043f9b2 implement api for gret sdp and add test gret-sdp.cc
beautifulv0id/OpenGR@fc2c926 Implement basic structure of ComputeTransformations function in GRET-SDP
beautifulv0id/OpenGR@6a15070 Add PairwiseMatchBase that derives from AbstractMatchBase
beautifulv0id/OpenGR@e9b14f8 Add AbstractMatchBase class
Commits to gsoc2020-Point_set_processing_3-global_registration_wrapper-felix branch of my fork of the CGAL library:
beautifulv0id@c8b3fb3 add bib entry cgal:cks-grmpcsp and change reference
beautifulv0id@c6e214b change correspondences representation
beautifulv0id@d7e8da9 fix violation of range concept
beautifulv0id@ad23af1 update documentation
beautifulv0id@65f8aa6 update wrapper include path
beautifulv0id@e7190f2 reset changes to register_point_sets.h and compute_registration_transformation.h
beautifulv0id@c25f6a8 add error handling to extractPCAndTrFromStandfordConfFile
beautifulv0id@236cccc delete unused data for examples
beautifulv0id@232434f add GRET-SDP Example description to Point_set_processing_3.txt
beautifulv0id@a675da8 accept point ranges with normal informations
beautifulv0id@8d4ee5c add doxygen documentation for gret_sdp.h
beautifulv0id@13e49e5 new API for GRET-SDP wrapper
beautifulv0id@14f1f77 add registration_with_OpenGR_using_GRET_SDP.cpp
beautifulv0id@073c7a1 update wrapper include path
beautifulv0id@5028906 add getRegisteredPatches
beautifulv0id@005a168 cleanup merge mistake
beautifulv0id@4a77016 merge
beautifulv0id@c78d24b add getTransformations
beautifulv0id@371bf8d change Scalar to Kernel
beautifulv0id@a8b1832 cleanup
beautifulv0id@8ad9ef7 adding unique_ptr breaks computation
beautifulv0id@e86baba remove template parameter Kernel
beautifulv0id@7913040 remove typedefs in registerPatches and define GR_MatcherType in class
beautifulv0id@7676457 move GRET_SDPOptions into class and rename
beautifulv0id@ab433c2 add Scalar template parameter to GRET_SDP
beautifulv0id@23dfc4a change Exact_predicates_inexact_constructions_kernel to Simple_cartesian
beautifulv0id@bd19fbe add small problem
beautifulv0id@03180ca add getter to gret-sdp.h
beautifulv0id@ef45aaa update gret-sdp
beautifulv0id@6124b77 initial commit