Skip to content

The Mercator Descriptor: A Novel Global Descriptor for Loop Closure Detection

License

Notifications You must be signed in to change notification settings

wangzika/Mercator-Descriptor

Repository files navigation

The Mercator Descriptor: A Novel Global Descriptor for Loop Closure Detection

Welcome to the Mercator Descriptor repository! The Mercator Descriptor is a novel descriptor for loop closure detection and place recognition. This descriptor first uses a Mercator-like projection to generate a rotation-invariant descriptor from a frame of point clouds. Then, by constructing a database to store this new descriptor, it enables efficient matching between historical and current frames for loop closure detection.

** Prerequisites**

** Ubuntu and ROS**

We tested our code on Ubuntu18.04 with ros melodic and Ubuntu20.04 with noetic. Additional ROS package is required:

sudo apt-get install ros-xxx-pcl-conversions

** Eigen**

Following the official Eigen installation, or directly install Eigen by:

sudo apt-get install libeigen3-dev

** ceres-solver (version>=2.1)**

Please kindly install ceres-solver by following the guide on ceres Installation. Notice that the version of ceres-solver should higher than ceres-solver 2.1.0

** GTSAM**

Following the official GTSAM installation, or directly install GTSAM 4.x stable release by:

# Add PPA
sudo add-apt-repository ppa:borglab/gtsam-release-4.0
sudo apt update  # not necessary since Bionic
# Install:
sudo apt install libgtsam-dev libgtsam-unstable-dev

!! IMPORTANT !!: Please do not install the GTSAM of develop branch, which are not compatible with our code! We are still figuring out this issue.

** Prepare for the data**

Since this repo does not implement any method (i.e., LOAM, LIO, etc) for solving the pose for registering the LiDAR scan. So, you have to prepare two set of data for reproducing our results, include: 1) the LiDAR point cloud data. 2) the point cloud registration pose.

  <param name="lidar_path" type="string" value="/media/wzb/Elements/wangzika_date/kitti/date/dataset/sequences/$(arg seq_idx)/velodyne/"/>
  <param name="pose_path" type="string" value="/media/wzb/Elements/wangzika_date/kitti/date/dataset/KITTI_poses/kitti$(arg seq_idx).txt"/>


  <param name="output_timepath" type="string" value="/home/wzb/wangzika_code/mercator_ws/src/MCT/res_out/test/time/time-kitti$(arg seq_idx)_generated.txt"/>
  <param name="output_posepath" type="string" value="/home/wzb/wangzika_code/mercator_ws/src/MCT/res_out/test/wzb_deepm_60_res-kitti$(arg seq_idx)_generated.txt"/>
  <param name="seq_idx" type="string" value="$(arg seq_idx)"/>

Examples

video: Youtube link

** Example-1: place recognition with KITTI Odometry dataset**

** Example-2: loop closure correction on our dataset**

The figure depicts an overview of the Backpack laser scanning system and the campus dataset, as well as the resulting graphs with and without loop closure.

Developers:

Wang Zhibo(e-mail:[email protected])

Credits

We hereby recommend reading Scan Context ,FAST_LIO ,A-LOAM and STD for reference and thank them for making their work public.

License

The source code is released under GPLv3 license.

I am constantly working on improving this code. For any technical issues or commercial use, please contact me([email protected]).

About

The Mercator Descriptor: A Novel Global Descriptor for Loop Closure Detection

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published