Giter VIP home page Giter VIP logo

imaging_lidar_place_recognition's Introduction

Robust Place Recognition using an Imaging Lidar

A place recognition package using high-resolution imaging lidar. For best performance, a lidar equipped with more than 64 uniformly distributed channels is strongly recommended, i.e., Ouster OS1-128 lidar.

drawing


Dependency

  • ROS
  • DBoW3
    cd ~/Downloads/
    git clone https://github.com/rmsalinas/DBow3.git
    cd ~/Downloads/DBow3/
    mkdir build && cd build
    cmake -DCMAKE_BUILD_TYPE=Release ..
    sudo make install
    

Install Package

Use the following commands to download and compile the package.

cd ~/catkin_ws/src
git clone https://github.com/TixiaoShan/imaging_lidar_place_recognition.git
cd ..
catkin_make

Notes

Download

The three datasets used in the paper can be downloaded from from Google Drive. The lidar used for data-gathering is Ouster OS1-128.

https://drive.google.com/drive/folders/1G1kE8oYGKj7EMdjx7muGucXkt78cfKKU?usp=sharing

Point Cloud Format

The author defined a customized point cloud format, PointOuster, in parameters.h. The customized point cloud is projected onto various images in image_handler.h. If you are using your own dataset, please modify these two files to accommodate data format changes.

Visualization logic

In the current implementation, the package subscribes to a path message that is published by a SLAM framework, i.e., LIO-SAM. When a new point cloud arrives, the package associates the point cloud with the latest pose in the path. If a match is detected between two point clouds, an edge marker is plotted between these two poses. The reason why it's implemented in this way is that SLAM methods usually suffer from drift. If a loop-closure is performed, the associated pose of a point cloud also needs to be updated. Thus, this visualization logic can update point clouds using the updated path rather than using TF or odometry that cannot be updated later.

Image Crop

It's recommended to set the image_crop parameter in params.yaml to be 196-256 when testing the indoor and handheld datasets. This is because the operator is right behind the lidar during the data-gathering process. Using features extracted from the operator body may cause unreliable matching. This parameter should be set to 0 when testing the Jackal dataset, which improves the reverse visiting detection performance.


Test Package

  1. Run the launch file:
roslaunch imaging_lidar_place_recognition run.launch
  1. Play existing bag files:
rosbag play indoor_registered.bag -r 3

Paper

Thank you for citing our paper if you use any of this code or datasets.

@inproceedings{robust2021shan,
  title={Robust Place Recognition using an Imaging Lidar},
  author={Shan, Tixiao and Englot, Brendan and Duarte, Fabio and Ratti, Carlo and Rus Daniela},
  booktitle={IEEE International Conference on Robotics and Automation (ICRA)},
  pages={5469-5475},
  year={2021},
  organization={IEEE}
}

Acknowledgement

  • The point clouds in the provided datasets are registered using LIO-SAM.
  • The package is heavily adapted from Vins-Mono.

imaging_lidar_place_recognition's People

Contributors

tixiaoshan 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

imaging_lidar_place_recognition's Issues

Point Cloud Format question

Hi,author,
Thanks for sharing your great work!
I have adjust the params.yaml to fit my OS1-64 laser,image_width: 1024, image_height: 64 and the cloud_topic,
But I can't get a good image_intensity like your demo or parper, It looks like there is a offset in different rows.
Is your data preprocessed ? Or there is something wrong with my params.yaml?
image
thanks for your answering!

The kitti dataset

Your work is amazing. I'm new to this, can you tell me how to run the kitti dataset with it? Thanks.

Reproducing intensity image on indoor dataset

I am trying to extract the intensity image of the indoor dataset, but am running into issues.

This is the result of running your code on the indoor dataset

This is the result of running your code on your rooftoop dataset (from LIO-SAM), which looks great to me! That bagfile does not include ring, time or noise data, however. Must be an ouster driver issue?

Any ideas where the problem could be? Thanks.

Process died

