<> == Overview == This package is a ROS wrapper of [[http://introlab.github.io/rtabmap|RTAB-Map]] (Real-Time Appearance-Based Mapping), a RGB-D SLAM approach based on a global loop closure detector with real-time constraints. This package can be used to generate a 3D point clouds of the environment and/or to create a 2D occupancy grid map for navigation. The [[http://wiki.ros.org/rtabmap_ros#rtabmap_ros.2Fnoetic_and_newer.Tutorials|tutorials]] and [[http://wiki.ros.org/rtabmap_ros#rtabmap_ros.2Fnoetic_and_newer.Demos|demos]] show some examples of mapping with RTAB-Map. == Migration Guide New Interface Noetic/ROS2 == '''rtabmap_ros''' is now a meta package, all nodes were moved into sub packages matching their function. Documentation for each node/nodelet is moved in respective sub packages linked in this table: ||'''Old Name'''|| ||'''New Name'''|| || ||rtabmap_ros||rtabmap.launch||[[rtabmap_launch]]||rtabmap.launch|| ||rtabmap_ros||rtabmap||[[rtabmap_slam]]||[[rtabmap_slam#rtabmap|rtabmap]]|| ||rtabmap_ros|| ||[[rtabmap_odom]]|| || || ||rgbd_odometry|| ||[[rtabmap_odom#rgbd_odometry|rgbd_odometry]]|| || ||stereo_odometry|| ||[[rtabmap_odom#stereo_odometry|stereo_odometry]]|| || ||icp_odometry|| ||[[rtabmap_odom#icp_odometry|icp_odometry]]|| ||rtabmap_ros|| ||[[rtabmap_sync]]|| || ||||rgb_sync|| ||[[rtabmap_sync#rtabmap_sync.2Frgb_sync|rgb_sync]]|| ||||rgbd_sync|| ||[[rtabmap_sync#rtabmap_sync.2Frgbd_sync|rgbd_sync]]|| ||||stereo_sync|| ||[[rtabmap_sync#rtabmap_sync.2Fstereo_sync|stereo_sync]]|| ||rtabmap_ros|| ||[[rtabmap_util]]|| || ||||point_cloud_xyz|| ||[[rtabmap_util#rtabmap_util.2Fpoint_cloud_xyz|point_cloud_xyz]]|| ||||point_cloud_xyzrgb|| ||[[rtabmap_util#rtabmap_util.2Fpoint_cloud_xyzrgb|point_cloud_xyzrgb]]|| ||||map_assembler|| ||[[rtabmap_util#map_assembler|map_assembler]]|| ||||map_optimizer|| ||[[rtabmap_util#map_optimizer|map_optimizer]]|| ||||point_cloud_assembler|| ||[[rtabmap_util#rtabmap_util.2Fpoint_cloud_assembler|point_cloud_assembler]]|| ||||point_cloud_aggregator|| ||[[rtabmap_util#rtabmap_util.2Fpoint_cloud_aggregator|point_cloud_aggregator]]|| ||||pointcloud_to_depthimage|| ||[[rtabmap_util#rtabmap_util.2Fpointcloud_to_depthimage|pointcloud_to_depthimage]]|| ||||disparity_to_depth|| ||[[rtabmap_util#rtabmap_util.2Fdisparity_to_depth|disparity_to_depth]]|| ||||obstacles_detection|| ||[[rtabmap_util#rtabmap_util.2Fobstacles_detection|obstacles_detection]]|| ||||rgbd_relay|| ||[[rtabmap_util#rtabmap_util.2Frgbd_relay|rgbd_relay]]|| ||rtabmap_ros|| ||[[rtabmap_legacy]]|| || ||||data_odom_sync|| ||[[rtabmap_legacy#rtabmap_legacy.2Fdata_odom_sync|data_odom_sync]]|| ||||data_throttle|| ||[[rtabmap_legacy#rtabmap_legacy.2Fdata_throttle|data_throttle]]|| ||||stereo_throttle|| ||[[rtabmap_legacy#rtabmap_legacy.2Fstereo_throttle|stereo_throttle]]|| ||||camera|| ||[[rtabmap_legacy#camera|camera]]|| ||rtabmap_ros||rtabmapviz||[[rtabmap_viz]]||[[rtabmap_viz#rtabmap_viz-1|rtabmap_viz]]|| ||rtabmap_ros|| ''messages'' ||[[rtabmap_msgs]]|| ''messages'' || ||rtabmap_ros|| ''rviz plugins'' ||[[rtabmap_rviz_plugins]]|| ''rviz plugins'' || ||rtabmap_ros|| ''costmap plugins'' ||[[rtabmap_costmap_plugins]]|| ''costmap plugins'' || == Tutorials == <> == Demos == === Robot mapping === <> For this demo, you will need the ROS bag [[https://drive.google.com/file/d/1RJxe6nU-of5_AbyoYGobNi6y-Z00Hyh7/view?usp=drive_link|demo_mapping.bag]] (295 MB, '''fixed camera TF 2016/06/28''', '''fixed not normalized quaternions 2017/02/24''', '''fixed compressedDepth encoding format 2020/05/27''', '''fixed odom child_frame_id not set 2021/01/22'''). Launch: [[https://github.com/introlab/rtabmap_ros/blob/master/rtabmap_demos/launch/demo_robot_mapping.launch|demo_robot_mapping.launch]] {{{ $ roslaunch rtabmap_demos demo_robot_mapping.launch $ rosbag play --clock demo_mapping.bag }}} After mapping, you could try the localization mode: {{{ $ roslaunch rtabmap_demos demo_robot_mapping.launch localization:=true $ rosbag play --clock demo_mapping.bag }}} * Note that the GUI node doesn't download automatically the map when started. You will need to click "Edit->Download Map" on the GUI to download the map from the core node. === Robot mapping with RVIZ === <> For this demo, you will need the ROS bag [[https://drive.google.com/file/d/1RJxe6nU-of5_AbyoYGobNi6y-Z00Hyh7/view?usp=drive_link|demo_mapping.bag]] (295 MB, '''fixed camera TF 2016/06/28''', '''fixed not normalized quaternions 2017/02/24''', '''fixed compressedDepth encoding format 2020/05/27''', '''fixed odom child_frame_id not set 2021/01/22'''). Launch: [[https://github.com/introlab/rtabmap_ros/blob/master/rtabmap_demos/launch/demo_robot_mapping.launch|demo_robot_mapping.launch]] {{{ $ roslaunch rtabmap_demos demo_robot_mapping.launch rviz:=true rtabmapviz:=false $ rosbag play --clock demo_mapping.bag }}} === Multi-session mapping === <> Detailed results are shown on the [[https://github.com/introlab/rtabmap/wiki/Multi-session|Multi-session]] page on RTAB-Map's wiki. For this demo, you will need the ROS bags of five mapping sessions: * '''Updated 2015/09/21''': fixed TF rotation of the camera * '''Updated 2017/09/08''': fixed TF quaternion not normalized error * [[https://drive.google.com/file/d/1KgrPTgq4IFIGg6C_gOvPVXGHj0k8m1Pu/view?usp=drive_link|map1.bag.zip]] (542 MB) * [[https://drive.google.com/file/d/1uFkSCHIyoN2t6LNW16syLin4pMgp3yOs/view?usp=drive_link|map2.bag.zip]] (490 MB) * [[https://drive.google.com/file/d/1jwXkSZFL2aoDLIyqfKZfdHfZDIxrAd69/view?usp=drive_link|map3.bag.zip]] (318 MB) * [[https://drive.google.com/file/d/1mFYi82fjeZQEm1aNRwtzNRAt-Y3a3mrU/view?usp=drive_link|map4.bag.zip]] (1.1 GB) * [[https://drive.google.com/file/d/1cPjxrinY8cSLHGAvKO8LM0BioEsYP6TE/view?usp=drive_link|map5.bag.zip]] (843 MB) For the first launch, you can do "Edit->Delete memory" to make sure that you start from a clean memory. You may need to do this after starting the first bag with "--pause" so that rtabmap node is initialized to avoid a "service /reset cannot be called" error. Launch: [[https://github.com/introlab/rtabmap_ros/blob/master/rtabmap_demos/launch/demo_multi-session_mapping.launch|demo_multi-session_mapping.launch]] {{{ $ roslaunch rtabmap_demos demo_multi-session_mapping.launch $ rosbag play --clock --pause map1.bag $ (...) $ rosbag play --clock map2.bag $ (...) $ rosbag play --clock map3.bag $ (...) $ rosbag play --clock map4.bag $ (...) $ rosbag play --clock map5.bag }}} === Robot mapping with Find-Object === <> Find-Object's ros-pkg [[find_object_2d]] should be installed. ROS Bag: [[https://drive.google.com/file/d/1Q2rxVk8tJMCj8WBZfw-R-ZKXCtnOcgXb/view?usp=drive_link|demo_find_object.bag]] (416 MB, '''fixed compressedDepth encoding format 2024/04/27''') Launch: [[https://github.com/introlab/rtabmap_ros/blob/master/rtabmap_demos/launch/demo_find_object.launch|demo_find_object.launch]] {{{ $ roslaunch rtabmap_demos demo_find_object.launch $ rosbag play --clock demo_find_object.bag }}} === IROS 2014 Kinect Challenge === <> There is no bag recorded for this demo but how to reproduce this setup is described on the page [[https://github.com/introlab/rtabmap/wiki/IROS-2014-Kinect-Challenge|IROS 2014 Kinect Challenge]] of the RTAB-Map's wiki. === Stereo mapping === <> Visit the tutorial [[rtabmap_ros/Tutorials/StereoOutdoorMapping|StereoOutdoorMapping]] for detailed information. It is also shown how to create 2D occupancy grid map for navigation. ROS bags: * [[https://drive.google.com/file/d/1yxSpRa-W_Ayp1oMLDP66L0QAE-SkW78V/view?usp=drive_link|stereo_outdoorA.bag]] (668 MB) * [[https://drive.google.com/file/d/1dSXDbHBLco8dOIeWKMddWvGq4s9vfGq8/view?usp=drive_link|stereo_outdoorB.bag]] (987 MB) Launch : [[https://github.com/introlab/rtabmap_ros/blob/master/rtabmap_demos/launch/demo_stereo_outdoor.launch|demo_stereo_outdoor.launch]] {{{ $ roslaunch rtabmap_demos demo_stereo_outdoor.launch $ rosbag play --clock stereo_outdoorA.bag [...] $ rosbag play --clock stereo_outdoorB.bag }}} === Stereo navigation === <> There is no bag recorded for this demo but how to reproduce this setup is described in the tutorial [[rtabmap_ros/Tutorials/StereoOutdoorNavigation|StereoOutdoorNavigation]]. === Appearance-based loop closure detection-only === <> Data: * [[https://github.com/introlab/rtabmap/raw/master/bin/data/samples.zip|samples.zip]] * Set `video_or_images_path` parameter of [[rtabmap_ros#camera|camera]] node in the launch file below accordingly. Launch: [[https://github.com/introlab/rtabmap_ros/blob/master/rtabmap_demos/launch/demo_appearance_mapping.launch|demo_appearance_mapping.launch]] {{{ $ roslaunch rtabmap_demos demo_appearance_mapping.launch }}} The GUI shows a plenty of information about the loop closures detected. If you only need the ID of the matched past image of a loop closure, you can do that: {{{ $ rostopic echo /rtabmap/info/loopClosureId 6 --- 0 --- 7 --- }}} A "0" means no loop closure detected. This can be also used in localization mode: {{{ $ roslaunch rtabmap_demos demo_appearance_mapping.launch localization:=true }}} For '''more videos''' and information about the loop closure detection approach used in RTAB-Map, visit [[https://introlab.3it.usherbrooke.ca/mediawiki-introlab/index.php?title=RTAB-Map&setlang=en|RTAB-Map on IntRoLab]].