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
- Inputs:
FusedPose,FusedVehiclePoseV2,GlobalFusedPose - Outputs: (none)
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.
| Property | Type | Default | Description |
|---|---|---|---|
Zenoh Key (PoseStamped) key | string | fusionhub/pose | Zenoh 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 bridgeEndpoint | string | tcp/[::1]:7447 | Zenoh 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 autoSpawnBridge | boolean | true | When 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 bridgeRosDomainId | number | 0 | ROS_DOMAIN_ID env var passed to the spawned bridge. Must match the value used by your ROS 2 nodes. |
Bridge CycloneDDS URI (advanced) bridgeCyclonedssUri | string | "" | 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) bridgeStaticPeers | string | 127.0.0.1 | Comma-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) bridgeNetworkInterface | string | 127.0.0.1 | IP 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 frameId | string | map | |
Max Publish Rate (Hz) maxRateHz | number | 200 | Cap the outgoing rate to this many messages per second. 0 = unlimited. |
Stamp With Wall Clock stampWithWallClock | boolean | true | Set 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 invertYaw | boolean | true | Negate FusedVehiclePoseV2 yaw before publishing. Use when downstream expects the opposite rotation convention. |
Publish TF publishTf | boolean | true | Also 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) tfKey | string | tf | Zenoh key expression for the /tf publication. Default tf ↔ ROS 2 topic /tf. Rarely changed. |
Zenoh Key (NavSatFix) gnssKey | string | fusionhub/gnss | Zenoh key expression for sensor_msgs/NavSatFix publications, used when GlobalFusedPose data arrives at the sink. Set empty to disable. |
TF Parent Frame tfParentFrame | string | map | |
TF Child Frame tfChildFrame | string | oxts_link | |
TF Position Offset tfPositionOffset | vector3 | {"x":0.0,"y":0.0,"z":0.0} | |
TF Rotation Offset tfRotationOffset | quaternion | {"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": {}
}
}
}