Skip to content

[Bug] Bridge not working on ROS2 Humble with SHM #564

@flandyjohn

Description

@flandyjohn

Describe the bug

Running the bridge when CycloneDDS is configured to use SHM results in errors due to Iceoryx version mismatch.
The bridge tries to connect to iox-roudi 20 times with a period of 3 seconds (see RouDi logs), then fails with a fatal error.

Note

Running the bridge with SHM disabled works as expected.

The issue seems to be with the pinned version of cyclors (v0.2.7, which BTW does not exist on the repo), that bundles Iceoryx at ≈v2.0.3 (not a tagged commit). Since v0.3.0, cyclors seems to point to the correct version of Iceoryx (v2.0.5).

I've seen that #150 is bumping the version of cyclors to a more recent one, but it's been more than one year since the last update...

RouDi logs:

$ iox-roudi -l info

Log level set to: [ Info  ]
Reserving 66798600 bytes in the shared memory [iceoryx_mgmt]
[ Reserving shared memory successful ] 
Reserving 149264720 bytes in the shared memory [root]
[ Reserving shared memory successful ] 
RouDi is ready for clients
2025-10-15 15:31:23.632 [ Error ]: Version mismatch from 'iceoryx_rt_1_1760542283631199078'! Please build your app and RouDi against the same iceoryx version (version & commitID). RouDi: 1:21:01:51:020:2025-07-01T01:53:30Z0: App: 1:21:01:31:020:2025-10-10T13:36:58Z0:
2025-10-15 15:31:26.695 [ Error ]: Version mismatch from 'iceoryx_rt_1_1760542283631199078'! Please build your app and RouDi against the same iceoryx version (version & commitID). RouDi: 1:21:01:51:020:2025-07-01T01:53:30Z0: App: 1:21:01:31:020:2025-10-10T13:36:58Z0:
2025-10-15 15:31:29.767 [ Error ]: Version mismatch from 'iceoryx_rt_1_1760542283631199078'! Please build your app and RouDi against the same iceoryx version (version & commitID). RouDi: 1:21:01:51:020:2025-07-01T01:53:30Z0: App: 1:21:01:31:020:2025-10-10T13:36:58Z0:
2025-10-15 15:31:32.839 [ Error ]: Version mismatch from 'iceoryx_rt_1_1760542283631199078'! Please build your app and RouDi against the same iceoryx version (version & commitID). RouDi: 1:21:01:51:020:2025-07-01T01:53:30Z0: App: 1:21:01:31:020:2025-10-10T13:36:58Z0:
2025-10-15 15:31:35.911 [ Error ]: Version mismatch from 'iceoryx_rt_1_1760542283631199078'! Please build your app and RouDi against the same iceoryx version (version & commitID). RouDi: 1:21:01:51:020:2025-07-01T01:53:30Z0: App: 1:21:01:31:020:2025-10-10T13:36:58Z0:
2025-10-15 15:31:38.983 [ Error ]: Version mismatch from 'iceoryx_rt_1_1760542283631199078'! Please build your app and RouDi against the same iceoryx version (version & commitID). RouDi: 1:21:01:51:020:2025-07-01T01:53:30Z0: App: 1:21:01:31:020:2025-10-10T13:36:58Z0:
2025-10-15 15:31:42.055 [ Error ]: Version mismatch from 'iceoryx_rt_1_1760542283631199078'! Please build your app and RouDi against the same iceoryx version (version & commitID). RouDi: 1:21:01:51:020:2025-07-01T01:53:30Z0: App: 1:21:01:31:020:2025-10-10T13:36:58Z0:
2025-10-15 15:31:45.127 [ Error ]: Version mismatch from 'iceoryx_rt_1_1760542283631199078'! Please build your app and RouDi against the same iceoryx version (version & commitID). RouDi: 1:21:01:51:020:2025-07-01T01:53:30Z0: App: 1:21:01:31:020:2025-10-10T13:36:58Z0:
2025-10-15 15:31:48.199 [ Error ]: Version mismatch from 'iceoryx_rt_1_1760542283631199078'! Please build your app and RouDi against the same iceoryx version (version & commitID). RouDi: 1:21:01:51:020:2025-07-01T01:53:30Z0: App: 1:21:01:31:020:2025-10-10T13:36:58Z0:
2025-10-15 15:31:51.271 [ Error ]: Version mismatch from 'iceoryx_rt_1_1760542283631199078'! Please build your app and RouDi against the same iceoryx version (version & commitID). RouDi: 1:21:01:51:020:2025-07-01T01:53:30Z0: App: 1:21:01:31:020:2025-10-10T13:36:58Z0:
2025-10-15 15:31:54.343 [ Error ]: Version mismatch from 'iceoryx_rt_1_1760542283631199078'! Please build your app and RouDi against the same iceoryx version (version & commitID). RouDi: 1:21:01:51:020:2025-07-01T01:53:30Z0: App: 1:21:01:31:020:2025-10-10T13:36:58Z0:
2025-10-15 15:31:57.415 [ Error ]: Version mismatch from 'iceoryx_rt_1_1760542283631199078'! Please build your app and RouDi against the same iceoryx version (version & commitID). RouDi: 1:21:01:51:020:2025-07-01T01:53:30Z0: App: 1:21:01:31:020:2025-10-10T13:36:58Z0:
2025-10-15 15:32:00.487 [ Error ]: Version mismatch from 'iceoryx_rt_1_1760542283631199078'! Please build your app and RouDi against the same iceoryx version (version & commitID). RouDi: 1:21:01:51:020:2025-07-01T01:53:30Z0: App: 1:21:01:31:020:2025-10-10T13:36:58Z0:
2025-10-15 15:32:03.559 [ Error ]: Version mismatch from 'iceoryx_rt_1_1760542283631199078'! Please build your app and RouDi against the same iceoryx version (version & commitID). RouDi: 1:21:01:51:020:2025-07-01T01:53:30Z0: App: 1:21:01:31:020:2025-10-10T13:36:58Z0:
2025-10-15 15:32:06.631 [ Error ]: Version mismatch from 'iceoryx_rt_1_1760542283631199078'! Please build your app and RouDi against the same iceoryx version (version & commitID). RouDi: 1:21:01:51:020:2025-07-01T01:53:30Z0: App: 1:21:01:31:020:2025-10-10T13:36:58Z0:
2025-10-15 15:32:09.703 [ Error ]: Version mismatch from 'iceoryx_rt_1_1760542283631199078'! Please build your app and RouDi against the same iceoryx version (version & commitID). RouDi: 1:21:01:51:020:2025-07-01T01:53:30Z0: App: 1:21:01:31:020:2025-10-10T13:36:58Z0:
2025-10-15 15:32:12.775 [ Error ]: Version mismatch from 'iceoryx_rt_1_1760542283631199078'! Please build your app and RouDi against the same iceoryx version (version & commitID). RouDi: 1:21:01:51:020:2025-07-01T01:53:30Z0: App: 1:21:01:31:020:2025-10-10T13:36:58Z0:
2025-10-15 15:32:15.847 [ Error ]: Version mismatch from 'iceoryx_rt_1_1760542283631199078'! Please build your app and RouDi against the same iceoryx version (version & commitID). RouDi: 1:21:01:51:020:2025-07-01T01:53:30Z0: App: 1:21:01:31:020:2025-10-10T13:36:58Z0:
2025-10-15 15:32:18.919 [ Error ]: Version mismatch from 'iceoryx_rt_1_1760542283631199078'! Please build your app and RouDi against the same iceoryx version (version & commitID). RouDi: 1:21:01:51:020:2025-07-01T01:53:30Z0: App: 1:21:01:31:020:2025-10-10T13:36:58Z0:
2025-10-15 15:32:21.991 [ Error ]: Version mismatch from 'iceoryx_rt_1_1760542283631199078'! Please build your app and RouDi against the same iceoryx version (version & commitID). RouDi: 1:21:01:51:020:2025-07-01T01:53:30Z0: App: 1:21:01:31:020:2025-10-10T13:36:58Z0:

zenoh-bridge-ros2dds logs:

$ zenoh-bridge-ros2dds

2025-10-15T15:31:23.627408Z  INFO main ThreadId(01) zenoh_bridge_ros2dds: zenoh-bridge-ros2dds v1.5.1
2025-10-15T15:31:23.628224Z  INFO main ThreadId(01) zenoh_bridge_ros2dds: Zenoh Config(Config { id: None, metadata: Null, mode: Some(Router), connect: ConnectConfig { timeout_ms: None, endpoints: Unique([]), exit_on_failure: None, retry: None }, listen: ListenConfig { timeout_ms: None, endpoints: Dependent(ModeValues { router: Some([tcp/[::]:7447]), peer: Some([tcp/[::]:0]), client: None }), exit_on_failure: None, retry: None }, open: OpenConf { return_conditions: ReturnConditionsConf { connect_scouted: None, declares: None } }, scouting: ScoutingConf { timeout: None, delay: None, multicast: ScoutingMulticastConf { enabled: None, address: None, interface: None, ttl: None, autoconnect: None, autoconnect_strategy: None, listen: None }, gossip: GossipConf { enabled: None, multihop: None, target: None, autoconnect: None, autoconnect_strategy: None } }, timestamping: TimestampingConf { enabled: Some(Unique(true)), drop_future_timestamp: None }, queries_default_timeout: None, routing: RoutingConf { router: RouterRoutingConf { peers_failover_brokering: None, linkstate: LinkstateConf { transport_weights: [] } }, peer: PeerRoutingConf { mode: None, linkstate: LinkstateConf { transport_weights: [] } }, interests: InterestsConf { timeout: None } }, aggregation: AggregationConf { subscribers: [], publishers: [] }, qos: QoSConfig { publication: PublisherQoSConfList([]), network: [] }, transport: TransportConf { unicast: TransportUnicastConf { open_timeout: 10000, accept_timeout: 10000, accept_pending: 100, max_sessions: 1000, max_links: 1, lowlatency: false, qos: QoSUnicastConf { enabled: true }, compression: CompressionUnicastConf { enabled: false } }, multicast: TransportMulticastConf { join_interval: Some(2500), max_sessions: Some(1000), qos: QoSMulticastConf { enabled: false }, compression: CompressionMulticastConf { enabled: false } }, link: TransportLinkConf { protocols: None, tx: LinkTxConf { sequence_number_resolution: U32, lease: 10000, keep_alive: 4, batch_size: 65535, queue: QueueConf { size: QueueSizeConf { control: 2, real_time: 2, interactive_high: 2, interactive_low: 2, data_high: 2, data: 2, data_low: 2, background: 2 }, congestion_control: CongestionControlConf { drop: CongestionControlDropConf { wait_before_drop: 1000, max_wait_before_drop_fragments: 50000 }, block: CongestionControlBlockConf { wait_before_close: 5000000 } }, batching: BatchingConf { enabled: true, time_limit: 1 }, allocation: QueueAllocConf { mode: Lazy } }, threads: 1 }, rx: LinkRxConf { buffer_size: 65535, max_message_size: 1073741824 }, tls: TLSConf { root_ca_certificate: None, listen_private_key: None, listen_certificate: None, enable_mtls: None, connect_private_key: None, connect_certificate: None, verify_name_on_connect: None, close_link_on_expiration: None, so_sndbuf: None, so_rcvbuf: None, root_ca_certificate_base64: None, listen_private_key_base64: None, listen_certificate_base64: None, connect_private_key_base64: None, connect_certificate_base64: None }, tcp: TcpConf { so_sndbuf: None, so_rcvbuf: None }, unixpipe: UnixPipeConf { file_access_mask: None } }, shared_memory: ShmConf { enabled: true, mode: Lazy, transport_optimization: LargeMessageTransportOpt { enabled: true, pool_size: 16777216, message_size_threshold: 3072 } }, auth: AuthConf { usrpwd: UsrPwdConf { user: None, password: None, dictionary_file: None }, pubkey: PubKeyConf { public_key_pem: None, private_key_pem: None, public_key_file: None, private_key_file: None, key_size: None, known_keys_file: None } } }, adminspace: AdminSpaceConf { enabled: true, permissions: PermissionsConf { read: true, write: false } }, namespace: None, downsampling: [], access_control: AclConfig { enabled: false, default_permission: Deny, rules: None, subjects: None, policies: None }, low_pass_filter: [], plugins_loading: PluginsLoading { enabled: true, search_dirs: LibSearchDirs([Spec(LibSearchSpec { kind: CurrentExeParent, value: None }), Path("."), Path("~/.zenoh/lib"), Path("/opt/homebrew/lib"), Path("/usr/local/lib"), Path("/usr/lib")]) }, plugins: Object {"ros2dds": Object {"domain": Number(218), "ros_localhost_only": Bool(false), "shm_enabled": Bool(false)}} })
2025-10-15T15:31:23.628386Z  INFO main ThreadId(01) zenoh::net::runtime: Using ZID: ac8ff11f2453fa8ea416d07195ec73b2
2025-10-15T15:31:23.628891Z  INFO main ThreadId(01) zenoh::api::loader: Starting required plugin "ros2dds"
2025-10-15T15:31:23.629341Z  INFO main ThreadId(01) zenoh::api::loader: Successfully started plugin ros2dds from "__static_lib__"
2025-10-15T15:31:23.629366Z  INFO main ThreadId(01) zenoh::api::loader: Finished loading plugins
2025-10-15T15:31:23.629420Z  INFO tokio-runtime-worker ThreadId(05) zenoh_plugin_ros2dds: ROS2 plugin Config { namespace: "/", nodename: "zenoh_bridge_ros2dds", domain: 218, ros_localhost_only: false, ros_automatic_discovery_range: None, ros_static_peers: None, allowance: None, pub_max_frequencies: [], shm_enabled: false, transient_local_cache_multiplier: 10, queries_timeout: Some(QueriesTimeouts { default: 5.0, transient_local_subscribers: [], services: [], actions: Some(ActionsTimeouts { send_goal: [], cancel_goal: [], get_result: [(Regex(".*"), 300.0)] }) }), reliable_routes_blocking: true, pub_priorities: [], work_thread_num: 2, max_block_thread_num: 50, __required__: None, __path__: None }
2025-10-15T15:31:23.630354Z  INFO                 main ThreadId(01) zenoh::net::runtime::orchestrator: Zenoh can be reached at: tcp/[fe80::3e6d:66ff:fe1f:5391]:7447
2025-10-15T15:31:23.630386Z  INFO                 main ThreadId(01) zenoh::net::runtime::orchestrator: Zenoh can be reached at: tcp/192.168.144.2:7447
2025-10-15T15:31:23.630458Z  INFO                 main ThreadId(01) zenoh::net::runtime::orchestrator: zenohd listening scout messages on 224.0.0.224:7446
2025-10-15 15:32:25.062 [ Fatal ]: Timeout registering at RouDi. Is RouDi running?
2025-10-15 15:32:25.063 [ Error ]: ICEORYX error! IPC_INTERFACE__REG_ROUDI_NOT_AVAILABLE
terminate called without an active exception

To reproduce

  1. Setup a ROS2 Humble environment with CycloneDDS as middleware.
  2. Clone and build the bridge (I built it with cargo)
  3. Enable SHM in the CycloneDDS (//CycloneDDS/Domain/SharedMemory/Enable).
  4. [terminal 1] Start iox-roudi with iox-roudi -l info.
  5. [terminal 2] Launch zenoh-bridge-ros2dds.
  6. See logs and failure.

System info

  • OS: Ubuntu 22.04
  • Platform: AMD64 and ARM64
  • CPU: Intel i7 and Jetson Orin NX
  • Bridge version: 1.5.1
  • CycloneDDS version: 0.10.5-2jammy.20250701.042623 (from apt)
  • rmw_cyclonedds version: 1.3.4-1jammy.20250824.154929 (from apt)
  • Iceoryx version: 2.0.5-1jammy.20250701.031507 (from apt)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions