DLL: Direct Lidar Localization

Related tags

Deep Learningdll
Overview

DLL: Direct Lidar Localization

Summary

This package presents DLL, a direct map-based localization technique using 3D LIDAR for its application to aerial robots. DLL implements a point cloud to map registration based on non-linear optimization of the distance of the points and the map, thus not requiring features, neither point correspondences. Given an initial pose, the method is able to track the pose of the robot by refining the predicted pose from odometry. The method performs much better than Monte-Carlo localization methods and achieves comparable precision to other optimization-based approaches but running one order of magnitude faster. The method is also robust under odometric errors.

DLL is fully integarted in Robot Operating System (ROS). It follows the general localization apparoch of ROS, DLL makes use of sensor data to compute the transform that better fits the robot odometry TF into the map. Although an odometry system is recommended for fast and accurate localization, DLL also performs well without odometry information if the robot moves smoothly.

DLL experimental results in different setups

Software dependencies

There are not hard dependencies except for Google Ceres Solver and ROS:

Hardware requirements

DLL has been tested in a 10th generation Intel i7 processor, with 16GB of RAM. No graphics card is needed. The optimization is currently configured to be single threaded. You can easily reduce the processing time by a 33% just increasing the number of threads used by Ceres Solver.

Compilation

Download this source code into the src folder of your catkin worksapce:

$ cd catkin_ws/src
$ git clone https://github.com/robotics-upo/dll

Compile the project:

$ cd catkin_ws
$ source devel/setup.bash
$ catkin_make

How to use DLL

You can find several examples into the launch directory. The module needs the following input information:

  • A map of the environment. This map is provided as a .bt file
  • You need to provide an initial position of the robot into the map.
  • base_link to odom TF. If the sensor is not in base_link frame, the corresponding TF from sensor to base_link must be provided.
  • 3D point cloud from the sensor. This information can be provided by a 3D LIDAR or 3D camera.
  • IMU information is used to get roll and pitch angles. If you don't have IMU, DLL will take the roll and pitch estimations from odometry as the truth values.

Once launched, DLL will publish a TF between map and odom that alligns the sensor point cloud to the map.

When a new map is provided, DLL will compute the Distance Field grid. This file will be automatically generated on startup if it does not exist. Once generated, it is stored in the same path of the .bt map, so that it is not needed to be computed in future executions.

As example, you can download 5 datasets from the Service Robotics Laboratory repository (https://robotics.upo.es/datasets/dll/). The example launch files are prepared and configured to work with these bags. You can see the different parameters of the method. Notice that, except for mbzirc.bag, these bags do not include odometry estimation. For this reason, as an easy work around, the lauch files publish a fake odometry that is the identity matrix. DLL is faster and more accurate when a good odometry is available.

Cite

DLL has been accepted for publication in IROS 2021.

F. Caballero and L. Merino. "DLL: Direct LIDAR Localization. A map-based localization approach for aerial robots". Sumbitted to the International Conference on Intelligent Robots and Systems, IROS 2021.

You can download preliminar version of the the paper from arXiv

Comments
  • Using Livox mid 70 get bad result

    Using Livox mid 70 get bad result

    Hi, I use Livox mid 70 with wheel odometry and IMU, but the localization result is not good, the robot pose always "jump" when running. any idea to make a better result (stable, smooth, continues path)

    opened by gongyue666 9
  • Run other datasets

    Run other datasets

    hello!I saved a .ot file in dll/maps. And <arg name="map" default="myown.ot" /> But when I run the program , it shows "NULL otcomap". How come?Where else do I need to set the path?

    opened by MIke-1118 6
  • tested the given bag failed

    tested the given bag failed

    Hi, thanks for your great work! I have download the given bag for test the dll,but when i launched the launch file,it always shows the error,which is : " Octomap loaded Map size: x: 37.2 to 92.75 y: 41.95 to 95.65 z: -10.4 to 0.15 Res: 0.05 Error opening file /home/whx/study/dll_ws/src/dll/maps/airsim.grid for reading Computing 3D occupancy grid. This will take some time... [ INFO] [1640669470.668451692, 1614448809.604375476]: Progress: 0.000000 % [ INFO] [1640669471.163893210, 1614448810.107720910]: Progress: 0.021567 % [ INFO] [1640669471.668560708, 1614448810.612384198]: Progress: 0.039648 % [ INFO] [1640669472.172075265, 1614448811.115887848]: Progress: 0.053874 % [ INFO] [1640669472.680451449, 1614448811.624293216]: Progress: 0.065055 % [ INFO] [1640669473.184041975, 1614448812.127884273]: Progress: 0.073926 % ... ... [bag_player-2] process has finished cleanly log file: /home/whx/.ros/log/5879e12a-679f-11ec-9f57-c0e43482dfff/bag_player-2*.log " I have noticed there is a closed issue which talk about it,so i repeated the same test for many times.But it didn't work.

    I hope someone can help me solve the problem.

    Best wishes

    opened by numb0824 2
  • open map file failed

    open map file failed

    Thanks for your great works! I want to run your code just used roslaunch dll airsim1.launch and changed the true path about the .bag. But I meet the following error Screenshot from 2021-11-30 10-16-11 Could you help me how to solve the problem? Thanks.

    opened by huangsiyuan0717 2
  • Transform of input map

    Transform of input map

    Hello!

    I'd first like to thank you for this work, it's very interesting!

    I have a question regarding the internal representation of the map: when looking through the code I notice that you subtract the minimum values from each axis of the points. I suppose this is relevant for the method? I got some (obviously) poor results when I assumed the input map and internal representation were the same.

    I think it would be nice to make this clearer in the readme, or potentially add some transform between the original map and the internal representation such that the initial position set in the launch file could be relative the original map.

    opened by MartinEekGerhardsen 3
Releases(v1.1)
  • v1.1(Mar 22, 2022)

    Improved memory allocation and solver parameterization

    • Added use_yaw_increments parameter that uses yaw increments from IMU since last LIDAR update as initial guess for the optimizer. This is a good choice when robot performs very fast yaw rotations
    • Added grid trilinear interpolation computation online. This will reduce the DLL memory requirements by a factor of 7 approximatelly
    • Added parameters to set solver max iterations and max threads
    • Added comprehensive message when .grid files is no found
    Source code(tar.gz)
    Source code(zip)
  • v1.0(Mar 22, 2022)

    Initial Commit

    • This version contains the source code related wit the IROS paper detailed in the README
    • Some cleaning has been done to make it simpler to understand
    Source code(tar.gz)
    Source code(zip)
Owner
Service Robotics Lab
Service Robotics, Autonomous Robot Navigation, Machine Learning, Social Robotics
Service Robotics Lab
Multivariate Boosted TRee

Multivariate Boosted TRee What is MBTR MBTR is a python package for multivariate boosted tree regressors trained in parameter space. The package can h

SUPSI-DACD-ISAAC 61 Dec 19, 2022
This is the official PyTorch implementation for "Mesa: A Memory-saving Training Framework for Transformers".

Mesa: A Memory-saving Training Framework for Transformers This is the official PyTorch implementation for Mesa: A Memory-saving Training Framework for

Zhuang AI Group 105 Dec 06, 2022
Complex-Valued Neural Networks (CVNN)Complex-Valued Neural Networks (CVNN)

Complex-Valued Neural Networks (CVNN) Done by @NEGU93 - J. Agustin Barrachina Using this library, the only difference with a Tensorflow code is that y

youceF 1 Nov 12, 2021
Hierarchical Aggregation for 3D Instance Segmentation (ICCV 2021)

HAIS Hierarchical Aggregation for 3D Instance Segmentation (ICCV 2021) by Shaoyu Chen, Jiemin Fang, Qian Zhang, Wenyu Liu, Xinggang Wang*. (*) Corresp

Hust Visual Learning Team 145 Jan 05, 2023
Simple Tensorflow implementation of "Adaptive Convolutions for Structure-Aware Style Transfer" (CVPR 2021)

AdaConv — Simple TensorFlow Implementation [Paper] : Adaptive Convolutions for Structure-Aware Style Transfer (CVPR 2021) Note This repository does no

Junho Kim 26 Nov 18, 2022
A Shading-Guided Generative Implicit Model for Shape-Accurate 3D-Aware Image Synthesis

A Shading-Guided Generative Implicit Model for Shape-Accurate 3D-Aware Image Synthesis Figure: Shape-Accurate 3D-Aware Image Synthesis. A Shading-Guid

Xingang Pan 115 Dec 18, 2022
Knowledge Distillation Toolbox for Semantic Segmentation

SegDistill: Toolbox for Knowledge Distillation on Semantic Segmentation Networks This repo contains the supported code and configuration files for Seg

9 Dec 12, 2022
This is the official source code for SLATE. We provide the code for the model, the training code, and a dataset loader for the 3D Shapes dataset. This code is implemented in Pytorch.

SLATE This is the official source code for SLATE. We provide the code for the model, the training code and a dataset loader for the 3D Shapes dataset.

Gautam Singh 66 Dec 26, 2022
ConE: Cone Embeddings for Multi-Hop Reasoning over Knowledge Graphs

ConE: Cone Embeddings for Multi-Hop Reasoning over Knowledge Graphs This is the code of paper ConE: Cone Embeddings for Multi-Hop Reasoning over Knowl

MIRA Lab 33 Dec 07, 2022
Collections for the lasted paper about multi-view clustering methods (papers, codes)

Multi-View Clustering Papers Collections for the lasted paper about multi-view clustering methods (papers, codes). There also exists some repositories

Andrew Guan 10 Sep 20, 2022
This is an official implementation of the High-Resolution Transformer for Dense Prediction.

High-Resolution Transformer for Dense Prediction Introduction This is the official implementation of High-Resolution Transformer (HRT). We present a H

HRNet 403 Dec 13, 2022
Skipgram Negative Sampling in PyTorch

PyTorch SGNS Word2Vec's SkipGramNegativeSampling in Python. Yet another but quite general negative sampling loss implemented in PyTorch. It can be use

Jamie J. Seol 287 Dec 14, 2022
DeepRec is a recommendation engine based on TensorFlow.

DeepRec Introduction DeepRec is a recommendation engine based on TensorFlow 1.15, Intel-TensorFlow and NVIDIA-TensorFlow. Background Sparse model is a

Alibaba 676 Jan 03, 2023
Pytorch implementation of the paper "Enhancing Content Preservation in Text Style Transfer Using Reverse Attention and Conditional Layer Normalization"

Pytorch implementation of the paper "Enhancing Content Preservation in Text Style Transfer Using Reverse Attention and Conditional Layer Normalization"

Dongkyu Lee 4 Sep 18, 2022
Seeing Dynamic Scene in the Dark: High-Quality Video Dataset with Mechatronic Alignment (ICCV2021)

Seeing Dynamic Scene in the Dark: High-Quality Video Dataset with Mechatronic Alignment This is a pytorch project for the paper Seeing Dynamic Scene i

DV Lab 21 Nov 28, 2022
Keras implementation of PersonLab for Multi-Person Pose Estimation and Instance Segmentation.

PersonLab This is a Keras implementation of PersonLab for Multi-Person Pose Estimation and Instance Segmentation. The model predicts heatmaps and vari

OCTI 160 Dec 21, 2022
[CVPR'21] Multi-Modal Fusion Transformer for End-to-End Autonomous Driving

TransFuser This repository contains the code for the CVPR 2021 paper Multi-Modal Fusion Transformer for End-to-End Autonomous Driving. If you find our

695 Jan 05, 2023
OpenVINO黑客松比赛项目

Window_Guard OpenVINO黑客松比赛项目 英文名称:Window_Guard 中文名称:窗口卫士 硬件 树莓派4B 8G版本 一个磁石开关 USB摄像头(MP4视频文件也可以) 软件(库) OpenVINO RPi 使用方法 本项目使用的OPenVINO是是2021.3版本,并使用了

Tango 6 Jul 04, 2021
Reference PyTorch implementation of "End-to-end optimized image compression with competition of prior distributions"

PyTorch reference implementation of "End-to-end optimized image compression with competition of prior distributions" by Benoit Brummer and Christophe

Benoit Brummer 6 Jun 16, 2022
Solver for Large-Scale Rank-One Semidefinite Relaxations

STRIDE: spectrahedral proximal gradient descent along vertices A Solver for Large-Scale Rank-One Semidefinite Relaxations About STRIDE is designed for

48 Dec 20, 2022