* rtabmap_odom tests and doc * opengv note * added ci checks or humble-latest flaky dep cmake errors * Added real data tests for rgbd_odom and stereo_odom * added real data for icp_odometry's deskewing test * fixing json cmake error on lyrical/rolling * test 2d icp odom deskewing branch * first review of existing OdometryROS tests * testing with imu used as guess * tested imu arrivals sync * Fixed odom reset on right pose when guess frame id is used * fixing header errors in ci >=lyrical * Added support for input rgbd_image topic with features for odom, added multicam rgbd_odometry test * Added stereo odom support for features-only frames. Added multicam stereo tests. * forcing latest rtabmap version * updated OdometryROS API * ci: dont build non-latest docker in pull requests * splitting docker jobs * doc edit * Making publish_null_when_lost:=false continous when guess is provided (using guess covariance when we cannot register yet) * updated stereo doc * ficing rolling ci (rviz Ogre header) * Added test coverage of alll rgbd_image callbacks * fixing rolling ci * making docker ci build/run the tests on pull requests * fixing ros2 ci testing * improved sync callback coverage * improving stereo_odometry test coverage * improved icp_odometry test coverage * lyrical voxel_grid ptr error * make multicam tests working as well without opengv * removing deps of missing packages on rolling * PCL empty cloud conversion compiler errors fix * fixing icp_odometry test failure on ci witohut libpointmatcher * fixing nav2 costmap plugin build on lyrical * joining thread when exiting * updating icp test to work the same on pcl 1.15 (lyrical) * Fix parallel tests seg fault --------- Co-authored-by: mathieu86 <[email protected]>
4.3 KiB
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.
Conventions
A few things recur across these nodes.
qos parameters. Most nodes expose a qos integer selecting the reliability of their subscriptions: 0 system default, 1 reliable, 2 best effort. It has to be compatible with the publisher or no messages arrive at all and nothing says why. Sensor drivers commonly publish best effort.
approx_sync. Nodes taking several inputs match them by nearest stamp by default. Set it to false when the inputs are hardware-synchronized and carry identical stamps: the exact policy is cheaper and cannot mismatch. With approximate sync, approx_sync_max_interval is worth setting as a guard against silently pairing stale data.
fixed_frame_id. Where a node has to account for the robot moving between two stamps, it does so by asking TF how a frame moved relative to a fixed one — usually odom. Leaving it empty disables the compensation rather than erroring, so a moving robot then gets subtly misplaced data.
Grid/* parameters. Nodes that segment or assemble maps use RTAB-Map's own LocalGridMaker, and expose its parameters directly under their RTAB-Map names. Their meanings and defaults are in RTAB-Map's parameter reference, which is the source of truth for them. One to know about: Grid/RangeMax is not unlimited by default, so distant points are dropped before anything else happens.