OpenTracker

An Open Architecture for Reconfigurable Tracking based on XML | Contact

Module Reference

ButtonHoldFilterModule

Module for filters that filters out drops in a ButtonSource between updates. Therefore need a module to drive the updates. Currently, only the ButtonHoldFilterNode is in this module. It doesn't have a configuration element, but reserves the name 'ButtonHoldFilterConfig' for it.

CallbackModule

The Callback module provides Callback Node nodes that call registered callbacks functions for any event they receive. Each node can call only one function. The nodes are addressed by unique names, set in the element of that node. After reading the initialization file an application can register callback functions on the read nodes. It doesn't have a configuration element but reserves the name 'CallbackConfig' for it.

ConsoleModule

The ConsoleModule is a basic console based input / output module. It generates input events via ConsoleSource nodes based on keyboard strokes and displays event data collected by ConsoleSink nodes. It displays the data every interval'th cycle. On a windows system it just writes to the console. On a unix system it uses curses to format the display. It cannot yet read all keys, as I'm still fighting with the Windows / courses API :). The configuration element is called ConsoleConfig and has the following attributes : Moreover, the keys for simulating tracking events can be configured freely. The module supports 10 stations, numbered from 0 to 9. The input allows to move the stations position in all 3 directions and to rotate around all 3 axes. The velocities are displayed on top of the screen and can be changed. The button bits 0 to 3 can be set, the keys strokes toggle the event of the buttons, so you don't have to keep them pressed all the time. Finally a station can be reset to identity. To command several stations, the active station has to be switched.

Also, events of all ConsoleSources can be changed using certain commands. Attributes can be added, their value can be increased or decreased, changed by typing in a new value, or attributes can be deleted again.

The KeyDefinition configuration element is used to set the keys assigned to each function. It has the following attributes :

There are three ways to specifiy a key : The following table lists the supported key names :
 Name            Key

 down            cursor down
 up              cursor up
 left            cursor left
 right           cursor right
 home            Pos1 ( aka Home )
 end             End
 page_down       page down
 page_up         page up
 backspace       backspace ( <- )
 F0              F0 ( if present )
 F1 .. F12       F1 througth F12
 insert          Insert
 enter           Enter or Return
 escape          Escape
 
Note that the curses definition where taken from an SGI keyboard and the keycodes returned by the curses library. Only the keypad ( numpad ) keys work correctly, the ones in the middle are send to the shell ?!

The following table lists all possible functions and their default keys :

 Function        		Default Key     Description
 Move_X_plus     		up              moves in direction X +
 Move_X_minus    		down            moves in X -
 Move_Y_plus     		left            moves in Y +
 Move_Y_minus    		right           moves in Y -
 Move_Z_plus     		page_up         moves in Z +
 Move_Z_minus   		page_down       moves in Z -
 Rot_X_plus     		e               rotates positive around X
 Rot_X_minus    		d               rotates negative around X
 Rot_Y_plus     		r               rotates positive around Y
 Rot_Y_minus     		f               rotates negative around Y
 Rot_Z_plus      		t               rotates positive around Z
 Rot_Z_minus     		g               rotates negative around Z
 Accelerate      		y               increases position velocity
 Brake           		x               reduces position velocity
 Accelerate_Angular_Velocity	o		increases angular velocity
 Decelerate_Angular_Velocity	p		reduces angular velocity
 Button_1        		' '             sets button bit 0
 Button_2        		,               sets button bit 1
 Button_3        		.               sets button bit 2
 Button_4        		-               sets button bit 3
 Station_0       		0               activates Station 0
 Station_1       		1               activates Station 1
 Station_2       		2               activates Station 2
 Station_3       		3               activates Station 3
 Station_4       		4               activates Station 4
 Station_5       		5               activates Station 5
 Station_6       		6               activates Station 6
 Station_7       		7               activates Station 7
 Station_8       		8               activates Station 8
 Station_9       		9               activates Station 9
 Reset           		w               resets current station
 Quit            		q               signals to quit OpenTracker
 Next_Attribute  		n               switches to next attribute to be subject to change
 Add_Attribute   		a               allows user to add a new attribute
 Del_Attribute   		l               allows user to delete an attribute
 Change_Attribute_Pos 		*		increases value of current attribute
 Change_Attribute_Neg	  	/		decreases value of current attribute
 Change_Attribute_Val  	 	v		allows user to type in new value for current attribute
 

An example configuration element looks like this :

 <ConsoleConfig interval="10" headerline="Tracker Test 1">
 <KeyDefinition function="Move_X_plus" key="o"/>
 </ConsoleConfig>

FileModule

The FileModule allows to read or write events from or to files. Every file can contain several input or output streams identified by station numbers. However, a single file can only serve as input or output at any given time. The configuration element FileConfig has the following attributes: An example configuration element looks like this :
 <FileConfig append="true" loop="true" realtime="true"/>

GroupGateModule

This module provides and drives GroupGate nodes that generate standard events. The configuration element is called GroupGateConfig and has no attributes yet.

An example configuration element looks like this :

 <GroupGateConfig/>

InterpolatorModule

Module for filters that interpolate tracking data between updates and therefore need a module to drive the updates. Currently, only the ElasticFilterNode is in this module. It doesn't have a configuration element but reserves the name 'InterpolatorConfig' for it.

LogModule

The LogModule controls the output of log information that OpenTracker creates. Possible targets are stderr and a given file. Logging information can be of different verbosity levels including timestamp and host information and can be of different severity levels to only output important messages. The configuration element is called LogConfig and has the following attributes : An example configuration element looks like this :
 <LogConfig active="on" stderr="on" file="on" filename="log.txt" level="info" verbose="std"/>

TimeModule

The TimeModule controls the timing of the OpenTracker main loop. It does not provide any functionality related to nodes and events. There are two operating modes. In Sleep mode the TimeModule sleeps after each turn of the main loop a specified amount of time. In Framerate mode it tries to achieve a certain framerate of loops per second. Both modes are limited by the underlying implementation of OSUtils. That means that sleeps shorter then 1/100 of a second are not possible, which obvious implications for the Sleep mode. The Framerate mode works by inserting short sleeps after a number of loops to achieve the desired overall framerate !

The configuration element is called TimeConfig and has the following attributes :

An example configuration element looks like this :
 <TimeConfig rate="187"/>

TestModule

The TestModule provides and drives TestSource nodes that generate standard events in certain intervals. It doesn't have a configuration element but reserves the name 'TestConfig' for it. It does something useful as soon as at least one TestSource node is created.

ARTDataTrackerModule

The ARTDataTrackerModule is a device driver module for the optical tracking system by ART Data. It uses ARTDataTrackerSource nodes to input data into the tracking tree. It does something useful as soon as at least one ARTDataTrackerSource node is created. It is configured using the configuration element 'ARTDataTrackerConfig'. This element has the following attributes : An example configuration element looks like this :
 <ARTDataTrackerConfig maxbodies="10" port="12346"/>

Some hints to configuring the ART Tracker host to work with this driver :

ARToolKitModule

The ARToolKitModule interfaces to the ARToolKit library to track the position and orientation of visual markers with a video camera. It uses the information provided by ARToolKitSource nodes and inserts the event events through ARToolKitSource nodes into the tree. The configuration element is ARToolKitConfig and has the following attributes : See ARToolkitModule Video Configuration for possible video configuration parameter strings

An example configuration element looks like this :

<ARToolKitConfig camera-parameter="../data/camera" treshhold="150" framerate="5" videomode="0,5,3" pattern-dir="mypatterns/"/>

ARToolKitPlusModule

The ARToolKitModule interfaces to the ARToolKit library to track the position and orientation of visual markers with a video camera. It uses the information provided by artoolkitplussource nodes and inserts the state events through artoolkitplussource nodes into the tree. The configuration element is ARToolKitConfig and has the following attributes : An example configuration element looks like this :
 <ARToolKitPlusConfig camera-parameter="quickcampro400.dat" marker-mode="idbased" border-width="0.125" treshold="auto" pose-estimator="cont" /> 

CyberMouseModule

