• Stars
    star
    634
  • Rank 68,874 (Top 2 %)
  • Language
    Python
  • License
    MIT License
  • Created about 4 years ago
  • Updated about 1 year ago

Reviews

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

Repository Details

OverlapNet - Loop Closing for 3D LiDAR-based SLAM (chen2020rss)

OverlapNet - Loop Closing for 3D LiDAR-based SLAM

OverlapNet was nominated as the Best System Paper at Robotics: Science and Systems (RSS) 2020

This repo contains the code for our RSS2020 paper, OverlapNet.

OverlapNet is modified Siamese Network that predicts the overlap and relative yaw angle of a pair of range images generated by 3D LiDAR scans.

Developed by Xieyuanli Chen and Thomas Lรคbe.

Pipeline overview of OverlapNet.

Table of Contents

  1. Introduction
  2. Publication
  3. Logs
  4. Dependencies
  5. How to use
  6. Application
  7. License

Publication

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

@inproceedings{chen2020rss, 
		author = {X. Chen and T. L\"abe and A. Milioto and T. R\"ohling and O. Vysotska and A. Haag and J. Behley and C. Stachniss},
		title  = {{OverlapNet: Loop Closing for LiDAR-based SLAM}},
		booktitle = {Proceedings of Robotics: Science and Systems (RSS)},
		year = {2020}
}

The extended journal version of OverlapNet is here (PDF):

@article{chen2021auro,
	author = {X. Chen and T. L\"abe and A. Milioto and T. R\"ohling and J. Behley and C. Stachniss},
	title = {{OverlapNet: A Siamese Network for Computing LiDAR Scan Similarity with Applications to Loop Closing and Localization}},
	journal = {{Autonomous Robots}},
	year = {2021},
	doi = {10.1007/s10514-021-09999-0},
	issn = {1573-7527},
	volume={46},
	pages={61--81},
	url = {http://www.ipb.uni-bonn.de/pdfs/chen2021auro.pdf}
}

News and Logs

New Version

Based on the OverlapTransformer, we propose a novel transformer exploiting sequential LiDAR data to achieve better LiDAR place recognition (code).

We develop a novel lightweight neural network called OverlapTransformer exploiting transformer and achieve fast execution with less than 4 ms per frame in estimating LiDAR scans similarity.

Version 1.2

Version 1.1

  • Added a method to the Infer class for inference with multiple frames versus multiple frames.
  • Updated TensorFlow version in dependencies.
  • Fixed bugs in generating ground truth overlap and yaw.
  • Added an application and a link to our overlap-based MCL implementation.

Version 1.0

Open source initial submission

Dependencies

We are using standalone keras with a tensorflow backend as a library for neural networks.

In order to do training and testing on a whole dataset, you need a nvidia GPU. The demos still are fast enough when using the neural network on CPU.

To use a GPU, first you need to install the nvidia driver and CUDA, so have fun!

  • CUDA Installation guide: link

  • System dependencies:

    sudo apt-get update 
    sudo apt-get install -y python3-pip python3-tk
    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

This repository contains the neural network for doing a detection of loop closing candidates.

For a complete pipline for online LiDAR preprocessing, one could find the fast implementation in our SuMa++.

In this repository, we provide demos to show the functionaly. Additional to that, we explain how to train a model.

Demos

Demo 1: generate different types of data from the LiDAR scan

To try demo 1, you could directly run the script with one command line:

python3 demo/demo1_gen_data.py

The generated data are stored in /data/preprocess_data, and you will get a visualization like this:

For generating range and normal images, we have also a much faster implementation in C (with python interface) available in our repo https://github.com/PRBonn/overlap_localization (look at src/prepare_training).

Demo 2: Inferring overlap and relative yaw angle between two LiDAR scans

To run demo 2, you need to first download the pre-trained model.

Then, you should

  • either copy it into the default location folder data or
  • you need to modify the pretrained_weightsfilename in the config file /config/network.yml accordingly.

Run the second demo script with one command line:

python3 demo/demo2_infer.py

You will get a visualization like this:

Demo 3: Loop closure detection

To run demo 3, you need to first download several data:

  • pre-trained model,
  • KITTI odometry data, where we also provide the covariance information generated from the SLAM,
  • pre-processed data.

If you follow the recommended data structure below, you extract the downloaded data into the folder data.

Otherwise, you need to specify the paths of data in both config/network.yml and config/demo.yml accordingly,

and then run the third demo script with one command line:

python3 demo/demo3_lcd.py

You will get an animation like this:

Demo 4: Generate ground truth overlap and yaw for training and testing

To run demo 4, you need only the raw KITTI odometry data. We are using the same setup as in demo 3.

Run the fourth demo script with one command line:

python3 demo/demo4_gen_gt_files.py

You will generated the ground truth data in data/preprocess_data_demo/ground_truth and get a plot like this:

The colors represent the ground truth overlap value of each frame with respect to the given current frame which is located at (0.0, 0.0).

Train and test a model

For a quick test of the training and testing procedures, you could use our preprocessed data as used in demo3.

We only provide the geometric-based preprocessed data. But it will also be possible to generate other inputs (semantics, intensity) by yourself.

A simple example to generate different types of data from LiDAR scan is given in demo1.

For 3D LiDAR semantic segmentation, we provide a fast c++ inferring library rangenetlib.

Data structure

For training a new model with OverlapNet, you need to first generate preprocessed data and ground truth overlap and yaw angle which you could find examples in demo1 and demo4.

The recommended data structure is as follows:

data
    โ”œโ”€โ”€ 07
    โ”‚   โ”œโ”€โ”€ calib.txt
    โ”‚   โ”œโ”€โ”€ covariance.txt
    โ”‚   โ”œโ”€โ”€ poses.txt
    โ”‚   โ”œโ”€โ”€ depth
    โ”‚   โ”‚   โ”œโ”€โ”€ 000000.npy
    โ”‚   โ”‚   โ”œโ”€โ”€ 000001.npy
    โ”‚   โ”‚   โ””โ”€โ”€ ...
    โ”‚   โ”œโ”€โ”€ normal
    โ”‚   โ”‚   โ”œโ”€โ”€ 000000.npy
    โ”‚   โ”‚   โ”œโ”€โ”€ 000001.npy
    โ”‚   โ”‚   โ””โ”€โ”€ ...
    โ”‚   โ”œโ”€โ”€ velodyne
    โ”‚   โ”‚   โ”œโ”€โ”€ 000000.bin
    โ”‚   โ”‚   โ”œโ”€โ”€ 000001.bin
    โ”‚   โ”‚   โ””โ”€โ”€ ...
    โ”‚   โ””โ”€โ”€ ground_truth
    โ”‚       โ”œโ”€โ”€ ground_truth_overlap_yaw.npz
    โ”‚       โ”œโ”€โ”€ test_set.npz
    โ”‚       โ””โ”€โ”€ train_set.npz
    โ””โ”€โ”€ model_geo.weight

Training

The code for training can be found in src/two_heads/training.py.

If you download our preprocessed data, please put the data into the folder data. If you want to use another directory, please change the parameter data_root_folder in the configuration file network.yml.

Notice that default weight file is set in the configuration file with parameter pretrained_weightsfilename. If you want to train a completely new model from scratch, leave this parameter empty. Otherwise you will fine-tune the provided model.

Then you can start the training with

python3 src/two_heads/training.py config/network.yml

All configuration data is in the yml file. You will find path definitions and training parameters there. The main path settings are:

  • experiments_path: the folder where all the training data and results (log files, tensorboard logs, network weights) will be saved. Default is /tmp. Change this according to your needs
  • data_root_folder: the dataset folder. Is should contain the sequence folders of the dataset e.g. as 00, 01, ..., For the provided preproecessed data, it should be 07.

We provide tensorboard logs in experiment_path/testname/tblog for visualizing training and validation details.

Testing

Once a model has been trained (thus a file .weight with the network weights is available), the performance of the network can be evaluated. Therefore you can start the testing script in the same manner as the training with the testing script:

python3 src/two_heads/testing.py config/network.yml

The configuration file should have the following additional settings:

  • pretrained_weightsfilename: the weight filename mentioned as parameter
  • testing_seqs: sequences to test on, e.g. 00 01. (Please comment out training_seqs.) The pairs where the tests are computed are in the file ground_truth/ground_truth_overlap_yaw.npz. If one still uses the parameter training_seqs, the validation is done on the test sets of the sequences (ground_truth/validation_set.npz) which contain only a small amount of data used for validation during training.

Note that: the provided pre-trained model and preprocessed ground truth are with the constraint that the current frame only finds loop closures in the previous frames.

Application

Overlap-based Monte Carlo Localization

This repo contains the code for our IROS2020 paper: Learning an Overlap-based Observation Model for 3D LiDAR Localization.

It uses the OverlapNet to train an observation model for Monte Carlo Localization and achieves global localization with 3D LiDAR scans.

License

Copyright 2020, Xieyuanli Chen, Thomas Lรคbe, 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.

More Repositories

1

kiss-icp

A LiDAR odometry pipeline that just works
Python
1,380
star
2

depth_clustering

๐Ÿš• Fast and robust clustering of point clouds generated with a Velodyne sensor.
C++
1,105
star
3

lidar-bonnetal

Semantic and Instance Segmentation of LiDAR point clouds for autonomous driving
Python
883
star
4

semantic_suma

SuMa++: Efficient LiDAR-based Semantic SLAM (Chen et al IROS 2019)
C++
876
star
5

semantic-kitti-api

SemanticKITTI API for visualizing dataset, processing data, and evaluating results.
Python
723
star
6

LiDAR-MOS

(LMNet) Moving Object Segmentation in 3D LiDAR Data: A Learning-based Approach Exploiting Sequential Data (RAL/IROS 2021)
Python
552
star
7

vdbfusion

C++/Python Sparse Volumetric TSDF Fusion
C++
428
star
8

SHINE_mapping

๐ŸŒŸ SHINE-Mapping: Large-Scale 3D Mapping Using Sparse Hierarchical Implicit Neural Representations (ICRA' 23)
Python
424
star
9

puma

Poisson Surface Reconstruction for LiDAR Odometry and Mapping
Python
395
star
10

bonnet

Bonnet: An Open-Source Training and Deployment Framework for Semantic Segmentation in Robotics.
Python
320
star
11

range-mcl

Range Image-based LiDAR Localization for Autonomous Vehicles Using Mesh Maps (chen2021icra)
Python
270
star
12

overlap_localization

chen2020iros: Learning an Overlap-based Observation Model for 3D LiDAR Localization.
Python
265
star
13

rangenet_lib

Inference module for RangeNet++ (milioto2019iros, chen2019iros)
C++
238
star
14

refusion

ReFusion: 3D Reconstruction in Dynamic Environments for RGB-D Cameras Exploiting Residuals
C++
235
star
15

bonnetal

Bonnet and then some! Deep Learning Framework for various Image Recognition Tasks. Photogrammetry and Robotics Lab, University of Bonn
Python
226
star
16

PIN_SLAM

๐Ÿ“PIN-SLAM: LiDAR SLAM Using a Point-Based Implicit Neural Representation for Achieving Global Map Consistency
Python
202
star
17

4DMOS

Receding Moving Object Segmentation in 3D LiDAR Data Using Sparse 4D Convolutions (RAL 2022)
Python
201
star
18

visual-crop-row-navigation

This is a visual-servoing based robot navigation framework tailored for navigating in row-crop fields. It uses the images from two on-board cameras and exploits the regular crop-row structure present in the fields for navigation, without performing explicit localization or mapping. It allows the robot to follow the crop-rows accurately and handles the switch to the next row seamlessly within the same framework.
C++
174
star
19

pole-localization

Online Range Image-based Pole Extractor for Long-term LiDAR Localization in Urban Environments
Python
164
star
20

online_place_recognition

Graph-based image sequences matching for the visual place recognition in changing environments.
C++
148
star
21

LiDiff

Python
146
star
22

agribot

The mission of the project is to build an agricultural robot (AgriBot) from scratch with the aim of serving as a data-recording platform in fields. For further information about the design and purpose of the robot, please follow the About the AgriBot Project page
C++
134
star
23

MapClosures

Effectively Detecting Loop Closures using Point Cloud Density Maps
Python
128
star
24

point-cloud-prediction

Self-supervised Point Cloud Prediction Using 3D Spatio-temporal Convolutional Networks
Python
125
star
25

make_it_dense

Make it Dense: Self-Supervised Geometric Scan Completion of Sparse 3D LiDAR Scans in Large Outdoor Environments
Python
124
star
26

ir-mcl

IR-MCL: Implicit Representation-Based Online Global Localization https://arxiv.org/abs/2210.03113
Python
118
star
27

MutiverseOdometry

Code for Simple But Effective Redundant Odometry for Autonomous Vehicles
C++
110
star
28

vpr_relocalization

The framework for visual place recognition in changing enviroments. Matches two sequence of images of arbitrary trajectory overlap.
C++
102
star
29

TARL

TARL: Temporal Consistent 3D LiDAR Representation Learning for Semantic Perception in Autonomous Driving
Python
97
star
30

lidar-visualizer

A LiDAR visualization tool for all your datasets
Python
96
star
31

LocNDF

LocNDF: Neural Distance Field Mapping for Robot Localization
Python
96
star
32

4dNDF

3D LiDAR Mapping in Dynamic Environments using a 4D Implicit Neural Representation (CVPR 2024)
Python
93
star
33

deep-point-map-compression

Python
91
star
34

auto-mos

Automatic Labeling to Generate Training Data for Online LiDAR-based Moving Object Segmentation
Python
89
star
35

segcontrast

Python
87
star
36

3DUIS

Python
77
star
37

lidar_transfer

Code for Langer et al. "Domain Transfer for Semantic Segmentation of LiDAR Data using Deep Neural Networks", IROS, 2020.
Python
70
star
38

hsmcl

C++
60
star
39

descriptor-dr

[ICRA 2023] Learning-Based Dimensionality Reduction for Computing Compact and Effective Local Feature Descriptors
Python
60
star
40

SIMP

Python
59
star
41

extrinsic_calibration

Motion Based Multi-Sensor Extrinsic Calibration
Python
57
star
42

vdbfusion_ros

ROS1 Wrapper for VDBFusion https://github.com/PRBonn/vdbfusion
C++
55
star
43

DCPCR

DCPCR: Deep Compressed Point Cloud Registration in Large-Scale Outdoor Environments
Python
54
star
44

HortiMapping

๐Ÿซ‘ Panoptic Mapping with Fruit Completion and Pose Estimation for Horticultural Robots (IROS' 23)
Python
48
star
45

ContMAV

[CVPR2024] Open-world Semantic Segmentation Including Class Similarity
Python
45
star
46

fast_change_detection

Fast Image-Based Geometric Change Detection Given a 3D Model
C++
44
star
47

contrastive_association

Contrastive Instance Association for 4D Panoptic Segmentation using Sequences of 3D LiDAR Scans
Python
43
star
48

retriever

Point Cloud-based Place Recognition in Compressed Map
Python
38
star
49

4d_plant_registration

Python
38
star
50

tmcl

Text Guided MCL
C++
34
star
51

MaskPLS

Mask-Based Panoptic LiDAR Segmentation for Autonomous Driving, RA-L, 2023
Python
32
star
52

dynamic-point-removal

Static Map Generation from 3D LiDAR Point Clouds Exploiting Ground Segmentation
Python
31
star
53

manifold_python

Python bindings for https://github.com/hjwdzh/Manifold
C++
29
star
54

PS-res-excite

Python
26
star
55

kppr

KPPR: Exploiting Momentum Contrast for Point Cloud-Based Place Recognition
Python
26
star
56

geometrical_stem_detection

Code for fast and accurate geometrical plant stem detection
C++
24
star
57

goPro-meta

App to sample images from goPro Hero 5 video and syncronize sensor frames to them. Output is yaml file and extracted images.
C++
23
star
58

pybonirob

Set of tools to access bonirob datasets in Python
Python
23
star
59

phenobench-baselines

Baselines of the PhenoBench Dataset
Python
18
star
60

voxblox_pybind

Python bindings for the Voxblox library
C++
18
star
61

PartiallyObservedInverseGames.jl

An inverse game solver for inferring objectives from noise-corrupted partial state observations of non-cooperative multi-agent interactions.
Julia
18
star
62

catkin_tools_fetch

๐Ÿ• "fetch" and "update" dependencies of projects in your catkin workspace with a new verb "dependencies" for catkin_tools
Python
16
star
63

nuscenes2kitti

Python
16
star
64

plants_temporal_matcher

This system can perform 3D point-to-point associations between plants' point clouds acquired in different session even in presence of highly repetitive structures and drastic changes.
Python
12
star
65

StyleGenForLabels

StyleGAN-based generation of labels for crop-weed segmentation
Python
11
star
66

ipb_homework_checker

โœ”๏ธ A generic homework checker that we use to automatically check students homework
Python
11
star
67

leaf_mesher

Precise 3D Reconstruction of Plants from UAV Imagery Combining Bundle Adjustment and Template Matching
9
star
68

HAPT

Python
9
star
69

sigf

Image Matching for Crop Fields Using Similarity Invariant Geometric Feature
MATLAB
8
star
70

DG-CWS

Towards Domain Generalization in Crop and Weed Segmentation for Precision Farming Robots
Python
7
star
71

agri-pretraining

Python
6
star
72

leaf-plant-instance-segmentation

In-Field Phenotyping Based on Crop Leaf and Plant Instance Segmentation
Python
5
star
73

MinkowskiPanoptic

Panoptic segmentation baseline implemented based on the MinkowskiEngine library
Python
5
star
74

vdb_to_numpy

Tool to convert VDB grids to numpy arrays.
Jupyter Notebook
4
star
75

g2o_catkin

:octocat: G2O meets catkin
CMake
3
star
76

ipb_workspace

An empty default workspace for development inside IPB lab
3
star
77

plant_pcd_segmenter

High Precision Leaf Instance Segmentation for Phenotyping in Point Clouds Obtained Under Real Field Conditions
2
star
78

Unsupervised-Pre-Training-for-3D-Leaf-Instance-Segmentation

Official repository of Unsupervised Pre-Training for 3D Leaf Instance Segmentation by Roggiolani et al.
Python
1
star