• Stars
    star
    173
  • Rank 213,522 (Top 5 %)
  • Language
    C++
  • License
    BSD 3-Clause "New...
  • Created over 3 years ago
  • Updated 7 months ago

Reviews

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

Repository Details

DLL: Direct Lidar Localization

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

More Repositories

1

plane_detector

Implementation of the fast plane detector as described in the paper "Fast Plane Detection and Polygonalization in noisy 3D Range Images", of Poppinga et al. (IROS 2008)
C++
65
star
2

Heuristic_path_planners

Collection of classes and functions to allow 2D/3D path generation with heuristic algorithms such as A*, Theta* and LazyTheta* and ROS Interfaces
C++
63
star
3

upo_robot_navigation

Metapackage of ROS that contains the packages involved in the navigation system of the UPO robotics lab
C++
55
star
4

gazebo_sfm_plugin

A plugin for simulation of human pedestrians in ROS Gazebo
C++
54
star
5

lightsfm

A lightweight Social Force Model library
C++
36
star
6

social_force_window_planner

Local controller based on DWA which uses Social Force Model (SFM) as predictor
C++
33
star
7

dynamic_obstacle_detector

A simple (but effective) detector of dynamic obstacles in laser scans.
C++
32
star
8

hunav_sim

A simulator of human navigation behaviors for Robotics based on ROS2
C++
31
star
9

topological-montecarlo-localization

Global Monte Carlo-based localization from GIS-based graphs
C++
14
star
10

nav2_social_costmap_plugin

Plugin-based layer for social navigation in the Nav2 system of ROS2
C++
12
star
11

hunav_gazebo_wrapper

A ROS2 wrapper to use the HuNavSim with the Gazebo Simulator
C++
11
star
12

laserscan_merger

A simple ROS node to fuse different lasercan sources in a single laserscan message in a given frame.
C++
10
star
13

range_only_localization

ROS package for robot localization and mapping based on range-only sensors
C++
10
star
14

upo_nav_irl

A C++ implementation of the IRL algorithms RTIRL and RLT. These algorithms replace the MDP framework by a RRT* planner.
C++
9
star
15

nonlinear_optimization

Several ROS Packages for nonlinear optimization including levenberg-marquardt, sparse levenberg-marquardt and bundle adjustment.
C
9
star
16

RRT_MEDIRL

RRT_MEDIRL implementation for Tensorflow
C++
8
star
17

sfm_local_controller

A robot local controller based on the Social Force Model (SFM)
C++
7
star
18

cloud_concatenator

A lightweight package to concatenate up to 9 point clouds. By Luis Merino and David Alejo.
C++
6
star
19

2DLaserPeopleBenchmark

Benchmark codebase for 2D range finder based people detectors using the FROG dataset
Python
6
star
20

lightpomcp

A lightweight implementation of the POMCP algorithm
C++
5
star
21

rgbd_odom

ROS package for robust odometry estimation based on RGBD data
C++
5
star
22

og-sgg

Ontology-Guided Scene Graph Generation
Python
5
star
23

upo_fcn_learning

Package that contains the scripts needed to perform training of a Fully Convolutional Network for the task of robot path planning.
C++
5
star
24

ars548_ros

ROS2 driver for the Continental ARS548 Radar 4D
C++
4
star
25

siar_packages

This includes packages that have been developed in the SIAR project from the Sewer Inspection Urban Challenge of the Echord++ FP7 project. It will also refactor the developments in order to make each piece of the system easier to install.
C++
4
star
26

arduimu_v3

This module reads and filters the measures from a ARDUIMU_V3 device to standard ROS messages. Implements EKF-based filtering to robustly estimate the orientation, velocities and accelerations.
C++
3
star
27

marsupial_optimizer

C++
3
star
28

depth2cloud

Basic ROS module for translating depth images to point clouds with interesting properties such as ROI, etc
C++
3
star
29

seekthermaltemp

ROS node to obtain temperatures from raw data's thermal camera Seek thermal
Python
2
star
30

dbscan_line

A simple algorithm to clusterize 2D points into lines and then dense-objects
C++
2
star
31

teresa-wsbs

TERESA Walking side-by-side package
C++
2
star
32

pedlab

A custom pedestrian simulator
C++
2
star
33

libelium_waspmote_gas_node

Ros node that reads the data acquired by a LIbelium Waspmote PRO OEM sensor and publishes a custom message with all the compiled information.
Python
2
star
34

lazy_theta_star_planners

2D of lazy theta star algorithm
C++
2
star
35

marsupial_simulator

Initial simulation Version for Tethered Marsupial System
C++
1
star
36

laserscan_labeler

Tool for labeling laser scan data from ROS bags
Python
1
star
37

string2marker

Simple Tool to generate a RViz marker from a string topic
C++
1
star
38

fire_node

Detect fire using Python, ROS, and OpenCV
CMake
1
star
39

bag2mp4

Simple Tools to generate images and videos from a ROS bag file
Shell
1
star
40

nix_simulator

Stand-alone package with the developments of the new nix-simulator.
C++
1
star
41

vinodom

Visial Innertial Odometry based on Homography Decomposition
C++
1
star
42

siar_simulator

C++
1
star
43

Radar_experiments

Repository to store configuration files related to the smoke and radar experiments
C++
1
star
44

upo_stage_ros

A modified version of the regular ROS wrapper for the Stage robot simulator
C++
1
star
45

rva-course-material

Course material for the course Robotics and Computer Vision of the Computer Science Bachelor Degree at UPO
Jupyter Notebook
1
star
46

bag_teleop

simple package to easily record bags with joystick buttons
Python
1
star