7 RTAB-Map 3D mapping navigation

wiki: http://wiki.ros.org/rtabmap_ros

7.1 Introduction

This package is a ROS functional package for RTAB Map, an RGB-D SLAM method based on a global loop closure detector with real-time constraints. This package can be used to generate 3D point clouds of the environment and create 2D occupancy grid maps for navigation.

Overview

As can be seen from the above figure, there is no need for Monte Carlo positioning amcl, and RTAB Map has its own positioning function; if it is used, it will cause repeated positioning and positioning failure. When using RTAB Map to navigate the core framework, the initialized map is provided by RTAB Map, not map_server.

7.2 Mapping use

Note: When building a map, the slower the speed, the better the effect(note that if the rotation speed is slower), the effect will be poor if the speed is too fast.

According to different models, you only need to set the purchased model in [.bashrc], X1(ordinary four-wheel drive) X3(Mike wheel) X3plus(Mike wheel mechanical arm) R2(Ackerman differential) and so on. Section takes X3 as an example

Open the [.bashrc] file

Find the [ROBOT_TYPE] parameter and modify the corresponding model

7.2.1 Start

Start the underlying driver command(robot side)

Command to start mapping or navigation(robot side)

Start Visualization(Virtual Machine)

Keyboard control node(virtual machine)

7.2.2 Mapping

After starting up according to the above method, choose any method to control the map(handle control is recommended); the slower the speed when building the map, the better the effect(especially the angular speed); the robot fills the area to be built, and the map is closed as much as possible.

image-20220228113707763

When the map is completed, directly [ctrl+c] to exit the map node, the system will automatically save the map. The default map save path [~/.ros/rtabmap.db].

View tf tree

rtabframes

Node view

rtabrosgraph

As can be seen from the above figure, the information that the [rtabmap] node needs to subscribe: radar data, camera data, tf data.

7.3 Navigation and obstacle avoidance

Note: [R2] of the remote control handle has the function of canceling the target point.

Start the underlying driver command(robot side)

Command to start mapping or navigation(robot side)

Start Visualization(Virtual Machine)

Keyboard control node(virtual machine)

When the navigation mode is turned on, the system automatically loads the 2D grid map, and cannot directly load the 3D map, it needs to be loaded manually.

image-20220228113955497

Load the 3D map(1, 2, 3), 4 is to add the rviz debugging tool.

image-20220228114110223

At this point, you can manually add [MarkerArray] to facilitate multi-point navigation and observation, and adjust [rviz] display parameters as needed, such as the size of lidar points.

7.3.1 Single point navigation

7.3.2 Multi-point navigation

7.3.3 Parameter configuration

After starting the navigation function, open the dynamic parameter adjustment tool, adjust it according to your own needs, and observe the motion state of the robot until the effect is optimal, record the current parameters, and modify them to the corresponding dwa_local_planner_params.yaml file under the yahboomcar_nav function package.

image-20220223154728183

Looking at the yahboomcar_navigation.launch file, you can see that the navigation parameters are modified in the move_base.launch file under the yahboomcar_rtabmap_nav function package.

Find the move_base.launch file, open the sample file as follows, you can modify and replace it according to your needs; at this time, the [DWA planner] is selected, and the [DWA] file is loaded.

Note: When using the DWA planner, the difference between the omnidirectional car and the differential car is whether the speed in the Y direction is 0. There are clear comments in it, which can be modified according to the actual situation.

Enter the dwa_local_planner_params.yaml file under the yahboomcar_nav function package, some parameters are as follows:

Other parameter files can be opened, combined with annotations and courseware, and modified according to their own needs.

7.4 node rtabmap

This is the master node for this package. It is a wrapper around the RTAB mapping core library. Here, the map is incrementally built and optimized when loop closures are detected. The online output of the node is the local map, which contains the most recent data added to the map. The default location of the RTAB map database is [.ros/rtabmap.db], and the workspace is also set to [.ros].

7.4.1 Subscription topic

nametypeParse
odomnav_msgs/OdometryOdometer. Required if parameter subscribe_depth or subscribe_stereo is true; and odom_frame_id is not set.
rgb/imagesensor_msgs/ImageRGB/monocular image.
rgb/camera_infosensor_msgs/CameraInfoRGB camera parameters.
depth/imagesensor_msgs/Imagedepth image.
scansensor_msgs/LaserScanSingle line laser.
scan_cloudsensor_msgs/PointCloud2Laser scan point cloud stream.
left/image_rectsensor_msgs/ImageLeft eye corrected image.
left/camera_infosensor_msgs/CameraInfoLeft eye camera parameters.
right/image_rectsensor_msgs/ImageRight eye corrected image.
right/camera_infosensor_msgs/CameraInfoRight eye camera parameters.
goalgeometry_msgs/PoseStampedPlan a path to this goal using the current online map.
rgbd_imagertabmap_ros/RGBDImageRGB-D sync image, only if subscribe_rgbd is true.

7.4.2 Post topic

