<img src=pictures/patchwork++.gif alt="animated" />
[Patchwork++][arxivlink], an extension of [Patchwork][patchworklink], is **a fast, robust, and self-adaptive ground segmentation algorithm** on 3D point cloud.python/examples/evaluate_semantickitti.py). In the papers of Patchwork and Patchwork++, we use different evaluation protocols — see USAGE.md §1 for why and §4 for per-sequence numbers.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.
</details>
The released library is on PyPI:
pip install pypatchworkpp # core library
pip install 'pypatchworkpp[demo]' # + Open3D for the visual demos
Then import pypatchworkpp in your script — see the Python examples.
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:
z < -sensor_height - 2.0m cutoff 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: Patchwork++ is the default; pass algorithm:=patchwork to switch to the classic Patchwork.
# Default — runs Patchwork++
ros2 launch patchworkpp patchworkpp.launch.py
# Override to the classic Patchwork
ros2 launch patchworkpp patchworkpp.launch.py algorithm:=patchwork
If you use our codes, please cite our paper (arXiv, IEEE Xplore)
@inproceedings{lee2022patchworkpp,
title=,
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}
}
scripts/install_open3d.bash, the installation of the higher version of CMake is already implemented.If you have any questions, please do not hesitate to contact us
at kaist ac krat kaist ac krmaster branchPatchwork mode for users who use this repository for baseline comparison purposes