After a long hiatus, PCL is once more participating in the Google Summer of Code initiative, this year with 3 projects.
Extending PCL for use with Python: Bindings generation using Pybind11
Student: Divyanshu Madan
Extending PCL’s use case by generating bindings for its use with interface languages like Python, for rapid development and maximal speed. The approach makes use of Pybind11 to expose PCL’s C++ code and generate bindings in the form of python modules by using necessary type information. It supports automatic regeneration of the bindings when the underlying C++ code changes, to work with PCL’s active development cycle.
Refactoring, Modernisation & Feature Addition with Emphasis on GPU Module
Student: Haritha Jayasinghe
Despite being the go-to library for point cloud based computation, PCL can cause some friction to users due to its old-fashioned and sometimes inconsistent API and the lack of certain features. This proposal aims to introduce the following new features to the PCL library;
- GPU implementation of Iterative Closest Point (ICP) algorithm
- Implementation of Fast Resampling of 3D Point Clouds via Graphs
As well as to refactor and modernize the library by means of;
- Introducing better type for point indices, thereby providing support for larger point clouds
- Introducing a fluent API for algorithms
- Modernising the GPU Octree module to align with the it’s CPU counterpart
Unified API for Algorithms
Student: Shrijit Singh
With the current trend of increasing parallelism, there is a need for a uniform way of making these parallel implementations available along with the default serial ones. Currently in PCL, this has been done by providing separate classes/functions having independent APIs.
With the integration of execution policies and executors (part of C++23 hopefully) libraries like PCL will be able to provide a unified API to switch between different implementations. To ensure there is no sudden breakage in the existing API, a transition phase is needed to slowly phase out the old API in favour of a unified API.
This project aims to transition the existing API to forward-compatible unified API. The basic details are: Using tag dispatching to enable function overloading, allowing user to select between different available implementations. Lack of tags allows PCL to choose best possible implementations, this allows to maintain backward compatibility with current API. Missing implementation for a tag raises compile-time errors Providing SIMD/OpenMP/CUDA implementations of existing algorithms using the proposed unified API.