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

Revision history [back]

I believe octomap_server may do what you're looking for. This package does not try to do the localization portion of SLAM -- it only builds maps based on incoming scan data.

  • Octomap_server requires you to publish a tf transform between the static world frame and your sensor frame. So, you might need to write a node to re-publish your odometry messages as tf transforms, if you really only have raw odometry messages.

  • You may also need to create a node to convert raw laser_scan data into 3D point_cloud data for octomap_server. The laser_pipeline package provides some good tutorials on how to do this. In particular, the scan_to_cloud_filter_chain node may provide what you need out-of-the-box.

Once running, octomap_server should build a 3D map from the laser scan data. If you only want 2D maps, you can pull those out using the projected_map topic.

Keep in mind that raw odometry data (e.g. from wheel encoders or IMUs) often has a tendency to drift or slip over time. That's why many mapping solutions use SLAM to correct for errors in the raw odometry data during the mapping process. However, if you have a good source of odometry data, then full SLAM may be overkill and the octomap_server may be just what you're looking for!