Files
rtabmap_ros/rtabmap_conversions
matlabbeandmathieu86 11edc01d6a rtabmap_odom tests and doc (#1456)
* 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]>
2026-09-21 17:02:45 -07:00
..
2026-09-21 17:02:45 -07:00
2026-09-07 21:23:22 -07:00
2026-09-21 17:02:45 -07:00

rtabmap_conversions

Conversions between RTAB-Map library types and ROS 2 messages.

This package is a library only — it contains no nodes, no launch files and no parameters. Every other rtabmap_ros package that touches a message goes through it: rtabmap_slam, rtabmap_odom, rtabmap_sync, rtabmap_util, rtabmap_viz and rtabmap_rviz_plugins.

You only need it directly if you are writing your own node against RTAB-Map's C++ API and want to publish or subscribe to rtabmap_msgs.

Contents

Usage

Add the dependency to your package.xml and CMakeLists.txt:

<depend>rtabmap_conversions</depend>
find_package(rtabmap_conversions REQUIRED)
target_link_libraries(my_node rtabmap_conversions::rtabmap_conversions)

Everything lives in a single header and the rtabmap_conversions namespace:

#include <rtabmap_conversions/MsgConversion.h>

// A pose message to an rtabmap::Transform and back.
rtabmap::Transform pose = rtabmap_conversions::transformFromPoseMsg(msg.pose);

geometry_msgs::msg::Pose out;
rtabmap_conversions::transformToPoseMsg(pose, out);

The naming is uniform: xxxFromROS() converts a message into an RTAB-Map type, xxxToROS() goes the other way. ToROS() functions write through a reference parameter so the message can be reused; FromROS() functions return by value.

What it covers

Group Functions
Transforms transformFromTF, transformToTF, transformFromGeometryMsg, transformToGeometryMsg, transformFromPoseMsg, transformToPoseMsg
TF lookups getTransform, getMovingTransform
Camera models cameraModelFromROS, cameraModelToROS, stereoCameraModelFromROS
Images toCvCopy, toCvShare, rgbdImageFromROS, rgbdImageToROS, convertRGBDMsgs, convertStereoMsg
Laser scans convertScanMsg, convertScan3dMsg, deskew, transformPointCloud, sizeOfPointField
Features keypointFromROS, point2fFromROS, point3fFromROS, globalDescriptorFromROS (+ vector and ToROS variants)
Graph mapDataFromROS, mapGraphFromROS, nodeFromROS, linkFromROS, sensorDataFromROS (+ ToROS variants)
Misc infoFromROS, odomInfoFromROS, odomInfoToStatistics, imuFromROS, userDataFromROS, envSensorFromROS, landmarksFromROS, timestampFromROS, timestampToROS

Full signatures and per-function notes are in the API documentation and in MsgConversion.h.

Conventions worth knowing

These cut across the whole API and are not obvious from the signatures. Per-function caveats — object lifetimes, which fields a given ToROS() fills — are documented on the functions themselves.

Null transforms. RTAB-Map distinguishes a null transform (unknown) from identity. Over the wire this is encoded as an all-zero quaternion, so transformFromGeometryMsg() and transformFromPoseMsg() return a null rtabmap::Transform for one. Always check isNull() before using a result. tf2::Transform cannot represent this — it stores rotation as a basis matrix — so transformToTF() returns a bool instead.

CameraInfo matrices are fixed-size arrays. k, r and p are std::array, so they are never "empty" — an unset matrix is all zeros. cameraModelFromROS() treats a zero k[0]/p[0] (the focal length) as absent.

License

BSD-3-Clause. See the repository root.