The CyberMouseModule provides and drives CyberMouseSource nodes that generate standard events in certain intervals. It does not use a configuration element, but reserves the name 'CyberMouseConfig'.

DynaSightModule

The DynaSightModule listens for data from the Origin Instruments DynaSight Sensor sent via serial port to the host and pushes the event updates into the tracker tree via DynaSightSource nodes.

The DynaSight input module was tested with only one target.

It's configuration element has the following attributes:

An example configuration element looks like this:
 <DynaSightConfig device="com1" lookat="0.0 0.8 -1.2"/>
 

FastTrakModule (supports Polhemus FastTrak and IsoTrak II)

This module provides and drives FastTrakSource nodes that generate standard events.

The configuration element is called FastTrakConfig and has the following attributes :

An example configuration element looks like this :
 <FastTrakConfig type="isotrak" device="COM1" stations="2" hemisphere="-1,0,0"/>
 

Note that to date this driver was only tested with IsoTrak II and WIN32.

FOBModule (Flock of Birds)

The FOBModule is a device driver for the Ascension Flock of Birds tracker. It supports single as well as multi port configurations and the extended range transmitter. It provides the FOBSource source nodes in the data flow graph. It uses a configuration element called FOBConfig which in turn contains one element called Bird for each bird in the setup. Only configured birds will be used. The FOBConfig element has the following attributes :

The Bird element is used to set the birds used in the setup. If the single mode is used, only the master bird needs a device configured. Otherwise all birds need their serial devices set. The Bird element has the following attributes :

An example configuration element looks like this :
 <FOBConfig mode="multi" master="1" scale="72">
 <Bird number="1" dev="COM1"/>
 <Bird number="2" dev="COM2"/>
 </FOBConfig>

GPSModule

This module provides and drives GPSSource, GPSDirectionSource, GPSInfoSource, GPSGarminCompass and GPSGarminAltitude nodes that generate various GPS data events. The configuration element is called GPSConfig. It reads GPS position data from a GPS receiver connected on the serial port and transmiting its data in NMEA format as Latitude, Longitude and Height in the x, y and z components of the position. The angles are given in radiants and the height in meter. The data is in WGS84 coordinate system. The hdop parameter is given as 1 / hdop in the confidence value.

It allows to connect an optional DGPSIP server for DGPS correction data. Be sure to set your GPS receiver to NMEA output mode and RTCM input mode for this work. It also allows you to log the NMEA strings received from the gps receiver into a dedicated log file for further processing.

It has the following attributes :

An example configuration element looks like this :
 <GPSConfig dev="COM1" baudrate="9600" DGPSserver="something" DGPSport="2101" debug="off"/>

InterSenseModule

The InterTraxModule provides and drives InterSenseSource nodes that generate standard events in certain intervals. It uses a configuration element called InterSenseConfig, which in turn contains one element called ISTracker per configured tracker. Only trackers that are configured will be used. The ISTracker element has the following attributes : An example configuration element looks like this :
 <InterSenseConfig>
 <ISTracker comport="0" id="InterTrax"/>
 </InterSenseConfig>

Note:
If an InterTrax2 device is used the orientation data will be transformed into a standard OpenGL coordinate system where +Y points upwards, +X to the right and the default view is down -Z. Therefore yaw is a rotation around +Y, pitch a rotation around +X and roll a rotation around +Z.

JoystickModule

The JoystickModule provides and drives JoystickSource nodes that generate events. The member position of the event gives the current normalized position of the joystick. The x,y and z components of position reflect the current position of the joystick's x,y and z-axes (ranging from -1 to +1, e.g. -1,-1,z means that the joystick is in the upper left corner). The member orientation is not used. The member button is used as usual (note that right now only the first four buttons of a joystick are used).

It doesn't have a configuration element but reserves the name 'JoystickConfig' for it. It does something useful as soon as at least one JoystickSource node is created.

LinmouseModule

The LinmouseModule provides the Linmousesource nodes that generate button press events for mouse type devices device. This

MagicYModule

