Range Image-based LiDAR Localization for Autonomous Vehicles Using Mesh Maps

Overview

Range Image-based 3D LiDAR Localization

This repo contains the code for our ICRA2021 paper: Range Image-based LiDAR Localization for Autonomous Vehicles.

Developed by Xieyuanli Chen, Ignacio Vizzo, Thomas Läbe and Jens Behley.

It uses a novel sensor model with MCL to achieve 3D LiDAR global localization and pose tracking. The sensor model compares the range image of the current LiDAR scan to the synthetic range images rendered from the triangular mesh to update the weight of particles. This method is simple but can be used with different types of LiDAR scanners in different datasets and environments without fine-tuning.

Online localization demo.

Visualizations: Left: the triangular mesh and the localization results; Right: Sub-tile maps

Table of Contents

  1. Introduction
  2. Publication
  3. Dependencies
  4. How to use
  5. Related work
  6. License

Publication

If you use our implementation in your academic work, please cite the corresponding paper:

@inproceedings{chen2021icra,
	author = {X. Chen and I. Vizzo and T. L{\"a}be and J. Behley and C. Stachniss},
	title = {{Range Image-based LiDAR Localization for Autonomous Vehicles}},
	booktitle = icra,
	year = 2021,
	url = {http://www.ipb.uni-bonn.de/pdfs/chen2021icra.pdf},
	codeurl = {https://github.com/PRBonn/range-mcl}
}

Dependencies

The code was tested with Ubuntu 20.04 with its standard python version 3.8.

We are using OpenGL to do achieve fast rendering, so you will need an OpenGL capable graphics card (we use Nvidia cards, e.g. 2080Ti) to be fast.

  • System dependencies related to OpenGL:

    sudo apt-get update 
    sudo apt-get install libgl1-mesa-glx
  • Other system dependencies:

    sudo apt-get update 
    sudo apt-get install libusb-1.0   # open3d 0.12.0 dependency
    sudo apt-get install -y python3-pip
    sudo -H pip3 install --upgrade pip
  • Python dependencies (may also work with different versions than mentioned in the requirements file)

    sudo -H pip3 install -r requirements.txt

How to use

Quick use

For a quick demo, one could download the mesh map and LiDAR data, extract the them in the /data folder following the recommended data structure, and then run:

cd src/
python3 main_range_mcl.py

One could then get the online visualization of range-based MCL as shown in the gif.

More detailed usage

Here, we provide more detailed information about our range-image-based LiDAR localization method, including building mesh maps, evaluating the localization results and more pre-built maps of different datasets.

Build mesh map

To build a mesh map, we use the Poisson surface reconstruction provided by the Open3D library. One need to download the LiDAR data, extract the them in the /data folder following the recommended data structure, and then run:

python3 build_mesh_map.py

Notice that, we used our moving object segmentation method (coming soon) cleaned the scans before building the map. One could also use other methods to clean the map.

For fast calculating and generating range and normal data for LiDAR scans, one could find more details here.

Evaluation

Once finished the localization process, one would get the localization results at /results. To evaluate the localization results, one could check the evaluation.py. For a quick demo, one just need to run

python3 evaluation.py

Collection of mesh maps

Notice that, the mesh maps were generated using the data from KITTI dataset, MulRan dataset and Apollo dataset. Please register on their official website to apply for the original data.

Related work

Puma: Poisson Surface Reconstruction for LiDAR Odometry and Mapping

We also released the implementation of the algorithms described in our paper Poisson Surface Reconstruction for LiDAR Odometry and Mapping. This is a LiDAR Odometry and Mapping pipeline that uses the Poisson Surface Reconstruction algorithm to build the map as a triangular mesh online.

Overlap-localization: Overlap-based 3D LiDAR Monte Carlo Localization

We previously also proposed a learning-based global localization method, called overlap localization. It uses the OverlapNet to train an observation model for Monte Carlo Localization and achieves global localization with 3D LiDAR scans.

License

Copyright 2021, Xieyuanli Chen, Ignacio Vizzo, Thomas Läbe, Jens Behley, Cyrill Stachniss, Photogrammetry and Robotics Lab, University of Bonn.

This project is free software made available under the MIT License. For details see the LICENSE file.

Comments
  • some problem

    some problem

    image

    [email protected]:~/range-mcl/src$ python3 main_range_mcl.py INFO - 2021-06-24 00:21:08,437 - acceleratesupport - OpenGL_accelerate module loaded INFO - 2021-06-24 00:21:08,451 - arraydatatype - Using accelerated ArrayDatatype Load mesh map and initialize map module... lower bound: [-137.51303435084705, -53.88607274849302] upper bound: [170.8931181474161, 237.73366404891496] number of tiles = 8 total number of triangles: 4282269 WARNING - 2021-06-24 00:21:21,473 - numpymodule - Unable to load numpy_formathandler accelerator from OpenGL_accelerate Monte Carlo localization initializing... 段错误 (核心已转储)

    opened by conancheng 2
  • Regd. CARLA data

    Regd. CARLA data

    Hi,

    Thank you for your work and the open source release. I was wondering if you have released the CARLA sequence (mesh map, odometry etc.) from your experiments somewhere?

    opened by karnikram 0
  • Error with the DISPLAY environment variable

    Error with the DISPLAY environment variable

    Hi there, thanks for providing the code to test. However, I got an issue running the code.

    ==================================================================

    Message=index 0 is out of bounds for axis 0 with size 0 Source=F:\Capstone\algorithms\range_mcl\src\utils.py StackTrace: File "F:\Capstone\algorithms\range_mcl\src\utils.py", line 340, in load_poses_kitti inv_frame0 = np.linalg.inv(poses[0]) File "F:\Capstone\algorithms\range_mcl\src\main_range_mcl.py", line 49, in (Current frame) map_poses = load_poses_kitti(map_pose_file, map_calib_file)

    ======================================================================

    I tried to search for the GLFWError 65544 but none of the solutions seems to work. Is there anything idea what is happening?

    Regards Jimmy

    opened by GinWeng 1
  • 20.04 python3.8 can't be running...

    20.04 python3.8 can't be running...

    [email protected]:~/range-mcl-main/src$ python3 main_range_mcl.py INFO - 2021-08-06 11:42:08,929 - acceleratesupport - OpenGL_accelerate module loaded INFO - 2021-08-06 11:42:08,931 - arraydatatype - Using accelerated ArrayDatatype Load mesh map and initialize map module... lower bound: [-137.51303435084705, -53.88607274849302] upper bound: [170.8931181474161, 237.73366404891496] number of tiles = 8 total number of triangles: 4282269 WARNING - 2021-08-06 11:42:12,640 - numpymodule - Unable to load numpy_formathandler accelerator from OpenGL_accelerate Monte Carlo localization initializing... 段错误 (核心已转储) 2021-08-06 14-09-58屏幕截图

    2021-08-06 14-09-33屏幕截图

    opened by conancheng 4
  • How the algorithm runs in real time and its compatibility with solid-state lidar positioning?

    How the algorithm runs in real time and its compatibility with solid-state lidar positioning?

    The work is excellent and I'm honor to study for it.But I have two questions about it: 1、how the algorithm runs in real time not need "velodyne_bin" 2、its compatibility with solid-state lidar ,such as livox I'm looking forward to your answers,thank you Yours sincerely

    opened by PigletPh 8
  • python main_range_mcl.py problem

    python main_range_mcl.py problem

    OS: ubuntu2004 python: Python 3.8.5 gpu: GeForce GTX 1060 drive NVIDIA-SMI 460.56 Driver Version: 460.56 CUDA Version: 11.2

    $ python main_range_mcl.py ... finished frame 1099 with time of: 7.22408e-05 s finished frame 1100 with time of: 5.55515e-05 s Average runtime after convergence: 0.16806003594713895 save the localization results at: ../results/demo_loc_results.npz Exception ignored in: <function GlBuffer.del at 0x7efcd4e45790> Traceback (most recent call last): File "/home/xxx/range-mcl/src/map_renderer/glow.py", line 75, in del AttributeError: 'NoneType' object has no attribute 'glDeleteBuffers' Exception ignored in: <function GlBuffer.del at 0x7efcd4e45790> Traceback (most recent call last): File "/home/xxx/range-mcl/src/map_renderer/glow.py", line 75, in del AttributeError: 'NoneType' object has no attribute 'glDeleteBuffers' Exception ignored in: <function GlProgram.del at 0x7efcd4e4e160> Traceback (most recent call last): File "/home/xxx/range-mcl/src/map_renderer/glow.py", line 482, in del AttributeError: 'NoneType' object has no attribute 'glDeleteProgram' Exception ignored in: <function GlTextureBuffer.del at 0x7efcd4e45ca0> Traceback (most recent call last): File "/home/xxx/range-mcl/src/map_renderer/glow.py", line 128, in del AttributeError: 'NoneType' object has no attribute 'glDeleteBuffers' Exception ignored in: <function GlBuffer.del at 0x7efcd4e45790> Traceback (most recent call last): File "/home/xxx/range-mcl/src/map_renderer/glow.py", line 75, in del AttributeError: 'NoneType' object has no attribute 'glDeleteBuffers' Exception ignored in: <function GlProgram.del at 0x7efcd4e4e160> Traceback (most recent call last): File "/home/xxx/range-mcl/src/map_renderer/glow.py", line 482, in del AttributeError: 'NoneType' object has no attribute 'glDeleteProgram' Exception ignored in: <function GlProgram.del at 0x7efcd4e4e160> Traceback (most recent call last): File "/home/xxx/range-mcl/src/map_renderer/glow.py", line 482, in del AttributeError: 'NoneType' object has no attribute 'glDeleteProgram' Exception ignored in: <function GlTexture2D.del at 0x7efcd4e4c280> Traceback (most recent call last): File "/home/xxx/range-mcl/src/map_renderer/glow.py", line 229, in del AttributeError: 'NoneType' object has no attribute 'glDeleteTextures' Exception ignored in: <function GlTexture2D.del at 0x7efcd4e4c280> Traceback (most recent call last): File "/home/xxx/range-mcl/src/map_renderer/glow.py", line 229, in del AttributeError: 'NoneType' object has no attribute 'glDeleteTextures' Exception ignored in: <function GlTexture2D.del at 0x7efcd4e4c280> Traceback (most recent call last): File "/home/xxx/range-mcl/src/map_renderer/glow.py", line 229, in del AttributeError: 'NoneType' object has no attribute 'glDeleteTextures' Exception ignored in: <function GlFramebuffer.del at 0x7efcd4e4e9d0> Traceback (most recent call last): File "/home/xxx/range-mcl/src/map_renderer/glow.py", line 624, in del AttributeError: 'NoneType' object has no attribute 'glDeleteFramebuffers' Exception ignored in: <function GlTexture2D.del at 0x7efcd4e4c280> Traceback (most recent call last): File "/home/xxx/range-mcl/src/map_renderer/glow.py", line 229, in del AttributeError: 'NoneType' object has no attribute 'glDeleteTextures' Exception ignored in: <function GlTexture2D.del at 0x7efcd4e4c280> Traceback (most recent call last): File "/home/xxx/range-mcl/src/map_renderer/glow.py", line 229, in del AttributeError: 'NoneType' object has no attribute 'glDeleteTextures' Exception ignored in: <function GlTexture2D.del at 0x7efcd4e4c280> Traceback (most recent call last): File "/home/xxx/range-mcl/src/map_renderer/glow.py", line 229, in del AttributeError: 'NoneType' object has no attribute 'glDeleteTextures' Exception ignored in: <function GlRenderbuffer.del at 0x7efcd4e4e5e0> Traceback (most recent call last): File "/home/xxx/range-mcl/src/map_renderer/glow.py", line 591, in del AttributeError: 'NoneType' object has no attribute 'glDeleteRenderbuffers'

    opened by improve100 3
Releases(v1.0)
Owner
Photogrammetry & Robotics Bonn
Photogrammetry & Robotics Lab at the University of Bonn
Photogrammetry & Robotics Bonn
Official Matlab Implementation for "Tiny Obstacle Discovery by Occlusion-aware Multilayer Regression", TIP 2020

Tiny Obstacle Discovery by Occlusion-aware Multilayer Regression Official Matlab Implementation for "Tiny Obstacle Discovery by Occlusion-aware Multil

Xuefeng 5 Jan 15, 2022
On Evaluation Metrics for Graph Generative Models

On Evaluation Metrics for Graph Generative Models Authors: Rylee Thompson, Boris Knyazev, Elahe Ghalebi, Jungtaek Kim, Graham Taylor This is the offic

13 Jan 07, 2023
PixelPick This is an official implementation of the paper "All you need are a few pixels: semantic segmentation with PixelPick."

PixelPick This is an official implementation of the paper "All you need are a few pixels: semantic segmentation with PixelPick." [Project page] [Paper

Gyungin Shin 59 Sep 25, 2022
Multiview 3D object detection on MultiviewC dataset through moft3d.

Voxelized 3D Feature Aggregation for Multiview Detection [arXiv] Multiview 3D object detection on MultiviewC dataset through VFA. Introduction We prop

Jiahao Ma 20 Dec 21, 2022
All of the figures and notebooks for my deep learning book, for free!

"Deep Learning - A Visual Approach" by Andrew Glassner This is the official repo for my book from No Starch Press. Ordering the book My book is called

Andrew Glassner 227 Jan 04, 2023
ArcaneGAN by Alex Spirin

ArcaneGAN by Alex Spirin

Alex 617 Dec 28, 2022
🎃 Core identification module of AI powerful point reading system platform.

ppReader-Kernel Intro Core identification module of AI powerful point reading system platform. Usage 硬件: Windows10、GPU:nvdia GTX 1060 、普通RBG相机 软件: con

CrashKing 1 Jan 11, 2022
Implementation of various Vision Transformers I found interesting

Implementation of various Vision Transformers I found interesting

Kim Seonghyeon 78 Dec 06, 2022
Pairwise model for commonlit competition

Pairwise model for commonlit competition To run: - install requirements - create input directory with train_folds.csv and other competition data - cd

abhishek thakur 45 Aug 31, 2022
This is the replication package for paper submission: Towards Training Reproducible Deep Learning Models.

This is the replication package for paper submission: Towards Training Reproducible Deep Learning Models.

0 Feb 02, 2022
Implementation of trRosetta and trDesign for Pytorch, made into a convenient package

trRosetta - Pytorch (wip) Implementation of trRosetta and trDesign for Pytorch, made into a convenient package

Phil Wang 67 Dec 17, 2022
Efficient Online Bayesian Inference for Neural Bandits

Efficient Online Bayesian Inference for Neural Bandits By Gerardo Durán-Martín, Aleyna Kara, and Kevin Murphy AISTATS 2022.

Probabilistic machine learning 49 Dec 27, 2022
Official Implementation of "Third Time's the Charm? Image and Video Editing with StyleGAN3" https://arxiv.org/abs/2201.13433

Third Time's the Charm? Image and Video Editing with StyleGAN3 Yuval Alaluf*, Or Patashnik*, Zongze Wu, Asif Zamir, Eli Shechtman, Dani Lischinski, Da

531 Dec 20, 2022
CurriculumNet: Weakly Supervised Learning from Large-Scale Web Images

CurriculumNet Introduction This repo contains related code and models from the ECCV 2018 CurriculumNet paper. CurriculumNet is a new training strategy

156 Jul 04, 2022
CoReNet is a technique for joint multi-object 3D reconstruction from a single RGB image.

CoReNet CoReNet is a technique for joint multi-object 3D reconstruction from a single RGB image. It produces coherent reconstructions, where all objec

Google Research 80 Dec 25, 2022
A simple and extensible library to create Bayesian Neural Network layers on PyTorch.

Blitz - Bayesian Layers in Torch Zoo BLiTZ is a simple and extensible library to create Bayesian Neural Network Layers (based on whats proposed in Wei

Pi Esposito 722 Jan 08, 2023
Source code for the paper "PLOME: Pre-training with Misspelled Knowledge for Chinese Spelling Correction" in ACL2021

PLOME:Pre-training with Misspelled Knowledge for Chinese Spelling Correction (ACL2021) This repository provides the code and data of the work in ACL20

197 Nov 26, 2022
Ranger - a synergistic optimizer using RAdam (Rectified Adam), Gradient Centralization and LookAhead in one codebase

Ranger-Deep-Learning-Optimizer Ranger - a synergistic optimizer combining RAdam (Rectified Adam) and LookAhead, and now GC (gradient centralization) i

Less Wright 1.1k Dec 21, 2022
Net2net - Network-to-Network Translation with Conditional Invertible Neural Networks

Net2Net Code accompanying the NeurIPS 2020 oral paper Network-to-Network Translation with Conditional Invertible Neural Networks Robin Rombach*, Patri

CompVis Heidelberg 206 Dec 20, 2022