nametypeParse
infortabmap_ros/Infortabmap information.
mapDatartabmap_ros/MapDataGraph and latest node data for rtabmap.
mapGraphrtabmap_ros/MapGraphrtabmap graphics
grid_mapnav_msgs/OccupancyGridMaps generated by laser scanning occupy the grid.
proj_mapnav_msgs/OccupancyGridDeprecated, use /grid_map instead of Grid/FromDepth=true
cloud_mapsensor_msgs/PointCloud2A 3D point cloud generated from a local grid.
cloud_obstaclessensor_msgs/PointCloud2Generate a 3D point cloud of obstacles from a local mesh.
cloud_groundsensor_msgs/PointCloud2A 3D ground point cloud generated from a local grid.
scan_mapsensor_msgs/PointCloud22D scans or 3D point clouds generated from 3D scans.
labelsvisualization_msgs/MarkerArrayConvenience method for displaying graph labels in RVIZ.
global_pathnav_msgs/PathThe planned pose of the planned global path. Published only once per planned path.
local_pathnav_msgs/PathPlan future local poses corresponding to the global path. Posted every time the map is updated.
goal_reachedstd_msgs/BoolA plan status message whether the goal was successfully achieved.
goal_outgeometry_msgs/PoseStampedPlan the current metric target sent from rtabmap's topology planner. For example, you can connect to move_base via move_base_simple/goal.
octomap_fulloctomap_msgs/OctomapGet octomap. Available only when rtabmap_ros is built with octomap.
octomap_binaryoctomap_msgs/OctomapGet octomap. Available only when rtabmap_ros is built with octomap.
octomap_occupied_spacesensor_msgs/PointCloud2octomap The point cloud of the occupied space(obstacles and ground). Available only when rtabmap_ros is built with octomap.
octomap_obstaclessensor_msgs/PointCloud2A point cloud of obstacles on the octomap. Available only when rtabmap_ros is built with octomap.
octomap_groundsensor_msgs/PointCloud2octomap's point cloud. Available only when rtabmap_ros is built with octomap.
octomap_empty_spacesensor_msgs/PointCloud2Blank point cloud for octomap. Available only when rtabmap_ros is built with octomap.
octomap_gridnav_msgs/OccupancyGridProject the octomap into a 2D occupancy raster map. Available only when rtabmap_ros is built with octomap.

7.4.3 Services

nametypeParse
get_maprtabmap_ros/GetMapCall this service to get a standard 2D occupancy grid.
get_map_datartabmap_ros/GetMapCall this service to get map data.
publish_maprtabmap_ros/PublishMapCall this service to publish map data.
list_labelsrtabmap_ros/ListLabelsGet the current label of the graph.
update_parametersstd_srvs/EmptyThe node will be updated with the current parameters of the rosparam server.
resetstd_srvs/EmptyDelete the map.
pausestd_srvs/EmptyPause building.
resumestd_srvs/EmptyRestoring the map.
trigger_new_mapstd_srvs/EmptyA new map will start.
backupstd_srvs/EmptyBackup the database to "database_path.back"(default ~/.ros/rtabmap.db.back).
set_mode_localizationstd_srvs/EmptySet location-only mode.
set_mode_mappingstd_srvs/EmptySet the mapping mode.
set_labelrtabmap_ros/SetLabelSet the label to the latest node or the specified node.
set_goalrtabmap_ros/SetGoalPlan to set topology goals.
octomap_fulloctomap_msgs/GetOctomapGet octomap. Only available if rtabmap_ros was built with octomap
octomap_binaryoctomap_msgs/GetOctomapGet octomap. Only available if rtabmap_ros was built with octomap

7.4.4 Parameters

