* rtabmap_demos tests and docs * added bag testing * added rtabmap_examples launch tests * updating demo bag download paths * added netherdrone demo * Fixed rgb-only callback with lidar rejected. Updated lidar params * Added back OrbitOriented rviz view to ros2, with optional octomap wll clipping * fixing ci * lidar demo added intermediate_nodes option * added netherdrone as demo test * running rtabmap_demos tests on ci * added rtabmap_launch tests, fixed ground_truth_base_frame_id usage * ficing rolling * updating demo test harnest * densify golden trajectories to avoid tf missing * fixing tf steps * updated min icp ratio for netherdrone demo * fixing image_transport arg->params * export pose opt=0 * lets process all frames * updated netherdrone golden * fixing publishers queue size just for tests * added playdback demo doc * Adding more logs to debug ci * Fixing QOS for CI to reliable, added find-object demo test * name threads * fixing camera info expected transient on lyrical/rolling. Fixing find_object not appearing idle * 30 Hz polling backward comp * fixing test tf sim lock * fixing lyrical qos bag parsing * faster replay * lockstep * fixing clock deadlock * Added test on shutdown * updated netherdrone golden poses * Extended stereo outdoor test * updated shutdown test * updated test * multi-thread flaky test * adding backtrace when test fails * increased closure slack for netherdrone * g2o gauss newton on stereo * adjusted maximum optimizer iterations * updated default iterations * Added netherdrone in list of demos
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.