Skip to content

PCL GSoc Ideas

Kunal Tyagi edited this page Mar 18, 2022 · 30 revisions

Ideas for GSoC/GSoD

PCL returned to GSoC after a long hiatus in 2019. This year, PCL is looking for contributions and active community members from all corners of the coding community in the roles of

  • technical writers
  • designers
  • web developers
  • C++ developers
  • CI/CD experts
  • polyglots
  • wizards

and everything else in between.

2022 GSoD Idea List

Table of Contents

Name Skills needed Difficulty
Update Website RST, Sphinx, Doxygen, Python Medium
Walk through documentation Technical writing, Doxygen Medium
Reference Manual Documentation Technical writing, Doxygen, Sphinx Low

2022 GSoC Idea List (not used)

2022 brings in a new format of projects: they can be either short as well as long term projects. Unlike 2021, the long term allows projects which require more time investment.

Table of Contents

New Ideas:

Name Skills needed Difficulty
[Integration of Better Filtering from GSoC 2021] C++ Medium
Benchmarks and Performance monitoring C++, Benchmarking, Github Worfklow Medium-Low

Older ideas with some existing work:

Name Skills needed Difficulty
Compilation time reduction C++, C++ compilation, CMake High
Bindings for Python C++, python, clang Medium
Improving confidence in builds Bash, Static Analyzers, GitHub Workflow Low

2021 GSoC Idea List

2021 is a special year in the sense that the projects need to be much smaller. This potentially allows "easier" projects to be curated by the projects. Moreover, the reduced time requirement makes GSoC accessible to more students.

Table of Contents

New Ideas

Name Skills needed Difficulty
Enable CUDA builds on CI CUDA, C++, CMake Medium
Better Voxel Filter C++ Low
Bindings for Python C++, python, clang Medium
Shift to fixed-width integers C++ Low
Benchmarks and Performance monitoring C++, Benchmarking, Github Worfklow Medium-Low

Older ideas with some existing work:

Name Skills needed Difficulty
Compilation time reduction C++, C++ compilation, CMake High
Improving confidence in builds Bash, Static Analyzers, GitHub Workflow Low
Make a better CMake CMake Medium
Refactoring and Modernization C++ Low
Unified API for PCL algorithms C++ Medium-High

2021 GSoD Idea List (not used)

Table of Contents

Name Skills needed Difficulty
Update Website RST, Sphinx, Doxygen, Python Medium
Walk through documentation Technical writing, Doxygen Medium
Reference Manual Documentation Technical writing, Doxygen, Sphinx Low

2020 GSoC Idea List

Table of Contents

Name Skills needed Difficulty
Benchmarks and Performance monitoring C++, Benchmarking Medium-Low
Compilation time reduction C++, C++ compilation, CMake High
Improving confidence in builds Bash, Static Analyzers Low
Make a better CMake CMake Medium
Refactoring and Modernization C++ Low
Binding interfaces for other languages C++, libtooling, pybind/cython,etc. High
Unified API for PCL algorithms C++ Medium-High

2020 GSoD Idea List (not used)

Table of Contents

Name Skills needed Difficulty
Update Website RST, Sphinx, Doxygen, Python Medium
Walk through documentation Technical writing, Doxygen Medium
Reference Manual Documentation Technical writing, Doxygen, Sphinx Low

Project Maintenance (proj)

As the community grows, soft-skills and community outreach become more important. With the change in community, it has become important to update the overlooked facet of PCL and make it more accessible to the community

Update Website

  • Create a static website on Github pages or similar
  • Provide better support for documentation:
    • allow viewing past releases
    • prevent invalidation of links as much as possible, while updating the content
  • Integrate with RTD (documentation+tutorials) to make it the go-to resource for PCL
  • Allow easy additions of blogs including general updates, GSoC/GSoD
    • (if possible) RSS feed
  • (Stretch goal) Migrate all content from existing website, including
    • ability to create blog posts (using Jekyll or similar)
    • lost content (from internet archives)

Walk through documentation

Includes Tutorials, Guides and Examples

  • Update to reflect forward movement in PCL
  • Detect and increase coverage

Reference Manual Documentation

  • Improve documentation coverage
  • Migrate front-end to sphinx
  • Generate and host all documentation on Github
  • Integrate search + landing page with Tutorials and Walk-through
  • (Stretch goal) Add CI test for missing documentation in "new code"

Quality of Life (QoL)

As PCL has matured, it has discovered missing features: features that are more than just the core code, features that are vital for delivering continuous improvements. We look forwards for the ideas/projects with a minor or negligible addition of "code features" as output. Some of the wish-list features are:

Benchmarks and Performance monitoring

Mvieth has started the work of adding benchmarks that can be run offline. The aim is two fold:

  1. Increase coverage of benchmarks
  2. Better integration of benchmarks

While increasing coverage implies adding more (and better) benchmarks, a better integration would involve:

  • Nightly CI jobs to measure performance on master
  • (Stretch goal) Incremental bench-marking on PR

