• Stars
    star
    419
  • Rank 103,397 (Top 3 %)
  • Language
    Python
  • License
    GNU General Publi...
  • Created over 3 years ago
  • Updated almost 2 years ago

Reviews

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

Repository Details

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

🌈 ERASOR (RA-L'21 with ICRA Option)

Official page of "ERASOR: Egocentric Ratio of Pseudo Occupancy-based Dynamic Object Removal for Static 3D Point Cloud Map Building", which is accepted by RA-L with ICRA'21 option [Video] [Preprint Paper]

overview

We provide all contents including

  • Source code of ERASOR
  • All outputs of the State-of-the-arts
  • Visualization
  • Calculation code of Preservation Rate/Rejection Rate

So enjoy our codes! :)

Contact: Hyungtae Lim (shapelimatkaistdotacdotkr)

Advisor: Hyun Myung (hmyungatkaistdotacdotkr)

NEWS (Recent update: Oct., 2021)

  • An example of running ERASOR in your own env. is provided.
    • Please refer to please refer to src/offline_map_updater/main_in_your_env.cpp and launch/run_erasor_in_your_env_vel16.launch. The more details are here.

Contents

  1. Test Env.
  2. Requirements
  3. How to Run ERASOR
  4. Calculate PR/RR
  5. Benchmark
  6. Visualization of All the State-of-the-arts
  7. ERASOR in the Wild
  8. Citation

Test Env.

The code is tested successfully at

  • Linux 18.04 LTS
  • ROS Melodic

Requirements

ROS Setting

  • Install ROS on a machine.
  • Also, jsk-visualization is required to visualize Scan Ratio Test (SRT) 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

Build Our Package

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
git clone https://github.com/LimHyungTae/ERASOR.git
cd .. && catkin build erasor 

Python Setting

  • Our metric calculation for PR/RR code is implemented by python2.7
  • To run the python code, following pakages are necessary: pypcd, tqdm, scikit-learn, and tabulate
pip install pypcd
pip install tqdm	
pip install scikit-learn
pip install tabulate

Prepared dataset

  • Download the preprocessed KITTI data encoded into rosbag.
  • The downloading process might take five minutes or so. All rosbags requires total 2.3G of storage space
wget https://urserver.kaist.ac.kr/publicdata/erasor/rosbag/00_4390_to_4530_w_interval_2_node.bag
wget https://urserver.kaist.ac.kr/publicdata/erasor/rosbag/01_150_to_250_w_interval_1_node.bag
wget https://urserver.kaist.ac.kr/publicdata/erasor/rosbag/02_860_to_950_w_interval_2_node.bag
wget https://urserver.kaist.ac.kr/publicdata/erasor/rosbag/05_2350_to_2670_w_interval_2_node.bag
wget https://urserver.kaist.ac.kr/publicdata/erasor/rosbag/07_630_to_820_w_interval_2_node.bag

Description of Preprocessed Rosbag Files

  • Please note that the rosbag consists of node. Refer to msg/node.msg.
  • Note that each label of the point is assigned in intensity for the sake of convenience.
  • And we set the following classes are dynamic classes:
# 252: "moving-car"
# 253: "moving-bicyclist"
# 254: "moving-person"
# 255: "moving-motorcyclist"
# 256: "moving-on-rails"
# 257: "moving-bus"
# 258: "moving-truck"
# 259: "moving-other-vehicle"
  • Please refer to std::vector<int> DYNAMIC_CLASSES in our code :).

How to Run ERASOR

We will explain how to run our code on seq 05 of the KITTI dataset as an example.

Step 1. Build naive map

kittimapgen

  • Set the following parameters in launch/mapgen.launch.
    • target_rosbag: The name of target rosbag, e.g. 05_2350_to_2670_w_interval_2_node.bag
    • save_path: The path where the naively accumulated map is saved.
  • Launch mapgen.launch and play corresponding rosbag on the other bash as follows:
roscore # (Optional)
roslaunch erasor mapgen.launch
rosbag play 05_2350_to_2670_w_interval_2_node.bag
  • Then, dense map and voxelized map are auto-saved at the save path. Note that the dense map is used for evaluation to fill corresponding labels. The voxelized map will be an input of step 2 as a naively accumulated map.

Step 2. Run ERASOR erasor

  • Set the following parameters in config/seq_05.yaml.

    • initial_map_path: The path of naively accumulated map
    • save_path: The path where the filtered static map is saved.
  • Run the following command for each bash.

roscore # (Optional)
roslaunch erasor run_erasor.launch target_seq:="05"
rosbag play 05_2350_to_2670_w_interval_2_node.bag

News (22.03.01): The submap module is employed to speed up when extracing map VOI.

