
For anyone reading this at a later date (like me) there are a few other mapping options currently available:
SLAM
If you want to map your environment and you need a 3D map, you're often wanting to localize your laser scanner or robot at the same time - i.e. Simultaneous Localization and Mapping (SLAM) Below are some ROS-compatible options.
- Google Cartographer Google very recently released this 2D/3D SLAM package that will take laser and/or point cloud data and give you an occupancy map. You can find ROS integration here and Github code here. Not sure how they represent the map internally. Cartographer includes loop-closure.
- Berkley Localization and Mapping (BLAM) is another 3D LiDAR SLAM package. This doesn't have any papers on it that I am aware of, and it isn't being maintained (last commit was over two years ago). This uses the open-source and ROS-compatible Point Cloud Library for some of it's processing. Also does loop-closure
- Laser Odometry and Mapping (LOAM) is another 3D LiDAR SLAM package written by a PhD student. The source code is old and outdated because the student went on to commercialize their code with the company Kaarta. You can find a (somewhat) working version of the LOAM source code here. Does not perform any loop closure, so it's long-term use is quite limited.
- hector_slam/hector_mapping gives you LiDAR-based SLAM for systems with poor/no odometry (may suit you since you don't have wheel encoders). Also outputs an occupancy map. From memory I think this uses an elevation map (someone correct me If I'm wrong)
- rtabmap This is a Graph-based SLAM package that's evolved quite a bit over the years. It has a ROS-wrapper but can also operate as a stand-alone package. See the external website here for full details.
Of these options, I've played with Cartographer, BLAM and LOAM. Cartographer is quite hard to setup, tune and use. BLAM and LOAM are no longer maintained so I wouldn't recommend them now. Rtabmap seems to received a lot of attention and use recently so I'd start with that.
Mapping only
There are some packages that don't do SLAM and are only used for pure mapping (i.e. you'll have to use something else to localize the laser scanner or robot)
- Libpointmatcher While not strictly part of the ROS ecosystem, you can export clouds to a format LPM can then read. LPM is developed and maintained by a group working out of ETH Zurich. The developers have produced a decent number of papers on LPM, so you can get a good idea of what it is capable of by reading those (start with papers by François Pomerleau).
- Point Cloud Library PCL is not a mapping program. It is a collection of libraries for point cloud processing. But it includes many functions for positioning and registering (matching) LiDAR scans. PCL works well with ROS (it started life as a ROS library IIRC) and has more options than anything else out there, but it doesn't have an established mapping process, so you have to build your own mapping program. Having gone this route myself it is definitely an "advanced users only" option.
- elevation_mapping Takes in a point cloud and gives you a robot-centric elevation map.
- voxel_grid the ROS navigation stack does have code for implementing a voxel map, but it's not supported officially so I'd do some thorough research before choosing this option. Uses a voxel grid (obviously).
- octomap/octomap_mapping Implements a 3D octomap (basically a hierarchical voxel grid). Not sure about the level of support though.
Of these options, I suggest you look into Libpointmatcher or rtabmap.
Originally posted by M@t with karma: 2327 on 2017-04-04
This answer was NOT ACCEPTED on the original site
Post score: 12
Original comments
Comment by vkee on 2017-06-27:
Which system has given you the best performance?
Comment by M@t on 2017-06-27:
@vkee I'm currently trying to implement Cartographer, but my LiDAR unit is giving me grief so I haven't been able to collect any data yet. Your best option may be to read the papers associated with each package and use that as an indication.
Comment by vkee on 2017-06-28:
@M@t There are many datasets Google released with Cartographer (http://google-cartographer-ros.readthedocs.io/en/latest/data.html) so you could use those to test it. I am looking into adding odometry info into Cartographer.
Comment by Stigma on 2020-04-30:
Isn't RTAB a SLAM mapping technique according to their website? http://introlab.github.io/rtabmap/
Comment by M@t on 2020-04-30:
Looks like the developers have updated it quite a bit since I last looked at it. Moved it to the SLAM section. Thanks for picking up on that Stigma.
Comment by santK on 2021-12-03:
@M@t
I am trying to localize a robot.
The prior used for localization is osm map with waypoints (or nodes) and line segments connecting them ( or edges). This information is extracted from the map.
For correction part of localization I have 3d point cloud from lidar data.
Currently I am just working on 5 seconds of initial data from rosbag containing the point cloud information. ( I am using ROS melodic)
I fit a model to the ground plane using Ransac.
I need to detect waypoints and line segments connecting the waypoints(edges) from the point cloud now.
If you have any idea on how I should approach the problem or if you know of any resources (or papers) I can look into, please let me know.
Thank you.
Comment by M@t on 2022-02-28:
Hi @santK, the comments section really isn't a good place to ask questions. You should create a new question thread, following the posting guidelines, and that way more people can see your question and help you.