Optical Source
Node ID: optical · Role: Source · Realtime config: no
Description
Optical/motion capture tracking source. Subtypes: DTrack (ART), Vicon, Optitrack, Antilatency. Outputs OpticalData (6-DOF position+orientation, quality, frame rate).
Inputs / Outputs
- Inputs: (none)
- Outputs:
Optical
Config aliases
OpticalSource, opticalSource, optical
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 |
|---|---|---|---|---|
bodyIDs | Body IDs | json | [0] | List of tracked body IDs to forward from the mocap system. Empty means all bodies. |
Subtypes
| Value | Display name | Extra properties |
|---|---|---|
dtrack | DTrack | 11 field(s) |
vicon | Vicon | none |
optitrack | Optitrack | 11 field(s) |
antilatency | Antilatency | none |
Subtype: dtrack — DTrack
| Key | Label | Type | Default | Description / Notes |
|---|---|---|---|---|
bodyIDs | Body IDs | id-name-list | [{"id":1,"name":"hmd"},{"id":2,"name":"leftCtrl"},{"id":3... | List of tracked body IDs to forward from the mocap system. Empty means all bodies. |
measurementToolIDs | Measurement Tool IDs | id-name-list | [] | ART measurement tools (6dmt) to publish as optical streams. The reported position is the calibrated tool tip, so no stylus tip offset or pivot calibration is needed. |
port | Port | number | 5000 | UDP port that DTrack multicasts/unicasts tracking frames to. |
roomDirections | Room Directions | directions | ["right","up","backward"] | Three-axis permutation describing the DTrack room coordinate system, e.g. [‘right’,‘up’,‘backward’]. Used to map into FusionHub’s +X forward, +Y left, +Z up frame. |
bodyDirections | Body Directions | directions | ["right","up","backward"] | Three-axis permutation describing the tracked body’s local frame. |
roomOffset | Room Offset | vector3 | {"x":0,"y":0,"z":0} | Translation (m) applied to the room origin before publishing the pose. |
useWorldTrafo | Use World Transform | boolean | false | Apply the World Transform instead of Room Directions / Room Offset. Enabled automatically by the Point Alignment apply. |
worldTrafo | World Transform | transform | {"quat":{"w":1,"x":0,"y":0,"z":0},"vect":{"x":0,"y":0,"z"... | Rigid world-frame transform applied to all published poses when ‘Use World Transform’ is on. Replaces Room Directions / Room Offset. Written by the Point Alignment apply. |
jumpGateEnabled | Jump Gate | boolean | false | Reject frames whose pose moves implausibly fast relative to the last accepted pose - catches bad marker fits during partial occlusion. |
maxPositionSpeed | Max Position Speed (m/s) | number | 5.0 | Position speed limit for the jump gate. 0 disables the position check. |
maxRotationSpeed | Max Rotation Speed (deg/s) | number | 1000.0 | Rotation speed limit for the jump gate. 0 disables the rotation check. |
Subtype: optitrack — Optitrack
| Key | Label | Type | Default | Options | Description / Notes |
|---|---|---|---|---|---|
serverAddress | Server Address | string | 127.0.0.1 | — | Hostname or IP of the OptiTrack Motive server. |
localAddress | Local Address | string | 0.0.0.0 | — | Local interface IP used when Motive has multiple NICs; usually 127.0.0.1 when running on the same host. |
multicastAddress | Multicast Address | string | 239.255.42.99 | — | Multicast group Motive streams data to; must match Motive’s ‘Multicast Interface’ setting. |
serverCommandPort | Command Port | number | 1510 | — | TCP/UDP command port on the Motive server (Motive default: 1510). |
serverDataPort | Data Port | number | 1511 | — | UDP data port on the Motive server (Motive default: 1511). |
connectionType | Connection Type | select | multicast | multicast, unicast | NatNet transport: ‘multicast’ (default) or ‘unicast’. Must match Motive’s streaming settings. |
bodyIDs | Body IDs | id-name-list | [{"id":0,"name":"hmd"},{"id":1,"name":"leftCtrl"},{"id":2... | — | List of tracked body IDs to forward from the mocap system. Empty means all bodies. |
roomDirections | Room Directions | directions | ["right","up","backward"] | — | Three-axis permutation mapping the OptiTrack world axes into FusionHub’s frame. |
bodyDirections | Body Directions | directions | ["right","up","backward"] | — | Three-axis permutation mapping the rigid-body local axes into FusionHub’s frame. |
useWorldTrafo | Use World Transform | boolean | false | — | Apply the World Transform instead of Room Directions. Enabled automatically by the Point Alignment apply. |
worldTrafo | World Transform | transform | {"quat":{"w":1,"x":0,"y":0,"z":0},"vect":{"x":0,"y":0,"z"... | — | Rigid world-frame transform applied to all published poses when ‘Use World Transform’ is on. Replaces Room Directions. Written by the Point Alignment apply. |
Example node definition
A full node definition in config.json looks like the block below. Paste it under the sources key of your config, keyed by the node’s instance name (any identifier; it doesn’t have to match the node ID).
{
"sources": {
"optical": {
"outEndpoint": "inproc://optical_data",
"type": "dtrack",
"settings": {
"bodyIDs": [
{
"id": 1,
"name": "hmd"
},
{
"id": 2,
"name": "leftCtrl"
},
{
"id": 3,
"name": "rightCtrl"
}
],
"measurementToolIDs": [],
"port": 5000,
"roomDirections": [
"right",
"up",
"backward"
],
"bodyDirections": [
"right",
"up",
"backward"
],
"roomOffset": {
"x": 0,
"y": 0,
"z": 0
},
"useWorldTrafo": false,
"worldTrafo": {
"quat": {
"w": 1,
"x": 0,
"y": 0,
"z": 0
},
"vect": {
"x": 0,
"y": 0,
"z": 0
}
},
"jumpGateEnabled": false,
"maxPositionSpeed": 5.0,
"maxRotationSpeed": 1000.0
}
}
}
}
Field reference
| Field | Purpose |
|---|---|
outEndpoint | ZMQ / inproc endpoint this source binds to publish its output. The runtime auto-generates one if omitted. |
type | Subtype / backend selector. See the Subtypes section above for valid values. |
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.