Plase check the below rosparams in run_erasor.launch:

<rosparam param="/large_scale/is_large_scale">true</rosparam>
<rosparam param="/large_scale/submap_size">160.0</rosparam>

Note that appropriate submap_size is > 2 * max_range.

  • IMPORTANT: After finishing running ERASOR, run the following command to save the static map as a pcd file on another bash.
  • "0.2" denotes voxelization size.
rostopic pub /saveflag std_msgs/Float32 "data: 0.2"
  • Then, you can see the printed command as follows:

fig_command

  • The results will be saved under the save_path folder, i.e. $save_path$/05_result.pcd.

Calculate PR/RR

You can check our results directly.

  • First, download all pcd materials.
wget https://urserver.kaist.ac.kr/publicdata/erasor/erasor_paper_pcds.zip
unzip erasor_paper_pcds.zip

Then, run the analysis code as follows:

python analysis.py --gt $GT_PCD_PATH$ --est $EST_PCD_PATH$

E.g,

python analysis.py --gt /home/shapelim/erasor_paper_pcds/gt/05_voxel_0_2.pcd --est /home/shapelim/erasor_paper_pcds/estimate/05_ERASOR.pcd

NOTE: For estimating PR/RR, more dense pcd file, which is generated in the mapgen.launch procedure, is better to estimate PR/RR precisely.

Benchmark

  • Error metrics are a little bit different from those in the paper:

    Seq. PR [%] RR [%]
    00 91.72 97.00
    01 91.93 94.63
    02 81.08 99.11
    05 86.98 97.88
    07 92.00 98.33
  • But we provide all pcd files! Don't worry. See Visualization of All the State-of-the-arts Section.

Visualization of All the State-of-the-arts

  • First, download all pcd materials.
wget https://urserver.kaist.ac.kr/publicdata/erasor/erasor_paper_pcds.zip
unzip erasor_paper_pcds.zip
  • Set parameters in config/viz_params.yaml correctly

    • abs_dir: The absolute directory of pcd directory
    • seq: Target sequence (00, 01, 02, 05, or 07)
  • After setting the parameters, launch following command:

roslaunch erasor compare_results.launch

ERASOR in the Wild

In your own dataset

To check generalization of ERASOR, we tested ERASOR in more crowded environments. In that experiment, Velodyne Puck 16 was employed, and poses are estimated by LIO-SAM.

Satellite map Pcd map by LIO-SAM

When running ERASOR in your own environments, please refer to src/offline_map_updater/main_in_your_env.cpp file and launch/run_erasor_in_your_env_vel16.launch.

You can learn how to set experimental setting by repeating our pre-set configurations. Please follow our instructions.

  • First, download pre-set dataset.
wget https://urserver.kaist.ac.kr/publicdata/erasor/bongeunsa_dataset.zip
unzip bongeunsa_dataset.zip
  • Modify data_dir, MapUpdater/initial_map_path, and MapUpdater/save_path in config/your_own_env_vel16.yaml to be right directory for your machine, where data_dir should consist of following components as follows:
`data_dir`
_____pcds
     |___000000.pcd
     |___000001.pcd
     |___000002.pcd
     |...
_____dense_global_map.pcd
_____poses_lidar2body.csv
_____...
  • Next, launch launch/run_erasor_in_your_env_vel16.launch as follows:
roslaunch erasor run_erasor_in_your_env_vel16.launch

Results

Note: Setting appropriate parameters

  • As shown in config, depending on your own sensor configuration, parameters must be changed. In particular, min_h and max_h, and th_bin_max_h should be changed (note that min_h and max_h, and th_bin_max_h is w.r.t. your body frame of a query pcd file.)
  • If you use a low-channel LiDAR sensor such as Velodyne Puck-16, max_r and num_rings must be set as smaller values like config/your_own_env_vel16.yaml to guarantee the estimated normal vector for each bin is considered to be orthogonal to the ground.
  • If too many points are considered as ground points for each bin, then reduce the value of gf_dist_thr.

Citation

If you use our code or method in your work, please consider citing the following:

@article{lim2021erasor,
title={ERASOR: Egocentric Ratio of Pseudo Occupancy-Based Dynamic Object Removal for Static 3D Point Cloud Map Building},
author={Lim, Hyungtae and Hwang, Sungwon and Myung, Hyun},
journal={IEEE Robotics and Automation Letters},
volume={6},
number={2},
pages={2272--2279},
year={2021},
publisher={IEEE}
}

More Repositories

1

patchwork

SOTA fast and robust ground segmentation using 3D point cloud (accepted in RA-L'21 w/ IROS'21)
C++
475
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