Localization using a 3D map on a ground vehicle

asked 2022-03-24 19:22:36 -0500

invictus_1 gravatar image

I have a differential drive robot. On my robot, I have mounted a VLP-16 lidar. For localizing my robot I do the following currently:

  1. Convert 3d pointcloud to laserscan using pointcloud to laserscan package
  2. Run gmapping to obtain a map
  3. Run amcl to localize my robot in the map. It works ok, but sometimes it starts giving really bad results. When it acts weirdly, the covariance of amcl pose becomes really high and the particles in amcl go all over the place.

I was thinking of creating a 3d mp and then localize in that using the pointcloud. Any advice on achieving this. So far, I have made the following progress:

  • Able to create a 3d map using octomap.
  • However, haven't found a way to localize in that octomap. Tried humanoid_localization package. It wasn't updated after ros kinetic. I was able to compile it after making a few tweaks, but the node crashes as soon as I run it.
  • I also tried google cartographer. However, whenever I run it on my bag file, it gives me errors related to timestamps ("Encountered a point with a larger stamp than the last point in the cloud"). So far, haven't been able to get a map from that.
  • Also looked at amcl3d package. It also wasn't updated after ros kinetic. Also, I didn't see a straightforward way to make the z-axis value 0. Also, it mentions radio ranging sensors which I don't have on my robot.

Based on this info, I have following questions:

  1. Is there a straightforward and easy way to localize in an octomap? Something similar to amcl but for 3d maps.
  2. Any other existing packages out there that already do what I am trying to do?
  3. Can cartographer 3d mapping and localization be used with ground vehicles? Any advice on solving the timestamp issues that I am facing with the cartographer?

Thank you!

edit retag flag offensive close merge delete