Susi Server

OST Calibration

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

Description

SPAAM-style optical see-through display calibration for the LPVIZ driver. The user aligns a tracked stylus tip with crosshairs at known pixel positions on the display; the solve recovers per-eye projection FOV, IPD, and the head-to-tracker pose. Wire the stylus optical stream and, preferably, the HMD body’s raw optical stream (HMD Optical) - it drops out visibly when tracking is lost, so stale poses are rejected instead of silently captured. The FusedPose input is an alternative when no raw stream is available.

Inputs / Outputs

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).

KeyLabelTypeDefaultDescription / Notes
tipOffsetStylus Tip Offsetvector3{"x":0.0,"y":0.0,"z":0.0}Offset from the tracked stylus body origin to its physical tip, in the body frame (m). Solve it with the pivot calibration in the Point Alignment view.
captureWindowMsCapture Window (ms)number750hidden in UI

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": {
    "ostCalibration": {
      "inputEndpoints": [
        "inproc://optical_data",
        "inproc://hmdOptical_data",
        "inproc://hmdPose_data"
      ],
      "inputDataFilter": [
        "Optical",
        "Optical",
        "FusedPose"
      ],
      "settings": {
        "captureWindowMs": 750,
        "tipOffset": {
          "x": 0.0,
          "y": 0.0,
          "z": 0.0
        }
      }
    }
  }
}

Field reference

FieldPurpose
inputEndpointsList of upstream endpoints this node connects to (outEndpoint / dataEndpoint values from upstream nodes).
inputDataFilterOptional whitelist of data types. Messages whose type isn’t in the list are dropped at the subscriber.
settingsAll user-configurable fields — see the Properties table above.

Connections can also be declared at the top-level connections array when settings.explicitConnections is true, as an alternative to filling inputEndpoints on each node.

Loading documentation…