|
rtabmap_util package from rtabmap_ros reportabmap_conversions rtabmap_costmap_plugins rtabmap_demos rtabmap_examples rtabmap_launch rtabmap_msgs rtabmap_odom rtabmap_python rtabmap_ros rtabmap_rviz_plugins rtabmap_slam rtabmap_sync rtabmap_util rtabmap_viz |
ROS Distro
|
Package Summary
| Version | 0.23.13 |
| License | BSD |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/introlab/rtabmap_ros.git |
| VCS Type | git |
| VCS Version | humble-devel |
| Last Updated | 2026-10-01 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Mathieu Labbe
Authors
- Mathieu Labbe
rtabmap_util
Standalone utility nodes for RTAB-Map pipelines: converting between sensor representations, cleaning up point clouds, assembling maps and replaying recorded sessions.
Every node is a composable node as well as a standalone executable. Composing them into one process with their producer avoids copying images and clouds between processes, which is worth doing for anything on the sensor path.
Contents
Nodes
One page per node.
Sensor conversion
| Node | Description |
|---|---|
| disparity_to_depth | Disparity image → depth image, in meters and in millimeters. |
| pointcloud_to_depthimage | Point cloud → depth image registered to an RGB camera. Lets a lidar feed an RGB-D pipeline. |
| point_cloud_xyz | Depth or disparity image → point cloud, with filtering. |
| point_cloud_xyzrgb | RGB-D, stereo or disparity → colored point cloud. |
| imu_to_tf | IMU orientation → TF. |
RGBDImage plumbing
| Node | Description |
|---|---|
| rgbd_relay | Republishes an RGBDImage, compressing or decompressing on the way. |
| rgbd_split | Splits an RGBDImage back into standard Image and CameraInfo topics. |
Point cloud processing
| Node | Description |
|---|---|
| lidar_deskewing | Removes motion distortion from a lidar sweep. |
| point_cloud_aggregator | Merges one cloud from each of several sensors into one. |
| point_cloud_assembler | Accumulates one sensor over time into a denser cloud. |
| obstacles_detection | Segments a cloud into ground and obstacles. |
Maps and replay
| Node | Description |
|---|---|
| map_assembler | Rebuilds the global maps from RTAB-Map’s graph, off the SLAM node’s critical path. |
| db_player | Replays a recorded RTAB-Map database as live sensor topics. |
Library
The package also installs a small C++ library, whose API is documented in the C++ API reference generated from the headers.
MapsManager is the piece worth knowing about: it turns a pose graph plus per-node occupancy grids into the assembled clouds, occupancy grid, octomap and elevation map, and publishes them. Both map_assembler and rtabmap_slam’s rtabmap node use it, which is why their map outputs and Grid/* parameters behave identically. It is described below.
MapsManager
Published topics. Everything is published only when subscribed, and – by default – latched, so a subscriber joining late immediately receives the current map.
In a component container with intra-process communication enabled (use_intra_process_comms), these publishers automatically opt out of it when latch is on, since intra-process communication does not support transient local durability. With latch off, they keep the container’s setting.
| Topic | Type | Description |
|---|---|---|
cloud_map |
sensor_msgs/msg/PointCloud2 |
Ground and obstacles together. |
cloud_ground |
sensor_msgs/msg/PointCloud2 |
Ground only, colored green. |
cloud_obstacles |
sensor_msgs/msg/PointCloud2 |
Obstacles only, colored red. |
map |
nav_msgs/msg/OccupancyGrid |
The 2D occupancy grid, the one navigation wants. |
grid_prob_map |
nav_msgs/msg/OccupancyGrid |
The same grid as occupancy probabilities rather than free/occupied/unknown. |
octomap_occupied_space, octomap_obstacles, octomap_ground, octomap_empty_space, octomap_global_frontier_space
|
sensor_msgs/msg/PointCloud2 |
Octomap contents, one cloud per category. Requires RTAB-Map built with OctoMap. |
octomap_grid |
nav_msgs/msg/OccupancyGrid |
The octomap projected to 2D. |
octomap_binary, octomap_full
|
octomap_msgs/msg/Octomap |
The tree itself, for octovis or other octomap consumers. Serialized as a ColorOcTree, see Octomap tree type. |
elevation_map |
grid_map_msgs/msg/GridMap |
Elevation map. Requires RTAB-Map built with grid_map. |
Parameters.
| Parameter | Type | Default | Description |
|---|---|---|---|
latch |
bool |
true |
Publish with transient-local durability so late subscribers get the current map. |
map_filter_radius |
double |
0.0 |
Skip nodes closer together than this, in meters. A cheap way to thin a dense graph. 0 disables. |
map_filter_angle |
double |
30.0 |
With map_filter_radius, nodes are only merged if they also differ by less than this angle, in degrees. |
map_always_update |
bool |
false |
Also assemble the latest sensor data, not yet a node, so the maps update even when the robot stands still and no node is added. |
map_empty_ray_tracing |
bool |
true |
For that latest data, fill the 2D scan’s rays with empty cells (Grid/Scan2dUnknownSpaceFilled). |
map_cleanup |
bool |
true |
Free the cached clouds when nobody is subscribed. |
cloud_output_voxelized |
bool |
true |
Voxelize the assembled clouds at Grid/CellSize. |
cloud_subtract_filtering |
bool |
false |
Drop points that duplicate ones already in the map. Slower, smaller output. |
cloud_subtract_filtering_min_neighbors |
int |
2 |
Neighbors needed for a point to count as a duplicate. |
octomap_tree_depth |
int |
16 |
Depth the octomap clouds are generated at. Lower means coarser and faster. Maximum 16. |
map_always_update and map_empty_ray_tracing only apply to the latest sensor data, not yet committed as a node, which only the rtabmap node has: they do nothing in map_assembler.
Every RTAB-Map Grid/*, GridGlobal/*, StereoBM/* and StereoSGBM/* parameter is also exposed, all documented in RTAB-Map’s parameter reference. The split between the first two is worth knowing: Grid/* decides how each node’s local grid is built from its sensor data – the same segmentation obstacles_detection does, and the parameters listed there apply here too – while GridGlobal/* decides how those local grids are merged into the global map, so it covers the map’s minimum size, its occupancy threshold, and how far the graph must move before the whole map is rebuilt.
Octomap tree type
RTAB-Map keeps a color per voxel, so the tree it publishes on octomap_binary and octomap_full reports its id as ColorOcTree, not the plain OcTree many examples assume.
That is deliberate and interoperable: octomap_msgs::binaryMsgToMap() and fullMsgToMap() branch on that id and hand you back an octomap::ColorOcTree, and octovis opens it without complaint. What does break is code that assumes the other branch:
```cpp
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged rtabmap_util at Robotics Stack Exchange
|
rtabmap_util package from rtabmap_ros reportabmap_conversions rtabmap_costmap_plugins rtabmap_demos rtabmap_examples rtabmap_launch rtabmap_msgs rtabmap_odom rtabmap_python rtabmap_ros rtabmap_rviz_plugins rtabmap_slam rtabmap_sync rtabmap_util rtabmap_viz |
ROS Distro
|
Package Summary
| Version | 0.23.13 |
| License | BSD |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/introlab/rtabmap_ros.git |
| VCS Type | git |
| VCS Version | jazzy-devel |
| Last Updated | 2026-10-01 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Mathieu Labbe
Authors
- Mathieu Labbe
rtabmap_util
Standalone utility nodes for RTAB-Map pipelines: converting between sensor representations, cleaning up point clouds, assembling maps and replaying recorded sessions.
Every node is a composable node as well as a standalone executable. Composing them into one process with their producer avoids copying images and clouds between processes, which is worth doing for anything on the sensor path.
Contents
Nodes
One page per node.
Sensor conversion
| Node | Description |
|---|---|
| disparity_to_depth | Disparity image → depth image, in meters and in millimeters. |
| pointcloud_to_depthimage | Point cloud → depth image registered to an RGB camera. Lets a lidar feed an RGB-D pipeline. |
| point_cloud_xyz | Depth or disparity image → point cloud, with filtering. |
| point_cloud_xyzrgb | RGB-D, stereo or disparity → colored point cloud. |
| imu_to_tf | IMU orientation → TF. |
RGBDImage plumbing
| Node | Description |
|---|---|
| rgbd_relay | Republishes an RGBDImage, compressing or decompressing on the way. |
| rgbd_split | Splits an RGBDImage back into standard Image and CameraInfo topics. |
Point cloud processing
| Node | Description |
|---|---|
| lidar_deskewing | Removes motion distortion from a lidar sweep. |
| point_cloud_aggregator | Merges one cloud from each of several sensors into one. |
| point_cloud_assembler | Accumulates one sensor over time into a denser cloud. |
| obstacles_detection | Segments a cloud into ground and obstacles. |
Maps and replay
| Node | Description |
|---|---|
| map_assembler | Rebuilds the global maps from RTAB-Map’s graph, off the SLAM node’s critical path. |
| db_player | Replays a recorded RTAB-Map database as live sensor topics. |
Library
The package also installs a small C++ library, whose API is documented in the C++ API reference generated from the headers.
MapsManager is the piece worth knowing about: it turns a pose graph plus per-node occupancy grids into the assembled clouds, occupancy grid, octomap and elevation map, and publishes them. Both map_assembler and rtabmap_slam’s rtabmap node use it, which is why their map outputs and Grid/* parameters behave identically. It is described below.
MapsManager
Published topics. Everything is published only when subscribed, and – by default – latched, so a subscriber joining late immediately receives the current map.
In a component container with intra-process communication enabled (use_intra_process_comms), these publishers automatically opt out of it when latch is on, since intra-process communication does not support transient local durability. With latch off, they keep the container’s setting.
| Topic | Type | Description |
|---|---|---|
cloud_map |
sensor_msgs/msg/PointCloud2 |
Ground and obstacles together. |
cloud_ground |
sensor_msgs/msg/PointCloud2 |
Ground only, colored green. |
cloud_obstacles |
sensor_msgs/msg/PointCloud2 |
Obstacles only, colored red. |
map |
nav_msgs/msg/OccupancyGrid |
The 2D occupancy grid, the one navigation wants. |
grid_prob_map |
nav_msgs/msg/OccupancyGrid |
The same grid as occupancy probabilities rather than free/occupied/unknown. |
octomap_occupied_space, octomap_obstacles, octomap_ground, octomap_empty_space, octomap_global_frontier_space
|
sensor_msgs/msg/PointCloud2 |
Octomap contents, one cloud per category. Requires RTAB-Map built with OctoMap. |
octomap_grid |
nav_msgs/msg/OccupancyGrid |
The octomap projected to 2D. |
octomap_binary, octomap_full
|
octomap_msgs/msg/Octomap |
The tree itself, for octovis or other octomap consumers. Serialized as a ColorOcTree, see Octomap tree type. |
elevation_map |
grid_map_msgs/msg/GridMap |
Elevation map. Requires RTAB-Map built with grid_map. |
Parameters.
| Parameter | Type | Default | Description |
|---|---|---|---|
latch |
bool |
true |
Publish with transient-local durability so late subscribers get the current map. |
map_filter_radius |
double |
0.0 |
Skip nodes closer together than this, in meters. A cheap way to thin a dense graph. 0 disables. |
map_filter_angle |
double |
30.0 |
With map_filter_radius, nodes are only merged if they also differ by less than this angle, in degrees. |
map_always_update |
bool |
false |
Also assemble the latest sensor data, not yet a node, so the maps update even when the robot stands still and no node is added. |
map_empty_ray_tracing |
bool |
true |
For that latest data, fill the 2D scan’s rays with empty cells (Grid/Scan2dUnknownSpaceFilled). |
map_cleanup |
bool |
true |
Free the cached clouds when nobody is subscribed. |
cloud_output_voxelized |
bool |
true |
Voxelize the assembled clouds at Grid/CellSize. |
cloud_subtract_filtering |
bool |
false |
Drop points that duplicate ones already in the map. Slower, smaller output. |
cloud_subtract_filtering_min_neighbors |
int |
2 |
Neighbors needed for a point to count as a duplicate. |
octomap_tree_depth |
int |
16 |
Depth the octomap clouds are generated at. Lower means coarser and faster. Maximum 16. |
map_always_update and map_empty_ray_tracing only apply to the latest sensor data, not yet committed as a node, which only the rtabmap node has: they do nothing in map_assembler.
Every RTAB-Map Grid/*, GridGlobal/*, StereoBM/* and StereoSGBM/* parameter is also exposed, all documented in RTAB-Map’s parameter reference. The split between the first two is worth knowing: Grid/* decides how each node’s local grid is built from its sensor data – the same segmentation obstacles_detection does, and the parameters listed there apply here too – while GridGlobal/* decides how those local grids are merged into the global map, so it covers the map’s minimum size, its occupancy threshold, and how far the graph must move before the whole map is rebuilt.
Octomap tree type
RTAB-Map keeps a color per voxel, so the tree it publishes on octomap_binary and octomap_full reports its id as ColorOcTree, not the plain OcTree many examples assume.
That is deliberate and interoperable: octomap_msgs::binaryMsgToMap() and fullMsgToMap() branch on that id and hand you back an octomap::ColorOcTree, and octovis opens it without complaint. What does break is code that assumes the other branch:
```cpp
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged rtabmap_util at Robotics Stack Exchange
|
rtabmap_util package from rtabmap_ros reportabmap_conversions rtabmap_costmap_plugins rtabmap_demos rtabmap_examples rtabmap_launch rtabmap_msgs rtabmap_odom rtabmap_python rtabmap_ros rtabmap_rviz_plugins rtabmap_slam rtabmap_sync rtabmap_util rtabmap_viz |
ROS Distro
|
Package Summary
| Version | 0.23.13 |
| License | BSD |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/introlab/rtabmap_ros.git |
| VCS Type | git |
| VCS Version | kilted-devel |
| Last Updated | 2026-10-01 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Mathieu Labbe
Authors
- Mathieu Labbe
rtabmap_util
Standalone utility nodes for RTAB-Map pipelines: converting between sensor representations, cleaning up point clouds, assembling maps and replaying recorded sessions.
Every node is a composable node as well as a standalone executable. Composing them into one process with their producer avoids copying images and clouds between processes, which is worth doing for anything on the sensor path.
Contents
Nodes
One page per node.
Sensor conversion
| Node | Description |
|---|---|
| disparity_to_depth | Disparity image → depth image, in meters and in millimeters. |
| pointcloud_to_depthimage | Point cloud → depth image registered to an RGB camera. Lets a lidar feed an RGB-D pipeline. |
| point_cloud_xyz | Depth or disparity image → point cloud, with filtering. |
| point_cloud_xyzrgb | RGB-D, stereo or disparity → colored point cloud. |
| imu_to_tf | IMU orientation → TF. |
RGBDImage plumbing
| Node | Description |
|---|---|
| rgbd_relay | Republishes an RGBDImage, compressing or decompressing on the way. |
| rgbd_split | Splits an RGBDImage back into standard Image and CameraInfo topics. |
Point cloud processing
| Node | Description |
|---|---|
| lidar_deskewing | Removes motion distortion from a lidar sweep. |
| point_cloud_aggregator | Merges one cloud from each of several sensors into one. |
| point_cloud_assembler | Accumulates one sensor over time into a denser cloud. |
| obstacles_detection | Segments a cloud into ground and obstacles. |
Maps and replay
| Node | Description |
|---|---|
| map_assembler | Rebuilds the global maps from RTAB-Map’s graph, off the SLAM node’s critical path. |
| db_player | Replays a recorded RTAB-Map database as live sensor topics. |
Library
The package also installs a small C++ library, whose API is documented in the C++ API reference generated from the headers.
MapsManager is the piece worth knowing about: it turns a pose graph plus per-node occupancy grids into the assembled clouds, occupancy grid, octomap and elevation map, and publishes them. Both map_assembler and rtabmap_slam’s rtabmap node use it, which is why their map outputs and Grid/* parameters behave identically. It is described below.
MapsManager
Published topics. Everything is published only when subscribed, and – by default – latched, so a subscriber joining late immediately receives the current map.
In a component container with intra-process communication enabled (use_intra_process_comms), these publishers automatically opt out of it when latch is on, since intra-process communication does not support transient local durability. With latch off, they keep the container’s setting.
| Topic | Type | Description |
|---|---|---|
cloud_map |
sensor_msgs/msg/PointCloud2 |
Ground and obstacles together. |
cloud_ground |
sensor_msgs/msg/PointCloud2 |
Ground only, colored green. |
cloud_obstacles |
sensor_msgs/msg/PointCloud2 |
Obstacles only, colored red. |
map |
nav_msgs/msg/OccupancyGrid |
The 2D occupancy grid, the one navigation wants. |
grid_prob_map |
nav_msgs/msg/OccupancyGrid |
The same grid as occupancy probabilities rather than free/occupied/unknown. |
octomap_occupied_space, octomap_obstacles, octomap_ground, octomap_empty_space, octomap_global_frontier_space
|
sensor_msgs/msg/PointCloud2 |
Octomap contents, one cloud per category. Requires RTAB-Map built with OctoMap. |
octomap_grid |
nav_msgs/msg/OccupancyGrid |
The octomap projected to 2D. |
octomap_binary, octomap_full
|
octomap_msgs/msg/Octomap |
The tree itself, for octovis or other octomap consumers. Serialized as a ColorOcTree, see Octomap tree type. |
elevation_map |
grid_map_msgs/msg/GridMap |
Elevation map. Requires RTAB-Map built with grid_map. |
Parameters.
| Parameter | Type | Default | Description |
|---|---|---|---|
latch |
bool |
true |
Publish with transient-local durability so late subscribers get the current map. |
map_filter_radius |
double |
0.0 |
Skip nodes closer together than this, in meters. A cheap way to thin a dense graph. 0 disables. |
map_filter_angle |
double |
30.0 |
With map_filter_radius, nodes are only merged if they also differ by less than this angle, in degrees. |
map_always_update |
bool |
false |
Also assemble the latest sensor data, not yet a node, so the maps update even when the robot stands still and no node is added. |
map_empty_ray_tracing |
bool |
true |
For that latest data, fill the 2D scan’s rays with empty cells (Grid/Scan2dUnknownSpaceFilled). |
map_cleanup |
bool |
true |
Free the cached clouds when nobody is subscribed. |
cloud_output_voxelized |
bool |
true |
Voxelize the assembled clouds at Grid/CellSize. |
cloud_subtract_filtering |
bool |
false |
Drop points that duplicate ones already in the map. Slower, smaller output. |
cloud_subtract_filtering_min_neighbors |
int |
2 |
Neighbors needed for a point to count as a duplicate. |
octomap_tree_depth |
int |
16 |
Depth the octomap clouds are generated at. Lower means coarser and faster. Maximum 16. |
map_always_update and map_empty_ray_tracing only apply to the latest sensor data, not yet committed as a node, which only the rtabmap node has: they do nothing in map_assembler.
Every RTAB-Map Grid/*, GridGlobal/*, StereoBM/* and StereoSGBM/* parameter is also exposed, all documented in RTAB-Map’s parameter reference. The split between the first two is worth knowing: Grid/* decides how each node’s local grid is built from its sensor data – the same segmentation obstacles_detection does, and the parameters listed there apply here too – while GridGlobal/* decides how those local grids are merged into the global map, so it covers the map’s minimum size, its occupancy threshold, and how far the graph must move before the whole map is rebuilt.
Octomap tree type
RTAB-Map keeps a color per voxel, so the tree it publishes on octomap_binary and octomap_full reports its id as ColorOcTree, not the plain OcTree many examples assume.
That is deliberate and interoperable: octomap_msgs::binaryMsgToMap() and fullMsgToMap() branch on that id and hand you back an octomap::ColorOcTree, and octovis opens it without complaint. What does break is code that assumes the other branch:
```cpp
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged rtabmap_util at Robotics Stack Exchange
|
rtabmap_util package from rtabmap_ros reportabmap_conversions rtabmap_costmap_plugins rtabmap_demos rtabmap_examples rtabmap_launch rtabmap_msgs rtabmap_odom rtabmap_python rtabmap_ros rtabmap_rviz_plugins rtabmap_slam rtabmap_sync rtabmap_util rtabmap_viz |
ROS Distro
|
Package Summary
| Version | 0.23.13 |
| License | BSD |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/introlab/rtabmap_ros.git |
| VCS Type | git |
| VCS Version | lyrical-devel |
| Last Updated | 2026-10-01 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Mathieu Labbe
Authors
- Mathieu Labbe
rtabmap_util
Standalone utility nodes for RTAB-Map pipelines: converting between sensor representations, cleaning up point clouds, assembling maps and replaying recorded sessions.
Every node is a composable node as well as a standalone executable. Composing them into one process with their producer avoids copying images and clouds between processes, which is worth doing for anything on the sensor path.
Contents
Nodes
One page per node.
Sensor conversion
| Node | Description |
|---|---|
| disparity_to_depth | Disparity image → depth image, in meters and in millimeters. |
| pointcloud_to_depthimage | Point cloud → depth image registered to an RGB camera. Lets a lidar feed an RGB-D pipeline. |
| point_cloud_xyz | Depth or disparity image → point cloud, with filtering. |
| point_cloud_xyzrgb | RGB-D, stereo or disparity → colored point cloud. |
| imu_to_tf | IMU orientation → TF. |
RGBDImage plumbing
| Node | Description |
|---|---|
| rgbd_relay | Republishes an RGBDImage, compressing or decompressing on the way. |
| rgbd_split | Splits an RGBDImage back into standard Image and CameraInfo topics. |
Point cloud processing
| Node | Description |
|---|---|
| lidar_deskewing | Removes motion distortion from a lidar sweep. |
| point_cloud_aggregator | Merges one cloud from each of several sensors into one. |
| point_cloud_assembler | Accumulates one sensor over time into a denser cloud. |
| obstacles_detection | Segments a cloud into ground and obstacles. |
Maps and replay
| Node | Description |
|---|---|
| map_assembler | Rebuilds the global maps from RTAB-Map’s graph, off the SLAM node’s critical path. |
| db_player | Replays a recorded RTAB-Map database as live sensor topics. |
Library
The package also installs a small C++ library, whose API is documented in the C++ API reference generated from the headers.
MapsManager is the piece worth knowing about: it turns a pose graph plus per-node occupancy grids into the assembled clouds, occupancy grid, octomap and elevation map, and publishes them. Both map_assembler and rtabmap_slam’s rtabmap node use it, which is why their map outputs and Grid/* parameters behave identically. It is described below.
MapsManager
Published topics. Everything is published only when subscribed, and – by default – latched, so a subscriber joining late immediately receives the current map.
In a component container with intra-process communication enabled (use_intra_process_comms), these publishers automatically opt out of it when latch is on, since intra-process communication does not support transient local durability. With latch off, they keep the container’s setting.
| Topic | Type | Description |
|---|---|---|
cloud_map |
sensor_msgs/msg/PointCloud2 |
Ground and obstacles together. |
cloud_ground |
sensor_msgs/msg/PointCloud2 |
Ground only, colored green. |
cloud_obstacles |
sensor_msgs/msg/PointCloud2 |
Obstacles only, colored red. |
map |
nav_msgs/msg/OccupancyGrid |
The 2D occupancy grid, the one navigation wants. |
grid_prob_map |
nav_msgs/msg/OccupancyGrid |
The same grid as occupancy probabilities rather than free/occupied/unknown. |
octomap_occupied_space, octomap_obstacles, octomap_ground, octomap_empty_space, octomap_global_frontier_space
|
sensor_msgs/msg/PointCloud2 |
Octomap contents, one cloud per category. Requires RTAB-Map built with OctoMap. |
octomap_grid |
nav_msgs/msg/OccupancyGrid |
The octomap projected to 2D. |
octomap_binary, octomap_full
|
octomap_msgs/msg/Octomap |
The tree itself, for octovis or other octomap consumers. Serialized as a ColorOcTree, see Octomap tree type. |
elevation_map |
grid_map_msgs/msg/GridMap |
Elevation map. Requires RTAB-Map built with grid_map. |
Parameters.
| Parameter | Type | Default | Description |
|---|---|---|---|
latch |
bool |
true |
Publish with transient-local durability so late subscribers get the current map. |
map_filter_radius |
double |
0.0 |
Skip nodes closer together than this, in meters. A cheap way to thin a dense graph. 0 disables. |
map_filter_angle |
double |
30.0 |
With map_filter_radius, nodes are only merged if they also differ by less than this angle, in degrees. |
map_always_update |
bool |
false |
Also assemble the latest sensor data, not yet a node, so the maps update even when the robot stands still and no node is added. |
map_empty_ray_tracing |
bool |
true |
For that latest data, fill the 2D scan’s rays with empty cells (Grid/Scan2dUnknownSpaceFilled). |
map_cleanup |
bool |
true |
Free the cached clouds when nobody is subscribed. |
cloud_output_voxelized |
bool |
true |
Voxelize the assembled clouds at Grid/CellSize. |
cloud_subtract_filtering |
bool |
false |
Drop points that duplicate ones already in the map. Slower, smaller output. |
cloud_subtract_filtering_min_neighbors |
int |
2 |
Neighbors needed for a point to count as a duplicate. |
octomap_tree_depth |
int |
16 |
Depth the octomap clouds are generated at. Lower means coarser and faster. Maximum 16. |
map_always_update and map_empty_ray_tracing only apply to the latest sensor data, not yet committed as a node, which only the rtabmap node has: they do nothing in map_assembler.
Every RTAB-Map Grid/*, GridGlobal/*, StereoBM/* and StereoSGBM/* parameter is also exposed, all documented in RTAB-Map’s parameter reference. The split between the first two is worth knowing: Grid/* decides how each node’s local grid is built from its sensor data – the same segmentation obstacles_detection does, and the parameters listed there apply here too – while GridGlobal/* decides how those local grids are merged into the global map, so it covers the map’s minimum size, its occupancy threshold, and how far the graph must move before the whole map is rebuilt.
Octomap tree type
RTAB-Map keeps a color per voxel, so the tree it publishes on octomap_binary and octomap_full reports its id as ColorOcTree, not the plain OcTree many examples assume.
That is deliberate and interoperable: octomap_msgs::binaryMsgToMap() and fullMsgToMap() branch on that id and hand you back an octomap::ColorOcTree, and octovis opens it without complaint. What does break is code that assumes the other branch:
```cpp
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged rtabmap_util at Robotics Stack Exchange
|
rtabmap_util package from rtabmap_ros reportabmap_conversions rtabmap_demos rtabmap_examples rtabmap_launch rtabmap_msgs rtabmap_odom rtabmap_python rtabmap_ros rtabmap_rviz_plugins rtabmap_slam rtabmap_sync rtabmap_util rtabmap_viz |
ROS Distro
|
Package Summary
| Version | 0.23.13 |
| License | BSD |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/introlab/rtabmap_ros.git |
| VCS Type | git |
| VCS Version | rolling-devel |
| Last Updated | 2026-10-02 |
| Dev Status | MAINTAINED |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Mathieu Labbe
Authors
- Mathieu Labbe
rtabmap_util
Standalone utility nodes for RTAB-Map pipelines: converting between sensor representations, cleaning up point clouds, assembling maps and replaying recorded sessions.
Every node is a composable node as well as a standalone executable. Composing them into one process with their producer avoids copying images and clouds between processes, which is worth doing for anything on the sensor path.
Contents
Nodes
One page per node.
Sensor conversion
| Node | Description |
|---|---|
| disparity_to_depth | Disparity image → depth image, in meters and in millimeters. |
| pointcloud_to_depthimage | Point cloud → depth image registered to an RGB camera. Lets a lidar feed an RGB-D pipeline. |
| point_cloud_xyz | Depth or disparity image → point cloud, with filtering. |
| point_cloud_xyzrgb | RGB-D, stereo or disparity → colored point cloud. |
| imu_to_tf | IMU orientation → TF. |
RGBDImage plumbing
| Node | Description |
|---|---|
| rgbd_relay | Republishes an RGBDImage, compressing or decompressing on the way. |
| rgbd_split | Splits an RGBDImage back into standard Image and CameraInfo topics. |
Point cloud processing
| Node | Description |
|---|---|
| lidar_deskewing | Removes motion distortion from a lidar sweep. |
| point_cloud_aggregator | Merges one cloud from each of several sensors into one. |
| point_cloud_assembler | Accumulates one sensor over time into a denser cloud. |
| obstacles_detection | Segments a cloud into ground and obstacles. |
Maps and replay
| Node | Description |
|---|---|
| map_assembler | Rebuilds the global maps from RTAB-Map’s graph, off the SLAM node’s critical path. |
| db_player | Replays a recorded RTAB-Map database as live sensor topics. |
Library
The package also installs a small C++ library, whose API is documented in the C++ API reference generated from the headers.
MapsManager is the piece worth knowing about: it turns a pose graph plus per-node occupancy grids into the assembled clouds, occupancy grid, octomap and elevation map, and publishes them. Both map_assembler and rtabmap_slam’s rtabmap node use it, which is why their map outputs and Grid/* parameters behave identically. It is described below.
MapsManager
Published topics. Everything is published only when subscribed, and – by default – latched, so a subscriber joining late immediately receives the current map.
In a component container with intra-process communication enabled (use_intra_process_comms), these publishers automatically opt out of it when latch is on, since intra-process communication does not support transient local durability. With latch off, they keep the container’s setting.
| Topic | Type | Description |
|---|---|---|
cloud_map |
sensor_msgs/msg/PointCloud2 |
Ground and obstacles together. |
cloud_ground |
sensor_msgs/msg/PointCloud2 |
Ground only, colored green. |
cloud_obstacles |
sensor_msgs/msg/PointCloud2 |
Obstacles only, colored red. |
map |
nav_msgs/msg/OccupancyGrid |
The 2D occupancy grid, the one navigation wants. |
grid_prob_map |
nav_msgs/msg/OccupancyGrid |
The same grid as occupancy probabilities rather than free/occupied/unknown. |
octomap_occupied_space, octomap_obstacles, octomap_ground, octomap_empty_space, octomap_global_frontier_space
|
sensor_msgs/msg/PointCloud2 |
Octomap contents, one cloud per category. Requires RTAB-Map built with OctoMap. |
octomap_grid |
nav_msgs/msg/OccupancyGrid |
The octomap projected to 2D. |
octomap_binary, octomap_full
|
octomap_msgs/msg/Octomap |
The tree itself, for octovis or other octomap consumers. Serialized as a ColorOcTree, see Octomap tree type. |
elevation_map |
grid_map_msgs/msg/GridMap |
Elevation map. Requires RTAB-Map built with grid_map. |
Parameters.
| Parameter | Type | Default | Description |
|---|---|---|---|
latch |
bool |
true |
Publish with transient-local durability so late subscribers get the current map. |
map_filter_radius |
double |
0.0 |
Skip nodes closer together than this, in meters. A cheap way to thin a dense graph. 0 disables. |
map_filter_angle |
double |
30.0 |
With map_filter_radius, nodes are only merged if they also differ by less than this angle, in degrees. |
map_always_update |
bool |
false |
Also assemble the latest sensor data, not yet a node, so the maps update even when the robot stands still and no node is added. |
map_empty_ray_tracing |
bool |
true |
For that latest data, fill the 2D scan’s rays with empty cells (Grid/Scan2dUnknownSpaceFilled). |
map_cleanup |
bool |
true |
Free the cached clouds when nobody is subscribed. |
cloud_output_voxelized |
bool |
true |
Voxelize the assembled clouds at Grid/CellSize. |
cloud_subtract_filtering |
bool |
false |
Drop points that duplicate ones already in the map. Slower, smaller output. |
cloud_subtract_filtering_min_neighbors |
int |
2 |
Neighbors needed for a point to count as a duplicate. |
octomap_tree_depth |
int |
16 |
Depth the octomap clouds are generated at. Lower means coarser and faster. Maximum 16. |
map_always_update and map_empty_ray_tracing only apply to the latest sensor data, not yet committed as a node, which only the rtabmap node has: they do nothing in map_assembler.
Every RTAB-Map Grid/*, GridGlobal/*, StereoBM/* and StereoSGBM/* parameter is also exposed, all documented in RTAB-Map’s parameter reference. The split between the first two is worth knowing: Grid/* decides how each node’s local grid is built from its sensor data – the same segmentation obstacles_detection does, and the parameters listed there apply here too – while GridGlobal/* decides how those local grids are merged into the global map, so it covers the map’s minimum size, its occupancy threshold, and how far the graph must move before the whole map is rebuilt.
Octomap tree type
RTAB-Map keeps a color per voxel, so the tree it publishes on octomap_binary and octomap_full reports its id as ColorOcTree, not the plain OcTree many examples assume.
That is deliberate and interoperable: octomap_msgs::binaryMsgToMap() and fullMsgToMap() branch on that id and hand you back an octomap::ColorOcTree, and octovis opens it without complaint. What does break is code that assumes the other branch:
```cpp
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged rtabmap_util at Robotics Stack Exchange
|
rtabmap_util package from rtabmap_ros reportabmap_conversions rtabmap_costmap_plugins rtabmap_demos rtabmap_examples rtabmap_launch rtabmap_msgs rtabmap_odom rtabmap_python rtabmap_ros rtabmap_rviz_plugins rtabmap_slam rtabmap_sync rtabmap_util rtabmap_viz |
ROS Distro
|
Package Summary
| Version | 0.23.13 |
| License | BSD |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/introlab/rtabmap_ros.git |
| VCS Type | git |
| VCS Version | humble-devel |
| Last Updated | 2026-10-01 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Mathieu Labbe
Authors
- Mathieu Labbe
rtabmap_util
Standalone utility nodes for RTAB-Map pipelines: converting between sensor representations, cleaning up point clouds, assembling maps and replaying recorded sessions.
Every node is a composable node as well as a standalone executable. Composing them into one process with their producer avoids copying images and clouds between processes, which is worth doing for anything on the sensor path.
Contents
Nodes
One page per node.
Sensor conversion
| Node | Description |
|---|---|
| disparity_to_depth | Disparity image → depth image, in meters and in millimeters. |
| pointcloud_to_depthimage | Point cloud → depth image registered to an RGB camera. Lets a lidar feed an RGB-D pipeline. |
| point_cloud_xyz | Depth or disparity image → point cloud, with filtering. |
| point_cloud_xyzrgb | RGB-D, stereo or disparity → colored point cloud. |
| imu_to_tf | IMU orientation → TF. |
RGBDImage plumbing
| Node | Description |
|---|---|
| rgbd_relay | Republishes an RGBDImage, compressing or decompressing on the way. |
| rgbd_split | Splits an RGBDImage back into standard Image and CameraInfo topics. |
Point cloud processing
| Node | Description |
|---|---|
| lidar_deskewing | Removes motion distortion from a lidar sweep. |
| point_cloud_aggregator | Merges one cloud from each of several sensors into one. |
| point_cloud_assembler | Accumulates one sensor over time into a denser cloud. |
| obstacles_detection | Segments a cloud into ground and obstacles. |
Maps and replay
| Node | Description |
|---|---|
| map_assembler | Rebuilds the global maps from RTAB-Map’s graph, off the SLAM node’s critical path. |
| db_player | Replays a recorded RTAB-Map database as live sensor topics. |
Library
The package also installs a small C++ library, whose API is documented in the C++ API reference generated from the headers.
MapsManager is the piece worth knowing about: it turns a pose graph plus per-node occupancy grids into the assembled clouds, occupancy grid, octomap and elevation map, and publishes them. Both map_assembler and rtabmap_slam’s rtabmap node use it, which is why their map outputs and Grid/* parameters behave identically. It is described below.
MapsManager
Published topics. Everything is published only when subscribed, and – by default – latched, so a subscriber joining late immediately receives the current map.
In a component container with intra-process communication enabled (use_intra_process_comms), these publishers automatically opt out of it when latch is on, since intra-process communication does not support transient local durability. With latch off, they keep the container’s setting.
| Topic | Type | Description |
|---|---|---|
cloud_map |
sensor_msgs/msg/PointCloud2 |
Ground and obstacles together. |
cloud_ground |
sensor_msgs/msg/PointCloud2 |
Ground only, colored green. |
cloud_obstacles |
sensor_msgs/msg/PointCloud2 |
Obstacles only, colored red. |
map |
nav_msgs/msg/OccupancyGrid |
The 2D occupancy grid, the one navigation wants. |
grid_prob_map |
nav_msgs/msg/OccupancyGrid |
The same grid as occupancy probabilities rather than free/occupied/unknown. |
octomap_occupied_space, octomap_obstacles, octomap_ground, octomap_empty_space, octomap_global_frontier_space
|
sensor_msgs/msg/PointCloud2 |
Octomap contents, one cloud per category. Requires RTAB-Map built with OctoMap. |
octomap_grid |
nav_msgs/msg/OccupancyGrid |
The octomap projected to 2D. |
octomap_binary, octomap_full
|
octomap_msgs/msg/Octomap |
The tree itself, for octovis or other octomap consumers. Serialized as a ColorOcTree, see Octomap tree type. |
elevation_map |
grid_map_msgs/msg/GridMap |
Elevation map. Requires RTAB-Map built with grid_map. |
Parameters.
| Parameter | Type | Default | Description |
|---|---|---|---|
latch |
bool |
true |
Publish with transient-local durability so late subscribers get the current map. |
map_filter_radius |
double |
0.0 |
Skip nodes closer together than this, in meters. A cheap way to thin a dense graph. 0 disables. |
map_filter_angle |
double |
30.0 |
With map_filter_radius, nodes are only merged if they also differ by less than this angle, in degrees. |
map_always_update |
bool |
false |
Also assemble the latest sensor data, not yet a node, so the maps update even when the robot stands still and no node is added. |
map_empty_ray_tracing |
bool |
true |
For that latest data, fill the 2D scan’s rays with empty cells (Grid/Scan2dUnknownSpaceFilled). |
map_cleanup |
bool |
true |
Free the cached clouds when nobody is subscribed. |
cloud_output_voxelized |
bool |
true |
Voxelize the assembled clouds at Grid/CellSize. |
cloud_subtract_filtering |
bool |
false |
Drop points that duplicate ones already in the map. Slower, smaller output. |
cloud_subtract_filtering_min_neighbors |
int |
2 |
Neighbors needed for a point to count as a duplicate. |
octomap_tree_depth |
int |
16 |
Depth the octomap clouds are generated at. Lower means coarser and faster. Maximum 16. |
map_always_update and map_empty_ray_tracing only apply to the latest sensor data, not yet committed as a node, which only the rtabmap node has: they do nothing in map_assembler.
Every RTAB-Map Grid/*, GridGlobal/*, StereoBM/* and StereoSGBM/* parameter is also exposed, all documented in RTAB-Map’s parameter reference. The split between the first two is worth knowing: Grid/* decides how each node’s local grid is built from its sensor data – the same segmentation obstacles_detection does, and the parameters listed there apply here too – while GridGlobal/* decides how those local grids are merged into the global map, so it covers the map’s minimum size, its occupancy threshold, and how far the graph must move before the whole map is rebuilt.
Octomap tree type
RTAB-Map keeps a color per voxel, so the tree it publishes on octomap_binary and octomap_full reports its id as ColorOcTree, not the plain OcTree many examples assume.
That is deliberate and interoperable: octomap_msgs::binaryMsgToMap() and fullMsgToMap() branch on that id and hand you back an octomap::ColorOcTree, and octovis opens it without complaint. What does break is code that assumes the other branch:
```cpp
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged rtabmap_util at Robotics Stack Exchange
|
rtabmap_util package from rtabmap_ros reportabmap_conversions rtabmap_costmap_plugins rtabmap_demos rtabmap_examples rtabmap_launch rtabmap_msgs rtabmap_odom rtabmap_python rtabmap_ros rtabmap_rviz_plugins rtabmap_slam rtabmap_sync rtabmap_util rtabmap_viz |
ROS Distro
|
Package Summary
| Version | 0.23.13 |
| License | BSD |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/introlab/rtabmap_ros.git |
| VCS Type | git |
| VCS Version | humble-devel |
| Last Updated | 2026-10-01 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Mathieu Labbe
Authors
- Mathieu Labbe
rtabmap_util
Standalone utility nodes for RTAB-Map pipelines: converting between sensor representations, cleaning up point clouds, assembling maps and replaying recorded sessions.
Every node is a composable node as well as a standalone executable. Composing them into one process with their producer avoids copying images and clouds between processes, which is worth doing for anything on the sensor path.
Contents
Nodes
One page per node.
Sensor conversion
| Node | Description |
|---|---|
| disparity_to_depth | Disparity image → depth image, in meters and in millimeters. |
| pointcloud_to_depthimage | Point cloud → depth image registered to an RGB camera. Lets a lidar feed an RGB-D pipeline. |
| point_cloud_xyz | Depth or disparity image → point cloud, with filtering. |
| point_cloud_xyzrgb | RGB-D, stereo or disparity → colored point cloud. |
| imu_to_tf | IMU orientation → TF. |
RGBDImage plumbing
| Node | Description |
|---|---|
| rgbd_relay | Republishes an RGBDImage, compressing or decompressing on the way. |
| rgbd_split | Splits an RGBDImage back into standard Image and CameraInfo topics. |
Point cloud processing
| Node | Description |
|---|---|
| lidar_deskewing | Removes motion distortion from a lidar sweep. |
| point_cloud_aggregator | Merges one cloud from each of several sensors into one. |
| point_cloud_assembler | Accumulates one sensor over time into a denser cloud. |
| obstacles_detection | Segments a cloud into ground and obstacles. |
Maps and replay
| Node | Description |
|---|---|
| map_assembler | Rebuilds the global maps from RTAB-Map’s graph, off the SLAM node’s critical path. |
| db_player | Replays a recorded RTAB-Map database as live sensor topics. |
Library
The package also installs a small C++ library, whose API is documented in the C++ API reference generated from the headers.
MapsManager is the piece worth knowing about: it turns a pose graph plus per-node occupancy grids into the assembled clouds, occupancy grid, octomap and elevation map, and publishes them. Both map_assembler and rtabmap_slam’s rtabmap node use it, which is why their map outputs and Grid/* parameters behave identically. It is described below.
MapsManager
Published topics. Everything is published only when subscribed, and – by default – latched, so a subscriber joining late immediately receives the current map.
In a component container with intra-process communication enabled (use_intra_process_comms), these publishers automatically opt out of it when latch is on, since intra-process communication does not support transient local durability. With latch off, they keep the container’s setting.
| Topic | Type | Description |
|---|---|---|
cloud_map |
sensor_msgs/msg/PointCloud2 |
Ground and obstacles together. |
cloud_ground |
sensor_msgs/msg/PointCloud2 |
Ground only, colored green. |
cloud_obstacles |
sensor_msgs/msg/PointCloud2 |
Obstacles only, colored red. |
map |
nav_msgs/msg/OccupancyGrid |
The 2D occupancy grid, the one navigation wants. |
grid_prob_map |
nav_msgs/msg/OccupancyGrid |
The same grid as occupancy probabilities rather than free/occupied/unknown. |
octomap_occupied_space, octomap_obstacles, octomap_ground, octomap_empty_space, octomap_global_frontier_space
|
sensor_msgs/msg/PointCloud2 |
Octomap contents, one cloud per category. Requires RTAB-Map built with OctoMap. |
octomap_grid |
nav_msgs/msg/OccupancyGrid |
The octomap projected to 2D. |
octomap_binary, octomap_full
|
octomap_msgs/msg/Octomap |
The tree itself, for octovis or other octomap consumers. Serialized as a ColorOcTree, see Octomap tree type. |
elevation_map |
grid_map_msgs/msg/GridMap |
Elevation map. Requires RTAB-Map built with grid_map. |
Parameters.
| Parameter | Type | Default | Description |
|---|---|---|---|
latch |
bool |
true |
Publish with transient-local durability so late subscribers get the current map. |
map_filter_radius |
double |
0.0 |
Skip nodes closer together than this, in meters. A cheap way to thin a dense graph. 0 disables. |
map_filter_angle |
double |
30.0 |
With map_filter_radius, nodes are only merged if they also differ by less than this angle, in degrees. |
map_always_update |
bool |
false |
Also assemble the latest sensor data, not yet a node, so the maps update even when the robot stands still and no node is added. |
map_empty_ray_tracing |
bool |
true |
For that latest data, fill the 2D scan’s rays with empty cells (Grid/Scan2dUnknownSpaceFilled). |
map_cleanup |
bool |
true |
Free the cached clouds when nobody is subscribed. |
cloud_output_voxelized |
bool |
true |
Voxelize the assembled clouds at Grid/CellSize. |
cloud_subtract_filtering |
bool |
false |
Drop points that duplicate ones already in the map. Slower, smaller output. |
cloud_subtract_filtering_min_neighbors |
int |
2 |
Neighbors needed for a point to count as a duplicate. |
octomap_tree_depth |
int |
16 |
Depth the octomap clouds are generated at. Lower means coarser and faster. Maximum 16. |
map_always_update and map_empty_ray_tracing only apply to the latest sensor data, not yet committed as a node, which only the rtabmap node has: they do nothing in map_assembler.
Every RTAB-Map Grid/*, GridGlobal/*, StereoBM/* and StereoSGBM/* parameter is also exposed, all documented in RTAB-Map’s parameter reference. The split between the first two is worth knowing: Grid/* decides how each node’s local grid is built from its sensor data – the same segmentation obstacles_detection does, and the parameters listed there apply here too – while GridGlobal/* decides how those local grids are merged into the global map, so it covers the map’s minimum size, its occupancy threshold, and how far the graph must move before the whole map is rebuilt.
Octomap tree type
RTAB-Map keeps a color per voxel, so the tree it publishes on octomap_binary and octomap_full reports its id as ColorOcTree, not the plain OcTree many examples assume.
That is deliberate and interoperable: octomap_msgs::binaryMsgToMap() and fullMsgToMap() branch on that id and hand you back an octomap::ColorOcTree, and octovis opens it without complaint. What does break is code that assumes the other branch:
```cpp
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged rtabmap_util at Robotics Stack Exchange
|
rtabmap_util package from rtabmap_ros reportabmap_conversions rtabmap_costmap_plugins rtabmap_demos rtabmap_examples rtabmap_launch rtabmap_msgs rtabmap_odom rtabmap_python rtabmap_ros rtabmap_rviz_plugins rtabmap_slam rtabmap_sync rtabmap_util rtabmap_viz |
ROS Distro
|
Package Summary
| Version | 0.23.13 |
| License | BSD |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/introlab/rtabmap_ros.git |
| VCS Type | git |
| VCS Version | humble-devel |
| Last Updated | 2026-10-01 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Mathieu Labbe
Authors
- Mathieu Labbe
rtabmap_util
Standalone utility nodes for RTAB-Map pipelines: converting between sensor representations, cleaning up point clouds, assembling maps and replaying recorded sessions.
Every node is a composable node as well as a standalone executable. Composing them into one process with their producer avoids copying images and clouds between processes, which is worth doing for anything on the sensor path.
Contents
Nodes
One page per node.
Sensor conversion
| Node | Description |
|---|---|
| disparity_to_depth | Disparity image → depth image, in meters and in millimeters. |
| pointcloud_to_depthimage | Point cloud → depth image registered to an RGB camera. Lets a lidar feed an RGB-D pipeline. |
| point_cloud_xyz | Depth or disparity image → point cloud, with filtering. |
| point_cloud_xyzrgb | RGB-D, stereo or disparity → colored point cloud. |
| imu_to_tf | IMU orientation → TF. |
RGBDImage plumbing
| Node | Description |
|---|---|
| rgbd_relay | Republishes an RGBDImage, compressing or decompressing on the way. |
| rgbd_split | Splits an RGBDImage back into standard Image and CameraInfo topics. |
Point cloud processing
| Node | Description |
|---|---|
| lidar_deskewing | Removes motion distortion from a lidar sweep. |
| point_cloud_aggregator | Merges one cloud from each of several sensors into one. |
| point_cloud_assembler | Accumulates one sensor over time into a denser cloud. |
| obstacles_detection | Segments a cloud into ground and obstacles. |
Maps and replay
| Node | Description |
|---|---|
| map_assembler | Rebuilds the global maps from RTAB-Map’s graph, off the SLAM node’s critical path. |
| db_player | Replays a recorded RTAB-Map database as live sensor topics. |
Library
The package also installs a small C++ library, whose API is documented in the C++ API reference generated from the headers.
MapsManager is the piece worth knowing about: it turns a pose graph plus per-node occupancy grids into the assembled clouds, occupancy grid, octomap and elevation map, and publishes them. Both map_assembler and rtabmap_slam’s rtabmap node use it, which is why their map outputs and Grid/* parameters behave identically. It is described below.
MapsManager
Published topics. Everything is published only when subscribed, and – by default – latched, so a subscriber joining late immediately receives the current map.
In a component container with intra-process communication enabled (use_intra_process_comms), these publishers automatically opt out of it when latch is on, since intra-process communication does not support transient local durability. With latch off, they keep the container’s setting.
| Topic | Type | Description |
|---|---|---|
cloud_map |
sensor_msgs/msg/PointCloud2 |
Ground and obstacles together. |
cloud_ground |
sensor_msgs/msg/PointCloud2 |
Ground only, colored green. |
cloud_obstacles |
sensor_msgs/msg/PointCloud2 |
Obstacles only, colored red. |
map |
nav_msgs/msg/OccupancyGrid |
The 2D occupancy grid, the one navigation wants. |
grid_prob_map |
nav_msgs/msg/OccupancyGrid |
The same grid as occupancy probabilities rather than free/occupied/unknown. |
octomap_occupied_space, octomap_obstacles, octomap_ground, octomap_empty_space, octomap_global_frontier_space
|
sensor_msgs/msg/PointCloud2 |
Octomap contents, one cloud per category. Requires RTAB-Map built with OctoMap. |
octomap_grid |
nav_msgs/msg/OccupancyGrid |
The octomap projected to 2D. |
octomap_binary, octomap_full
|
octomap_msgs/msg/Octomap |
The tree itself, for octovis or other octomap consumers. Serialized as a ColorOcTree, see Octomap tree type. |
elevation_map |
grid_map_msgs/msg/GridMap |
Elevation map. Requires RTAB-Map built with grid_map. |
Parameters.
| Parameter | Type | Default | Description |
|---|---|---|---|
latch |
bool |
true |
Publish with transient-local durability so late subscribers get the current map. |
map_filter_radius |
double |
0.0 |
Skip nodes closer together than this, in meters. A cheap way to thin a dense graph. 0 disables. |
map_filter_angle |
double |
30.0 |
With map_filter_radius, nodes are only merged if they also differ by less than this angle, in degrees. |
map_always_update |
bool |
false |
Also assemble the latest sensor data, not yet a node, so the maps update even when the robot stands still and no node is added. |
map_empty_ray_tracing |
bool |
true |
For that latest data, fill the 2D scan’s rays with empty cells (Grid/Scan2dUnknownSpaceFilled). |
map_cleanup |
bool |
true |
Free the cached clouds when nobody is subscribed. |
cloud_output_voxelized |
bool |
true |
Voxelize the assembled clouds at Grid/CellSize. |
cloud_subtract_filtering |
bool |
false |
Drop points that duplicate ones already in the map. Slower, smaller output. |
cloud_subtract_filtering_min_neighbors |
int |
2 |
Neighbors needed for a point to count as a duplicate. |
octomap_tree_depth |
int |
16 |
Depth the octomap clouds are generated at. Lower means coarser and faster. Maximum 16. |
map_always_update and map_empty_ray_tracing only apply to the latest sensor data, not yet committed as a node, which only the rtabmap node has: they do nothing in map_assembler.
Every RTAB-Map Grid/*, GridGlobal/*, StereoBM/* and StereoSGBM/* parameter is also exposed, all documented in RTAB-Map’s parameter reference. The split between the first two is worth knowing: Grid/* decides how each node’s local grid is built from its sensor data – the same segmentation obstacles_detection does, and the parameters listed there apply here too – while GridGlobal/* decides how those local grids are merged into the global map, so it covers the map’s minimum size, its occupancy threshold, and how far the graph must move before the whole map is rebuilt.
Octomap tree type
RTAB-Map keeps a color per voxel, so the tree it publishes on octomap_binary and octomap_full reports its id as ColorOcTree, not the plain OcTree many examples assume.
That is deliberate and interoperable: octomap_msgs::binaryMsgToMap() and fullMsgToMap() branch on that id and hand you back an octomap::ColorOcTree, and octovis opens it without complaint. What does break is code that assumes the other branch:
```cpp
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged rtabmap_util at Robotics Stack Exchange
|
rtabmap_util package from rtabmap_ros reportabmap_conversions rtabmap_costmap_plugins rtabmap_demos rtabmap_examples rtabmap_launch rtabmap_msgs rtabmap_odom rtabmap_python rtabmap_ros rtabmap_rviz_plugins rtabmap_slam rtabmap_sync rtabmap_util rtabmap_viz |
ROS Distro
|
Package Summary
| Version | 0.23.13 |
| License | BSD |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/introlab/rtabmap_ros.git |
| VCS Type | git |
| VCS Version | humble-devel |
| Last Updated | 2026-10-01 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Mathieu Labbe
Authors
- Mathieu Labbe
rtabmap_util
Standalone utility nodes for RTAB-Map pipelines: converting between sensor representations, cleaning up point clouds, assembling maps and replaying recorded sessions.
Every node is a composable node as well as a standalone executable. Composing them into one process with their producer avoids copying images and clouds between processes, which is worth doing for anything on the sensor path.
Contents
Nodes
One page per node.
Sensor conversion
| Node | Description |
|---|---|
| disparity_to_depth | Disparity image → depth image, in meters and in millimeters. |
| pointcloud_to_depthimage | Point cloud → depth image registered to an RGB camera. Lets a lidar feed an RGB-D pipeline. |
| point_cloud_xyz | Depth or disparity image → point cloud, with filtering. |
| point_cloud_xyzrgb | RGB-D, stereo or disparity → colored point cloud. |
| imu_to_tf | IMU orientation → TF. |
RGBDImage plumbing
| Node | Description |
|---|---|
| rgbd_relay | Republishes an RGBDImage, compressing or decompressing on the way. |
| rgbd_split | Splits an RGBDImage back into standard Image and CameraInfo topics. |
Point cloud processing
| Node | Description |
|---|---|
| lidar_deskewing | Removes motion distortion from a lidar sweep. |
| point_cloud_aggregator | Merges one cloud from each of several sensors into one. |
| point_cloud_assembler | Accumulates one sensor over time into a denser cloud. |
| obstacles_detection | Segments a cloud into ground and obstacles. |
Maps and replay
| Node | Description |
|---|---|
| map_assembler | Rebuilds the global maps from RTAB-Map’s graph, off the SLAM node’s critical path. |
| db_player | Replays a recorded RTAB-Map database as live sensor topics. |
Library
The package also installs a small C++ library, whose API is documented in the C++ API reference generated from the headers.
MapsManager is the piece worth knowing about: it turns a pose graph plus per-node occupancy grids into the assembled clouds, occupancy grid, octomap and elevation map, and publishes them. Both map_assembler and rtabmap_slam’s rtabmap node use it, which is why their map outputs and Grid/* parameters behave identically. It is described below.
MapsManager
Published topics. Everything is published only when subscribed, and – by default – latched, so a subscriber joining late immediately receives the current map.
In a component container with intra-process communication enabled (use_intra_process_comms), these publishers automatically opt out of it when latch is on, since intra-process communication does not support transient local durability. With latch off, they keep the container’s setting.
| Topic | Type | Description |
|---|---|---|
cloud_map |
sensor_msgs/msg/PointCloud2 |
Ground and obstacles together. |
cloud_ground |
sensor_msgs/msg/PointCloud2 |
Ground only, colored green. |
cloud_obstacles |
sensor_msgs/msg/PointCloud2 |
Obstacles only, colored red. |
map |
nav_msgs/msg/OccupancyGrid |
The 2D occupancy grid, the one navigation wants. |
grid_prob_map |
nav_msgs/msg/OccupancyGrid |
The same grid as occupancy probabilities rather than free/occupied/unknown. |
octomap_occupied_space, octomap_obstacles, octomap_ground, octomap_empty_space, octomap_global_frontier_space
|
sensor_msgs/msg/PointCloud2 |
Octomap contents, one cloud per category. Requires RTAB-Map built with OctoMap. |
octomap_grid |
nav_msgs/msg/OccupancyGrid |
The octomap projected to 2D. |
octomap_binary, octomap_full
|
octomap_msgs/msg/Octomap |
The tree itself, for octovis or other octomap consumers. Serialized as a ColorOcTree, see Octomap tree type. |
elevation_map |
grid_map_msgs/msg/GridMap |
Elevation map. Requires RTAB-Map built with grid_map. |
Parameters.
| Parameter | Type | Default | Description |
|---|---|---|---|
latch |
bool |
true |
Publish with transient-local durability so late subscribers get the current map. |
map_filter_radius |
double |
0.0 |
Skip nodes closer together than this, in meters. A cheap way to thin a dense graph. 0 disables. |
map_filter_angle |
double |
30.0 |
With map_filter_radius, nodes are only merged if they also differ by less than this angle, in degrees. |
map_always_update |
bool |
false |
Also assemble the latest sensor data, not yet a node, so the maps update even when the robot stands still and no node is added. |
map_empty_ray_tracing |
bool |
true |
For that latest data, fill the 2D scan’s rays with empty cells (Grid/Scan2dUnknownSpaceFilled). |
map_cleanup |
bool |
true |
Free the cached clouds when nobody is subscribed. |
cloud_output_voxelized |
bool |
true |
Voxelize the assembled clouds at Grid/CellSize. |
cloud_subtract_filtering |
bool |
false |
Drop points that duplicate ones already in the map. Slower, smaller output. |
cloud_subtract_filtering_min_neighbors |
int |
2 |
Neighbors needed for a point to count as a duplicate. |
octomap_tree_depth |
int |
16 |
Depth the octomap clouds are generated at. Lower means coarser and faster. Maximum 16. |
map_always_update and map_empty_ray_tracing only apply to the latest sensor data, not yet committed as a node, which only the rtabmap node has: they do nothing in map_assembler.
Every RTAB-Map Grid/*, GridGlobal/*, StereoBM/* and StereoSGBM/* parameter is also exposed, all documented in RTAB-Map’s parameter reference. The split between the first two is worth knowing: Grid/* decides how each node’s local grid is built from its sensor data – the same segmentation obstacles_detection does, and the parameters listed there apply here too – while GridGlobal/* decides how those local grids are merged into the global map, so it covers the map’s minimum size, its occupancy threshold, and how far the graph must move before the whole map is rebuilt.
Octomap tree type
RTAB-Map keeps a color per voxel, so the tree it publishes on octomap_binary and octomap_full reports its id as ColorOcTree, not the plain OcTree many examples assume.
That is deliberate and interoperable: octomap_msgs::binaryMsgToMap() and fullMsgToMap() branch on that id and hand you back an octomap::ColorOcTree, and octovis opens it without complaint. What does break is code that assumes the other branch:
```cpp
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged rtabmap_util at Robotics Stack Exchange
|
rtabmap_util package from rtabmap_ros reportabmap_conversions rtabmap_costmap_plugins rtabmap_demos rtabmap_examples rtabmap_launch rtabmap_msgs rtabmap_odom rtabmap_python rtabmap_ros rtabmap_rviz_plugins rtabmap_slam rtabmap_sync rtabmap_util rtabmap_viz |
ROS Distro
|
Package Summary
| Version | 0.23.13 |
| License | BSD |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/introlab/rtabmap_ros.git |
| VCS Type | git |
| VCS Version | humble-devel |
| Last Updated | 2026-10-01 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Mathieu Labbe
Authors
- Mathieu Labbe
rtabmap_util
Standalone utility nodes for RTAB-Map pipelines: converting between sensor representations, cleaning up point clouds, assembling maps and replaying recorded sessions.
Every node is a composable node as well as a standalone executable. Composing them into one process with their producer avoids copying images and clouds between processes, which is worth doing for anything on the sensor path.
Contents
Nodes
One page per node.
Sensor conversion
| Node | Description |
|---|---|
| disparity_to_depth | Disparity image → depth image, in meters and in millimeters. |
| pointcloud_to_depthimage | Point cloud → depth image registered to an RGB camera. Lets a lidar feed an RGB-D pipeline. |
| point_cloud_xyz | Depth or disparity image → point cloud, with filtering. |
| point_cloud_xyzrgb | RGB-D, stereo or disparity → colored point cloud. |
| imu_to_tf | IMU orientation → TF. |
RGBDImage plumbing
| Node | Description |
|---|---|
| rgbd_relay | Republishes an RGBDImage, compressing or decompressing on the way. |
| rgbd_split | Splits an RGBDImage back into standard Image and CameraInfo topics. |
Point cloud processing
| Node | Description |
|---|---|
| lidar_deskewing | Removes motion distortion from a lidar sweep. |
| point_cloud_aggregator | Merges one cloud from each of several sensors into one. |
| point_cloud_assembler | Accumulates one sensor over time into a denser cloud. |
| obstacles_detection | Segments a cloud into ground and obstacles. |
Maps and replay
| Node | Description |
|---|---|
| map_assembler | Rebuilds the global maps from RTAB-Map’s graph, off the SLAM node’s critical path. |
| db_player | Replays a recorded RTAB-Map database as live sensor topics. |
Library
The package also installs a small C++ library, whose API is documented in the C++ API reference generated from the headers.
MapsManager is the piece worth knowing about: it turns a pose graph plus per-node occupancy grids into the assembled clouds, occupancy grid, octomap and elevation map, and publishes them. Both map_assembler and rtabmap_slam’s rtabmap node use it, which is why their map outputs and Grid/* parameters behave identically. It is described below.
MapsManager
Published topics. Everything is published only when subscribed, and – by default – latched, so a subscriber joining late immediately receives the current map.
In a component container with intra-process communication enabled (use_intra_process_comms), these publishers automatically opt out of it when latch is on, since intra-process communication does not support transient local durability. With latch off, they keep the container’s setting.
| Topic | Type | Description |
|---|---|---|
cloud_map |
sensor_msgs/msg/PointCloud2 |
Ground and obstacles together. |
cloud_ground |
sensor_msgs/msg/PointCloud2 |
Ground only, colored green. |
cloud_obstacles |
sensor_msgs/msg/PointCloud2 |
Obstacles only, colored red. |
map |
nav_msgs/msg/OccupancyGrid |
The 2D occupancy grid, the one navigation wants. |
grid_prob_map |
nav_msgs/msg/OccupancyGrid |
The same grid as occupancy probabilities rather than free/occupied/unknown. |
octomap_occupied_space, octomap_obstacles, octomap_ground, octomap_empty_space, octomap_global_frontier_space
|
sensor_msgs/msg/PointCloud2 |
Octomap contents, one cloud per category. Requires RTAB-Map built with OctoMap. |
octomap_grid |
nav_msgs/msg/OccupancyGrid |
The octomap projected to 2D. |
octomap_binary, octomap_full
|
octomap_msgs/msg/Octomap |
The tree itself, for octovis or other octomap consumers. Serialized as a ColorOcTree, see Octomap tree type. |
elevation_map |
grid_map_msgs/msg/GridMap |
Elevation map. Requires RTAB-Map built with grid_map. |
Parameters.
| Parameter | Type | Default | Description |
|---|---|---|---|
latch |
bool |
true |
Publish with transient-local durability so late subscribers get the current map. |
map_filter_radius |
double |
0.0 |
Skip nodes closer together than this, in meters. A cheap way to thin a dense graph. 0 disables. |
map_filter_angle |
double |
30.0 |
With map_filter_radius, nodes are only merged if they also differ by less than this angle, in degrees. |
map_always_update |
bool |
false |
Also assemble the latest sensor data, not yet a node, so the maps update even when the robot stands still and no node is added. |
map_empty_ray_tracing |
bool |
true |
For that latest data, fill the 2D scan’s rays with empty cells (Grid/Scan2dUnknownSpaceFilled). |
map_cleanup |
bool |
true |
Free the cached clouds when nobody is subscribed. |
cloud_output_voxelized |
bool |
true |
Voxelize the assembled clouds at Grid/CellSize. |
cloud_subtract_filtering |
bool |
false |
Drop points that duplicate ones already in the map. Slower, smaller output. |
cloud_subtract_filtering_min_neighbors |
int |
2 |
Neighbors needed for a point to count as a duplicate. |
octomap_tree_depth |
int |
16 |
Depth the octomap clouds are generated at. Lower means coarser and faster. Maximum 16. |
map_always_update and map_empty_ray_tracing only apply to the latest sensor data, not yet committed as a node, which only the rtabmap node has: they do nothing in map_assembler.
Every RTAB-Map Grid/*, GridGlobal/*, StereoBM/* and StereoSGBM/* parameter is also exposed, all documented in RTAB-Map’s parameter reference. The split between the first two is worth knowing: Grid/* decides how each node’s local grid is built from its sensor data – the same segmentation obstacles_detection does, and the parameters listed there apply here too – while GridGlobal/* decides how those local grids are merged into the global map, so it covers the map’s minimum size, its occupancy threshold, and how far the graph must move before the whole map is rebuilt.
Octomap tree type
RTAB-Map keeps a color per voxel, so the tree it publishes on octomap_binary and octomap_full reports its id as ColorOcTree, not the plain OcTree many examples assume.
That is deliberate and interoperable: octomap_msgs::binaryMsgToMap() and fullMsgToMap() branch on that id and hand you back an octomap::ColorOcTree, and octovis opens it without complaint. What does break is code that assumes the other branch:
```cpp
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged rtabmap_util at Robotics Stack Exchange
|
rtabmap_util package from rtabmap_ros reportabmap_conversions rtabmap_costmap_plugins rtabmap_demos rtabmap_examples rtabmap_launch rtabmap_msgs rtabmap_odom rtabmap_python rtabmap_ros rtabmap_rviz_plugins rtabmap_slam rtabmap_sync rtabmap_util rtabmap_viz |
ROS Distro
|
Package Summary
| Version | 0.23.13 |
| License | BSD |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/introlab/rtabmap_ros.git |
| VCS Type | git |
| VCS Version | humble-devel |
| Last Updated | 2026-10-01 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Mathieu Labbe
Authors
- Mathieu Labbe
rtabmap_util
Standalone utility nodes for RTAB-Map pipelines: converting between sensor representations, cleaning up point clouds, assembling maps and replaying recorded sessions.
Every node is a composable node as well as a standalone executable. Composing them into one process with their producer avoids copying images and clouds between processes, which is worth doing for anything on the sensor path.
Contents
Nodes
One page per node.
Sensor conversion
| Node | Description |
|---|---|
| disparity_to_depth | Disparity image → depth image, in meters and in millimeters. |
| pointcloud_to_depthimage | Point cloud → depth image registered to an RGB camera. Lets a lidar feed an RGB-D pipeline. |
| point_cloud_xyz | Depth or disparity image → point cloud, with filtering. |
| point_cloud_xyzrgb | RGB-D, stereo or disparity → colored point cloud. |
| imu_to_tf | IMU orientation → TF. |
RGBDImage plumbing
| Node | Description |
|---|---|
| rgbd_relay | Republishes an RGBDImage, compressing or decompressing on the way. |
| rgbd_split | Splits an RGBDImage back into standard Image and CameraInfo topics. |
Point cloud processing
| Node | Description |
|---|---|
| lidar_deskewing | Removes motion distortion from a lidar sweep. |
| point_cloud_aggregator | Merges one cloud from each of several sensors into one. |
| point_cloud_assembler | Accumulates one sensor over time into a denser cloud. |
| obstacles_detection | Segments a cloud into ground and obstacles. |
Maps and replay
| Node | Description |
|---|---|
| map_assembler | Rebuilds the global maps from RTAB-Map’s graph, off the SLAM node’s critical path. |
| db_player | Replays a recorded RTAB-Map database as live sensor topics. |
Library
The package also installs a small C++ library, whose API is documented in the C++ API reference generated from the headers.
MapsManager is the piece worth knowing about: it turns a pose graph plus per-node occupancy grids into the assembled clouds, occupancy grid, octomap and elevation map, and publishes them. Both map_assembler and rtabmap_slam’s rtabmap node use it, which is why their map outputs and Grid/* parameters behave identically. It is described below.
MapsManager
Published topics. Everything is published only when subscribed, and – by default – latched, so a subscriber joining late immediately receives the current map.
In a component container with intra-process communication enabled (use_intra_process_comms), these publishers automatically opt out of it when latch is on, since intra-process communication does not support transient local durability. With latch off, they keep the container’s setting.
| Topic | Type | Description |
|---|---|---|
cloud_map |
sensor_msgs/msg/PointCloud2 |
Ground and obstacles together. |
cloud_ground |
sensor_msgs/msg/PointCloud2 |
Ground only, colored green. |
cloud_obstacles |
sensor_msgs/msg/PointCloud2 |
Obstacles only, colored red. |
map |
nav_msgs/msg/OccupancyGrid |
The 2D occupancy grid, the one navigation wants. |
grid_prob_map |
nav_msgs/msg/OccupancyGrid |
The same grid as occupancy probabilities rather than free/occupied/unknown. |
octomap_occupied_space, octomap_obstacles, octomap_ground, octomap_empty_space, octomap_global_frontier_space
|
sensor_msgs/msg/PointCloud2 |
Octomap contents, one cloud per category. Requires RTAB-Map built with OctoMap. |
octomap_grid |
nav_msgs/msg/OccupancyGrid |
The octomap projected to 2D. |
octomap_binary, octomap_full
|
octomap_msgs/msg/Octomap |
The tree itself, for octovis or other octomap consumers. Serialized as a ColorOcTree, see Octomap tree type. |
elevation_map |
grid_map_msgs/msg/GridMap |
Elevation map. Requires RTAB-Map built with grid_map. |
Parameters.
| Parameter | Type | Default | Description |
|---|---|---|---|
latch |
bool |
true |
Publish with transient-local durability so late subscribers get the current map. |
map_filter_radius |
double |
0.0 |
Skip nodes closer together than this, in meters. A cheap way to thin a dense graph. 0 disables. |
map_filter_angle |
double |
30.0 |
With map_filter_radius, nodes are only merged if they also differ by less than this angle, in degrees. |
map_always_update |
bool |
false |
Also assemble the latest sensor data, not yet a node, so the maps update even when the robot stands still and no node is added. |
map_empty_ray_tracing |
bool |
true |
For that latest data, fill the 2D scan’s rays with empty cells (Grid/Scan2dUnknownSpaceFilled). |
map_cleanup |
bool |
true |
Free the cached clouds when nobody is subscribed. |
cloud_output_voxelized |
bool |
true |
Voxelize the assembled clouds at Grid/CellSize. |
cloud_subtract_filtering |
bool |
false |
Drop points that duplicate ones already in the map. Slower, smaller output. |
cloud_subtract_filtering_min_neighbors |
int |
2 |
Neighbors needed for a point to count as a duplicate. |
octomap_tree_depth |
int |
16 |
Depth the octomap clouds are generated at. Lower means coarser and faster. Maximum 16. |
map_always_update and map_empty_ray_tracing only apply to the latest sensor data, not yet committed as a node, which only the rtabmap node has: they do nothing in map_assembler.
Every RTAB-Map Grid/*, GridGlobal/*, StereoBM/* and StereoSGBM/* parameter is also exposed, all documented in RTAB-Map’s parameter reference. The split between the first two is worth knowing: Grid/* decides how each node’s local grid is built from its sensor data – the same segmentation obstacles_detection does, and the parameters listed there apply here too – while GridGlobal/* decides how those local grids are merged into the global map, so it covers the map’s minimum size, its occupancy threshold, and how far the graph must move before the whole map is rebuilt.
Octomap tree type
RTAB-Map keeps a color per voxel, so the tree it publishes on octomap_binary and octomap_full reports its id as ColorOcTree, not the plain OcTree many examples assume.
That is deliberate and interoperable: octomap_msgs::binaryMsgToMap() and fullMsgToMap() branch on that id and hand you back an octomap::ColorOcTree, and octovis opens it without complaint. What does break is code that assumes the other branch:
```cpp
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged rtabmap_util at Robotics Stack Exchange
|
rtabmap_util package from rtabmap_ros reportabmap_conversions rtabmap_demos rtabmap_examples rtabmap_launch rtabmap_msgs rtabmap_odom rtabmap_python rtabmap_ros rtabmap_rviz_plugins rtabmap_slam rtabmap_sync rtabmap_util rtabmap_viz |
ROS Distro
|
Package Summary
| Version | 0.21.1 |
| License | BSD |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/introlab/rtabmap_ros.git |
| VCS Type | git |
| VCS Version | foxy-devel |
| Last Updated | 2023-04-09 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Mathieu Labbe
Authors
- Mathieu Labbe
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged rtabmap_util at Robotics Stack Exchange
|
rtabmap_util package from rtabmap_ros reportabmap_conversions rtabmap_demos rtabmap_examples rtabmap_launch rtabmap_msgs rtabmap_odom rtabmap_python rtabmap_ros rtabmap_rviz_plugins rtabmap_slam rtabmap_sync rtabmap_util rtabmap_viz |
ROS Distro
|
Package Summary
| Version | 0.21.5 |
| License | BSD |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/introlab/rtabmap_ros.git |
| VCS Type | git |
| VCS Version | iron-devel |
| Last Updated | 2024-07-01 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Mathieu Labbe
Authors
- Mathieu Labbe
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged rtabmap_util at Robotics Stack Exchange
|
rtabmap_util package from rtabmap_ros reportabmap_conversions rtabmap_costmap_plugins rtabmap_demos rtabmap_examples rtabmap_launch rtabmap_msgs rtabmap_odom rtabmap_python rtabmap_ros rtabmap_rviz_plugins rtabmap_slam rtabmap_sync rtabmap_util rtabmap_viz |
ROS Distro
|
Package Summary
| Version | 0.23.13 |
| License | BSD |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/introlab/rtabmap_ros.git |
| VCS Type | git |
| VCS Version | humble-devel |
| Last Updated | 2026-10-01 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Mathieu Labbe
Authors
- Mathieu Labbe
rtabmap_util
Standalone utility nodes for RTAB-Map pipelines: converting between sensor representations, cleaning up point clouds, assembling maps and replaying recorded sessions.
Every node is a composable node as well as a standalone executable. Composing them into one process with their producer avoids copying images and clouds between processes, which is worth doing for anything on the sensor path.
Contents
Nodes
One page per node.
Sensor conversion
| Node | Description |
|---|---|
| disparity_to_depth | Disparity image → depth image, in meters and in millimeters. |
| pointcloud_to_depthimage | Point cloud → depth image registered to an RGB camera. Lets a lidar feed an RGB-D pipeline. |
| point_cloud_xyz | Depth or disparity image → point cloud, with filtering. |
| point_cloud_xyzrgb | RGB-D, stereo or disparity → colored point cloud. |
| imu_to_tf | IMU orientation → TF. |
RGBDImage plumbing
| Node | Description |
|---|---|
| rgbd_relay | Republishes an RGBDImage, compressing or decompressing on the way. |
| rgbd_split | Splits an RGBDImage back into standard Image and CameraInfo topics. |
Point cloud processing
| Node | Description |
|---|---|
| lidar_deskewing | Removes motion distortion from a lidar sweep. |
| point_cloud_aggregator | Merges one cloud from each of several sensors into one. |
| point_cloud_assembler | Accumulates one sensor over time into a denser cloud. |
| obstacles_detection | Segments a cloud into ground and obstacles. |
Maps and replay
| Node | Description |
|---|---|
| map_assembler | Rebuilds the global maps from RTAB-Map’s graph, off the SLAM node’s critical path. |
| db_player | Replays a recorded RTAB-Map database as live sensor topics. |
Library
The package also installs a small C++ library, whose API is documented in the C++ API reference generated from the headers.
MapsManager is the piece worth knowing about: it turns a pose graph plus per-node occupancy grids into the assembled clouds, occupancy grid, octomap and elevation map, and publishes them. Both map_assembler and rtabmap_slam’s rtabmap node use it, which is why their map outputs and Grid/* parameters behave identically. It is described below.
MapsManager
Published topics. Everything is published only when subscribed, and – by default – latched, so a subscriber joining late immediately receives the current map.
In a component container with intra-process communication enabled (use_intra_process_comms), these publishers automatically opt out of it when latch is on, since intra-process communication does not support transient local durability. With latch off, they keep the container’s setting.
| Topic | Type | Description |
|---|---|---|
cloud_map |
sensor_msgs/msg/PointCloud2 |
Ground and obstacles together. |
cloud_ground |
sensor_msgs/msg/PointCloud2 |
Ground only, colored green. |
cloud_obstacles |
sensor_msgs/msg/PointCloud2 |
Obstacles only, colored red. |
map |
nav_msgs/msg/OccupancyGrid |
The 2D occupancy grid, the one navigation wants. |
grid_prob_map |
nav_msgs/msg/OccupancyGrid |
The same grid as occupancy probabilities rather than free/occupied/unknown. |
octomap_occupied_space, octomap_obstacles, octomap_ground, octomap_empty_space, octomap_global_frontier_space
|
sensor_msgs/msg/PointCloud2 |
Octomap contents, one cloud per category. Requires RTAB-Map built with OctoMap. |
octomap_grid |
nav_msgs/msg/OccupancyGrid |
The octomap projected to 2D. |
octomap_binary, octomap_full
|
octomap_msgs/msg/Octomap |
The tree itself, for octovis or other octomap consumers. Serialized as a ColorOcTree, see Octomap tree type. |
elevation_map |
grid_map_msgs/msg/GridMap |
Elevation map. Requires RTAB-Map built with grid_map. |
Parameters.
| Parameter | Type | Default | Description |
|---|---|---|---|
latch |
bool |
true |
Publish with transient-local durability so late subscribers get the current map. |
map_filter_radius |
double |
0.0 |
Skip nodes closer together than this, in meters. A cheap way to thin a dense graph. 0 disables. |
map_filter_angle |
double |
30.0 |
With map_filter_radius, nodes are only merged if they also differ by less than this angle, in degrees. |
map_always_update |
bool |
false |
Also assemble the latest sensor data, not yet a node, so the maps update even when the robot stands still and no node is added. |
map_empty_ray_tracing |
bool |
true |
For that latest data, fill the 2D scan’s rays with empty cells (Grid/Scan2dUnknownSpaceFilled). |
map_cleanup |
bool |
true |
Free the cached clouds when nobody is subscribed. |
cloud_output_voxelized |
bool |
true |
Voxelize the assembled clouds at Grid/CellSize. |
cloud_subtract_filtering |
bool |
false |
Drop points that duplicate ones already in the map. Slower, smaller output. |
cloud_subtract_filtering_min_neighbors |
int |
2 |
Neighbors needed for a point to count as a duplicate. |
octomap_tree_depth |
int |
16 |
Depth the octomap clouds are generated at. Lower means coarser and faster. Maximum 16. |
map_always_update and map_empty_ray_tracing only apply to the latest sensor data, not yet committed as a node, which only the rtabmap node has: they do nothing in map_assembler.
Every RTAB-Map Grid/*, GridGlobal/*, StereoBM/* and StereoSGBM/* parameter is also exposed, all documented in RTAB-Map’s parameter reference. The split between the first two is worth knowing: Grid/* decides how each node’s local grid is built from its sensor data – the same segmentation obstacles_detection does, and the parameters listed there apply here too – while GridGlobal/* decides how those local grids are merged into the global map, so it covers the map’s minimum size, its occupancy threshold, and how far the graph must move before the whole map is rebuilt.
Octomap tree type
RTAB-Map keeps a color per voxel, so the tree it publishes on octomap_binary and octomap_full reports its id as ColorOcTree, not the plain OcTree many examples assume.
That is deliberate and interoperable: octomap_msgs::binaryMsgToMap() and fullMsgToMap() branch on that id and hand you back an octomap::ColorOcTree, and octovis opens it without complaint. What does break is code that assumes the other branch:
```cpp
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged rtabmap_util at Robotics Stack Exchange
|
rtabmap_util package from rtabmap_ros reportabmap_conversions rtabmap_costmap_plugins rtabmap_demos rtabmap_examples rtabmap_launch rtabmap_msgs rtabmap_odom rtabmap_python rtabmap_ros rtabmap_rviz_plugins rtabmap_slam rtabmap_sync rtabmap_util rtabmap_viz |
ROS Distro
|
Package Summary
| Version | 0.23.13 |
| License | BSD |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/introlab/rtabmap_ros.git |
| VCS Type | git |
| VCS Version | humble-devel |
| Last Updated | 2026-10-01 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Mathieu Labbe
Authors
- Mathieu Labbe
rtabmap_util
Standalone utility nodes for RTAB-Map pipelines: converting between sensor representations, cleaning up point clouds, assembling maps and replaying recorded sessions.
Every node is a composable node as well as a standalone executable. Composing them into one process with their producer avoids copying images and clouds between processes, which is worth doing for anything on the sensor path.
Contents
Nodes
One page per node.
Sensor conversion
| Node | Description |
|---|---|
| disparity_to_depth | Disparity image → depth image, in meters and in millimeters. |
| pointcloud_to_depthimage | Point cloud → depth image registered to an RGB camera. Lets a lidar feed an RGB-D pipeline. |
| point_cloud_xyz | Depth or disparity image → point cloud, with filtering. |
| point_cloud_xyzrgb | RGB-D, stereo or disparity → colored point cloud. |
| imu_to_tf | IMU orientation → TF. |
RGBDImage plumbing
| Node | Description |
|---|---|
| rgbd_relay | Republishes an RGBDImage, compressing or decompressing on the way. |
| rgbd_split | Splits an RGBDImage back into standard Image and CameraInfo topics. |
Point cloud processing
| Node | Description |
|---|---|
| lidar_deskewing | Removes motion distortion from a lidar sweep. |
| point_cloud_aggregator | Merges one cloud from each of several sensors into one. |
| point_cloud_assembler | Accumulates one sensor over time into a denser cloud. |
| obstacles_detection | Segments a cloud into ground and obstacles. |
Maps and replay
| Node | Description |
|---|---|
| map_assembler | Rebuilds the global maps from RTAB-Map’s graph, off the SLAM node’s critical path. |
| db_player | Replays a recorded RTAB-Map database as live sensor topics. |
Library
The package also installs a small C++ library, whose API is documented in the C++ API reference generated from the headers.
MapsManager is the piece worth knowing about: it turns a pose graph plus per-node occupancy grids into the assembled clouds, occupancy grid, octomap and elevation map, and publishes them. Both map_assembler and rtabmap_slam’s rtabmap node use it, which is why their map outputs and Grid/* parameters behave identically. It is described below.
MapsManager
Published topics. Everything is published only when subscribed, and – by default – latched, so a subscriber joining late immediately receives the current map.
In a component container with intra-process communication enabled (use_intra_process_comms), these publishers automatically opt out of it when latch is on, since intra-process communication does not support transient local durability. With latch off, they keep the container’s setting.
| Topic | Type | Description |
|---|---|---|
cloud_map |
sensor_msgs/msg/PointCloud2 |
Ground and obstacles together. |
cloud_ground |
sensor_msgs/msg/PointCloud2 |
Ground only, colored green. |
cloud_obstacles |
sensor_msgs/msg/PointCloud2 |
Obstacles only, colored red. |
map |
nav_msgs/msg/OccupancyGrid |
The 2D occupancy grid, the one navigation wants. |
grid_prob_map |
nav_msgs/msg/OccupancyGrid |
The same grid as occupancy probabilities rather than free/occupied/unknown. |
octomap_occupied_space, octomap_obstacles, octomap_ground, octomap_empty_space, octomap_global_frontier_space
|
sensor_msgs/msg/PointCloud2 |
Octomap contents, one cloud per category. Requires RTAB-Map built with OctoMap. |
octomap_grid |
nav_msgs/msg/OccupancyGrid |
The octomap projected to 2D. |
octomap_binary, octomap_full
|
octomap_msgs/msg/Octomap |
The tree itself, for octovis or other octomap consumers. Serialized as a ColorOcTree, see Octomap tree type. |
elevation_map |
grid_map_msgs/msg/GridMap |
Elevation map. Requires RTAB-Map built with grid_map. |
Parameters.
| Parameter | Type | Default | Description |
|---|---|---|---|
latch |
bool |
true |
Publish with transient-local durability so late subscribers get the current map. |
map_filter_radius |
double |
0.0 |
Skip nodes closer together than this, in meters. A cheap way to thin a dense graph. 0 disables. |
map_filter_angle |
double |
30.0 |
With map_filter_radius, nodes are only merged if they also differ by less than this angle, in degrees. |
map_always_update |
bool |
false |
Also assemble the latest sensor data, not yet a node, so the maps update even when the robot stands still and no node is added. |
map_empty_ray_tracing |
bool |
true |
For that latest data, fill the 2D scan’s rays with empty cells (Grid/Scan2dUnknownSpaceFilled). |
map_cleanup |
bool |
true |
Free the cached clouds when nobody is subscribed. |
cloud_output_voxelized |
bool |
true |
Voxelize the assembled clouds at Grid/CellSize. |
cloud_subtract_filtering |
bool |
false |
Drop points that duplicate ones already in the map. Slower, smaller output. |
cloud_subtract_filtering_min_neighbors |
int |
2 |
Neighbors needed for a point to count as a duplicate. |
octomap_tree_depth |
int |
16 |
Depth the octomap clouds are generated at. Lower means coarser and faster. Maximum 16. |
map_always_update and map_empty_ray_tracing only apply to the latest sensor data, not yet committed as a node, which only the rtabmap node has: they do nothing in map_assembler.
Every RTAB-Map Grid/*, GridGlobal/*, StereoBM/* and StereoSGBM/* parameter is also exposed, all documented in RTAB-Map’s parameter reference. The split between the first two is worth knowing: Grid/* decides how each node’s local grid is built from its sensor data – the same segmentation obstacles_detection does, and the parameters listed there apply here too – while GridGlobal/* decides how those local grids are merged into the global map, so it covers the map’s minimum size, its occupancy threshold, and how far the graph must move before the whole map is rebuilt.
Octomap tree type
RTAB-Map keeps a color per voxel, so the tree it publishes on octomap_binary and octomap_full reports its id as ColorOcTree, not the plain OcTree many examples assume.
That is deliberate and interoperable: octomap_msgs::binaryMsgToMap() and fullMsgToMap() branch on that id and hand you back an octomap::ColorOcTree, and octovis opens it without complaint. What does break is code that assumes the other branch:
```cpp
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged rtabmap_util at Robotics Stack Exchange
|
rtabmap_util package from rtabmap_ros reportabmap_conversions rtabmap_costmap_plugins rtabmap_demos rtabmap_examples rtabmap_launch rtabmap_msgs rtabmap_odom rtabmap_python rtabmap_ros rtabmap_rviz_plugins rtabmap_slam rtabmap_sync rtabmap_util rtabmap_viz |
ROS Distro
|
Package Summary
| Version | 0.23.13 |
| License | BSD |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/introlab/rtabmap_ros.git |
| VCS Type | git |
| VCS Version | humble-devel |
| Last Updated | 2026-10-01 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Mathieu Labbe
Authors
- Mathieu Labbe
rtabmap_util
Standalone utility nodes for RTAB-Map pipelines: converting between sensor representations, cleaning up point clouds, assembling maps and replaying recorded sessions.
Every node is a composable node as well as a standalone executable. Composing them into one process with their producer avoids copying images and clouds between processes, which is worth doing for anything on the sensor path.
Contents
Nodes
One page per node.
Sensor conversion
| Node | Description |
|---|---|
| disparity_to_depth | Disparity image → depth image, in meters and in millimeters. |
| pointcloud_to_depthimage | Point cloud → depth image registered to an RGB camera. Lets a lidar feed an RGB-D pipeline. |
| point_cloud_xyz | Depth or disparity image → point cloud, with filtering. |
| point_cloud_xyzrgb | RGB-D, stereo or disparity → colored point cloud. |
| imu_to_tf | IMU orientation → TF. |
RGBDImage plumbing
| Node | Description |
|---|---|
| rgbd_relay | Republishes an RGBDImage, compressing or decompressing on the way. |
| rgbd_split | Splits an RGBDImage back into standard Image and CameraInfo topics. |
Point cloud processing
| Node | Description |
|---|---|
| lidar_deskewing | Removes motion distortion from a lidar sweep. |
| point_cloud_aggregator | Merges one cloud from each of several sensors into one. |
| point_cloud_assembler | Accumulates one sensor over time into a denser cloud. |
| obstacles_detection | Segments a cloud into ground and obstacles. |
Maps and replay
| Node | Description |
|---|---|
| map_assembler | Rebuilds the global maps from RTAB-Map’s graph, off the SLAM node’s critical path. |
| db_player | Replays a recorded RTAB-Map database as live sensor topics. |
Library
The package also installs a small C++ library, whose API is documented in the C++ API reference generated from the headers.
MapsManager is the piece worth knowing about: it turns a pose graph plus per-node occupancy grids into the assembled clouds, occupancy grid, octomap and elevation map, and publishes them. Both map_assembler and rtabmap_slam’s rtabmap node use it, which is why their map outputs and Grid/* parameters behave identically. It is described below.
MapsManager
Published topics. Everything is published only when subscribed, and – by default – latched, so a subscriber joining late immediately receives the current map.
In a component container with intra-process communication enabled (use_intra_process_comms), these publishers automatically opt out of it when latch is on, since intra-process communication does not support transient local durability. With latch off, they keep the container’s setting.
| Topic | Type | Description |
|---|---|---|
cloud_map |
sensor_msgs/msg/PointCloud2 |
Ground and obstacles together. |
cloud_ground |
sensor_msgs/msg/PointCloud2 |
Ground only, colored green. |
cloud_obstacles |
sensor_msgs/msg/PointCloud2 |
Obstacles only, colored red. |
map |
nav_msgs/msg/OccupancyGrid |
The 2D occupancy grid, the one navigation wants. |
grid_prob_map |
nav_msgs/msg/OccupancyGrid |
The same grid as occupancy probabilities rather than free/occupied/unknown. |
octomap_occupied_space, octomap_obstacles, octomap_ground, octomap_empty_space, octomap_global_frontier_space
|
sensor_msgs/msg/PointCloud2 |
Octomap contents, one cloud per category. Requires RTAB-Map built with OctoMap. |
octomap_grid |
nav_msgs/msg/OccupancyGrid |
The octomap projected to 2D. |
octomap_binary, octomap_full
|
octomap_msgs/msg/Octomap |
The tree itself, for octovis or other octomap consumers. Serialized as a ColorOcTree, see Octomap tree type. |
elevation_map |
grid_map_msgs/msg/GridMap |
Elevation map. Requires RTAB-Map built with grid_map. |
Parameters.
| Parameter | Type | Default | Description |
|---|---|---|---|
latch |
bool |
true |
Publish with transient-local durability so late subscribers get the current map. |
map_filter_radius |
double |
0.0 |
Skip nodes closer together than this, in meters. A cheap way to thin a dense graph. 0 disables. |
map_filter_angle |
double |
30.0 |
With map_filter_radius, nodes are only merged if they also differ by less than this angle, in degrees. |
map_always_update |
bool |
false |
Also assemble the latest sensor data, not yet a node, so the maps update even when the robot stands still and no node is added. |
map_empty_ray_tracing |
bool |
true |
For that latest data, fill the 2D scan’s rays with empty cells (Grid/Scan2dUnknownSpaceFilled). |
map_cleanup |
bool |
true |
Free the cached clouds when nobody is subscribed. |
cloud_output_voxelized |
bool |
true |
Voxelize the assembled clouds at Grid/CellSize. |
cloud_subtract_filtering |
bool |
false |
Drop points that duplicate ones already in the map. Slower, smaller output. |
cloud_subtract_filtering_min_neighbors |
int |
2 |
Neighbors needed for a point to count as a duplicate. |
octomap_tree_depth |
int |
16 |
Depth the octomap clouds are generated at. Lower means coarser and faster. Maximum 16. |
map_always_update and map_empty_ray_tracing only apply to the latest sensor data, not yet committed as a node, which only the rtabmap node has: they do nothing in map_assembler.
Every RTAB-Map Grid/*, GridGlobal/*, StereoBM/* and StereoSGBM/* parameter is also exposed, all documented in RTAB-Map’s parameter reference. The split between the first two is worth knowing: Grid/* decides how each node’s local grid is built from its sensor data – the same segmentation obstacles_detection does, and the parameters listed there apply here too – while GridGlobal/* decides how those local grids are merged into the global map, so it covers the map’s minimum size, its occupancy threshold, and how far the graph must move before the whole map is rebuilt.
Octomap tree type
RTAB-Map keeps a color per voxel, so the tree it publishes on octomap_binary and octomap_full reports its id as ColorOcTree, not the plain OcTree many examples assume.
That is deliberate and interoperable: octomap_msgs::binaryMsgToMap() and fullMsgToMap() branch on that id and hand you back an octomap::ColorOcTree, and octovis opens it without complaint. What does break is code that assumes the other branch:
```cpp
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged rtabmap_util at Robotics Stack Exchange
|
rtabmap_util package from rtabmap_ros reportabmap_conversions rtabmap_costmap_plugins rtabmap_demos rtabmap_examples rtabmap_launch rtabmap_msgs rtabmap_odom rtabmap_python rtabmap_ros rtabmap_rviz_plugins rtabmap_slam rtabmap_sync rtabmap_util rtabmap_viz |
ROS Distro
|
Package Summary
| Version | 0.23.13 |
| License | BSD |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/introlab/rtabmap_ros.git |
| VCS Type | git |
| VCS Version | humble-devel |
| Last Updated | 2026-10-01 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Mathieu Labbe
Authors
- Mathieu Labbe
rtabmap_util
Standalone utility nodes for RTAB-Map pipelines: converting between sensor representations, cleaning up point clouds, assembling maps and replaying recorded sessions.
Every node is a composable node as well as a standalone executable. Composing them into one process with their producer avoids copying images and clouds between processes, which is worth doing for anything on the sensor path.
Contents
Nodes
One page per node.
Sensor conversion
| Node | Description |
|---|---|
| disparity_to_depth | Disparity image → depth image, in meters and in millimeters. |
| pointcloud_to_depthimage | Point cloud → depth image registered to an RGB camera. Lets a lidar feed an RGB-D pipeline. |
| point_cloud_xyz | Depth or disparity image → point cloud, with filtering. |
| point_cloud_xyzrgb | RGB-D, stereo or disparity → colored point cloud. |
| imu_to_tf | IMU orientation → TF. |
RGBDImage plumbing
| Node | Description |
|---|---|
| rgbd_relay | Republishes an RGBDImage, compressing or decompressing on the way. |
| rgbd_split | Splits an RGBDImage back into standard Image and CameraInfo topics. |
Point cloud processing
| Node | Description |
|---|---|
| lidar_deskewing | Removes motion distortion from a lidar sweep. |
| point_cloud_aggregator | Merges one cloud from each of several sensors into one. |
| point_cloud_assembler | Accumulates one sensor over time into a denser cloud. |
| obstacles_detection | Segments a cloud into ground and obstacles. |
Maps and replay
| Node | Description |
|---|---|
| map_assembler | Rebuilds the global maps from RTAB-Map’s graph, off the SLAM node’s critical path. |
| db_player | Replays a recorded RTAB-Map database as live sensor topics. |
Library
The package also installs a small C++ library, whose API is documented in the C++ API reference generated from the headers.
MapsManager is the piece worth knowing about: it turns a pose graph plus per-node occupancy grids into the assembled clouds, occupancy grid, octomap and elevation map, and publishes them. Both map_assembler and rtabmap_slam’s rtabmap node use it, which is why their map outputs and Grid/* parameters behave identically. It is described below.
MapsManager
Published topics. Everything is published only when subscribed, and – by default – latched, so a subscriber joining late immediately receives the current map.
In a component container with intra-process communication enabled (use_intra_process_comms), these publishers automatically opt out of it when latch is on, since intra-process communication does not support transient local durability. With latch off, they keep the container’s setting.
| Topic | Type | Description |
|---|---|---|
cloud_map |
sensor_msgs/msg/PointCloud2 |
Ground and obstacles together. |
cloud_ground |
sensor_msgs/msg/PointCloud2 |
Ground only, colored green. |
cloud_obstacles |
sensor_msgs/msg/PointCloud2 |
Obstacles only, colored red. |
map |
nav_msgs/msg/OccupancyGrid |
The 2D occupancy grid, the one navigation wants. |
grid_prob_map |
nav_msgs/msg/OccupancyGrid |
The same grid as occupancy probabilities rather than free/occupied/unknown. |
octomap_occupied_space, octomap_obstacles, octomap_ground, octomap_empty_space, octomap_global_frontier_space
|
sensor_msgs/msg/PointCloud2 |
Octomap contents, one cloud per category. Requires RTAB-Map built with OctoMap. |
octomap_grid |
nav_msgs/msg/OccupancyGrid |
The octomap projected to 2D. |
octomap_binary, octomap_full
|
octomap_msgs/msg/Octomap |
The tree itself, for octovis or other octomap consumers. Serialized as a ColorOcTree, see Octomap tree type. |
elevation_map |
grid_map_msgs/msg/GridMap |
Elevation map. Requires RTAB-Map built with grid_map. |
Parameters.
| Parameter | Type | Default | Description |
|---|---|---|---|
latch |
bool |
true |
Publish with transient-local durability so late subscribers get the current map. |
map_filter_radius |
double |
0.0 |
Skip nodes closer together than this, in meters. A cheap way to thin a dense graph. 0 disables. |
map_filter_angle |
double |
30.0 |
With map_filter_radius, nodes are only merged if they also differ by less than this angle, in degrees. |
map_always_update |
bool |
false |
Also assemble the latest sensor data, not yet a node, so the maps update even when the robot stands still and no node is added. |
map_empty_ray_tracing |
bool |
true |
For that latest data, fill the 2D scan’s rays with empty cells (Grid/Scan2dUnknownSpaceFilled). |
map_cleanup |
bool |
true |
Free the cached clouds when nobody is subscribed. |
cloud_output_voxelized |
bool |
true |
Voxelize the assembled clouds at Grid/CellSize. |
cloud_subtract_filtering |
bool |
false |
Drop points that duplicate ones already in the map. Slower, smaller output. |
cloud_subtract_filtering_min_neighbors |
int |
2 |
Neighbors needed for a point to count as a duplicate. |
octomap_tree_depth |
int |
16 |
Depth the octomap clouds are generated at. Lower means coarser and faster. Maximum 16. |
map_always_update and map_empty_ray_tracing only apply to the latest sensor data, not yet committed as a node, which only the rtabmap node has: they do nothing in map_assembler.
Every RTAB-Map Grid/*, GridGlobal/*, StereoBM/* and StereoSGBM/* parameter is also exposed, all documented in RTAB-Map’s parameter reference. The split between the first two is worth knowing: Grid/* decides how each node’s local grid is built from its sensor data – the same segmentation obstacles_detection does, and the parameters listed there apply here too – while GridGlobal/* decides how those local grids are merged into the global map, so it covers the map’s minimum size, its occupancy threshold, and how far the graph must move before the whole map is rebuilt.
Octomap tree type
RTAB-Map keeps a color per voxel, so the tree it publishes on octomap_binary and octomap_full reports its id as ColorOcTree, not the plain OcTree many examples assume.
That is deliberate and interoperable: octomap_msgs::binaryMsgToMap() and fullMsgToMap() branch on that id and hand you back an octomap::ColorOcTree, and octovis opens it without complaint. What does break is code that assumes the other branch:
```cpp
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged rtabmap_util at Robotics Stack Exchange
|
rtabmap_util package from rtabmap_ros reportabmap_conversions rtabmap_costmap_plugins rtabmap_demos rtabmap_examples rtabmap_launch rtabmap_msgs rtabmap_odom rtabmap_python rtabmap_ros rtabmap_rviz_plugins rtabmap_slam rtabmap_sync rtabmap_util rtabmap_viz |
ROS Distro
|
Package Summary
| Version | 0.23.13 |
| License | BSD |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/introlab/rtabmap_ros.git |
| VCS Type | git |
| VCS Version | humble-devel |
| Last Updated | 2026-10-01 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Mathieu Labbe
Authors
- Mathieu Labbe
rtabmap_util
Standalone utility nodes for RTAB-Map pipelines: converting between sensor representations, cleaning up point clouds, assembling maps and replaying recorded sessions.
Every node is a composable node as well as a standalone executable. Composing them into one process with their producer avoids copying images and clouds between processes, which is worth doing for anything on the sensor path.
Contents
Nodes
One page per node.
Sensor conversion
| Node | Description |
|---|---|
| disparity_to_depth | Disparity image → depth image, in meters and in millimeters. |
| pointcloud_to_depthimage | Point cloud → depth image registered to an RGB camera. Lets a lidar feed an RGB-D pipeline. |
| point_cloud_xyz | Depth or disparity image → point cloud, with filtering. |
| point_cloud_xyzrgb | RGB-D, stereo or disparity → colored point cloud. |
| imu_to_tf | IMU orientation → TF. |
RGBDImage plumbing
| Node | Description |
|---|---|
| rgbd_relay | Republishes an RGBDImage, compressing or decompressing on the way. |
| rgbd_split | Splits an RGBDImage back into standard Image and CameraInfo topics. |
Point cloud processing
| Node | Description |
|---|---|
| lidar_deskewing | Removes motion distortion from a lidar sweep. |
| point_cloud_aggregator | Merges one cloud from each of several sensors into one. |
| point_cloud_assembler | Accumulates one sensor over time into a denser cloud. |
| obstacles_detection | Segments a cloud into ground and obstacles. |
Maps and replay
| Node | Description |
|---|---|
| map_assembler | Rebuilds the global maps from RTAB-Map’s graph, off the SLAM node’s critical path. |
| db_player | Replays a recorded RTAB-Map database as live sensor topics. |
Library
The package also installs a small C++ library, whose API is documented in the C++ API reference generated from the headers.
MapsManager is the piece worth knowing about: it turns a pose graph plus per-node occupancy grids into the assembled clouds, occupancy grid, octomap and elevation map, and publishes them. Both map_assembler and rtabmap_slam’s rtabmap node use it, which is why their map outputs and Grid/* parameters behave identically. It is described below.
MapsManager
Published topics. Everything is published only when subscribed, and – by default – latched, so a subscriber joining late immediately receives the current map.
In a component container with intra-process communication enabled (use_intra_process_comms), these publishers automatically opt out of it when latch is on, since intra-process communication does not support transient local durability. With latch off, they keep the container’s setting.
| Topic | Type | Description |
|---|---|---|
cloud_map |
sensor_msgs/msg/PointCloud2 |
Ground and obstacles together. |
cloud_ground |
sensor_msgs/msg/PointCloud2 |
Ground only, colored green. |
cloud_obstacles |
sensor_msgs/msg/PointCloud2 |
Obstacles only, colored red. |
map |
nav_msgs/msg/OccupancyGrid |
The 2D occupancy grid, the one navigation wants. |
grid_prob_map |
nav_msgs/msg/OccupancyGrid |
The same grid as occupancy probabilities rather than free/occupied/unknown. |
octomap_occupied_space, octomap_obstacles, octomap_ground, octomap_empty_space, octomap_global_frontier_space
|
sensor_msgs/msg/PointCloud2 |
Octomap contents, one cloud per category. Requires RTAB-Map built with OctoMap. |
octomap_grid |
nav_msgs/msg/OccupancyGrid |
The octomap projected to 2D. |
octomap_binary, octomap_full
|
octomap_msgs/msg/Octomap |
The tree itself, for octovis or other octomap consumers. Serialized as a ColorOcTree, see Octomap tree type. |
elevation_map |
grid_map_msgs/msg/GridMap |
Elevation map. Requires RTAB-Map built with grid_map. |
Parameters.
| Parameter | Type | Default | Description |
|---|---|---|---|
latch |
bool |
true |
Publish with transient-local durability so late subscribers get the current map. |
map_filter_radius |
double |
0.0 |
Skip nodes closer together than this, in meters. A cheap way to thin a dense graph. 0 disables. |
map_filter_angle |
double |
30.0 |
With map_filter_radius, nodes are only merged if they also differ by less than this angle, in degrees. |
map_always_update |
bool |
false |
Also assemble the latest sensor data, not yet a node, so the maps update even when the robot stands still and no node is added. |
map_empty_ray_tracing |
bool |
true |
For that latest data, fill the 2D scan’s rays with empty cells (Grid/Scan2dUnknownSpaceFilled). |
map_cleanup |
bool |
true |
Free the cached clouds when nobody is subscribed. |
cloud_output_voxelized |
bool |
true |
Voxelize the assembled clouds at Grid/CellSize. |
cloud_subtract_filtering |
bool |
false |
Drop points that duplicate ones already in the map. Slower, smaller output. |
cloud_subtract_filtering_min_neighbors |
int |
2 |
Neighbors needed for a point to count as a duplicate. |
octomap_tree_depth |
int |
16 |
Depth the octomap clouds are generated at. Lower means coarser and faster. Maximum 16. |
map_always_update and map_empty_ray_tracing only apply to the latest sensor data, not yet committed as a node, which only the rtabmap node has: they do nothing in map_assembler.
Every RTAB-Map Grid/*, GridGlobal/*, StereoBM/* and StereoSGBM/* parameter is also exposed, all documented in RTAB-Map’s parameter reference. The split between the first two is worth knowing: Grid/* decides how each node’s local grid is built from its sensor data – the same segmentation obstacles_detection does, and the parameters listed there apply here too – while GridGlobal/* decides how those local grids are merged into the global map, so it covers the map’s minimum size, its occupancy threshold, and how far the graph must move before the whole map is rebuilt.
Octomap tree type
RTAB-Map keeps a color per voxel, so the tree it publishes on octomap_binary and octomap_full reports its id as ColorOcTree, not the plain OcTree many examples assume.
That is deliberate and interoperable: octomap_msgs::binaryMsgToMap() and fullMsgToMap() branch on that id and hand you back an octomap::ColorOcTree, and octovis opens it without complaint. What does break is code that assumes the other branch:
```cpp
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged rtabmap_util at Robotics Stack Exchange
|
rtabmap_util package from rtabmap_ros reportabmap_conversions rtabmap_costmap_plugins rtabmap_demos rtabmap_examples rtabmap_launch rtabmap_msgs rtabmap_odom rtabmap_python rtabmap_ros rtabmap_rviz_plugins rtabmap_slam rtabmap_sync rtabmap_util rtabmap_viz |
ROS Distro
|
Package Summary
| Version | 0.23.13 |
| License | BSD |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/introlab/rtabmap_ros.git |
| VCS Type | git |
| VCS Version | humble-devel |
| Last Updated | 2026-10-01 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Mathieu Labbe
Authors
- Mathieu Labbe
rtabmap_util
Standalone utility nodes for RTAB-Map pipelines: converting between sensor representations, cleaning up point clouds, assembling maps and replaying recorded sessions.
Every node is a composable node as well as a standalone executable. Composing them into one process with their producer avoids copying images and clouds between processes, which is worth doing for anything on the sensor path.
Contents
Nodes
One page per node.
Sensor conversion
| Node | Description |
|---|---|
| disparity_to_depth | Disparity image → depth image, in meters and in millimeters. |
| pointcloud_to_depthimage | Point cloud → depth image registered to an RGB camera. Lets a lidar feed an RGB-D pipeline. |
| point_cloud_xyz | Depth or disparity image → point cloud, with filtering. |
| point_cloud_xyzrgb | RGB-D, stereo or disparity → colored point cloud. |
| imu_to_tf | IMU orientation → TF. |
RGBDImage plumbing
| Node | Description |
|---|---|
| rgbd_relay | Republishes an RGBDImage, compressing or decompressing on the way. |
| rgbd_split | Splits an RGBDImage back into standard Image and CameraInfo topics. |
Point cloud processing
| Node | Description |
|---|---|
| lidar_deskewing | Removes motion distortion from a lidar sweep. |
| point_cloud_aggregator | Merges one cloud from each of several sensors into one. |
| point_cloud_assembler | Accumulates one sensor over time into a denser cloud. |
| obstacles_detection | Segments a cloud into ground and obstacles. |
Maps and replay
| Node | Description |
|---|---|
| map_assembler | Rebuilds the global maps from RTAB-Map’s graph, off the SLAM node’s critical path. |
| db_player | Replays a recorded RTAB-Map database as live sensor topics. |
Library
The package also installs a small C++ library, whose API is documented in the C++ API reference generated from the headers.
MapsManager is the piece worth knowing about: it turns a pose graph plus per-node occupancy grids into the assembled clouds, occupancy grid, octomap and elevation map, and publishes them. Both map_assembler and rtabmap_slam’s rtabmap node use it, which is why their map outputs and Grid/* parameters behave identically. It is described below.
MapsManager
Published topics. Everything is published only when subscribed, and – by default – latched, so a subscriber joining late immediately receives the current map.
In a component container with intra-process communication enabled (use_intra_process_comms), these publishers automatically opt out of it when latch is on, since intra-process communication does not support transient local durability. With latch off, they keep the container’s setting.
| Topic | Type | Description |
|---|---|---|
cloud_map |
sensor_msgs/msg/PointCloud2 |
Ground and obstacles together. |
cloud_ground |
sensor_msgs/msg/PointCloud2 |
Ground only, colored green. |
cloud_obstacles |
sensor_msgs/msg/PointCloud2 |
Obstacles only, colored red. |
map |
nav_msgs/msg/OccupancyGrid |
The 2D occupancy grid, the one navigation wants. |
grid_prob_map |
nav_msgs/msg/OccupancyGrid |
The same grid as occupancy probabilities rather than free/occupied/unknown. |
octomap_occupied_space, octomap_obstacles, octomap_ground, octomap_empty_space, octomap_global_frontier_space
|
sensor_msgs/msg/PointCloud2 |
Octomap contents, one cloud per category. Requires RTAB-Map built with OctoMap. |
octomap_grid |
nav_msgs/msg/OccupancyGrid |
The octomap projected to 2D. |
octomap_binary, octomap_full
|
octomap_msgs/msg/Octomap |
The tree itself, for octovis or other octomap consumers. Serialized as a ColorOcTree, see Octomap tree type. |
elevation_map |
grid_map_msgs/msg/GridMap |
Elevation map. Requires RTAB-Map built with grid_map. |
Parameters.
| Parameter | Type | Default | Description |
|---|---|---|---|
latch |
bool |
true |
Publish with transient-local durability so late subscribers get the current map. |
map_filter_radius |
double |
0.0 |
Skip nodes closer together than this, in meters. A cheap way to thin a dense graph. 0 disables. |
map_filter_angle |
double |
30.0 |
With map_filter_radius, nodes are only merged if they also differ by less than this angle, in degrees. |
map_always_update |
bool |
false |
Also assemble the latest sensor data, not yet a node, so the maps update even when the robot stands still and no node is added. |
map_empty_ray_tracing |
bool |
true |
For that latest data, fill the 2D scan’s rays with empty cells (Grid/Scan2dUnknownSpaceFilled). |
map_cleanup |
bool |
true |
Free the cached clouds when nobody is subscribed. |
cloud_output_voxelized |
bool |
true |
Voxelize the assembled clouds at Grid/CellSize. |
cloud_subtract_filtering |
bool |
false |
Drop points that duplicate ones already in the map. Slower, smaller output. |
cloud_subtract_filtering_min_neighbors |
int |
2 |
Neighbors needed for a point to count as a duplicate. |
octomap_tree_depth |
int |
16 |
Depth the octomap clouds are generated at. Lower means coarser and faster. Maximum 16. |
map_always_update and map_empty_ray_tracing only apply to the latest sensor data, not yet committed as a node, which only the rtabmap node has: they do nothing in map_assembler.
Every RTAB-Map Grid/*, GridGlobal/*, StereoBM/* and StereoSGBM/* parameter is also exposed, all documented in RTAB-Map’s parameter reference. The split between the first two is worth knowing: Grid/* decides how each node’s local grid is built from its sensor data – the same segmentation obstacles_detection does, and the parameters listed there apply here too – while GridGlobal/* decides how those local grids are merged into the global map, so it covers the map’s minimum size, its occupancy threshold, and how far the graph must move before the whole map is rebuilt.
Octomap tree type
RTAB-Map keeps a color per voxel, so the tree it publishes on octomap_binary and octomap_full reports its id as ColorOcTree, not the plain OcTree many examples assume.
That is deliberate and interoperable: octomap_msgs::binaryMsgToMap() and fullMsgToMap() branch on that id and hand you back an octomap::ColorOcTree, and octovis opens it without complaint. What does break is code that assumes the other branch:
```cpp
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged rtabmap_util at Robotics Stack Exchange
|
rtabmap_util package from rtabmap_ros reportabmap_conversions rtabmap_costmap_plugins rtabmap_demos rtabmap_examples rtabmap_launch rtabmap_legacy rtabmap_msgs rtabmap_odom rtabmap_python rtabmap_ros rtabmap_rviz_plugins rtabmap_slam rtabmap_sync rtabmap_util rtabmap_viz |
ROS Distro
|
Package Summary
| Version | 0.21.13 |
| License | BSD |
| Build type | CATKIN |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/introlab/rtabmap_ros.git |
| VCS Type | git |
| VCS Version | noetic-devel |
| Last Updated | 2025-04-27 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Mathieu Labbe
Authors
- Mathieu Labbe