• Stars
    star
    475
  • Rank 92,465 (Top 2 %)
  • Language
    C++
  • License
    MIT License
  • Created over 3 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

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.12.24)

  • Merry christmas eve XD! include/label_generator is added to make the .label file, following the SemanticKITTI format.
  • The .label files can be directly used in 3DUIS benchmark
  • Thank Lucas Nunes and Xieyuanli Chen for providing code snippets to save a .label file.

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().

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

  1. Test Env.
  2. Requirements
  3. How to Run Patchwork
  4. Citation

Test Env.

The code is tested successfully at

  • Linux 18.04 LTS
  • ROS Melodic

Requirements

ROS Setting

    1. Install ROS on a machine.
    1. 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
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

  1. Download SemanticKITTI Odometry dataset (We also need labels since we also open the evaluation code! :)

  2. Set the data_path in launch/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
     |...
_____...
   
  1. Run launch file
roslaunch patchwork offline_kitti.launch

You can directly feel the speed of Patchwork! ๐Ÿ˜‰

Online (ROS Callback) KITTI dataset

We also provide rosbag example. If you run our patchwork via rosbag, please refer to this example.

  1. After building this package, run the roslaunch as follows:
roslaunch patchwork run_patchwork.launch is_kitti:=true

Then you can see the below message:

  1. Set the data_path in launch/kitti_publisher.launch for your machine, which is same with the aforementioned parameter in "Offline KITTI dataset" part.

  2. 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)

  1. Utilize /nodes/offilne_own_data.cpp

  2. Please check the output by following command and corresponding files:

  3. Set appropriate absolute file directory, i.e. file_dir, in offline_ouster128.launch

roslaunch patchwork offline_ouster128.launch

Online (via your ROS bag file)

It is easy by re-using run_patchwork.launch.

  1. 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.

  1. 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.

  1. 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:

TODO List

  • Add ROS support
  • Add preprint paper
  • Add demo videos
  • Add own dataset examples
  • Update wiki

More Repositories

1

ERASOR

Official page of ERASOR (Egocentric Ratio of pSeudo Occupancy-based Dynamic Object Removal), which is accepted @ RA-L'21 with ICRA'21
Python
419
star
2

paper_quality_plot.matlab

paper_quality_plot.matlab
MATLAB
45
star
3

Eigen_for_Robotics

Pose Conversion
C++
41
star
4

mcl_2d_lidar_ros

Monte Carlo Localization (MCL) using 2D LiDAR on Robot Operating System (ROS)
C++
37
star
5

helloceres

Graph SLAM์„ ํ•˜๊ธฐ ์œ„ํ•œ Ceres tutorial ์ฝ”๋“œ๋“ค
C++
35
star
6

quatro-cpp-fpfh

Some examples to show how to use Quatro implemented in TEASER++ library
C++
33
star
7

pcl_tutorial

ROS PCL Library Tutorial (ํ•œ๊ธ€)
Makefile
28
star
8

Naverlabs-LiDAR-API

LiDAR API of NAVERLABS indoor dataset
C++
24
star
9

graph_slam_tutorial

Graph SLAM์˜ ๋ชจ๋“ ๊ฒƒ (Korean)
15
star
10

autoinstall

Hyungtae's Auto-Installation Shellscripts
Shell
15
star
11

OpenFLANN

Performance comparison of NearestSearch and radiusSearch function in point cloud.
C++
14
star
12

moderncpp_study

Modern C++ study
C++
12
star
13

pytorch.uwb.localization

Real-world data!
Python
11
star
14

cmake_make_install_study

Study the principle of how `sudo make install` works (Korean only)
CMake
8
star
15

ubuntu20.04_autoinstall

Auto install of Ubuntu 20.04
Shell
7
star
16

fill_depth_colorization.python3

Fill depth using image file and projected Velodyne pointclouds on Python3
Python
4
star
17

hello_pybinding

C++
4
star
18

ikd_tree_ros

Makefile
4
star
19

ros_gridmaps_examples

CMake
3
star
20

rosbag2kitti-parser

Python
3
star
21

dotfiles

Shell
2
star
22

RONet_paper

RONet 2019 at IEEE Access with Changgyu Park.
TeX
2
star
23

lim2023ral

AdaLIO++
TeX
2
star
24

lstm_on_uwb

Python
2
star
25

rgbdsaver

Save RGB and depth to png file in ROS
C++
1
star
26

OverlapPredator

Python
1
star