Vizard 8 » Reference » Input Devices » Other devices » Vive Pro
8.0

Vive Pro

This plug-in provides support for Vive Pro HMD eye tracking devices.

 

A full sample script can be found at \examples\devices\viveProEyeExample.py

Note: The Vive Pro plug-in is not supported on 32-bit versions of Vizard

Initialization

The Vive Pro plug-in is implemented as a Vizard extension. In order to use the plug-in you must first install the Vive Pro SRanipal runtime. To calibrate the eye tracker you must start the calibration procedure from within the SteamVR Dashboard.

 

The Vive Pro extension object has the following methods/constants:

Method

Description

<VivePro>.addEyeTracker()

Returns a Vive Pro eye tracker object if detected.

The Vive Pro Eye Tracker provides both position and orientation data that represent the gaze origin/direction relative to the HMD coordinate frame. By default, the combined gaze values from both eyes is returned. To get the gaze values for each eye, pass the viz.LEFT_EYE or viz.RIGHT_EYE flag to the corresponding sensor function. The eye tracker object has the following methods in addition to the standard extension sensor methods:

Method

Description

<tracker>.getEyeOpen(eye=viz.BOTH_EYE)

Get the eye open amount of the specified eye. The amount is a 0-1 value, 0 indicating eye is closed and 1 indicating eye is open. Specifying viz.BOTH_EYE will average the value from each eye.

<tracker>.getPupilDiameter(eye=viz.BOTH_EYE) Get the pupil diameter (in mm) of the specified eye. Specifying viz.BOTH_EYE will average the value from each eye.

Example

The following example shows how to connect to a Vive Pro eye tracker:

# Create extension
VivePro = viz.add('VivePro.dle')

# Connect to eye tracker
eyeTracker = VivePro.addEyeTracker()

The next example shows how to get the gaze vector and perform an intersection test to determine where the user is looking:

# Get gaze matrix in local HMD coordinate system
gazeMat = eyeTracker.getMatrix()

# Transform gaze matrix into world coordinate system using main view
gazeMat.postMult(viz.MainView.getMatrix())

# Intersect world gaze vector with scene
line = gazeMat.getLineForward(1000)
info = viz.intersect(line.begin, line.end)
if info.valid:
    print('User is looking at', info.point)