patchwork
patchwork copied to clipboard
SOTA fast and robust ground segmentation using 3D point cloud (accepted in RA-L'21 w/ IROS'21)
Patchwork
Official page of "Patchwork: Concentric Zone-based Region-wise Ground Segmentation with Ground Likelihood Estimation Using a 3D LiDAR Sensor", which is accepted by RA-L with IROS'21 option
[Video] [Preprint Paper] [Project Wiki]
Patchwork | Concept of our method (CZM & GLE) |
---|---|
![]() |
![]() |
It's an overall updated version of R-GPF of ERASOR [Code] [Paper].
NEWS (22.07.25)
- Pybinding + more advanced version is now available on Patchwork++ as a preprocessing step for deep learning users (i.e., python users can also use our robust ground segmentation)!
NEWS (22.07.13)
- For increasing convenience of use, the examples and codes are extensively revised by reflecting issue #12.
NEWS (22.05.22)
- The meaning of
elevation_thresholds
is changed to increase the usability. The meaning is explained in wiki. - A novel height estimator, called All-Terrain Automatic heighT estimator (ATAT) is added within the patchwork code, which auto-calibrates the sensor height using the ground points in the vicinity of the vehicle/mobile robot.
- Please refer to the function
consensus_set_based_height_estimation()
.
- Please refer to the function
NEWS (21.12.27)
-
pub_for_legoloam
node for the pointcloud in kitti bagfile is added.-
ground_estimate.msg
is added
-
-
Bug in xy2theta function is fixed.
-
How to run
roslaunch patchwork pub_for_legoloam.launch
rosbag play {YOUR_FILE_PATH}/KITTI_BAG/kitti_sequence_00.bag --clock /kitti/velo/pointcloud:=/velodyne_points
- This README about this LiDAR odometry is still incomplete. It will be updated soon!
Demo
KITTI 00
Rough Terrain
Characteristics
-
Single hpp file (
include/patchwork/patchwork.hpp
) -
Robust ground consistency
As shown in the demo videos and below figure, our method shows the most promising robust performance compared with other state-of-the-art methods, especially, our method focuses on the little perturbation of precision/recall as shown in this figure.
Please kindly note that the concept of traversable area and ground is quite different! Please refer to our paper.
Contents
- Test Env.
- Requirements
- How to Run Patchwork
- Citation
Test Env.
The code is tested successfully at
- Linux 18.04 LTS
- ROS Melodic
Requirements
ROS Setting
-
- Install ROS on a machine.
-
- Thereafter, jsk-visualization is required to visualize Ground Likelihood Estimation status.
sudo apt-get install ros-melodic-jsk-recognition
sudo apt-get install ros-melodic-jsk-common-msgs
sudo apt-get install ros-melodic-jsk-rviz-plugins
-
- Compile compile this package. We use catkin tools,
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
git clone https://github.com/LimHyungTae/patchwork.git
cd .. && catkin build patchwork
How to Run Patchwork
We provide four examples:
-
How to run Patchwork in SemanticKITTI dataset
- Offline KITTI dataset
- Online (ROS Callback) KITTI dataset
-
How to run Patchwork in your own dataset
- Offline by loading pcd files
- Online (ROS Callback) using your ROS bag file
Offline KITTI dataset
-
Download SemanticKITTI Odometry dataset (We also need labels since we also open the evaluation code! :)
-
Set the
data_path
inlaunch/offline_kitti.launch
for your machine.
The data_path
consists of velodyne
folder and labels
folder as follows:
data_path (e.g. 00, 01, ..., or 10)
_____velodyne
|___000000.bin
|___000001.bin
|___000002.bin
|...
_____labels
|___000000.label
|___000001.label
|___000002.label
|...
_____...
- Run launch file
roslaunch patchwork offline_kitti.launch
You can directly feel the speed of Patchwork! :wink:
Online (ROS Callback) KITTI dataset
We also provide rosbag example. If you run our patchwork via rosbag, please refer to this example.
- After building this package, run the roslaunch as follows:
roslaunch patchwork run_patchwork.launch is_kitti:=true
Then you can see the below message:
-
Set the
data_path
inlaunch/kitti_publisher.launch
for your machine, which is same with the aforementioned parameter in "Offline KITTI dataset" part. -
Then, run ros player (please refer to
nodes/ros_kitti_publisher.cpp
) by following command at another terminal window:
roslaunch patchwork kitti_publisher.launch
Own dataset using pcd files
Please refer to /nodes/offilne_own_data.cpp
.
(Note that in your own data format, there may not exist ground truth labels!)
Be sure to set right params. Otherwise, your results may be wrong as follows:
W/ wrong params | After setting right params |
---|---|
![]() |
![]() |
For better understanding of the parameters of Patchwork, please read our wiki, 4. IMPORTANT: Setting Parameters of Patchwork in Your Own Env..
Offline (Using *.pcd or *.bin file)
-
Utilize
/nodes/offilne_own_data.cpp
-
Please check the output by following command and corresponding files:
roslaunch patchwork offline_ouster128.launch
Online (via your ROS bag file)
It is easy by re-using run_patchwork.launch
.
- Remap the topic of subscriber, i.g. modify remap line as follows:
<remap from="/patchwork/cloud" to="$YOUR_LIDAR_TOPIC_NAME$"/>
Note that the type subscribed data is sensor_msgs::PointCloud2
.
- Next, launch the roslaunch file as follows:
roslaunch patchwork run_patchwork.launch is_kitti:=false
Note that is_kitti=false
is important! Because it decides which rviz is opened. The rviz shows only estimated ground and non-ground because your own dataset may have no point-wise labels.
- Then play your bag file!
rosbag play $YOUR_BAG_FILE_NAME$.bag
Citation
If you use our code or method in your work, please consider citing the following:
@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}
}
Description
All explanations of parameters and other experimental results will be uploaded in wiki
Contact
If you have any questions, please let me know:
- Hyungtae Lim {[email protected]}
TODO List
- [x] Add ROS support
- [x] Add preprint paper
- [x] Add demo videos
- [x] Add own dataset examples
- [x] Update wiki