Video • Install • ROS2 • Paper • Contact Us
Patchwork++, an extension of Patchwork, is a fast, robust, and self-adaptive ground segmentation algorithm on 3D point cloud.
- C++ source code of Patchwork++ (patchworkpp)
- Python binding of Patchwork++ using pybind11 (python_wrapper)
- Examples codes of C++, Python, and ROS2 👍
If you are familiar with ROS1, you can also visit here and try executing ROS1-based Patchwork++!
What we need are just minimal dependencies.
Ubuntu / Debian:
sudo apt-get install g++ build-essential libeigen3-dev python3-pip python3-dev cmake -y
macOS (Apple Silicon or Intel):
brew install cmake
Eigen is fetched automatically by CMake, so no extra system package is required on macOS. The build works with the bundled AppleClang toolchain.
Pure installation
make pyinstall
Then, you can use Patchwork++ by import pypatchworkpp, which is super simple!
Installation to run demo
Only Open3D (> 0.17.0) is additionally installed for visualization purposes.
make pyinstall_with_demo
How to run Python demos is explained here.
Pure installation
make cppinstall
Installation with demo
Only Open3D (> 0.17.0) is additionally installed for visualization purposes.
make cppinstall_with_demo
How to run the C++ demos is explained here.
You should not need any extra dependency, just clone and build:
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone https://github.com/url-kaist/patchwork-plusplus.git
cd ~/ros2_ws
colcon build --packages-select patchworkpp
source ./install/setup.bash
How to launch ROS2 nodes is explained here.
This repository ships two ground segmentation algorithms with the same input/output API. Pick the one that fits your data:
- Patchwork++ (default): adaptive elevation/flatness thresholds, RNR (intensity-based reflected noise removal), RVPF (vertical structure suppression), and TGR (probability-based ground revert). Best when the LiDAR has reflection artefacts or you want self-tuning thresholds.
- Patchwork (classic, since 1.1.0): fixed elevation/flatness thresholds with explicit
z < -sensor_height - 2.0mcutoff and few-points reject, plus optional ATAT for unknown sensor heights. Often more aggressive on ground-plane noise in heavily cluttered scenes.
Python:
import pypatchworkpp as p
pp_default = p.patchworkpp(p.Parameters()) # Patchwork++
pp_classic = p.patchwork(p.PatchworkParams()) # Patchwork (classic)ROS2:
ros2 launch patchworkpp patchworkpp.launch.py algorithm:=patchworkIf you use our codes, please cite our paper (arXiv, IEEE Xplore)
@inproceedings{lee2022patchworkpp,
title={{Patchwork++: Fast and robust ground segmentation solving partial under-segmentation using 3D point cloud}},
author={Lee, Seungjae and Lim, Hyungtae and Myung, Hyun},
booktitle={Proc. IEEE/RSJ Int. Conf. Intell. Robots Syst.},
year={2022},
pages={13276-13283}
}
In addition, you can also check the paper of our baseline, Patchwork. (arXiv, IEEE Xplore)
@article{lim2021patchwork,
title={Patchwork: Concentric Zone-based Region-wise Ground Segmentation with Ground Likelihood Estimation Using a 3D LiDAR Sensor},
author={Lim, Hyungtae and Minho, Oh and Myung, Hyun},
journal={IEEE Robotics and Automation Letters},
year={2021}
}
- Ubuntu
18.04 and20.04, 22.04, and 24.04 - macOS 14+ (Apple Silicon)
- CMake 3.25.1 (>=3.20, min. Required to install Open3D)
- In
scripts/install_open3d.bash, the installation of the higher version of CMake is already implemented.
- In
- Open3D
0.15.20.18.0 - pybind11 v2.2.3
- Eigen 3.3.7
If you have any questions, please do not hesitate to contact us
- Seungjae Lee ✉️ sj98lee
atkaistackr - Hyungtae Lim ✉️ shapelim
atkaistackr
- Support intensity for RNR in
masterbranch - Support
Patchworkmode for users who use this repository for baseline comparison purposes - Integrate TBB and optimize the performance
