LPVR-AIR AVP Manual

LPVR-AIR AVP Manual

Table of contents

Introduction

The purpose of LPVR-AIR is to wirelessly stream image data from a SteamVR application such as Autodesk VRED, Unite, or Unreal to a wireless HMD like the Meta Quest, VIVE Focus, or Apple Vision Pro (AVP). LP-Research's FusionHub software in combination with the open-source application ALVR fulfill this purpose well.

ALVR by default uses the internal inside-out tracking of the headsets for pose calculation. LPVR-AIR exchanges that native inside-out tracking with combined IMU and ART / Optitrack outside-in tracking to allow simultaneous, spatially synchronized operation of several HMDs in large tracking volumes.

To make the tracking functionality of FusionHub available to standalone augmented and virtual reality headsets, it can be integrated with Android-compatible OpenXR HMDs. This works via a customized version of the ALVR open source project. ALVR allows streaming image data wirelessly from a host computer and interfaces to 3D content engines through SteamVR. While the original ALVR client was built to work on Meta Quest HMDs, ALVR works in principle on any OpenXR compatible headset and we also offer an AVP compatible version.

We use a thin client library to receive IMU data from the HMD API, pass it to FusionHub, process it there and then re-inject the information into the video pipeline of the headset. Depending on the type of HMD this happens within the ALVR client’s standard interface or in a separate hardware-specific API layer.

lpvr_air_server_side (1).png

System components

Applications

The following applications need to be started on the head mounted display and the host computer. They should all be included in the installation package that you received from us. We will discuss the order of starting these applications below as well as what their status output should be.

On the headset:

Application

Purpose

Name (can vary by release)

Application

Purpose

Name (can vary by release)

ALVR client

  • Receives image data from ALVR streamer

  • Sends pose information to ALVR streamer

LPVR-Air client
currently provided via TestFlight (see below)

On the host computer:

Application

Purpose

Name

Application

Purpose

Name

FusionHub GUI

  • Connects to FusionHub

  • Configures FusionHub

(optional; if FusionHub runs well, it is not required)

FusionHubUI.exe

 

ALVR streamer

  • Communicates with FusionHub

  • Receives pose information from client

  • Sends pose information to SteamVR

  • Sends image data to ALVR client

  • Receives image information from SteamVR

ALVR Dashboard.exe

FusionHub

  • Calculates sensor fusion between IMU and optical data

FusionHub.exe

Starter script

  • Starts all server-side applications above

Start-LPVR-AIR.bat

LPVR-AIR is copy protected by a USB dongle that needs to inserted when the application is started.

Getting started with LPVR-AIR

Preparation

  • Provide the email address used on the headset to LP-Research to receive a TestFlight invitation for the app.

  • Ensure your Apple Vision Pro is connected to the same local network as the PC running the LPVR-AIR server/FusionHub. For best performance, this should be a dedicated network (see here for detailed discussion).

  • Set up your optical tracking system:

Installation

On the AVP

Step 1: Install TestFlight

  1. Open the App Store on the Vision Pro.

  2. Search for "TestFlight".

  3. Tap Get and confirm the installation (you may need to double-click the top button on the headset to authorize).

Step 2: Accept the Invitation

  1. Open the Mail app (or Safari if using webmail) on the Vision Pro.

  2. Find the email from "App Store Connect" with the subject: "LP-Research Inc. has invited you to test LPVR-AIR AVP Client."

  3. Tap the "View in TestFlight" button within the email.

  4. The TestFlight app will open automatically. Tap Accept to join the beta.

Step 3: Install & Launch

  1. In the TestFlight app, locate LPVR-AIR AVP Client.

  2. Tap Install.

  3. Once the download is complete, tap Open or find the app icon in your Home View (Apps list).
    Note: When you open the app for the first time, it will ask for several permissions. Please be careful what you select because the “allow“ button is sometimes on top and sometimes at the bottom.

    IMG_0194.PNG
  4. (Optional) In some cases the people awareness feature has lead to reduced tracking performance because detecting and including the people in the environment into VR takes too much resources on the headset. Therefore, we recommend switching that feature off.

    • Go to Settings → Awareness & Safety

    • Turn people awareness off

On the PC

  1. Download the software package from LP-Research (download link or via webpage and your customer login).

  2. Unzip the file. Its content should look like this and contain the files described above.

    image-20260306-102051.png
  3. No further installation necessary.

Start-up

On PC

  1. Start your optical tracking system (ART DTrack or Optitrack Motive)

  2. Run Start-LPVR-AIR.bat This launches FusionHub, its GUI, and the ALVR Dashboard.
    Note: The applications communicate via WebSockets. So Windows might ask for permissions. Please give the three apps these permissions.

    image-20260306-104323.png
  3. FusionHub usually does not need any attention, unless you want to check for error messages.

  4. The GUI (FusionHub Control) is explained below.

  5. In the ALVR Dashboard, please launch SteamVR.

    Screenshot 2026-03-13 184359.png

    To avoid launching Steam together with SteamVR every time, you can follow the hint in the box below.
    Note: SteamVR might restart once after detecting the headset.

  6. The first time you try to connect a new headset, you will have to click “trust“.

  7. Run your application.

It is possible to start SteamVR directly from it’s binary directory by setting the STEAMVR_BIN_DIR environment variable. LPVR-AIR detects automatically if this variable is set and will attempt to start SteamVR. A typical path for STEAMVR_BIN_DIR would be C:\Program Files (x86)\Steam\steamapps\common\SteamVR\bin\win64.

On AVP

  1. In TestFlight select LPVR-AIR Client.

  2. Click “Open“.
    Note: During the first launch, you might have to give the app permission for the camera, network, etc. Please be careful what you select because the “allow“ button is sometimes on top and sometimes at the bottom.

  3. This will launch the client. It will show “searching for streamer…“.

    IMG_0208.PNG
  4. Once it has established connection with the streamer on the PC, “connecting“ will turn to “enter“.

    IMG_0209.PNG

    Click “Enter Mixed Reality“ and you will be in Steam Home.

Notes:

  1. Make sure the copy protection dongle is inserted into your computer

  2. You will likely need to activate the developer mode on your AVP: https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device

  3. In the FusionHub configuration script make sure to correctly configure your optical tracking system. The script can be accessed through the FusionHub GUI (see following section).

  4. Make sure to use a pre-configured HMD optical target provided by ART or Optitrack

  5. The client window above will also be visible in your application. If you want to be able to exit and re-connect into your application, please leave it open and move it to a spot, where it does not disturb you. If you close it, your application will continue normally. However, once you leave your application, you will have to launch and connect the client app again.

Once streaming starts, you should see the SteamVR default environment through the headset. Check if the nIMU counter in the FusionHub GUI is increasing (see section below). If both nOptical and nIMU are increasing then the communication between ALVR, optical tracking and FusionHub is working.

Troubleshooting

  • If no connection can be established,

    1. make sure the AVP and the PC are on the same WiFi.

    2. terminate the client on the AVP and close the FusionHub, the Gui, SteamVR, and the ALVR Dashboard. Restart everything.

    3. and the above did not help, please contact LP-Research.

  • If the streamer keeps connecting and disconnecting (see video below), you probably did not give all permissions during the first start. Please uninstall the app and reinstall from TestFlight. When starting the app for the first time, it will ask for the required permissions again.

    20260310-0625-16.7754925.mp4
  • Sometimes, after SteamVR restarted, there will be an error message about parsing the session config. This error can be ignored, since the file will be regenerated.

    image-20260313-095818.png
  • When leaving a SteamVR application and then trying to re-enter it, the client on the AVP can sometimes fail to reconnect. If it does not reconnect within 20sec, please close the client by clicking cross at the bottom left. After that, it can happen that starting the application will result in an empty screen (only see-through). Starting it a second time will result in normal behavior.

    IMG_0210.PNG
  • When the headset is taken off during streaming and then put on after ALVR disconnects, most of the time it takes about 20sec until window “freezes“ and changes color. Touching/moving it makes it connect.

  • If you experience some jitter in your application, please check the statistics page of the ALVR streamer. It should have a flat latency (below 100) and the framerate of the client and server should be roughly the same (typically 100 or 90).

    image (10).png
  • If the latency has spikes or becomes high, your network connection is not good enough or you try to stream to much data over the network.

