Susi Server

Zenoh Publisher

Node ID: zenohPublisher · Role: Sink · Realtime config: no

Description

Publishes pipeline data through Zenoh; the companion zenoh-bridge-ros2dds process exposes the keys as native ROS 2 DDS topics. Avoids the RustDDS/Fast-DDS interop quirks of the direct ROS2 Publisher.

Inputs / Outputs

Config aliases

ZenohSink, zenohSink, zenohPublisher

Properties

Each row shows the setting’s label in the node’s Properties panel and, in code, its key in the node’s settings object in the config file. A setting omitted from the config file uses the default shown here.

PropertyTypeDefaultDescription
Zenoh Key (PoseStamped) keystringfusionhub/poseZenoh key expression for the PoseStamped publication. The bridge maps fusionhub/pose to ROS 2 topic /fusionhub/pose. Use only forward slashes; no leading slash. Set empty to disable.
Bridge Endpoint bridgeEndpointstringtcp/[::1]:7447Zenoh locator of the zenoh-bridge-ros2dds process. Default is IPv6 loopback (matches the bundled bridge’s default listen socket). Override to tcp/<ip>:7447 if the bridge runs on another host, or set empty to use peer mode + multicast scouting (only do this if you know why; scouting over machines with many NICs causes connect-fail noise).
Auto-spawn Bridge Process autoSpawnBridgebooleantrueWhen on (default), fusionhub spawns the bundled zenoh-bridge-ros2dds process automatically when this sink starts. Turn off if you’re running the bridge yourself.
Bridge ROS_DOMAIN_ID bridgeRosDomainIdnumber0ROS_DOMAIN_ID env var passed to the spawned bridge. Must match the value used by your ROS 2 nodes.
Bridge CycloneDDS URI (advanced) bridgeCyclonedssUristring""Optional. Path or file:// URI to a hand-written CycloneDDS XML config. Overrides the structured fields below. Empty = use the structured fields (or auto-detect if those are also empty).
Bridge Static Peers (comma-separated IPs) bridgeStaticPeersstring127.0.0.1Comma-separated IPs of remote DDS participants the bridge should unicast SPDP to (bypasses multicast discovery). Defaults to 127.0.0.1 for the common case where fusionhub and ROS 2 run on the same machine. Override with the LAN IP of the ROS 2 box when running cross-machine, e.g. 192.168.140.78.
Bridge Network Interface (IP) bridgeNetworkInterfacestring127.0.0.1IP of the network interface CycloneDDS should bind to. Defaults to 127.0.0.1 (loopback) for same-machine ROS 2 setups. Override with the LAN IP (e.g. 192.168.140.99) for cross-machine. Use this to skip Hyper-V / VPN / virtual adapters.
Frame ID frameIdstringmap
Max Publish Rate (Hz) maxRateHznumber200Cap the outgoing rate to this many messages per second. 0 = unlimited.
Stamp With Wall Clock stampWithWallClockbooleantrueSet header.stamp to current system time at publish-time instead of the data’s own timestamp. On by default for replay; turn off for live feeds where original capture time matters downstream.
Invert Yaw invertYawbooleantrueNegate FusedVehiclePoseV2 yaw before publishing. Use when downstream expects the opposite rotation convention.
Publish TF publishTfbooleantrueAlso broadcast each pose as a tf2_msgs/TFMessage on the standard ROS 2 /tf topic. Useful for rviz2 and most ROS 2 consumers.
Zenoh Key (TF) tfKeystringtfZenoh key expression for the /tf publication. Default tf ↔ ROS 2 topic /tf. Rarely changed.
Zenoh Key (NavSatFix) gnssKeystringfusionhub/gnssZenoh key expression for sensor_msgs/NavSatFix publications, used when GlobalFusedPose data arrives at the sink. Set empty to disable.
TF Parent Frame tfParentFramestringmap
TF Child Frame tfChildFramestringoxts_link
TF Position Offset tfPositionOffsetvector3{"x":0.0,"y":0.0,"z":0.0}
TF Rotation Offset tfRotationOffsetquaternion{"w":0.5,"x":0.0,"y":0.0,"z":0.5}Right-multiplied into the transform rotation: output = base * offset. Output is renormalised, so non-unit values are fine. Default (w=0.5, z=0.5) applies a 90° yaw to align our body frame with the typical ROS REP-103 convention.

Example node definition

A minimal entry in config.json looks like the block below. Paste it under the sinks key, keyed by an instance name of your choice. All settings are optional: anything not listed under settings uses the default from the Properties table above. See The configuration file for how the sections and endpoint wiring work.

{
  "sinks": {
    "zenohPublisher": {
      "inputEndpoints": [
        "inproc://fusedPose_data",
        "inproc://fusedVehiclePoseV2_data",
        "inproc://globalFusedPose_data"
      ],
      "inputDataFilter": [
        "FusedPose",
        "FusedVehiclePoseV2",
        "GlobalFusedPose"
      ],
      "settings": {}
    }
  }
}
Loading documentation…