The ohm_tsd_slam package provides a 2D SLAM approach for laser scanners.
- Maintainer: Philipp Koch <philipp.koch AT th-nuernberg DOT de>, Markus Kühn <markus.kuehn AT th-nuernberg DOT de>
- Author: Philipp Koch, Stefan May, Markus Kühn
- License: TODO
- Source: git https://github.com/autonohm/ohm_tsd_slam.git (branch: indigo-devel)
The release includes a SLAM package using 2D LIDAR data only as input. Its localization module uses ICP-based registration. The mapping uses a grid map, which cells contain Truncated Signed Distances (tsd), similar to the well known KinectFusion approach. This representation performs dynamic mapping, wherefore temporary objects are removed over time.
Simultaneously we are currently working on the release of two important features of our SLAM.
1. RANSAC-aided registration
- This is more robust also it is slower than the ICP registration. This feature can already be tested by changing the parameter "registration_mode". You need to use lower ICP distance filter values for this!
2. Multi-robot SLAM
Multiple robots build one map simultaneously. This approach has the benefit that no map merging is necessary after the mission. This strategy has been deployed by Team Autonohm at the RoboCup German Open 2015.
The repository comes with an example launchfile, slam.launch. Its parameters are set to fit the typical RoboCup rescue scenario deploying a Hokuyo UTM30LX LIDAR or a sensor with similar parameters.
This video shows a demo of the package. It uses public available recorded Lidar data, acquired from the University of Freiburg (http://kaspar.informatik.uni-freiburg.de/~slamEvaluation/datasets.php).
S. May, P. Koch, R. Koch, C. Merkl, C. Pfitzner and A. Nuechter. A Generalized 2D and 3D Multi-Sensor Data Integration Approach based on Signed Distance Functions for Multi-Modal Robotic Mapping. In Proceedings of the VMV 2014: Vision, Modeling & Visualization, Darmstadt, Germany, 2014.
The multi-robot SLAM has been subject of a paper itself and can be downloaded at IEEEexplore.
P. Koch, S. May, M. Schmidpeter, M. Kühn, J. Martin, C. Pfitzner, C. Merkl, M. Fees, R. Koch and A. Nüchter. Multi-Robot Localization and Mapping based on Signed Distance Functions. In Proceedings of the IEEE International Conference on Autonomous Robot Systems and Competitions (ICARSC '15), Vila Real, Portugal, April 2015.
This video shows an experiment performed for the mentioned publication. Both robots of our rescue robot team perform cooperating SLAM of a building floor:
The algorithms used for ohm_tsd_slam are distributed with the obviously library. After checking out the catkin package you can use wstools and rosdep to install obviously within in the SLAM.
The basic installation to use obviously only for the ohm_tsd_slam is explained here:
Clone the catkin package in your desired catkin workspace with.
$ #In your catkin workspace $ cd src $ git clone https://github.com/autonohm/ohm_tsd_slam $ cd ohm_tsd_slam $ git checkout indigo-devel $ cd ../..
Clone the obviously library. It contains the algorithms used by the SLAM
$ wstool update -t src/ohm_tsd_slam
If you never used rosdep, run these two commands first. Otherwise you can skip them.
$ sudo rosdep init $ rosdep update
Source your workspace and run rosdep to install the necessary system dependencies. You maybe need sudo to install necessary dependencies.
$ source devel/setup.bash #for example $ rosdep install ohm_tsd_slam
Now, building the package should be no problem. Just run catkin_make. For example:
$ catkin_make --only-pkg-with-deps ohm_tsd_slam
Finally, you can use the slam.launch launchfile to run the SLAM. If you play a bagfile that publishes sensor_msgs::LaserScan on the "/scan" topic you will receive a map on topic "/map" and the robot's pose on "/pose"
$ roslaunch ohm_tsd_slam slam.launch
slam_nodeSLAM node for single robot SLAM and multi robot SLAM.
Published Topicsmap (nav_msgs/OccupancyGrid)
- Map of the environment
- Absolute robot pose in the map frame.
Parametersmap_size (integer, default: 10)
- Quadratic size of the map with a side length of 2map_size * cell_size. E. g. map_size = 10, cell_size = 0.01 m -> side length = 210 * 0.01 m = 10.24 m
- Size of a cell in meters. It influences the absolute map size
- Origin offset on the X-axis from lower left corner of the map. In meters.
- Origin offset on the Y-axis from lower left corner of the map. In meters.
- Orientation offset of the origin to the place the SLAM was initialized (rotation around vertical Z-axis)
- Minimal range of the raycaster in meters. Set this to the attributes of the used laser scanner.
- Maximal range of the raycaster in meters. Set this to the attributes of the used laser scanner.
- Something which helps against glass reflections.. To be done
- The time [s] that needs to pass before an update of the map is published again
- Node frequency of the SLAM in Hz. This has no influence on the map or pose frequency.
- Topic for pose updates
- Map coordinate system
- Robot or Laser coordinate system
- Number of cells used for the truncated signed distance function. Simply interpretable as the thickness of the walls, just more complex. Please, see xyz for further details.
- Topic for map publisher
- Advertise a service that returns a map as nav_msgs/OccupancyGrid with this name.
- Width of the robot (y-axis). This space is cleared when the map is initialized.
- Height of the robot (x-axis). This space is cleared when the map is initialized.
- The described rectangle is described around the laser scanner. Move it correctly that it fits to the robot's size.
- Desired registration algorithm. 0 = ICP Registration with distance filter. 1 = Experimental mode with RANSAC aided ICP. Option 1 is slower but more robust than ICP only registration.
- The maximum distance for point matches. This is a cascading distance filter with every iteration the maximum value is reduced until it reaches the minimum value dist_filter_min.
- The minimum distance for point matches.
- Number of ICP iterations for scan matching
- Maximum translation allowed between two matched scans
- Maximal allowed rotation between two matched scans
- Name of the node_control service to start stop and reset the SLAM
- Number of RANSAC iterations. Needs to be high for a big number of outliers.
- Threshold for outlier rejection in meters
- Number of points in the control set to rate a estimated transformation between to laser scans
- Maximum expected rotational offset between two laser scans in degrees