Compilation time reduction

  • Refactoring/CMake changes/Sub-Modules to reduce compilation time
  • 100% reproducible incremental builds (with a constant config)
  • (Stretch goal) Compile time reduction on CI using (reading resource)
    • incremental builds
    • compiler caches
    • PCH
    • Unity builds

Improving confidence in builds

This is a wide ranging topic, with something for everyone. This is broken into bite-sized projects, each with a unique challenge.

  • Incremental builds on CI (Github Workflow)
  • More warnings and sanitizers for CI (CMake, Compilers)
  • Integrate clang-tidy, static-analyzers (C++ tooling, easier for new-comers)
  • Increasing test coverage (C++)
  • ABI/API breakage monitoring for PR (command line tools, scripting)

Make a better CMake

  • More DRY, less wizardry
  • Automatic module discovery
  • Automatic test discovery (refactoring test code layout is ok)
  • Out-of-source PCL-contrib super-module similar to OpenCV-contrib

Enable CUDA builds on CI

A big issue with the CUDA and GPU libraries in PCL is the inability to test them on the CI. Thankfully, AMD (yes, you read that correct) has a solution: HiP. HiP compiler allows compilation of CUDA code to run on either AMD GPUs or even on the CPU. Thus, a test for CUDA can be compiled and run on the free tiers of CI which don't offer any GPU :)

For more information, please refer to:

Some repositories related to HiP are:

Code Maintenance (code)

Old API designs result in greater friction between how developers prefer to use vs how PCL lets developers use the API. Overhauling API used to be difficult but with libtooling and clang-tidy, it has been made manageable. Some of the ideas for guiding PCL towards a more modern API are:

Refactoring and Modernization

  • Fluent style API for algorithms
  • Extend format and clang-tidy --fix to other modules

Shift to fixed-width integers

PCL used integer types like int, which make it hard to present a uniform interface on multiple platforms. As such, we're migrating slowly to fixed width types, with the first wave focused on the type of the indices used by PCL.

Better Voxel Filter

There are a number of voxel filters in PCL, with very similar code. Analysis of the code reveals that there are 3 orthogonal decisions taken in each implementation:

  • Sub-divide the space into voxels (spherical, cubic)
  • Merge points (average, centroid, etc.)
  • Filter points based on some statistic (minimum count, stddev, etc.)

A well written single implementation would be able to cover all the current classes, reduce bugs due to divergence of code as well as allow easy updates like parallelism and vectorization.

New features (new)

PCL is missing a lot of state-of-the-art implementations. Suggestions/implementations of such algorithms are highly welcome since highly performant, cutting edge algorithms are a core component of PCL. Apart from them, the following features are also on the wish-list of PCL:

Binding interfaces

Wrappers for (Python, Matlab/Octave, C) (1 project per wrapping isn't worth 3 months)

  • Needs auto-discovery (like binder)
    • Reduce drift between core code and bindings
    • Reduce maintenance burden
  • Tests
  • Existing wrappers for Python for inspiration
  • (Stretch goal) Support different PCL releases and Language versions

Unified API for PCL algorithms

Please find a detailed document here

Bindings for Python

This is a continuation of the 2020 GSoC. The 2020 GSoC involved a very deep dive into different strategies for auto-generating bindings with minimal effort. This would involve making the tooling better. While the existing code can't generate bindings, the goal is almost within reach. To generate bindings automatically, new development would need to be focused on:

  • Generate list of files to read using compile-commands.json
  • Generate dependency (for compilation) using CMake File API
  • Convert Clang's AST into a Pybind11 compatible code

Contact

Please read the relevant official guides to ease your journey.

For interested students:

  • Please announce yourself and your interest in PCL at the discord channel
  • Please have a draft proposal ready in the format of a git-repo/google doc to facilitate discussion
  • Based on your interests, you will be assigned a small task to evaluate your skills

For those interested in becoming mentors:

  • Please note that mentoring and co-mentoring can take a lot of effort from your side (from 10 hours a week or 1 hour a week depending on the project, the student, the problems, etc.)
  • Please announce yourself and participate in discussions at the discord channel
  • Feel free to PM existing maintainers/mentors
  • "Teaming up" as co-mentors is an option if you feel you will not be able to be the sole mentor on a project. For projects with existing mentor(s), it is upto them to accept/reject a co-mentor

Mentors

Alphabetical list of mentors

  • kunaltyagi
  • SergioRAgostinho
  • taketwo and others

Resources

Ideas Pages

If any of the following ideas are not implemented, please notify kunaltyagi on the discord channel. They will be added to the ideas list.

Project Pages

If any of the following projects are not integrated in PCL, please notify kunaltyagi on discord channel. They will be slated for review and addition in PCL-core (if maintainers are found) or PCL contrib (like opencv-contrib) (if there is a lack of maintainers)

Clone this wiki locally