It looks like a limitation of ComposableNode: "intraprocess communication allowed only with volatile durability ". We use transient by default (latch:=true) for mapping topics. The workaround seems indeed to turn off latching.
The only downside is that maps will be always republished after each update. in SLAM mode, it was already doing that anyway, but in localization mode, it means the map will be republished even if the map doesn't change.
There is also an option called "
use_intra_process_comms" that would need to be explicitly enabled to use in ComposableNode to avoid all serialization. A tutorial here:
https://docs.ros.org/en/jazzy/Tutorials/Demos/Intra-Process-Communication.htmlHowever, I think you can enable this flag by simply adding extra arguments like this:
https://github.com/IntelRealSense/realsense-ros/blob/1cbd81be81e807eefb46f098e76381888ffc7001/realsense2_camera/launch/rs_intra_process_demo_launch.py#L95It seems ISAAC ROS enabled it by default on all nodes to play well with NITROS nodes:
https://github.com/search?q=org%3ANVIDIA-ISAAC-ROS%20use_intra_process_comms&type=codeEDIT: Note that rtabmap_viz cannot be used as composable node because Qt requires to run in the main thread of the process.