image (9) - Copy.png
Spikes in the latency
image (12).png
High and irregular latency
  • Check your network setting following the recommendations below or reduce the bit rate in the settings of the ALVR Streamer. (This will reduce the quality of the streamed content.)

image (13).png
  • The AVP has a built in flicker detection that adjusts to the frequency of the power grid and lamps. So it can happen that it automatically switches between 90Hz and 100Hz.

    image (8).png
    image (9).png

    If you see a difference in the framerate of the client and the server, please adjust the server framerate accordingly in the ALVR settings.

    image (6).png

Using the FusionHub GUI

  • Connect the GUI to FusionHub from the start screen of the FusionHub GUI. Note that running the GUI is optional, FusionHub works normally without the GUI running.

image-20241113-090313.png
  • Once connected the FusionHub on the headset select base configuration to see the current configuration of FusionHub:

image-20241104-091040.png
  • Adjust parameter blocks as needed. Refer to the description of FusionHub BASE for configuration options:

image-20241104-091524.png
  • Note the following input and output ports that are hard-coded in the ALVR FusionHub API layer. These are already correctly set in the default configuration file installed with FusionHub, so usually there is no need to change them.

Endpoint

Direction

Purpose

Endpoint

Direction

Purpose

tcp://*:8799

Output

Fused pose data

tcp://localhost:8898

Input

IMU data

  • If it’s not running yet make sure to start and configure your optical tracking system. Once optical data is streamed to FusionHub, the nOptical counter in the GUI should be increasing.

  • Default configuration script with optical input defined for ART DTrack:

{ "LicenseInfo": { "LicenseKey": "", "ResponseKey": "" }, "settings": { "websocketDataOutputRate": 20 }, "sinks": { "VRPN": { "settings": { "inputEndpoints": [ "inproc://optical_data_source_1" ], "settings": { "deviceName": "FusionHub", "port": 3883, "tracker0": "HMD" } } }, "fusion": { "dataEndpoint": "tcp://*:8799", "inputEndpoints": [ "inproc://optical_data_source_1", "tcp://localhost:8898" ], "settings": { "Autocalibration": { "minAgeS": 60, "nSamplesForAutocalibration": 1500, "nSamplesForSteady": 256, "noiseRmsLimit": 0.02, "steadyThresholdAverage": 0.2, "steadyThresholdRms": 1 }, "Intercalibration": {}, "MotionDetection": { "omegaLimit": 3, "positionSampleInterval": 1000, "rotationFilterAlpha": 0.9, "timeToUnknown": 500 }, "SensorFusion": { "alignment": { "w": 0.990892966476337, "x": 0.13458639604387848, "y": 0.0005637732357904688, "z": 0.004160907038605602 }, "orientationWeight": 0.005, "predictionIntervalMs": 10, "sggPointsEachSide": 5, "sggPolynomialOrder": 5, "tiltCorrection": null, "yawWeight": 0.01 }, "runIntercalibration": false }, "type": "ImuOpticalFusion" } }, "sources": { "optical": { "settings": { "bodyIDs": [ 1 ], "endpoints": [ "inproc://optical_data_source_1" ], "port": 5000 }, "type": "DTrack" } } }

Press the buttons ‘Set’ and ‘Save’ after changing the configuration script to make your changes active. It might take 1-2 seconds for FusionHub to reset.

In case you happen to enter an invalid configuration, FusionHub might not restart correctly. If you would like to reset your settings, just re-install the FusionHub APK.

Once the configuration is correct, you’ll most likely not have to touch the script again in the foreseeable future.

Optical tracking systems

