SteamVR HMD
Node ID: steamvrHmd · Role: Filter · Realtime config: yes
Description
Bidirectional ZMQ bridge to the LPVR SteamVR HMD driver for lighthouse headsets (HTC Vive Pro, Vive Pro 2, Valve Index) and their controllers. Receives the headset and controller IMUs from the SteamVR lighthouse driver (factory calibration applied, head frame) and forwards FusedPose back as the SteamVR tracking override. Includes gyro autocalibration.
Inputs / Outputs
Inputs:
FusedPose- Head: Head pose forwarded to SteamVR as the HMD tracking override.LeftController(FusedPose) - Left Controller: Pose forwarded as the tracking override of the controller assigned to the left hand.RightController(FusedPose) - Right Controller: Pose forwarded as the tracking override of the controller assigned to the right hand.
Outputs:
Imu: Headset and controller IMUs from the SteamVR driver, with gyro auto-calibration applied.
Config aliases
steamvrHmd, SteamvrHmd, vivePro
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 |
|---|---|---|---|
Driver IMU Endpoint imuEndpoint | string | tcp://127.0.0.1:9926 | ZMQ SUB endpoint of the LPVR SteamVR HMD driver’s IMU publisher (e.g. ‘tcp://127.0.0.1:9926’). |
FusedPose Publish Endpoint fusedPoseEndpoint | string | tcp://*:9925 | ZMQ PUB endpoint the driver subscribes to for head and controller poses (e.g. ‘tcp://*:9925’). |
Head IMU Sender ID senderId | string | headsetImu | Sender ID stamped on the headset IMU output. |
Left Controller Serial leftControllerSerial | string | "" | Lighthouse serial (LHR-…) of the controller used for the left hand. Its IMU is output as ‘leftControllerImu’ and the Left Controller pose input overrides it in SteamVR. |
Right Controller Serial rightControllerSerial | string | "" | Lighthouse serial (LHR-…) of the controller used for the right hand. Its IMU is output as ‘rightControllerImu’ and the Right Controller pose input overrides it in SteamVR. |
Enable Gyro Autocalibration enableGyroAutocalibration | boolean | true | Estimate and subtract the gyro zero-rate bias of every device while it rests. |
Gyro Autocalibration
| Property | Type | Default | Description |
|---|---|---|---|
Steady motion threshold (deg/s) steadyThresholdAverage | number | 0.5 | |
Steady RMS gate steadyThresholdRms | number | 1.0 | |
Noise RMS limit noiseRmsLimit | number | 0.02 | |
Steady-detection samples nSamplesForSteady | number | 256 | |
Calibration samples nSamplesForAutocalibration | number | 1500 |
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": {
"steamvrHmd": {
"dataEndpoint": "inproc://steamvrHmd_data",
"inputEndpoints": [
"inproc://fusedPose_data",
"inproc://leftController_data",
"inproc://rightController_data"
],
"inputDataFilter": [
"FusedPose",
"FusedPose",
"FusedPose"
],
"settings": {}
}
}
}