Files
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

2.5 KiB

rtabmap_python

Python helpers for reading and writing the binary formats RTAB-Map uses.

RTAB-Map is a C++ library, and the data it hands to ROS is not always plain ROS types. Several rtabmap_msgs fields — and every blob in an .db database — carry a matrix in RTAB-Map's own compressed encoding rather than as a sensor_msgs/Image or an array. This package is the Python side of that encoding, for scripts that read those fields without going through the C++ library.

There are no nodes here. It is an ament_python package that installs one importable module.

Contents

Module

rtabmap_python.cv_compression — a single-channel cv::Mat to and from bytes.

Function Description
compress(data) 1-D or 2-D numpy array → bytearray.
uncompress(data) those bytes → 2-D numpy array.
import numpy as np
from rtabmap_python.cv_compression import compress, uncompress

scan = np.zeros((360, 2), dtype=np.float32)
blob = compress(scan)          # what the message field carries
restored = uncompress(blob)    # (360, 2) float32

The encoding is a zlib stream followed by a 12-byte trailer holding rows, cols and the element type as three int32. It matches compressData() and uncompressData() in RTAB-Map's corelib/src/Compression.cpp byte for byte, so either side can read what the other wrote. The module docstring has the exact layout, and the generated Python API reference renders it alongside the two functions.

Things worth knowing

The result is read-only. uncompress views the decompressed buffer instead of copying it, so the array it returns has writeable=False and assigning into it raises. Call .copy() if you need to modify it.

Single-channel only. The C++ encoder packs the channel count into the type code; the tables here cover the single-channel depths CV_8U through CV_64F. A multi-channel matrix written by the C++ side raises KeyError rather than decoding wrongly. So does an unsupported dtype on the way in — int64 and float16 have no encoding.

The trailer is host-endian, because the C++ side writes raw ints. A blob is not portable between machines of opposite endianness.

License

BSD-3-Clause. See the repository root.