LPVR-AIR AVP Manual
Table of contents
- 1 Table of contents
- 2 Introduction
- 3 System components
- 3.1 Applications
- 4 Getting started with LPVR-AIR
- 4.1 Preparation
- 4.2 Installation
- 4.2.1 On the AVP
- 4.2.1.1 Step 1: Install TestFlight
- 4.2.1.2 Step 2: Accept the Invitation
- 4.2.1.3 Step 3: Install & Launch
- 4.2.2 On the PC
- 4.2.1 On the AVP
- 4.3 Start-up
- 4.3.1 On PC
- 4.3.2 On AVP
- 4.3.3 Notes:
- 4.3.4 Troubleshooting
- 5 Using the FusionHub GUI
- 6 Optical tracking systems
- 7 Chroma key settings
- 8 External object tracking
- 9 Network setup
- 9.1 Router
- 9.2 Network topography
- 9.3 Network performance
- 9.4 References
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.
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) |
|---|---|---|
ALVR client |
|
|
On the host computer:
Application | Purpose | Name |
|---|---|---|
FusionHub GUI |
(optional; if FusionHub runs well, it is not required) |
|
ALVR streamer |
|
|
FusionHub |
|
|
Starter script |
|
|
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:
ART DTrack: How to Use ART DTrack
Optitrack Motive: Optitrack Motive Setup
Installation
On the AVP
Step 1: Install TestFlight
Open the App Store on the Vision Pro.
Search for "TestFlight".
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
Open the Mail app (or Safari if using webmail) on the Vision Pro.
Find the email from "App Store Connect" with the subject: "LP-Research Inc. has invited you to test LPVR-AIR AVP Client."
Tap the "View in TestFlight" button within the email.
The TestFlight app will open automatically. Tap Accept to join the beta.
Step 3: Install & Launch
In the TestFlight app, locate LPVR-AIR AVP Client.
Tap Install.
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.(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
Download the software package from LP-Research (download link or via webpage and your customer login).
Unzip the file. Its content should look like this and contain the files described above.
No further installation necessary.
Start-up
On PC
Start your optical tracking system (ART DTrack or Optitrack Motive)
Run
Start-LPVR-AIR.batThis 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.FusionHub usually does not need any attention, unless you want to check for error messages.
The GUI (FusionHub Control) is explained below.
In the ALVR Dashboard, please launch SteamVR.
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.The first time you try to connect a new headset, you will have to click “trust“.
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
In TestFlight select LPVR-AIR Client.
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.This will launch the client. It will show “searching for streamer…“.
Once it has established connection with the streamer on the PC, “connecting“ will turn to “enter“.
Click “Enter Mixed Reality“ and you will be in Steam Home.
Notes:
Make sure the copy protection dongle is inserted into your computer
You will likely need to activate the developer mode on your AVP: https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device
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).
Make sure to use a pre-configured HMD optical target provided by ART or Optitrack
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,
make sure the AVP and the PC are on the same WiFi.
terminate the client on the AVP and close the FusionHub, the Gui, SteamVR, and the ALVR Dashboard. Restart everything.
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.
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.
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.
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).
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.
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.)
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.
If you see a difference in the framerate of the client and the server, please adjust the server framerate accordingly in the ALVR settings.
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.
Once connected the FusionHub on the headset select base configuration to see the current configuration of FusionHub:
Adjust parameter blocks as needed. Refer to the description of FusionHub BASE for configuration options:
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 |
|---|---|---|
| Output | Fused pose data |
| 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
nOpticalcounter 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)
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 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.
Switch off airtime Fairness.
A typical ALVR performance graph is shown below. Overall latencies in good environments should be between 70 and 90ms.
In SteamVR check Advanced Frame Timing for performance problems:
In case of a sufficient rendering performance the advanced frame timing window should look like the output below:
References
ALVR open source project: https://github.com/alvr-org/ALVR
FusionHub documentation: FusionHub Manual