Skip to content

Commit

Permalink
Add paper (#84)
Browse files Browse the repository at this point in the history
* add paper.(md|bib)

* Update paper.yml

* fix references

* revise paper

* add missing DOI

* consistent citation style

* use CC and url commands
  • Loading branch information
koide3 authored Aug 9, 2024
1 parent ad72715 commit 8cbec29
Show file tree
Hide file tree
Showing 3 changed files with 276 additions and 0 deletions.
29 changes: 29 additions & 0 deletions .github/workflows/paper.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: Draft PDF
on:
push:
branches: [ paper ]

# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:

jobs:
paper:
runs-on: ubuntu-latest
name: Paper Draft
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Build draft PDF
uses: openjournals/openjournals-draft-action@master
with:
journal: joss
# This should be the path to the paper within your repo.
paper-path: docs/paper.md
- name: Upload
uses: actions/upload-artifact@v3
with:
name: paper
# This is the output path where Pandoc will write the compiled
# PDF. Note, this should be the same directory as the input
# paper.md
path: docs/paper.pdf
120 changes: 120 additions & 0 deletions docs/paper.bib
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
@InProceedings{Rusu,
author = {Radu Bogdan Rusu and Steve Cousins},
title = {{3D is here: Point Cloud Library (PCL)}},
booktitle = {{IEEE International Conference on Robotics and Automation (ICRA2011)}},
month = {May},
year = {2011},
address = {Shanghai, China},
doi = {10.1109/ICRA.2011.5980567}
}

@article{Zhou,
author = {Qian-Yi Zhou and Jaesik Park and Vladlen Koltun},
title = {{Open3D}: {A} Modern Library for {3D} Data Processing},
journal = {arXiv:1801.09847},
year = {2018},
doi = {10.48550/arXiv.1801.09847}
}

@ARTICLE{Bai,
author={Bai, Chunge and Xiao, Tao and Chen, Yajie and Wang, Haoqian and Zhang, Fang and Gao, Xiang},
journal={IEEE Robotics and Automation Letters},
title={Faster-LIO: Lightweight Tightly Coupled Lidar-Inertial Odometry Using Parallel Sparse Incremental Voxels},
year={2022},
volume={7},
number={2},
pages={4861-4868},
doi={10.1109/LRA.2022.3152830}
}

@inproceedings{Koide,
title = {Voxelized GICP for Fast and Accurate 3D Point Cloud Registration},
author = {Kenji Koide, Masashi Yokozuka, Shuji Oishi, and Atsuhiko Banno},
booktitle = {IEEE International Conference on Robotics and Automation (ICRA2021)},
pages = {11054--11059},
year = {2021},
month = {May},
doi = {10.1109/ICRA48506.2021.9560835}
}

@article{Zhang,
title={Iterative point matching for registration of free-form curves and surfaces},
author={Zhang, Zhengyou},
journal={International journal of computer vision},
volume={13},
number={2},
pages={119--152},
year={1994},
publisher={Springer},
doi={10.1007/BF01427149}
}

@inproceedings{Segal,
title={Generalized-{ICP}},
author={Segal, Aleksandr and Haehnel, Dirk and Thrun, Sebastian},
booktitle={Robotics: science and systems},
volume={2},
number={4},
pages={435},
year={2009},
doi={10.15607/rss.2009.v.021}
}

@INPROCEEDINGS{Wang,
author={Wang, Han and Wang, Chen and Xie, Lihua},
booktitle={IEEE International Conference on Robotics and Automation (ICRA2020)},
title={Intensity Scan Context: Coding Intensity and Geometry Relations for Loop Closure Detection},
year={2020},
pages={2095-2101},
doi={10.1109/ICRA40945.2020.9196764}
}

@inproceedings{Izadinia,
title={Scene recomposition by learning-based icp},
author={Izadinia, Hamid and Seitz, Steven M},
booktitle={IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR2020)},
pages={930--939},
year={2020},
doi={10.1109/cvpr42600.2020.00101}
}

@ARTICLE{Kim,
author={Kim, Kyuwon and Im, Junhyuck and Jee, Gyuin},
journal={IEEE Transactions on Intelligent Transportation Systems},
title={Tunnel Facility Based Vehicle Localization in Highway Tunnel Using 3D LIDAR},
year={2022},
volume={23},
number={10},
pages={17575-17583},
doi={10.1109/TITS.2022.3160235}
}