The MagicYModule listens for data from the MagicY sent via TCP/IP to a specified port of the host and pushes the event updates into the tracker tree via MagicYSource nodes. It's configuration element has the following attributes : An example configuration element looks like this:
 <MagicYConfig	IP="123.45.67.89"
 port="12345"
 positionMapping="1 0"	
 invertPosition="0 1"
 />

MulticastInputModule

The MulticastInputModule is a device driver module for the optical tracking system by ART Data. It uses ARTDataTrackerSource nodes to input data into the tracking tree. It does something useful as soon as at least one ARTDataTrackerSource node is created. It is configured using the configuration element 'ARTDataTrackerConfig'. This element has the following attributes : An example configuration element looks like this :
 <ARTDataTrackerConfig maxbodies="10" port="12346"/>

Some hints to configuring the ART Tracker host to work with this driver :

P5GloveModule

The P5GloveModule provides and drives P5GloveSource nodes. It implements a driver for the P5 Glove by Essential Reality http://www.essentialreality.com/. To use this driver you will have to download the SDK from the above website and compile OpenTracker with the appropriate define as described in Configuration Options. The implementation was only tested under Windows because there was no Linux driver available at the time of development.

The module uses the configuration element 'P5GloveConfig'. This element has the following attributes :

An example configuration element looks like this :
 <P5GloveConfig P5Id="0"/>

ParButtonModule (Parallel Button Input)

This module implements reading button values from a parallel port. See the ParButtonSource node for a description of how to configure a source node. This module has no attributes and need not be present in the configuration section to operate. However, it reserves the name ParButtonConfig as configuration element.

Some hints to get it working:

SpaceMouseModule

The SpaceMouseModule provides and drives SpaceMouseSource nodes that generate standard events in certain intervals. It does not use a configuration element, but reserves the name 'SpaceMouseConfig'.

SpeechModule

The SpeechModule provides and drives SpeechRecoSource nodes that generate sr events. The appropriate speech sources are called when a command is successfully recognised. The sr event is coded in the event translation field, and the idīs could be resolved via the GetCommand method. There is a TTS facility integrated into this module, so you could quickly speak something via TTS and the system standard voice. if you want to use TTS with several options use the SpeechVoiceModule class.

It uses several configuration elements, the root is SpeechRecoConfig. There you can define several CommandSet, with several Command. The SpeechRecoConfig element has the following attributes:

The CommandSet element has the following attributes:

The Command element has the following attributes:

An example configuration element looks like this:
 <SpeechRecoConfig language="english">
 <CommandSet id="CmdSet1">
 <Command id="1234" name="one"/>
 <Command id="1235" name="two"/>
 <Command id="1236" name="six"/>
 <Command id="1237" name="seven"/>
 </CommandSet>
 </SpeechRecoConfig>

LinmouseModule

