Vizard 8 » Reference » Input Devices » Other devices » SMI Vive
8.1

SMI Vive

This plug-in provides support for the eye tracking upgrade for the HTC Vive by SensoMotoric Instruments (SMI).

 

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

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

Initialization

The SMI Vive plug-in is implemented as a Vizard extension. In order to use the plug-in you must first install the Vive eye tracker drivers and software provided by SMI.

 

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

Method

Description

<smi>.addEyeTracker()

Connects to the Vive eye tracker and returns a sensor object.

<smi>.CALIBRATE_RESET

<smi>.CALIBRATE_1_POINT

<smi>.CALIBRATE_3_POINT

<smi>.CALIBRATE_5_POINT

<smi>.CALIBRATE_TRIANGULAR

<smi>.CALIBRATE_RECTANGULAR

Modes for performing user eye calibration.

The SMI Vive Eye Tracker sensor object has the following methods in addition to the standard extension sensor methods:

Method

Description

<vive>.calibrate(mode=CALIBRATE_RECTANGULAR)

Start calibration procedure. Can use one of the calibration modes in table above.

<vive>.showValidation()

Show validation visualization.

<vive>.showNumericValidation()

Show numeric validation visualization.

<vive>.showPositionalGuidance() Show positional guidance visualization.
<vive>.stopVisualization() Stop any active calibration/visualization.
<vive>.loadCalibration(name='') Load a previously saved calibration.
<vive>.saveCalibration(name='') Save the current calibration under the specified name.
<vive>.getCalibrationList() Get list of saved calibration names.
<vive>.setWindow(window) Set window to use for eye tracker visualizations (should be same as Vive render window).
<vive>.getTimestamp() Get timestamp of last gaze sample.

<vive>.getGazeDirection()

Get binocular gaze direction. The gaze direction is also accessible using the sensor rotation matrix, <vive>.getMatrix().
<vive>.getLeftGazeDirection() Get left eye gaze direction.
<vive>.getRightGazeDirection() Get right eye gaze direction.
<vive>.getPor() Get binocular POR (point of regard).
<vive>.getLeftPor() Get left eye POR (point of regard).
<vive>.getRightPor() Get right eye POR (point of regard).
<vive>.getLeftGazeBasePoint() Get left eye gaze base point.
<vive>.getRightGazeBasePoint() Get right eye gaze base point.
<vive>.getIPD() Get dynamically computed IPD.

Example

The following example shows how to connect to the SMI Vive eye tracker:

# Create SMI Vive extension
smi = viz.add('smi_vive.dle')

# Connect to Vive Eye Tracker
eyeTracker = smi.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)