• Stars
    star
    188
  • Rank 205,563 (Top 5 %)
  • Language
    C++
  • License
    BSD 3-Clause "New...
  • Created about 4 years ago
  • Updated 2 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

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++
71
star
2

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++
71
star
3

gazebo_sfm_plugin

A plugin for simulation of human pedestrians in ROS Gazebo
C++
58
star
4

upo_robot_navigation

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

hunav_sim

A simulator of human navigation behaviors for Robotics based on ROS2
C++
46
star
6

lightsfm

A lightweight Social Force Model library
C++
45
star
7

social_force_window_planner

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

dynamic_obstacle_detector

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

ars548_ros

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

nav2_social_costmap_plugin

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

hunav_gazebo_wrapper

A ROS2 wrapper to use the HuNavSim with the Gazebo Simulator
Python
18
star
12

topological-montecarlo-localization

Global Monte Carlo-based localization from GIS-based graphs
C++
15
star
13

laserscan_merger

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

range_only_localization

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

nonlinear_optimization

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

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
17

RRT_MEDIRL

RRT_MEDIRL implementation for Tensorflow
C++
8
star
18

og-sgg

Ontology-Guided Scene Graph Generation
Python
8
star
19

sfm_local_controller

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

2DLaserPeopleBenchmark

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

cloud_concatenator

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

lightpomcp

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

rgbd_odom

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

marsupial_optimizer

C++
5
star
25

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
26

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
27

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
28

seekthermaltemp

ROS node to obtain temperatures from raw data's thermal camera Seek thermal
Python
3
star
29

depth2cloud

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

marsupial_simulator_ros2

ROS2-Based Gazebo Simulation of Marsupial UAV-UGV Systems Connected by Hanging Tether
Python
2
star
31

laserscan_labeler

Tool for labeling laser scan data from ROS bags
Python
2
star
32

dbscan_line

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

teresa-wsbs

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

pedlab

A custom pedestrian simulator
C++
2
star
35

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
36

lazy_theta_star_planners

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

marsupial_simulator

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

marsupial_mission_interface

Interface based on ActionLib to performance mission in Marsupial system
C++
1
star
39

upo_laser_people_detector

People detection using 2D LiDAR and Deep Learning for ROS 2
C++
1
star
40

dll2d

C++
1
star
41

string2marker

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

fire_node

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

bag2mp4

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

nix_simulator

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

vinodom

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

siar_simulator

C++
1
star
47

Radar_experiments

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

upo_stage_ros

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

rva-course-material

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

bag_teleop

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