hector_mapping is a SLAM approach that can be used without odometry as well as on platforms that exhibit roll/pitch motion (of the sensor, the platform or both). It leverages the high update rate of modern LIDAR systems like the Hokuyo UTM-30LX and provides 2D pose estimates at scan rate of the sensors (40Hz for the UTM-30LX). While the system does not provide explicit loop closing ability, it is sufficiently accurate for many real world scenarios. The system has successfully been used on Unmanned Ground Robots, Unmanned Surface Vehicles, Handheld Mapping Devices and logged data from quadrotor UAVs.
- Author: Stefan Kohlbrecher
- License: BSD
- Repository: tu-darmstadt-ros-pkg
- Source: svn http://tu-darmstadt-ros-pkg.googlecode.com/svn/trunk/hector_slam/hector_mapping
An example video can be seen here:
Further video examples are available in this playlist: http://www.youtube.com/playlist?list=PL0E462904E5D35E29
To use hector_mapping, you need a source of sensor_msgs/LaserScan data (for example a Hokuyo UTM-30LX LIDAR or bagfiles). The node uses tf for transformation of scan data, so the LIDAR does not have to be fixed related to the specified base frame. Odometry data is not needed.
hector_mappinghector_mapping is a node for LIDAR based SLAM with no odometry and low computational resources. For simplicity, the ROS API detailed below provides information about the commonly used options from a user perspective, but not all options that are available for debugging purposes.
Subscribed Topicsscan (sensor_msgs/LaserScan)
- The laser scan used by the SLAM system.
- System command. If the string equals "reset" the map and robot pose are reset to their inital state.
Published Topicsmap_metadata (nav_msgs/MapMetaData)
- Get the map data from this topic, which is latched, and updated periodically.
- Get the map data from this topic, which is latched, and updated periodically
- The estimated robot pose without covariance
- The estimated robot pose with an gaussian estimate of uncertainty
- Call this service to get the map data
Parameters~base_frame (string, default: base_link)
- The name of the base frame of the robot. This is the frame used for localization and for transformation of laser scan data.
- The name of the map frame.
- The name of the odom frame.
- The map resolution [m]. This is the length of a grid cell edge.
- The size [number of cells per axis] of the map. The map is square and has (map_size * map_size) grid cells.
- Location of the origin [0.0, 1.0] of the /map frame on the x axis relative to the grid map. 0.5 is in the middle.
- Location of the origin [0.0, 1.0] of the /map frame on the y axis relative to the grid map. 0.5 is in the middle.
- Threshold for performing map updates [m]. The platform has to travel this far in meters or experience an angular change as described by the map_update_angle_thresh parameter since the last update before a map update happens.
- Threshold for performing map updates [rad]. The platform has to experience an angular change as described by this parameter of travel as far as specified by the map_update_distance_thresh parameter since the last update before a map update happens.
- The map publish period [s].
- The number of map multi-resolution grid levels.
- The map update modifier for updates of free cells in the range [0.0, 1.0]. A value of 0.5 means no change.
- The map update modifier for updates of occupied cells in the range [0.0, 1.0]. A value of 0.5 means no change.
- The minimum distance [m] for laser scan endpoints to be used by the system. Scan endpoints closer than this value are ignored.
- The maximum distance [m] for laser scan endpoints to be used by the system. Scan endpoints farther away than this value are ignored.
- The minimum height [m] relative to the base_frame for laser scan endpoints to be used by the system. Scan endpoints lower than this value are ignored.
- The maximum height [m] relative to the base_frame for laser scan endpoints to be used by the system. Scan endpoints higher than this value are ignored.
- Determine if the map->odom transform should be published by the system.
- Output timing information for processing of every laser scan via ROS_INFO.