Hello,
thank you for sharing you work.
When I run the launch file, it show

[imaging_lidar_place_recognition_main-2] process has died [pid 20188, exit code -11, cmd /home/yunqi/snap/SLAM/loop_closure/Imaging/devel/lib/imaging_lidar_place_recognition/imaging_lidar_place_recognition_main __name:=imaging_lidar_place_recognition_main __log:=/home/yunqi/.ros/log/d43f6938-7f32-11ec-a38d-a87d12044727/imaging_lidar_place_recognition_main-2.log].
log file: /home/yunqi/.ros/log/d43f6938-7f32-11ec-a38d-a87d12044727/imaging_lidar_place_recognition_main-2*.log

How can I solve it?
One possible reason might be the version of OpenCV. I compile with openCV4 and it shows some warning

/usr/bin/ld: warning: libopencv_video.so.3.2, needed by /usr/lib/x86_64-linux-gnu/libopencv_shape.so, may conflict with libopencv_video.so.4.2
/usr/bin/ld: warning: libopencv_videoio.so.3.2, needed by /usr/lib/x86_64-linux-gnu/libopencv_superres.so, may conflict with libopencv_videoio.so.4.2
/usr/bin/ld: warning: libopencv_photo.so.3.2, needed by /usr/lib/x86_64-linux-gnu/libopencv_videostab.so, may conflict with libopencv_photo.so.4.2
/usr/bin/ld: warning: libopencv_calib3d.so.3.2, needed by /usr/lib/x86_64-linux-gnu/libopencv_videostab.so, may conflict with libopencv_calib3d.so.4.2
/usr/bin/ld: warning: libopencv_features2d.so.3.2, needed by /usr/lib/x86_64-linux-gnu/libopencv_videostab.so, may conflict with libopencv_features2d.so.4.2
/usr/bin/ld: warning: libopencv_dnn.so.3.4, needed by /usr/local/lib/gcc/x86_64-linux-gnu/9.2.0/../../../libDBoW3.so, may conflict with libopencv_dnn.so.4.2
/usr/bin/ld: warning: libopencv_highgui.so.3.4, needed by /usr/local/lib/gcc/x86_64-linux-gnu/9.2.0/../../../libDBoW3.so, may conflict with libopencv_highgui.so.4.2
/usr/bin/ld: warning: libopencv_ml.so.3.4, needed by /usr/local/lib/gcc/x86_64-linux-gnu/9.2.0/../../../libDBoW3.so, may conflict with libopencv_ml.so.4.2
/usr/bin/ld: warning: libopencv_objdetect.so.3.4, needed by /usr/local/lib/gcc/x86_64-linux-gnu/9.2.0/../../../libDBoW3.so, may conflict with libopencv_objdetect.so.4.2
/usr/bin/ld: warning: libopencv_shape.so.3.4, needed by /usr/local/lib/gcc/x86_64-linux-gnu/9.2.0/../../../libDBoW3.so, may conflict with libopencv_shape.so.3.2
/usr/bin/ld: warning: libopencv_shape.so.3.4, needed by /usr/local/lib/gcc/x86_64-linux-gnu/9.2.0/../../../libDBoW3.so, may conflict with libopencv_shape.so.3.2
/usr/bin/ld: warning: libopencv_stitching.so.3.4, needed by /usr/local/lib/gcc/x86_64-linux-gnu/9.2.0/../../../libDBoW3.so, may conflict with libopencv_stitching.so.4.2
/usr/bin/ld: warning: libopencv_superres.so.3.4, needed by /usr/local/lib/gcc/x86_64-linux-gnu/9.2.0/../../../libDBoW3.so, may conflict with libopencv_superres.so.3.2
/usr/bin/ld: warning: libopencv_superres.so.3.4, needed by /usr/local/lib/gcc/x86_64-linux-gnu/9.2.0/../../../libDBoW3.so, may conflict with libopencv_superres.so.3.2
/usr/bin/ld: warning: libopencv_videostab.so.3.4, needed by /usr/local/lib/gcc/x86_64-linux-gnu/9.2.0/../../../libDBoW3.so, may conflict with libopencv_videostab.so.3.2
/usr/bin/ld: warning: libopencv_videostab.so.3.4, needed by /usr/local/lib/gcc/x86_64-linux-gnu/9.2.0/../../../libDBoW3.so, may conflict with libopencv_videostab.so.3.2
/usr/bin/ld: warning: libopencv_viz.so.3.4, needed by /usr/local/lib/gcc/x86_64-linux-gnu/9.2.0/../../../libDBoW3.so, may conflict with libopencv_viz.so.3.2
/usr/bin/ld: warning: libopencv_viz.so.3.4, needed by /usr/local/lib/gcc/x86_64-linux-gnu/9.2.0/../../../libDBoW3.so, may conflict with libopencv_viz.so.3.2
/usr/bin/ld: warning: libopencv_calib3d.so.3.4, needed by /usr/local/lib/gcc/x86_64-linux-gnu/9.2.0/../../../libDBoW3.so, may conflict with libopencv_calib3d.so.4.2
/usr/bin/ld: warning: libopencv_features2d.so.3.4, needed by /usr/local/lib/gcc/x86_64-linux-gnu/9.2.0/../../../libDBoW3.so, may conflict with libopencv_features2d.so.4.2
/usr/bin/ld: warning: libopencv_flann.so.3.4, needed by /usr/local/lib/gcc/x86_64-linux-gnu/9.2.0/../../../libDBoW3.so, may conflict with libopencv_flann.so.4.2
/usr/bin/ld: warning: libopencv_photo.so.3.4, needed by /usr/local/lib/gcc/x86_64-linux-gnu/9.2.0/../../../libDBoW3.so, may conflict with libopencv_photo.so.4.2
/usr/bin/ld: warning: libopencv_video.so.3.4, needed by /usr/local/lib/gcc/x86_64-linux-gnu/9.2.0/../../../libDBoW3.so, may conflict with libopencv_video.so.4.2
/usr/bin/ld: warning: libopencv_videoio.so.3.4, needed by /usr/local/lib/gcc/x86_64-linux-gnu/9.2.0/../../../libDBoW3.so, may conflict with libopencv_videoio.so.4.2
/usr/bin/ld: warning: libopencv_imgcodecs.so.3.4, needed by /usr/local/lib/gcc/x86_64-linux-gnu/9.2.0/../../../libDBoW3.so, may conflict with libopencv_imgcodecs.so.3.2
/usr/bin/ld: warning: libopencv_imgcodecs.so.3.4, needed by /usr/local/lib/gcc/x86_64-linux-gnu/9.2.0/../../../libDBoW3.so, may conflict with libopencv_imgcodecs.so.4.2
/usr/bin/ld: warning: libopencv_imgproc.so.3.4, needed by /usr/local/lib/gcc/x86_64-linux-gnu/9.2.0/../../../libDBoW3.so, may conflict with libopencv_imgproc.so.3.2
/usr/bin/ld: warning: libopencv_imgproc.so.3.4, needed by /usr/local/lib/gcc/x86_64-linux-gnu/9.2.0/../../../libDBoW3.so, may conflict with libopencv_imgproc.so.4.2
/usr/bin/ld: warning: libopencv_core.so.3.4, needed by /usr/local/lib/gcc/x86_64-linux-gnu/9.2.0/../../../libDBoW3.so, may conflict with libopencv_core.so.3.2
/usr/bin/ld: warning: libopencv_core.so.3.4, needed by /usr/local/lib/gcc/x86_64-linux-gnu/9.2.0/../../../libDBoW3.so, may conflict with libopencv_core.so.4.2
/usr/bin/ld: warning: libopencv_flann.so.3.2, needed by //usr/lib/x86_64-linux-gnu/libopencv_calib3d.so.3.2, may conflict with libopencv_flann.so.4.2

What's your version of openCV

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.