ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

For anyone reading this at a later date (like me) there are a few other mapping options currently available:

Mapping only

  • 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.

SLAM

  • rtab_mapping This is a pretty comprehensive SLAM package that will do a lot for you. It has support for kinect and also includes a few things like visual odometry which you will find useful but I don't think it works with LiDAR/point cloud data
  • 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.
  • 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).

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 only

(SLAM) Below are some ROS-compatible options.

  • elevation_mapping Takes in a point cloud and gives you a robot-centric elevation map.
  • voxel_grid Gmapping is the most-integrated SLAM algorithm you can use with ROS, so it works well with the ROS navigation stack (below). It's essentially a ROS wrapper for the Gmapping algorithm you can find on OpenSLAM. Only does have code for implementing a voxel map, 2D SLAM 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.

SLAM

  • rtab_mapping This is a pretty comprehensive SLAM package that will do a lot for you. It has support for kinect and also includes a few things like visual odometry which you will find useful but I don't think it works with LiDAR/point cloud data is a probably the best starting point for anyone new to ROS.
  • 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.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).wrong)

Of these options, I've played with Cartographer, BLAM, LOAM and Gmapping. If you're starting out with ROS and you only need 2D SLAM, I'd recommend Gmapping. If you are experienced with ROS and/or SLAM concepts, I think the 2D version of Cartographer is more accurate and robust than Gmapping. If you need a 3D solution, Cartographer is quite hard to setup, tune and use, but it is still maintained and probably a better solution long-term than BLAM. Can't recommend the LOAM code.

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)

  • 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.
  • rtab_mapping This is a pretty comprehensive package that will do a lot for you. It has support for kinect and also includes a few things like visual odometry.

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 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.

  • Gmapping is the most-integrated SLAM algorithm you can use with ROS, so it works well with the ROS navigation stack (below). It's essentially a ROS wrapper for the Gmapping algorithm you can find on OpenSLAM. Only does 2D SLAM but is a probably the best starting point for anyone new to ROS.
  • 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)

Of these options, I've played with Cartographer, BLAM, LOAM and Gmapping. If you're starting out with ROS and you only need 2D SLAM, I'd recommend Gmapping. If you are experienced with ROS and/or SLAM concepts, I think the 2D version of Cartographer is more accurate and robust than Gmapping. If you need a 3D solution, BLAM and LOAM. Cartographer is quite hard to setup, tune and use, but it is still maintained and probably a better solution long-term than BLAM. Can't recommend the LOAM code.

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)

  • 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.
  • rtab_mapping This is a pretty comprehensive package that will do a lot for you. It has support for kinect and also includes a few things like visual odometry.

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)

Of these options, I've played with Cartographer, BLAM and LOAM. Cartographer is quite hard to setup, tune and use, but it is still maintained and probably a better solution long-term than BLAM. Can't recommend the LOAM code.

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.
  • rtab_mapping This is a pretty comprehensive package that will do a lot for you. It has support for kinect and also includes a few things like visual odometry.

Of these options, I suggest you look into Libpointmatcher or rtab_mapping.

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, but it is still maintained and probably a better solution long-term than BLAM. Can't recommend the LOAM code.

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.
  • rtab_mapping This is a pretty comprehensive package that will do a lot for you. It has support for kinect and also includes a few things like visual odometry.

Of these options, I suggest you look into Libpointmatcher or rtab_mapping.

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, but it is still use. BLAM and LOAM are no longer maintained and probably a better solution long-term than BLAM. Can't so I wouldn't recommend the LOAM code.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 rtab_mapping.rtabmap.