Vizard 7 » Reference » Input Devices » Position and Orientation Trackers » Qualisys
7.6

Qualisys plug-in

This plug-in provides support for the Qualisys motion capture system. The Qualisys plug-in supports 3DOF, 6DOF, and analog data.

Initialization

The Qualisys plug-in is implemented as a Vizard extension. When creating the Qualisys extension, you must specify the IP address or hostname of the Qualisys server as the 'mesg' argument. You can also specify the port number by adding a ':' followed by the port number to the address string. The default port is 22223. The Qualisys plug-in will timeout after 3 seconds when attempting to connect to the server. You can specify a different timeout value by setting the qualisys.connect_timeout option to the number of milliseconds you want the new timeout to be.

 

The Qualisys Track Manager (QTM) application allows specifying various coordinate systems. Under the Calibration section of the Workspace options there is a section where the coordinate system orientation can be specified. The Qualisys plug-in can detect and automatically convert from the QTM coordinate system to the Vizard coordinate system. This automatic conversion is supported only with the following calibration settings:

Axis pointing upwards

Long arm axis

Positive Z-axis

Positive X-axis

Negative Z-axis

Positive X-axis

Positive Y-axis

Positive Z-axis

Negative Y-axis

Positive Z-axis

Positive X-axis

Positive Y-axis

Negative X-axis

Positive Y-axis

 

If you are not using one of the above calibration settings, then you can use the <qualisys>.swapPos method below to manually specify the conversion from QTM to Vizard.

Note: The Qualisys plug-in relies on features supported by version 1.4 and later of the QTM Real-Time server protocol. Make sure your version of QTM supports this protocol version.

The Qualisys extension object has the following methods:

Method

Description

<qualisys>.getBodyList()

Returns a list of all the 6DOF bodies on the server.

<qualisys>.getBody(val)

Returns the body with the given name or index. The name is case sensitive.

<qualisys>.getMarkerList()

Returns a list of all the 3DOF markers on the server.

<qualisys>.getMarker(val)

Returns the marker with the given name or index. The name is case sensitive.

<qualisys>.getAnalogList()

Returns a list of all the analog sensors on the server.

<qualisys>.getAnalog(val)

Returns the analog sensor with the given name or index. The name is case sensitive.

<qualisys>.getServerSettings()

Returns the XML settings string sent by the server during connection.

<qualisys>.swapPos(swap)

Specifies the conversion from Qualisys to Vizard coordinate system. Vizard should automatically detect the proper conversion if you are using compatible settings in QTM (see table above). The indices are 1-based, so 1 refers to the X coordinate, 2 is Y, and 3 is Z. Negative indices will negate the incoming data.

The Qualisys body objects have the following methods in addition to the standard extension sensor methods:

Method

Description

<body>.getColor()

Returns the [r,g,b] color value assigned to the body by the server.

The Qualisys marker objects have the following methods in addition to the standard extension sensor methods:

Method

Description

<marker>.getColor()

Returns the [r,g,b] color value assigned to the marker by the server.

The Qualisys analog sensor contains the following methods in addition to the standard extension sensor methods:

Method

Description

<analog>.getChannelNames()

Returns a list of all the analog channel names.

<analog>.getUnits()

Returns the units of the analog channel values as a string.

Example

The following example shows how to connect to an Qualisys real-time server and get a handle to the first body and marker. It will also print out the name of the body and marker objects:

qualisys = viz.add('qualisys.dle',0,'192.168.0.114')
body = qualisys.getBody(0)
marker = qualisys.getMarker(0)

print(body.getName())
print(marker.getName())

The following example shows how to iterate through all the marker objects and link each one to a node:

for m in qualisys.getMarkerList():
    ball = viz.add('white_ball.wrl',color=viz.RED,cache=viz.CACHE_CLONE)
    viz.link(m,ball)

The following example shows how to get a handle to the first analog sensor and print all its data:

analog = qualisys.getAnalog(0)
print(analog.getData())

You can also connect to multiple Qualisys servers simultaneously. The next example connects to two different servers and prints the body names of each server:

qtm1 = viz.add('qualisys.dle',0,'dev10')

for b in qtm1.getBodyList():
    print(b.getName())

qtm2 = viz.add('qualisys.dle',0,'dev20')

for b in qtm2.getBodyList():
    print(b.getName())