Giter Club home page Giter Club logo

quatro's Introduction

Quatro

Official page of "A Single Correspondence Is Enough: Robust Global Registration to Avoid Degeneracy in Urban Environments", which is accepted @ ICRA'22. NOTE that this repository is the re-implmenation, so it is not exactly same with the original version.

Demo

NEWS (23.1.27)

  • An improved version is under review in the Interntaitonal Journal of Robotics Research~(IJRR)
  • The codes would be refactored and then updated soon!

Characteristics

  • Single hpp file (include/quatro.hpp). It requires other hpp files, though 😅
  • Intuitive usage based on the hierarchical inheritance of the Registration class in Point Cloud Library (PCL). Quatro can be used as follows:
// After the declaration of Quatro,
quatro.setInputSource(srcMatched);
quatro.setInputTarget(tgtMatched);
Eigen::Matrix4d output;
quatro.computeTransformation(output);
  • Robust global registration performance

    • As shown in the below figures, our method shows the most promising performance compared with other state-of-the-art methods.
    • It could be over-claim, yet our method would be more appropriate for terrestrial mobile platforms. Reducing the degree of freedom (DoF) usually makes algorithms be more robust against errors by projecting them into a lower dimension.
      • E.g. 3D-3D correspondences -> 3D-2D correspondences, LOAM -> LeGO-LOAM
    • In this context, our method is the dimension-reduced version of TEASER++!
KITTI dataset NAVER LABS Loc. dataset

Contributors

ToDo

  • Add ROS support
  • Add demo videos
  • Add preprint paper
  • Add diverse examples for other sensor configuration

Contents

  1. Test Env.
  2. How to Build
  3. How to Run Quatro
  4. Citation

Test Env.

The code is tested successfully at

  • Linux 18.04 LTS
  • ROS Melodic

How to Build

ROS Setting

  1. Install the following dependencies
sudo apt install cmake libeigen3-dev libboost-all-dev
  1. Install ROS on a machine.
  2. Then, build Quatro package and enjoy! :) We use catkin tools
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
git clone [email protected]:url-kaist/Quatro.git
cd ~/catkin_ws
catkin build quatro 

Note Quatro requires pmc library, which is automatically installed via 3rdparty/find_dependencies.cmake.

How to Run Quatro

Prerequisites

In this study, fast point feature histogram (FPFH) is utilized, which is widely used as a conventional descriptor for the registration. However, the original FPFH for a 3D point cloud captured by a 64-channel LiDAR sensor takes tens of seconds, which is too slow. In summary, still, feature extraction & matching is the bottleneck for global registration 😟 (in fact, the accuracy is not very important because Quatro is extremely robust against outliers!).

For this reason, we employ voxel-sampled FPFH, which is preceded by voxel-sampling. This is followed by the correspondence test. In addition, we employ Patchwork, which is the state-of-the-art method for ground segmentation, and image projection to reject some subclusters, which is proposed in Le-GO-LOAM. These modules are not presented in our paper!

Finally, we can reduce the computational time of feature extraction & matching, i.e. the front-end of global registration, from tens of seconds to almost 0.2 sec. The overall pipeline is as follows:

Note

For fine-tuning of the parameters to use this code in your own situations, please refer to config folder. In particular, for fine-tuning of Patchwork, please refer to this Wiki

TL;DR

  1. Download toy pcd bins files

The point clouds are from the KITTI dataset, so these are captured by Velodyne-64-HDE

Toy pcds are automatically downloaded. If there is a problem, follow the below commands:

roscd quatro
cd materials
wget https://urserver.kaist.ac.kr/publicdata/quatro/000540.bin
wget https://urserver.kaist.ac.kr/publicdata/quatro/001319.bin
  1. Launch the roslaunch file as follows:
OMP_NUM_THREADS=4 roslaunch quatro quatro.launch

(Unfortunately, for the first run, it shows rather slow and imprecise performance. It may be due to multi-thread issues.)

Visualized inner pipelines Source (red), target (green), and the estimated output (blue)

Citation

If our research has been helpful, please cite the below papers:

@article{lim2022quatro,
    title={A Single Correspondence Is Enough: Robust Global Registration to Avoid Degeneracy in Urban Environments},
    author={Lim, Hyungtae and Yeon, Suyong and Ryu, Suyong and Lee, Yonghan and Kim, Youngji and Yun, Jaeseong and Jung, Euigon and Lee, Donghwan and Myung, Hyun},
    booktitle={Proc. IEEE Int. Conf. Robot. Autom.},
    year={2022},
    pages={Accepted. To appear}
    }
@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 Robot. Autom. Lett.},
    volume={6},
    number={4},
    pages={6458--6465},
    year={2021},
    }

Acknowledgment

This work was supported by the Industry Core Technology Development Project, 20005062, Development of Artificial Intelligence Robot Autonomous Navigation Technology for Agile Movement in Crowded Space, funded by the Ministry of Trade, Industry & Energy (MOTIE, Republic of Korea) and by the research project “Development of A.I. based recognition, judgement and control solution for autonomous vehicle corresponding to atypical driving environment,” which is financed from the Ministry of Science and ICT (Republic of Korea) Contract No. 2019-0-00399. The student was supported by the BK21 FOUR from the Ministry of Education (Republic of Korea).

License

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Copyright

  • All codes on this page are copyrighted by KAIST published under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 License. You must attribute the work in the manner specified by the author. You may not use the work for commercial purposes, and you may only distribute the resulting work under the same license if you alter, transform, or create the work.

quatro's People

Contributors

kimbeomso avatar kimdaebeom avatar limhyungtae avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

quatro's Issues

Module branch

Hi.

I made a trimmed code branch to be used as a module in other packages as here.
If you can create a new separate branch for it, I'd love to push this branch via pull request, if you like it.
(Otherwise, I cannot open a pull request to a new branch from my end)

With the module branch, Quatro can be easily imported and used in other packages as follows:
CMakeLists.txt
Header
Method

Or, simply as explained in here

What are good points of module branch?

Looking into these two branches, we can see that a module branch can be used as submodule in github package easier as third party without any further steps of trimming codes (even those steps cannot be reflected to the original package, as the module is imported as submodule, again)

  • main branch - including official explanation and examples
  • module branch - can be easily added and used as submodule in other packages

Get different transformation results every time

Hi, thanks for sharing the project.
I have tried to process two point clouds collected by myself using your code. Unfortunately, I got different transformation results in all the runs. Only the transformation from the first run is close to the ground truth.

I also noticed you mentioned that the first run of testing your own example is inaccurate and may be related to the multi-thread design. So, how can I avoid the issue? Does it come from FPFH manager?

Thx

Quatro on 2D point clouds

Hi,

First, what an amazing work that you showed here.

I have a quick question regarding the possibility of applying your method on 2D point clouds, do you think that it can gives reasonable results ?

Thank you very much !

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.