@article{Pomerleau,
author = {Pomerleau, Fran{\c c}ois and Colas, Francis and Siegwart, Roland and Magnenat, St{\'e}phane},
title = {{Comparing ICP Variants on Real-World Data Sets}},
journal = {Autonomous Robots},
year = {2013},
volume = {34},
number = {3},
pages = {133--148},
month = feb,
doi={10.1007/s10514-013-9327-2}
}

@INPROCEEDINGS{Serafin,
author={Serafin, Jacopo and Grisetti, Giorgio},
booktitle={IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS2015)},
title={NICP: Dense normal based point cloud registration},
year={2015},
pages={742-749},
doi={10.1109/IROS.2015.7353455}}


@inproceedings{Datar,
author = {Datar, Mayur and Immorlica, Nicole and Indyk, Piotr and Mirrokni, Vahab S.},
title = {Locality-sensitive hashing scheme based on p-stable distributions},
year = {2004},
doi = {10.1145/997817.997857},
booktitle = {Twentieth Annual Symposium on Computational Geometry},
pages = {253–262},
}
127 changes: 127 additions & 0 deletions docs/paper.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
---
title: 'small_gicp: Efficient and parallel algorithms for point cloud registration'
tags:
- C++
- Python
- Point cloud registration
authors:
- name: Kenji Koide
orcid: 0000-0001-5361-1428
corresponding: true
affiliation: "1"
affiliations:
- name: National Institute of Advanced Industrial Science and Technology (AIST), Japan
index: 1
date: 22 June 2024
bibliography: paper.bib
---

\def\CC{{C\nolinebreak[4]\hspace{-.05em}\raisebox{.4ex}{\tiny\bf ++}}}

# Summary

Point cloud registration is a task of aligning two point clouds measured by 3D ranging
sensors, for example, LiDARs and range cameras. Iterative point cloud registration,
also known as fine registration or local registration, iteratively refines the transformation
between point clouds starting from an initial guess.
Each iteration involves a proximity-based point correspondence search and the minimization
of the distance between corresponding points, continuing until convergence.
Iterative closest point (ICP) and its variants,
such as Generalized ICP, are representative iterative point cloud registration algorithms.
They are widely used in applications like autonomous vehicle localization [@Kim], place recognition [@Wang],
and object classification [@Izadinia]. Since these applications often require real-time or near-real-time
processing, speed is a critical factor in point cloud registration routines.

**small_gicp** provides efficient and parallel algorithms to create an extremely
fast point cloud registration pipeline. It offers parallel implementations of
downsampling, nearest neighbor search, local feature extraction, and registration
to accelerate the entire process.
small_gicp is implemented as a header-only \CC library with minimal dependencies
to offer efficiency, portability, and customizability.

# Statement of need

There are several point cloud processing libraries, and PCL [@Rusu], Open3D
[@Zhou], libpointmatcher [@Pomerleau] are commonly used in real-time applications
owing to their performant implementations.
Although they offer numerous functionalities, including those required for point cloud
registration, they present several challenges for practical applications and scientific
research.

**Processing speed:**
A typical point cloud registration pipeline includes processes such as downsampling,
nearest neighbor search (e.g., KdTree construction), local feature estimation, and
registration error minimization.
PCL and Open3D support multi-threading only for parts of these processes (feature
estimation and registration error minimization), with the remaining single-threaded
parts often limiting the overall processing speed.
Additionally, the multi-thread implementations in these libraries can have significant
overheads, reducing scalability to many-core CPUs.
These issues make it difficult to meet real-time processing requirements, especially on
low-specification CPUs. It is also difficult to fully utilize the computational power
of modern high-end CPUs.

**Customizability:**
Customizing the internal workings (e.g., replacing the registration cost function or
changing the correspondence search method) of existing implementations is challenging
due to hard-coded processes. This poses a significant hurdle for research and development,
where testing new cost functions and search algorithms is essential.

**small_gicp:**
To address these issues and accelerate the development of point cloud registration-related systems,
we designed small_gicp with the following features:

- Fully parallelized point cloud preprocessing and registration algorithms with minimal overhead,
offering up to 2x speed gain in single-threaded scenarios and better scalability in multi-core
environments.

- A modular and customizable framework using \CC templates, allowing easy customization of the
algorithm's internal workings while maintaining efficiency.

- A header-only \CC library implementation for easy integration into user projects, with Python bindings
provided for collaborative use with other libraries (e.g., Open3D).

# Functionalities

**small_gicp** implements several preprocessing algorithms related to point cloud registration, and
ICP variant algorithms (point-to-point ICP, point-to-plane ICP, and Generalized ICP based on
distribution-to-distribution correspondence).

- Downsampling
- Voxelgrid sampling
- Random sampling
- Nearest neighbor search and point accumulation structures
- KdTree
- Linear iVox (supports incremental points insertion and LRU-cache-based voxel deletion) [@Bai]
- Gaussian voxelmap (supports incremental points insertion and LRU-cache-based voxel deletion) [@Koide]
- Registration error functions
- Point-to-point ICP error [@Zhang]
- Point-to-plane ICP error
- Generalized ICP error [@Segal]
- Robust kernels
- Least squares optimizers
- GaussNewton optimizer
- LevenbergMarquardt optimizer

# Benchmark results

- Single-threaded and multi-threaded (6 threads) `small_gicp::voxelgrid_sampling` are approximately 1.3x and 3.2x faster than `pcl::VoxelGrid`, respectively.
- Multi-threaded construction of `small_gicp::KdTree` can be up to 6x faster than that of `nanoflann`.
- Single-threaded `small_gicp::GICP` is about 2.4x faster than `pcl::GICP`, with the multi-threaded version showing better scalability.

More details can be found at \url{https://github.com/koide3/small_gicp/blob/master/BENCHMARK.md}.

# Future work

The efficiency of nearest neighbor search significantly impacts the overall performance of point cloud registration.
While small_gicp currently offers efficient and parallel implementations of KdTree and voxelmap, which are general and useful in many situations,
there are other nearest neighbor search methods that can be more efficient under mild assumptions about the point cloud measurement model
(e.g., projective search [@Serafin]).
We plan to implement these alternative neighbor search algorithms to further enhance the speed of the point cloud registration process.
The design of small_gicp, where nearest neighbor search and pose optimization are decoupled, facilitates the easy integration of these new search algorithms.

# Acknowledgements

This work was supported in part by JSPS KAKENHI Grant Number 23K16979.

# References

0 comments on commit 8cbec29

Please sign in to comment.