LIDAR based localizer

asked 2019-03-13 07:24:11 -0500

arennuit gravatar image

updated 2019-03-13 07:25:40 -0500

Dear all,

We have experience in working on 3D slam and we now would like to use the environment's 3d map generated by the algorithm so as to help our mobile robot localize on the floor. That is we have a wheeled mobile robot equipped with a LIDAR and I would like to use the LIDAR to localize the robot in the 3D map.

I thought of slicing the 3d map at 20cm above the floor (which is the height of my LIDAR) to obtain a 2D map (no longer 3D as it is sliced) of the environment, to be registered on the data incoming from the LIDAR. We can code the 3D slicing into 2D, no problem.

We need to work in 2 different modes:

  • an init mode: where the robot does not know anything on its position but manages to relocalize thanks to registering a LIDAR reading
  • a runtime mode: where the robot knows its previous position (and even odometry) and can localize iteratively based on a small displacement hypothesis

I initially thought that these 2 modes would be easy to solve in 2D, that they were very common, and as a consequence I thought I would find many ROS packages solving the problem. This is not the case and I am very surprised:

  • For sure many people in the robotic community want to record a map in a session and only use it to localize in later sessions, no? Hence not perform SLAM but only localization.
    • Though the only packages I can find seem SLAM only, no localize-only mode (e.g. cartographer, or gmapping)
    • This looks weird, as in 3D, localization can simply be done using ICP. It should be even easier in 2D, no?
    • Cartographer seems to be able to record a session and persist it at a later time using a .pbstream but this does not really allow to input an externally generated map
      • I could find virtually no solution for the init mode localization
    • This also looks weird to me as in 3D thi relocalization problem is often dealt with using bag-of-words techniques

So is 2D localization-only really an issue in the community? And what packages are generally used? Is localization an option of the ROS 2D SLAM packages which I did not find? If this exists but not in ROS, what algorithms or methods are used, then? Are they based on ICP?

And as for the global init localization mode? Are there some ROS packages dealing with the problem? And if not, do you know any algorithm doing just this?

---- EDIT ---- AMCL looks interesting for the runtime mode. What to you for the init mode though?

Thanks for your help,


edit retag flag offensive close merge delete


If you're Looking for standard Global Localization, and not trying to solve the Kidnapped Robot Problem, AMCL has a service for at least attempting it;

global_localization (std_srvs/Empty)

Initiate global localization, wherein all particles are dispersed randomly through the free space in the map.

I've never used it so no idea how well it work.

billy gravatar image billy  ( 2019-03-13 20:33:13 -0500 )edit