Wiki

Nodes

map_assembler

Note: It is recommend to use directly cloud_map or proj_map published topics from rtabmap node instead of using this node.

This node subscribes to rtabmap output topic "mapData" and assembles the 3D map incrementally, then publishes the same maps than rtabmap. See all Mapping related topics and parameters of rtabmap node. You can also use all Grid parameters from rtabmap:

For example, setting the voxel sixe of the resulting grid/point cloud to 10 cm:

Subscribed Topics

mapData (rtabmap_msgs/MapData)

Services

~reset (std_srvs/Empty)

Parameters

~regenerate_local_grids (bool, default: "false")

map_optimizer

This node is for advanced usage only as it is preferred to use graph optimization already inside rtabmap node (which is the default). See related parameters in rtabmap:

$rosrun rtabmap_slam rtabmap --params | grep Optimize

This node subscribes to rtabmap output topic "mapData" and optimize the graph, then republishes the optimized "mapData".

Subscribed Topics

mapData (rtabmap_msgs/MapData)

Published Topics

[mapData]_optimized (rtabmap_msgs/MapData) [mapData]Graph_optimized (rtabmap_msgs/MapGraph)

Parameters

~map_frame_id (string, default: "map") ~odom_frame_id (string, default: "odom") ~strategy (int, default: 0) ~slam_2d (bool, default: "false") ~robust (bool, default: "true") ~global_optimization (bool, default: "true") ~iterations (int, default: 100) ~epsilon (double, default: 0.0) ~ignore_variance (bool, default: "false") ~optimize_from_last_node (bool, default: "false") ~publish_tf (bool, default: "true") ~tf_delay (double, default: 0.05)

Nodelets

rtabmap_util/rgbd_relay

A relay for rtabmap_msgs/RGBDImage messages. It works like a topic_tools/relay, but can also compress or uncompress data for convenience.

Subscribed Topics

rgbd_image (rtabmap_msgs/RGBDImage)

Published Topics

[rgbd_image]_relay (rtabmap_msgs/RGBDImage)

Parameters

~queue_size (int, default: 10) ~compress (bool, default: "False") ~uncompress (bool, default: "False")

rtabmap_util/point_cloud_xyzrgb

Construct a point cloud from RGB and depth images or stereo images. Optional decimation, depth, voxel and noise filtering can be applied.

Subscribed Topics

rgb/image (sensor_msgs/Image) depth/image (sensor_msgs/Image) rgb/camera_info (sensor_msgs/CameraInfo) left/image (sensor_msgs/Image) left/camera_info (sensor_msgs/CameraInfo) right/image (sensor_msgs/Image) right/camera_info (sensor_msgs/CameraInfo)

Published Topics

cloud (sensor_msgs/PointCloud2)

Parameters

~queue_size (int, default: 10) ~approx_sync (bool, default: "true") ~decimation (int, default: 1) ~voxel_size (double, default: 0.0) ~min_depth (double, default: 0.0) ~max_depth (double, default: 0.0) ~noise_filter_radius (double, default: 0.0) ~noise_filter_min_neighbors (int, default: 5) ~normal_k (int, default: 0) ~normal_radius (double, default: 0.0) ~filter_nans (bool, default: "false") ~roi_ratios (string, default: "0.0 0.0 0.0 0.0")

rtabmap_util/point_cloud_xyz

Construct a point cloud from a depth or disparity image. Optional decimation, depth, voxel and noise filtering can be applied.

Subscribed Topics

depth/image (sensor_msgs/Image) depth/camera_info (sensor_msgs/CameraInfo) disparity/image (stereo_msgs/DisparityImage) disparity/camera_info (sensor_msgs/CameraInfo)

Published Topics

cloud (sensor_msgs/PointCloud2)

Parameters

~queue_size (int, default: 10) ~approx_sync (bool, default: "true") ~decimation (int, default: 1) ~voxel_size (double, default: 0.0) ~min_depth (double, default: 0.0) ~max_depth (double, default: 0.0) ~noise_filter_radius (double, default: 0.0) ~noise_filter_min_neighbors (int, default: 5) ~normal_k (int, default: 0) ~normal_radius (double, default: 0.0) ~filter_nans (bool, default: "false") ~roi_ratios (string, default: "0.0 0.0 0.0 0.0")

rtabmap_util/disparity_to_depth

Convert a disparity image to a depth image.

Subscribed Topics

disparity (stereo_msgs/DisparityImage)

Published Topics

depth (sensor_msgs/Image) depth_raw (sensor_msgs/Image)

rtabmap_util/pointcloud_to_depthimage

Reproject a point cloud into a camera frame to create a depth image. When fixed_frame_id is set (e.g., "odom"), movement is taken into account by transforming the point cloud accordingly to camera timestamp. An example of usage of this nodelet can be found in the Tango ROS Streamer tutorial.

Subscribed Topics

camera_info (stereo_msgs/CameraInfo) cloud (sensor_msgs/PointCloud2)

Published Topics

image (sensor_msgs/Image) image_raw (sensor_msgs/Image)

Parameters

~queue_size (int, default: 10) ~fixed_frame_id (string, default: "") ~approx (bool, default: "true") ~wait_for_transform (double, default: 0.1) ~decimation (int, default: 1) ~fill_holes_size (int, default: 0) ~fill_holes_error (double, default: 0.1) ~fill_iterations (int, default: 1)