The calibration instructions for the optical tracking systems can be found here.

Config for Advanced Realtime Tracking (ART) DTrack

FusionHub works with all ART tracking systems, based on their DTrack tracking software.

"optical": { "settings": { "port": 5000, "bodyIDs": [ 1 ], "endpoints": [ "inproc://optical_data_source_0" ], "objectNameMapping": { "1": "hMD" } }, "type": "DTrack" }

Adjust the body ID of the HMD as configured in DTrack.

Config for Optitrack

FusionHub works with all Optitrack tracking systems based on their Motive tracking software.

"optical": { "type": "Optitrack", "settings": { "connectionType": "Multicast", "localAddress": "192.168.0.99", "remoteAddress": "192.168.0.100", "bodyIDs": [ 1 ], "endpoints": [ "inproc://optical_data_source_0" ], "objectNameMapping": { "1": "QuestPro" } } }

Adjust the body ID of the HMD as configured in Motive.

Chroma key settings

The Chroma Key feature can be used to blend virtual content with the real world or to make specific colors in an environment transparent. Essentially, it is the same "green screen" technology used in movies, but applied to the headset's spatial environment.

In order to activate this, go to the video settings in the ALVR streamer and select the following:

  • Activate “Passthrough”

  • Select “RGB Chroma Key“

  • Select the color you want to be transparent (in the picture below, green is selected)

    Screenshot 2026-03-13 195559.png

External object tracking

In addition to delivering high-quality mixed reality and precise wireless headset tracking, LPVR-AIR seamlessly integrates controllers tracked by the HMD’s inside-out system with objects tracked via optical targets in the outside-in tracking frame, all within a unified global frame. The video above shows this unique capability in action.

When combined with our LPVR-CAD software, LPVR-AIR enables the tracking of any number of rigid bodies within the outside-in tracking volume. This provides an intuitive solution for tracking objects such as vehicle doors, steering wheels, or other cockpit components. Outside-in optical markers are lightweight, cost-effective, and require no power supply. With camera-based outside-in tracking, all objects within the tracking volume remain continuously tracked, regardless of whether the user is looking at them. They can be positioned with millimeter accuracy and function reliably under any lighting conditions, from bright daylight to dark studio environments.

See documentation about how to set up LPVR-CAD here: LPVR-CAD for SteamVR System Setup

When setting up LPVR-CAD in connection with LPVR-AIR, adjusting the headset related settings in LPVR-CAD isn’t needed. Uncheck the HMD active checkbox in the LPVR-CAD settings.

The integration with LPVR-CAD is still work in progress, handle with care. We will release an updated version of LPVR-CAD for this purpose soon.

Network setup

Router

LPVR-AIR transmits images from the server to the HMD through a regular WIFI connection. The AVP only supports WIFI5. In environments without much WIFI interference, i.e. other devices using the same WIFI bands, this works very well. Crowded WIFI environments limit the bandwidth of the used WIFI transmission. This can lead to unpredictable loss of image and tracking quality. Examples of crowded spaces are public locations such as exhibition. Beware!
In some environments changing the internal channel setup of the router might increase performance. Some experimentation might be needed to find the perfect setting for your system. Recommended settings can be found below.

Network topography

We recommend to set up a simple network structure, to minimize potential error sources in the installation process as shown in the image below.

network_topography.png

Network performance

Here are some recommendations that can improve the network performance. We will show them for a TP-Link router, but other routers should have similar settings. Some experimentation to optimize settings for your case might be necessary.

  • Switch off Smart Connect to avoid band switching.

    Screenshot 2026-03-23 174156.png
  • Switch off airtime Fairness.

    Screenshot 2026-03-23 174306.png
  • A typical ALVR performance graph is shown below. Overall latencies in good environments should be between 70 and 90ms.

image-20250223-045716.png
  • In SteamVR check Advanced Frame Timing for performance problems:

image-20241104-093913.png
  • In case of a sufficient rendering performance the advanced frame timing window should look like the output below:

image-20241104-094147.png

References