Git Product home page Git Product logo

dll's Introduction

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

dll's People

Contributors

david-alejo avatar fercabe avatar rafaelrey avatar saimonmr 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

dll's Issues

How to obtain the true and estimated values for evaluation?

Hello, how did you obtain the true and estimated values for evaluation? I have some questions about it:
1.My understanding is that the estimated value is in the following code
'''
//Update global TF
Tf: Quaternion q;
q. SetRPY (m roll, m pitch, m yaw);
M_ LastGlobalTf=tf:: Transform (q, tf:: Vector3 (tx, ty, tz)) * odomTf. inverse();
'''
the estimated value is concluding tx, ty, tz, q.
Is it like this?
2. The true value of the catec1 sequence is in the topic "/ground_truth/pose" of the bag file, but fixed difference id between the timestamp of the timestamp of "/ground_truth/pose" and the timestamp of "/lidar_pointcloud". What is the specific difference?
3.How to obtain the true value of airsim1 sequence? What topic is it?

Thank you ! The best wites for you !

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.

How to solve the error:'Grid3d::m_grid' is not a variable in clause 'shared'

Hello, I encountered the following error while compiling the project and would like to know how to solve it. Thank you!
error:
/root/catkin_ws/src/dll-main/src/grid3d.hpp:640:59: error: 'Grid3d::m_grid' is not a variable in clause 'shared'
In file included from /root/catkin_ws/src/dll-main/src/dllnode.hpp:19:0,
from /root/catkin_ws/src/dll-main/src/dll_node.cpp:3:
/root/catkin_ws/src/dll-main/src/grid3d.hpp: In member function 'void Grid3d::computeGrid()':
/root/catkin_ws/src/dll-main/src/grid3d.hpp:640:59: error: 'Grid3d::m_grid' is not a variable in clause 'shared'
In file included from /root/catkin_ws/src/dll-main/src/grid3d_node.cpp:3:0:

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.

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)

check the map bound

In grid3d.hpp, computeDistInterpolation should check if i + gZ + 1 and i + gY + 1 is in the bound of m_grid. I found this leads to a core dump.

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?

Using the odometry from LOAM

You mention in your paper and the comments of your launch files that one could/should use an accurate odometry system.
However, I don't know the requirements or how to achieve that.

I tried to integrate into one single workspace, A-LOAM, and DLL, and run them in parallel; however, even changing the frame names did not work.

The closest example I found to recreate that was in the mbzirc.launch file. However, it says that the odometry is already in the bag file.
In this case, my question is, how can I save the odometry resulting from LOAM into a bag file so that it is usable by DLL?

I appreciate any help you can provide. I want to compare my method with yours in a large-scale dataset. I believe that DLL is one of the best localization algorithms. Therefore, It would be an interesting comparison!

Working with a new reference map

Hi all,

First of all, thank you for your awesome work.
Your code is very well structured and commented on, and that really helps to understand and learn how it works.

I have been trying to implement it on a new dataset.
I was able to run it without issues with the catec example.
However, with my data, I need help to get it to work.

You can find here a small set of my data (together with a launch file that executes your package):

The issue seems to be related to the map, even when I reduced the size of the map drastically, the method still seems to not be able to recognize it.
One interesting fact is that If I play my bag file and load your catec.bt map, the method tries to find the correct alignment and works much better than with my map,
Using my map, after giving the initial pose the current scan stays for a few seconds in that pose and then jumps far away.

I have tried to create smaller and dense maps, however, I have yet to succeed to make it work.
Is there something special I should consider while changing the map (besides the size which was already mentioned in this issue)?

The other question I have is about using the odometry from LOAM, I think I will create another issue for that later.

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

How to run the program?

I'm sorry to bother you. I have no idea that how can i run the program. Can you tell me the relevant instructions? Thanks!

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.