PX4 DDS Sink
Node ID: px4DdsSink · Role: Sink · Realtime config: no
Description
Publishes FusionHub’s GlobalFusedPose to PX4 as an external GPS source (SensorGps on ‘/in/sensor_gps’). PX4 treats FusionHub as a real GPS receiver - EKF2 fuses the position natively, and body-yaw is carried via SensorGps.heading. Enables FusionHub to act as the primary navigation filter for a companion-computer + PX4 drone stack.
Inputs / Outputs
- Inputs:
GlobalFusedPose - Outputs: (none)
Config aliases
Px4DdsSink, px4DdsSink, px4Sink
Properties
The following fields are exposed in the node’s Properties panel in the UI. Types map to UI widgets (e.g. string → text input, number → numeric, boolean → toggle, select → dropdown, json → JSON editor).
| Key | Label | Type | Default | Description / Notes |
|---|---|---|---|---|
namespace | Topic Namespace | string | /fmu | PX4 uXRCE-DDS client namespace (matches UXRCE_DDS_NAMESPACE on PX4). Default ‘/fmu’. Use ‘/px4_1/fmu’ etc. for multi-vehicle. |
bridgeEndpoint | Bridge Endpoint | string | tcp/[::1]:7447 | Zenoh locator of the zenoh-bridge-ros2dds process. Loopback by default; the bridge auto-spawned by any Zenoh node binds to tcp/[::]:7447 so this works out of the box. |
autoSpawnBridge | Auto-spawn Bridge Process | boolean | true | When on, fusionhub spawns the bundled zenoh-bridge-ros2dds process automatically. Turn off if you’re already running it. |
deviceId | Device ID | number | 1608515585 | Unique device_id written to SensorGps to distinguish FusionHub from real GPS receivers. Any non-zero u32 works. |
fixType | Fix Type | enum:3D,RTK_FLOAT,RTK_FIXED,DEAD_RECKONING | 3D | GPS fix quality reported to PX4. RTK_FIXED signals highest confidence (lowest innovation noise in EKF2). |
eph | Horizontal Accuracy (m) | number | 0.5 | SensorGps.eph — horizontal position std dev in meters. |
epv | Vertical Accuracy (m) | number | 1.0 | SensorGps.epv — vertical position std dev in meters. |
headingAccuracy | Heading Accuracy (rad) | number | 0.05 | Standard deviation of the body-yaw estimate (rad, ~3° default). |
satellitesUsed | Satellites Used | number | 16 | Reported satellite count. Cosmetic for PX4’s EKF2 but affects ground-station displays. |
Example node definition
A full node definition in config.json looks like the block below. Paste it under the sinks key of your config, keyed by the node’s instance name (any identifier; it doesn’t have to match the node ID).
{
"sinks": {
"px4DdsSink": {
"inputEndpoints": [
"inproc://globalFusedPose_data"
],
"inputDataFilter": [
"GlobalFusedPose"
],
"settings": {
"autoSpawnBridge": true,
"bridgeEndpoint": "tcp/[::1]:7447",
"deviceId": 1608515585,
"eph": 0.5,
"epv": 1.0,
"fixType": "3D",
"headingAccuracy": 0.05,
"namespace": "/fmu",
"satellitesUsed": 16
}
}
}
}
Field reference
| Field | Purpose |
|---|---|
inputEndpoints | List of upstream endpoints this node connects to (outEndpoint / dataEndpoint values from upstream nodes). |
inputDataFilter | Optional whitelist of data types. Messages whose type isn’t in the list are dropped at the subscriber. |
settings | All user-configurable fields — see the Properties table above. |
Connections can also be declared at the top-level
connectionsarray whensettings.explicitConnectionsistrue, as an alternative to fillinginputEndpointson each node.