nametypeDefaultsParse
subscribe_depthbooltrueSubscribe to depth images
subscribe_scanboolfalseSubscribe to lidar data
subscribe_scan_cloudboolfalseSubscribe to Laser 3D Point Cloud
subscribe_stereoboolfalseSubscribe to binocular images
subscribe_rgbdboolfalseSubscribe to the rgbd_image topic
frame_idstringbase_linkFrame attached to mobile base.
map_frame_idstringmapThe coordinate system attached to the map.
odom_frame_idstring' 'The coordinate system attached to the odometer.
odom_tf_linear_variancedouble0.001When using odom_frame_id, the first 3 values of the diagonal of the 6x6 covariance matrix are set to this value.
odom_tf_angular_variancedouble0.001When using odom_frame_id, the last 3 values of the diagonal of the 6x6 covariance matrix are set to this value
queue_sizeint10The size of the message queue for each synchronization topic.
publish_tfbooltruePublish TF from /map to /odom.
tf_delaydouble0.05 
tf_prefixstring' 'The prefix to add to the generated tf.
wait_for_transformbooltrueThe wait for the transform when the tf transform is still unavailable(the maximum wait time for a transform is seconds).
wait_for_transform_durationdouble0.1wait_for_transform wait time.
config_pathstring' 'Path to a configuration file containing RTAB mapping parameters. Parameters set in the startup file will override those in the configuration file.
database_pathstring.ros/rtabmap.dbPath to the rtabmap database.
gen_scanboolfalseGenerate a laser scan from a depth image(using the middle horizontal line of the depth image). Not generated if subscribe_scan or subscribe_scan_cloud is true.
gen_scan_max_depthdouble4.0The maximum depth of the generated laser scan.
approx_syncboolfalseUse approximate time synchronization of incoming messages. If false, note that the odometry input must have the exact same timestamp as the input image
rgbd_camerasint1The number of RGB-D cameras to use(when subscribe_rgbd is true). Currently, up to 4 cameras can be synchronized simultaneously.
use_action_for_goalboolfalseUse actionlib to send metrics targets to move_base.
odom_sensor_syncboolfalseFor each node added to the graph, adjust the image and scan pose relative to the odometry pose.
gen_depthboolfalseA depth image is generated from a scanned cloud projection to an RGB camera, taking into account the displacement of the RGB camera from the odometry and lidar frames.
gen_depth_decimationint1Reduce the image size of the received camera information(creates a smaller depth image)
gen_depth_fill_holes_sizeint0Fill empty pixels to that size. Interpolate values from adjacent depth values. 0 means disabled.
gen_depth_fill_iterationsdouble0.1Maximum depth error(m) to interpolate.
gen_depth_fill_holes_errorint1The number of iterations to fill blanks.
map_filter_radiusdouble0.0Loads data for only one node within the filter radius(use the latest data) up to the filter angle(map filter angle).
map_filter_angledouble30.0The angle to use when filtering nodes before creating the map. Reference map_filter_radius
map_cleanupbooltrueIf you are not subscribed to any map cloud maps, raster maps, or project maps, clear the corresponding data.
latchbooltrueIf true, the last message published on the map topic will be saved.
map_always_updatebooltrueAlways update occupancy raster map
map_empty_ray_tracingbooltruePerform ray tracing to fill the unknown space of invalid 2D scan rays(assuming invalid rays to be infinite). Only used if map_always_update is also true.

7.4.5 tf conversion

what is needed:

which provided:

map → odom

7.5 node rtabmapviz

This node starts the visualization interface of RTAB-Map. It is a wrapper for RTAB-MapGUI library. It serves the same purpose as rviz, but with RTAB-Map specific options.

RGB-D Mapping

7.5.1. Subscription topic

nametypeParse
odomnav_msgs/OdometryOdometer. Required if parameter subscribe_depth or subscribe_stereo is true and odom_frame_id is not set.
rgb/imagesensor_msgs/ImageRGB/monocular image. If the parameter subscribe_stereo is true, this option is not required(use left/image_rect instead).
rgb/camera_infosensor_msgs/CameraInfoRGB camera metadata. If the parameter subscribe_stereo is true, this option is not required(use left/camera_info instead).
depth/imagesensor_msgs/ImageRegister the depth image. Required if parameter subscribe_depth is true.
scansensor_msgs/LaserScanLaser scan stream. Required if parameter subscribe_scan is true.
scan_cloudsensor_msgs/PointCloud2Laser scan stream. Required if parameter subscribe_scan_cloud is true.
left/image_rectsensor_msgs/ImageLeft eye corrected image. Required if parameter subscribe_stereo is true.
left/camera_infosensor_msgs/CameraInfoLeft eye camera parameters. Required if parameter subscribe_stereo is true.
right/image_rectsensor_msgs/ImageRight corrected image. Required if parameter subscribe_stereo is true.
right/camera_infosensor_msgs/CameraInfoRight eye camera parameters. Required if parameter subscribe_stereo is true.
odom_infortabmap_ros/OdomInfoRequired if parameter subscribe_odom_info is true.
infortabmap_ros/InfoStatistics for rtabmap.
mapDatartabmap_ros/MapDatartabmap's graph and latest node data.
rgbd_imagertabmap_ros/RGBDImageRGB-D sync image, only if subscribe_rgbd is true.

7.5.2 parameter configuration

nametypeDefaultsParse
subscribe_depthboolfalseSubscribe to depth images
subscribe_scanboolfalseSubscribe to lidar data
subscribe_scan_cloudboolfalseSubscribe to Laser Scan Point Cloud.
subscribe_stereoboolfalseSubscribe to binocular images.
subscribe_odom_infoboolfalseSubscribe to odometer information messages.
subscribe_rgbdboolfalseSubscribe to the rgbd_image topic.
frame_idstringbase_linkThe coordinate system attached to the mobile base.
odom_frame_idstring' 'The coordinate system of the odometer. If empty, rtabmapviz will subscribe to the odom topic for odometers. If set, get odometer from tf.
tf_prefixstring' 'The prefix to add to the generated tf.
wait_for_transformboolfalseWhen the tf transform is still unavailable, wait for the transform(up to 1 second).
queue_sizeint10Message queue size per synchronization topic.
rgbd_camerasint1The number of RGB-D cameras to use(when subscribe_rgbd is true). Currently, up to 4 cameras can be synchronized simultaneously.

7.5.3 the required tf conversion