rtabmap_util/point_cloud_assembler

This nodelet can assemble a number of clouds (max_clouds or for a time assembling_time) coming from the same topic, taking into account the displacement of the robot based on fixed_frame_id, then publish the resulting cloud. If fixed_frame_id is set to "" (empty), the nodelet will subscribe to an odom topic that should have the exact same stamp than to input cloud. The output cloud has the same stamp and frame than the last assembled cloud.

Subscribed Topics

cloud (sensor_msgs/PointCloud2) odom (nav_msgs/Odometry) odom_info (rtabmap_msgs/OdometryInfo)

Published Topics

assembled_cloud (sensor_msgs/PointCloud2)

Parameters

~queue_size (int, default: 10) ~fixed_frame_id (string, default: "odom") ~frame_id (string, default: "") ~max_clouds (int, default: 0) ~assembling_time (double, default: 0) ~skip_clouds (int, default: 0) ~circular_buffer (bool, default: "false") ~linear_update (double, default: 0) ~angular_update (double, default: 0) ~wait_for_transform_duration (double, default: 0.1) ~range_min (double, default: 0) ~range_max (double, default: 0) ~voxel_size (double, default: 0) ~noise_radius (double, default: 0) ~noise_min_neighbors (int, default: 5) ~remove_z (bool, default: "false")

rtabmap_util/point_cloud_aggregator

Nodelet used to merge point clouds from different sensors into a single assembled cloud. If fixed_frame_id is set and approx_sync is true, the clouds are adjusted to include the displacement of the robot in the output cloud.

Subscribed Topics

cloud1 (sensor_msgs/PointCloud2) cloud2 (sensor_msgs/PointCloud2) cloud3 (sensor_msgs/PointCloud2) cloud4 (sensor_msgs/PointCloud2)

Published Topics

combined_cloud (sensor_msgs/PointCloud2)

Parameters

~queue_size (int, default: 10) ~fixed_frame_id (string, default: "") ~frame_id (string, default: "") ~approx_sync (bool, default: "true") ~count (int, default: 2) ~wait_for_transform_duration (double, default: 0.1)

rtabmap_util/imu_to_tf

Nodelet used to convert orientation set in a sensor_msgs/IMU msg into a TF in a target frame (that may be or not the frame of the IMU msg). For example, the resulting TF could be used as fixed or guess frame for lidar deskewing or rtabmap_odom respectively.

Subscribed Topics

imu/data (sensor_msgs/IMU)

Parameters

~fixed_frame_id (string, default: "odom") ~base_frame_id (string, default: "") ~wait_for_transform_duration (double, default: 0.1)

Required tf Transforms

base_frame_id<the frame attached to sensors of incoming data>

Provided tf Transforms

fixed_frame_idbase_frame_id

rtabmap_util/obstacles_detection

This nodelet extracts obstacles and the ground from a point cloud. The camera must see the ground to work reliably. Since the ground is not even, the ground is segmented by normal filtering: all points with normal in the +z direction (+- fixed angle) are labelled as ground, all the others are labelled as obstacles. The images below show an example.

Warning: this node will use a lot of CPU ressources if the raw point clouds are fed to it directly. A pcl::VoxelGrid can be used to downsample the raw point cloud (e.g. like 5 cm voxel) or rtabmap_util/point_cloud_xyz nodelet can be used to generate a downsampled cloud from a depth image (e.g. decimating the depth image by 4 before creating a cloud). That filtered point cloud would be fed to obstacles_detection.

obs1

obs2

obs0

obs4

Subscribed Topics

cloud (sensor_msgs/PointCloud2)

Published Topics

ground (sensor_msgs/PointCloud2) obstacles (sensor_msgs/PointCloud2)

Parameters

~frame_id (string, default: "base_link") ~queue_size (int, default: 10) ~normal_estimation_radius (double, default: 0.05) ~ground_normal_angle (double, default: PI/4) ~min_cluster_size (int, default: 20) ~max_obstacles_height (double, default: 0.0)

Required tf Transforms

base_link<the frame attached to sensors of incoming data>

rtabmap_util/lidar_deskewing

For sensor_msgs/PointCloud2 input_cloud (3D LiDAR), each point will be deskewed based on their timestamp during the rotation of the LiDAR using fixed_frame_id fixed frame. The input_cloud topic should have timestamp channel as t, time or stamps. Supported timestamp formats are FLOAT32 (seconds since header's timestamp) and UINT32 (nanoseconds since header's timestamp). If input_cloud is organized, deskewing will be faster (transformed per columns instead per points). For sensor_msgs/LaserScan input_scan (2D LiDAR), laser_geometry::LaserProjection class is used directly to project the scan while accounting for robot motion.

Subscribed Topics

input_scan (sensor_msgs/LaserScan) input_cloud (sensor_msgs/PointCloud2)

Published Topics

[input_scan]/deskewed (sensor_msgs/PointCloud2) [input_cloud]/deskewed (sensor_msgs/PointCloud2)

Parameters

~fixed_frame_id (string, default: "") ~wait_for_transform (double, default: 0.01) ~slerp (bool, default: false)

Required tf Transforms

fixed_frame_id<the frame attached to sensors of incoming data>

Wiki: rtabmap_util (last edited 2024-03-28 22:26:29 by MathieuLabbe)