The TargusModule provides the Targussource nodes that generate button press events for the wireless device. This class relies on the code provided by xbindkeys (http://hocwp.free.fr/xbindkeys/xbindkeys.html)

UbisenseModule

The UbisenseModule interfaces to the Ubisense API to track the position and button event of Ubisense tags. It uses the information provided by UbisenseSource nodes and inserts the eventevents through UbisenseSource nodes into the tree. The configuration element is UbisenseConfig. Without the UbisenseConfig configuration element data from any cell is tracked. But as soon as a UbisenseConfig configuration element is present, data retrieval is restricted: A single UbisenseCell configuration element identifies a Ubisense location cell to retrieve data from. Use more than one UbisenseCell configuration element to retrieve data from any number of cells. The UbisenseCell configuration element has the following attribute: An example configuration element looks like this :
 <UbisenseConfig>
 <UbisenseCell name="Location Cell 00001" />
 </UbisenseConfig>

UltraTrakModule

The UltraTrakModule listens for data from the UltraTrak sent via UDP to a specified port of the host and pushes the event updates into the tracker tree via UltraTrakSource nodes. It's configuration element has the following attributes : An example configuration element looks like this:
 <UltraTrakConfig port="12345"
 positionMapping="1 0 2"	
 orientationMapping="2 0 1"
 invertPosition="0 1 1"
 invertOrientation="0 0 0"
 />

WacomGraphireModule

The WacomGraphireModule provides and drives WacomGraphireSource nodes that generate standard events in certain intervals. It does not use a configuration element but reserves the name 'WacomGraphireConfig'.

XSensModule

This module implements the device driver for XSens MT9-B inertial trackers. The corresponding source node is XSensSource. Currently only a single MT9-B attached a comport is supported. It has no configuration element but reserves the name XSensConfig for it.

Note:
The implementation for Linux is missing. To run it on Windows, one needs to install the MT9 SDK Software from Xsens. It will not work without it.

TestModule

The TestModule provides and drives TestSource nodes that generate standard events in certain intervals. It doesn't have a configuration element but reserves the name 'TestConfig' for it. It does something useful as soon as at least one TestSource node is created.

DwarfModule

The DwarfModule

NetworkSinkModule

The NetworkSinkModule graps events from the tracker tree and sends them to other hosts either via multicast groups or by unicast datagrams. The receiving groups addresses are set in the NetworkSink nodes. It's configuration element has the following attributes : An example configuration element looks like this :
 <NetworkSinkConfig name="TrackSpatz Server"/>

NetworksourceModule

The NetworkSourceModule listens for data from the Network sent to multicast groups or by unicast datagrams and pushes the event updates into the tracker tree via NetworkSource nodes. It has no attributes and need not be present in the configuration section to operate. In unicast mode and in absence of received data polling datagrams are regularily sent to indicate interest in tracking data and a single leave datagram on termination.

TCPModule

The TCPModule is a simple network transmit module that implements a TCP/IP server for data streams of several TCPSink nodes. It is configured with a port to listen to for new connections. All clients will get the same stream of data that consists of a station number for the next station and position and orientation information. Clients can connect and disconnect at will. The configuration element is TCPConfig and has the following attributes : An example configuration element looks like this :
 <TCPConfig port="12345"/>

This module was implemented specifically for the virtual show case viewer of Oliver Bimber <obimber@crcg.edu>.

VRPNModule

The VRPN module provides the VRPNSource and VRPNSink nodes. It provides a bi-directional link between VRPN (http://www.vrpn.org/) and OpenTracker because it can act as both a server and a client. This also enables the use of OpenTracker as a configurable transformation server within a VRPN network.

Note:
Under Windows, the default server port is already occupied. Therefore use the configuration element to set the port number differently, for example to 3883 the official IANA number for VRPN!
The configuration element is VRPNConfig and has the following attributes : An example configuration element looks like this :
<VRPNConfig port="3883" interface="localhost"/>

QtMouseEventCalibModule

Employed in the configuration of QtMouseEventModule. This module acts as compatibility module during the Qt target application desktop screen calibration (see Configuration of the OTQt manual). The module does not provide any relevant functionality. Its config file XML element is eventually replaced with a QtMouseEventConfig element by the calibration tool. All its XML attributes are passed to the substitute.

Has the following XML attributes:

An example element looks like this:

<QtMouseEventCalibConfig TrackingSystemScaleOneMeter="1.0" />

QtMouseEventModule

Simulates the behaviour of a desktop mouse by generating Qt mouse events from incoming tracking data. Posts these events to some target Qt application. Associated sink nodes (see Input Devices and Sinks in the OTQt manual) provide the tracking data. The nested QtAppScreen node stores the spatial location and extent of the target desktop screen.

Besides manual editing, the XML elements QtMouseEventConfig, QtAppScreen and its attribute values can be generated automatically by applying the OTQt configuration tool (see Configuration in the OTQt manual).

Has the following XML attributes:

The nested QtAppScreen element is mandatory.

An example element looks like this:

<QtMouseEventConfig TrackingSystemScaleOneMeter="1.0" ScreenDepthInMeter="0.01" >
  <QtAppScreen
    ASHeightVec="0.0000 -0.9999 0.0000"
    ASWidthVec="0.9999 0.0000 0.0000"
    CSOrientationQuat="0.0000 0.0000 -0.7071 0.7071"
    CSRoot2ScreenRootVec="-0.9999 -0.9999 0.0000"
  />
</QtMouseEventConfig>

copyright (c) 2006 Graz University of Technology