[ROS 2] MCAP symbols prevent intra-process composition in certain scenarios

SDK version: latest 4.x branch

A very nice feature of ROS 2 is composition. It allows to enable zero-copy / IPC across nodes.
My application requires to compose in the same process space a rosbag2::Player and a ZED ROS 2 node (either yours or a custom version of mine), and execute coordinated SVO playback.

The issue is that SVO2 format is basically from my understanding an MCAP file. A simple objdump fo libsl_zed.so in fact reveals all the symbols of a certain version (I can’t deduce what version unfortunately) of the MCAP library. The issue is that also rosbag2 has support (default) for MCAP storage. And ROS 2 packages its own version of MCAP as mcap_vendor package.

The issue is that, at runtime, the two version clash together. Calls from rosbag2_storage happen to call MCAP methods baked in your executable, or the opposite way around, depending the priority order of the shared libraries (libsl_zed.so and libmcap.so).

So my questions are:

  • can you disclose the version of MCAP you bake into your library?
  • is it an upstream version, or a custom version?
  • by any chance, could you consider things like namespacing at your source level the MCAP C++ symbols or do something about their visibility?
  • Do you have any other suggestions or things I may try to make it work?

Hi @roncapat
The ZED SDK team is processing the information that you provided.

Meanwhile, what version of ROS 2 are you using? As far as I know, rosbag2 in ROS 2 Humble does not support composition and IPC.

Thanks!

Jazzy, built from source on AGX Orin.
Jazzy supports IPC, & integrates rosbag2 composability.

1 Like

Hi @Myzhar , rosbag2 (recording only) in Humble supports IPC and composition through the external package (GitHub - berndpfrommer/rosbag2_composable_recorder: ROS2 package that allows recording without interprocess communication) which has been incorporated in main rosbag2 starting from Jazzy

1 Like

Hi @beniaminopozzan
Does it support IPC?
According to this sentence, it does not:

A composable recorder node for ROS2 to allow recording rosbags without inter process communication.

@roncapat the ZED SDK team is working on a fix to solve this problem.
We expect to have a working solution with the next patch version of the SDK.

1 Like

HI @Myzhar , I’d say it does even if that sentence says otherwise: the composable recorder is implemented as any other composable node and the example launchfile itself sets use_intra_process_comms: rosbag2_composable_recorder/launch/recorder.launch.py at master · berndpfrommer/rosbag2_composable_recorder · GitHub

1 Like