**RTAB-Map** (Real-Time Appearance-Based Mapping) is a RGB-D, Stereo and Lidar Graph-Based SLAM approach based on an incremental appearance-based loop closure detector. The loop closure detector uses a bag-of-words approach to determinate how likely a new image comes from a previous location or a new location. When a loop closure hypothesis is accepted, a new constraint is added to the map's graph, then a graph optimizer minimizes the errors in the map. A memory management approach is used to limit the number of locations used for loop closure detection and graph optimization, so that real-time constraints on large-scale environnements are always respected. RTAB-Map can be used alone with a handheld Kinect, a stereo camera or a 3D lidar for 6DoF mapping, or on a robot equipped with a laser rangefinder for 3DoF mapping.
* M. Labbé and F. Michaud, “[Multi-Session Visual SLAM for Illumination-Invariant Re-Localization in Indoor Environments](https://arxiv.org/abs/2103.03827),” in _Frontiers in Robotics and AI_, vol. 9, 2022. ([Frontiers](https://doi.org/10.3389/frobt.2022.801886)) ([Dataset link](https://github.com/introlab/rtabmap/tree/master/archive/2022-IlluminationInvariant))
* M. Labbé and F. Michaud, “[RTAB-Map as an Open-Source Lidar and Visual SLAM Library for Large-Scale and Long-Term Online Operation](https://introlab.3it.usherbrooke.ca/mediawiki-introlab/images/7/7a/Labbe18JFR_preprint.pdf),” in _Journal of Field Robotics_, vol. 36, no. 2, pp. 416–446, 2019. ([Wiley](https://doi.org/10.1002/rob.21831))
* M. Labbé and F. Michaud, “[Long-term online multi-session graph-based SPLAM with memory management](https://introlab.3it.usherbrooke.ca/mediawiki-introlab/images/8/87/LabbeAURO2017.pdf),” in _Autonomous Robots_, vol. 42, no. 6, pp. 1133-1150, 2018. ([Springer](http://dx.doi.org/10.1007/s10514-017-9682-5))
* M. Labbé and F. Michaud, “[Online Global Loop Closure Detection for Large-Scale Multi-Session Graph-Based SLAM](https://introlab.3it.usherbrooke.ca/mediawiki-introlab/images/e/eb/Labbe14-IROS.pdf),” in _Proceedings of the IEEE/RSJ International Conference on Intelligent Robots and Systems_, 2014. ([IEEE Xplore](http://ieeexplore.ieee.org/document/6942926/))
* Results shown in this paper can be reproduced by the [Multi-session mapping](https://github.com/introlab/rtabmap/wiki/Multi-session) tutorial.
* M. Labbé and F. Michaud, “[Appearance-Based Loop Closure Detection for Online Large-Scale and Long-Term Operation](https://introlab.3it.usherbrooke.ca/mediawiki-introlab/images/b/bc/TRO2013.pdf),” in _IEEE Transactions on Robotics_, vol. 29, no. 3, pp. 734-745, 2013. ([IEEE Xplore](http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6459608))
* M. Labbé and F. Michaud, “[Memory management for real-time appearance-based loop closure detection](https://introlab.3it.usherbrooke.ca/mediawiki-introlab/images/f/f0/Labbe11memory.pdf),” in _Proceedings of the IEEE/RSJ International Conference on Intelligent Robots and Systems_, 2011, pp. 1271–1276. ([IEEE Xplore](http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6094602))
* Visit [RTAB-Map's page on IntRoLab](https://introlab.3it.usherbrooke.ca/mediawiki-introlab/index.php/RTAB-Map) for detailed information on the loop closure detection approach and related datasets.
* For **ROS** users, take a look to [rtabmap](http://wiki.ros.org/rtabmap) page on the ROS wiki for a package overview. See also [SetupOnYourRobot](http://wiki.ros.org/rtabmap_ros/Tutorials/SetupOnYourRobot) to know how to integrate RTAB-Map on your robot.
* Post an [issue on GitHub](https://github.com/introlab/rtabmap/issues)
* For the loop closure detection approach, visit [RTAB-Map on IntRoLab website](https://introlab.3it.usherbrooke.ca/mediawiki-introlab/index.php/RTAB-Map)
* Visit [rtabmap_ros](http://wiki.ros.org/rtabmap_ros) wiki page for nodes documentation, demos and tutorials on ROS.
* Ask a question on [answers.ros.org](http://answers.ros.org/questions/scope:all/sort:activity-desc/tags:rtabmap_ros/page:1/) with **rtabmap** or **rtabmap_ros** tag.
* If OpenCV is built **with the nonfree** module, RTAB-Map is free for research only because it depends on **SURF** features. **SURF** is not free for commercial use. Note that SIFT patent has expired, so it can be a good free equivalent of SURF.
RTAB-Map App on [Google Play Store](https://play.google.com/store/apps/details?id=com.introlab.rtabmap&hl=en) or [Apple Store](https://apps.apple.com/ca/app/rtab-map-3d-lidar-scanner/id1564774365) requires access to camera to record images that will be used for creating the map. When saving, a database containing these images is created. That database is saved locally on the device (on the sd-card under RTAB-Map folder). While location permission is required to install RTAB-Map Tango, the GPS coordinates are not saved by default, the option "Settings->Mapping...->Save GPS" should be enabled first. RTAB-Map requires read/write access to RTAB-Map folder only, to save, export and open maps. RTAB-Map doesn't access any other information outside the RTAB-Map folder. RTAB-Map doesn't share information over Internet unless the user explicitly exports a map to Sketchfab or anywhere else, for which RTAB-Map needs the network. If so, the user will be asked for authorization ([oauth2](https://oauth.net/)) by Sketchfab (see their Privacy Policy [here](https://sketchfab.com/privacy)).
* Similar projects: [Find-Object](http://introlab.github.io/find-object/)
* If you find this project useful and to help me keeping this project updated, you can buy me a cup of coffee with the link below :P. It is also nice to receive new sensors to test with and even supporting them in RTAB-Map for quick SLAM demonstrations (e.g., stereo cameras, RGB-D cameras, 2D/3D LiDARs). Thanks [Stereolabs](https://www.stereolabs.com/) for the [ZED](https://www.stereolabs.com/zed/specs/), thanks Walt (with Tango coupon discount) and Google for [Google Tango Development Kits](https://store.google.com/product/tango_tablet_development_kit) and thanks to all contributors (for donations, reporting bugs, helping me fixing bugs or making pull requests).
A new paper has been published: **Multi-Session Visual SLAM for Illumination-Invariant Re-Localization in Indoor Environments**. The general idea is to remap multiple times the same environment to capture multiple illumination variations caused by natural and artificial lighting, then the robot would be able to localize afterwards at any hour of the day. For more details, see this [page](https://github.com/introlab/rtabmap/tree/master/archive/2022-IlluminationInvariant).
Added [demo](https://github.com/introlab/rtabmap_ros/blob/master/launch/demo/demo_catvehicle_mapping.launch) for car mapping and localization with [CitySim](https://github.com/osrf/citysim) simulator and [CAT Vehicle](https://github.com/jmscslgroup/catvehicle):
[](https://youtu.be/vKCTg4plPkw)
### December 2021
Added indoor drone visual navigation example using [move_base](http://wiki.ros.org/move_base), [PX4](https://github.com/PX4/PX4-Autopilot) and [mavros](http://wiki.ros.org/mavros):
[](https://youtu.be/A487ybS7E4E)
More info on the [rtabmap-drone-example](https://github.com/matlabbe/rtabmap_drone_example) github repo.
* I'm pleased to announce that RTAB-Map is now on **iOS** (iPhone/iPad with LiDAR required). The app is [available](https://apps.apple.com/ca/app/rtab-map-3d-lidar-scanner/id1564774365) on App Store.
* [AliceVision](https://alicevision.org/) library has been integrated to RTAB-Map to provide higher texture quality. Compare the [updated version of the Ski Cottage on Sketchfab](https://skfb.ly/6OyUy) with the [old version](https://skfb.ly/6KBFz). Look at how the edges between camera texures are smoother (thx to multi-band blending), decreasing significantly the sharp edge artifacts. Multi-band blending approach can be enabled in File->Export Clouds dialog under Texturing section. RTAB-Map should be built with AliceVision support (CUDA is not required as only texture pipeline is used). A [patch](https://gist.github.com/matlabbe/469bba5e7733ad6f2e3d7857b84f1f9e) is required to avoid problems with Eigen, refer to Docker file [here](https://github.com/introlab/rtabmap/blob/e7be12e0ff7ae95e492837f0414d553c977d6d4d/docker/bionic/Dockerfile#L69-L116).
* New version 0.14 of RTAB-Map Tango with GPS support. See it on [play store](https://play.google.com/store/apps/details?id=com.introlab.rtabmap&hl=en).
* I uploaded a [presentation](https://introlab.3it.usherbrooke.ca/mediawiki-introlab/images/3/31/Labbe2015ULaval.pdf) that I did in 2015 at Université Laval in Québec! A summary of RTAB-Map as a RGBD-SLAM approach:
* Application example: See how RTAB-Map is helping nuclear dismantling with Orano's MANUELA project (Mobile Apparatus for Nuclear Expertise and Localisation Assistance):
* I'm pleased to announce that RTAB-Map is now on **Project Tango**. The app is [available](https://play.google.com/store/apps/details?id=com.introlab.rtabmap) on Google Play Store.
* **Version 0.10.6**: Integration of a robust graph optimization approach called <a href="https://openslam.org/vertigo.html">Vertigo</a> (which uses [g2o](https://openslam.org/g2o.html) or [GTSAM](https://collab.cc.gatech.edu/borg/gtsam)), see [this page](https://github.com/introlab/rtabmap/wiki/Robust-Graph-Optimization):
* **Version 0.10.5**: New example to export data to [MeshLab](http://meshlab.sourceforge.net/) in order to add textures on a created mesh with low polygons, see [this page](https://github.com/introlab/rtabmap/wiki/Export-Raster-Layers-to-MeshLab):
* At **IROS 2014** in Chicago, a team using RTAB-Map for SLAM **won** the Kinect navigation contest held during the conference. See their press release for more details: [Winning the IROS2014 Microsoft Kinect Challenge](http://www.meetup.com/SV-ROS-users/pages/Winning_the_IROS2014_Microsoft_Connect_Challenge/). I also added the Wiki page [IROS2014KinectChallenge](https://github.com/introlab/rtabmap/wiki/IROS-2014-Kinect-Challenge) showing in details the RTAB-Map part used in their solution.
* Here a comparison between reality and what can be shown in RVIZ (you can [reproduce this demo here](http://wiki.ros.org/rtabmap_ros#Robot_mapping_with_Find-Object)):
* Added [Setup on your robot](http://wiki.ros.org/rtabmap_ros/Tutorials/SetupOnYourRobot) wiki page to know how to integrate RTAB-Map on your ROS robot. Multiple sensor configurations are shown but the optimal configuration is to have a 2D laser, a Kinect-like sensor and odometry.
* I'm glad to announce that my paper submitted to [IROS 2014](http://www.iros2014.org/) was accepted! [This paper](https://introlab.3it.usherbrooke.ca/mediawiki-introlab/images/e/eb/Labbe14-IROS.pdf) explains in details how RGB-D mapping with RTAB-Map is done. Results shown in this paper can be reproduced by the [Multi-session mapping](https://github.com/introlab/rtabmap/wiki/Multi-session) tutorial: