Skip to content

Support configurable DDS discovery ports and static unicast peers #43

Description

@Z3ZEL

Feature Request

Please expose DDS network configuration in Rewire, particularly:

  • DDS/RTPS port base, currently typically 7400.
  • Static discovery peers, including explicit IP:port endpoints.
  • Network interface selection.
  • Ability to disable multicast and use unicast discovery.

This would allow Rewire to connect directly to ROS 2 deployments with non-default DDS networking.

Use Case

I'm using Rewire 0.11.0 to visualize topics from an embedded device running ROS 2 with CycloneDDS.

The device intentionally uses DDS base port 7600

Multicast discovery is disabled.

On my workstation, the following CycloneDDS configuration successfully discovers the device's topics through ros2 topic list:

<CycloneDDS xmlns="https://cdds.io/config">
  <Domain id="any">
    <General>
      <Interfaces>
        <NetworkInterface name="eth0" />
      </Interfaces>
      <AllowMulticast>false</AllowMulticast>
    </General>
    <Discovery>
      <ParticipantIndex>auto</ParticipantIndex>
      <MaxAutoParticipantIndex>50</MaxAutoParticipantIndex>
      <Peers>
        <Peer Address="192.X.X.X" />
      </Peers>
      <Ports>
        <Base>7600</Base>
      </Ports>
    </Discovery>
  </Domain>
</CycloneDDS>

Interface name is illustrative.

However, Rewire does not discover these topics when launched from the same terminal with the correct CYCLONEDDS_URI exported.

Rewire's logs identify its DDS backend as Iris/RustDDS, so I understand that CycloneDDS-specific environment variables do not necessarily apply. I could not find equivalent peer or port-base settings in rewire record --help or rewire config generate.

Proposed Configuration

An implementation-independent DDS configuration section could expose these settings without requiring support for CycloneDDS XML:

{
  transport: "dds",
  domain_id: 0,
  dds: {
    port_base: 7600,
    interfaces: ["eth0"],
    multicast: false,
    peers: ["192.168.41.1"],
  },
}

This is a suggested schema, not existing syntax. Explicit peer ports such as "192.168.41.1:7610" would also be useful.

Ideally, the configuration would apply consistently to record, doctor, and mappings generate. doctor could report the effective DDS domain, interfaces, discovery ports, and peers to simplify troubleshooting.

Expected Behavior

Rewire discovers and subscribes to topics on a custom-port, unicast-only DDS network without requiring changes to the embedded device or an additional bridge.

Alternatives Considered

  • Changing the device to the default DDS port base: internal constraints
  • Changing ROS_DOMAIN_ID: changes the logical domain and is not equivalent to configuring a port base.
  • Adding a local bridge: potentially workable, but adds processes, configuration, and another compatibility layer.

If this configuration is already supported through Iris/RustDDS, documenting how to pass it through Rewire would also address the request.

Thank you very much for taking this request into account and please keep me updated about the feasibility of this (I can totally understand if it's not worth developing)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions