JUSTUS-LIEBIG-UNIVERSITÄT GIESSEN

JLU Emblem

General and Experimental Psychology

People

Publications

Research

Teaching

Colloquium

Guestbook

Jobs

News

Research group
Perception and Action

Graduate school
NeuroAct

Emmy-Noether-Group
Sensory-Motor Decision-Making


I moved to Tübingen. Please click here to see my new web-page there

The Optotrak Toolbox: Sample programs.

Volker H. Franz, University of Giessen, Germany

Each example shows first the Matlab-code and second the code you would need to perform the same actions using the C-programming language. Please select the sample you want to view:

View Matlab-file and C-file on this page Matlab-file C-file
sample1 sample1.m sample1.c
sample2 sample2.m sample2.c
sample5 sample5.m sample5.c
sample7 sample7.m sample7.c
sample8 sample8.m sample8.c
sample9 sample9.m sample9.c
sample10 sample10.m sample10.c
sample20 sample20.m sample20.c

Matlab-code for sample7:

 
%Name:             SAMPLE7.M

%Description:

%    OPTOTRAK Sample Program #7.
%    1.  Load the system of transputers with the appropriate
%        transputer programs.
%    2.  Initiate communications with the transputer system.
%    3.  Load the appropriate camera parameters.
%    4.  Set up an OPTOTRAK collection.
%    5.  Activate the IRED markers.
%    6.  Initialize a file for spooling OPTOTRAK 3D data.
%    7.  Start the OPTOTRAK spooling when Marker 1 is seen.
%    8.  Spool 3D data to file while at the same time requesting and
%        examining 3D data.
%    9.  Stop the spool once Marker 1 goes out of view or after 100
%        seconds of data has been spooled.
%    10. De-activate the markers.
%    11. Disconnect the PC application program from the transputer
%        system.

%Just to be on the save side, we first reset all Matlab functions:
clear functions

%Settings:
coll.NumMarkers      =6;          %Number of markers in the collection.         
coll.FrameFrequency  =50 ;        %Frequency to collect data frames at.          
coll.MarkerFrequency =2500;       %Marker frequency for marker maximum on-time. 
coll.Threshold       =30;         %Dynamic or Static Threshold value to use.    
coll.MinimumGain     =160;        %Minimum gain code amplification to use.      
coll.StreamData      =1;          %Stream mode for the data buffers.            
coll.DutyCycle       =0.4;        %Marker Duty Cycle to use.                    
coll.Voltage         =7.5;        %Voltage to use when turning on markers.      
coll.CollectionTime  =100;        %Number of seconds of data to collect.        
coll.PreTriggerTime  =0;          %Number of seconds to pre-trigger data by.    

%Load the system of transputers.
optotrak('TransputerLoadSystem','system');

%Wait one second to let the system finish loading.
pause(1);

%Initialize the transputer system.
optotrak('TransputerInitializeSystem',{'OPTO_LOG_ERRORS_FLAG'})

%Load the standard camera parameters.
optotrak('OptotrakLoadCameraParameters','standard');

%Set up a collection for the OPTOTRAK.
optotrak('OptotrakSetupCollection',coll)

%Wait one second to let the camera adjust.
pause(1);

%Activate the markers.
optotrak('OptotrakActivateMarkers')

%Initialize a file for spooling of the OPTOTRAK data.
optotrak('DataBufferInitializeFile',{'OPTOTRAK'},'C#001.S07');

%Loop until marker 1 comes into view.
fprintf('Waiting for marker 1...\n');
while 1
  %Get a frame of 3D data:
  data=optotrak('DataGetLatest3D',coll.NumMarkers);
  %Break infinite while loop, if marker 1 is visible:
  if ~isnan(data.Markers{1})
    break
  end
end

%Start the OPTOTRAK spooling data to us.
optotrak('DataBufferStart')
fprintf('Collecting data file...\n');

%Loop around spooling data to file until marker 1 goes out of view.
SpoolComplete=0;
while ~SpoolComplete
  %Get a frame of 3D data:
  data=optotrak('DataGetLatest3D',coll.NumMarkers);

  %Check to see if marker 1 is out of view and stop the OPTOTRAK from
  %spooling data if this is the case:
  if isnan(data.Markers{1})
    optotrak('DataBufferStop');
  end

  %Write data if there is any to write.
  [RealtimeDataReady,SpoolComplete,SpoolStatus,FramesBuffered]=optotrak('DataBufferWriteData');
end
fprintf('Spool Status: 0x%04x\n',SpoolStatus);

%De-activate the markers.
optotrak('OptotrakDeActivateMarkers')

%Shutdown the transputer message passing system.
optotrak('TransputerShutdownSystem')

%Exit the program.
fprintf('\nProgram execution complete.\n');

Corresponding C-code for sample7:

/*****************************************************************
Name:             SAMPLE7.C

Description:

    OPTOTRAK Sample Program #7.
    1.  Load the system of transputers with the appropriate
        transputer programs.
    2.  Initiate communications with the transputer system.
    3.  Load the appropriate camera parameters.
    4.  Set up an OPTOTRAK collection.
    5.  Activate the IRED markers.
    6.  Initialize a file for spooling OPTOTRAK 3D data.
    7.  Start the OPTOTRAK spooling when Marker 1 is seen.
    8.  Spool 3D data to file while at the same time requesting and
        examining 3D data.
    9.  Stop the spool once Marker 1 goes out of view or after 100
        seconds of data has been spooled.
    10. De-activate the markers.
    11. Disconnect the PC application program from the transputer
        system.

*****************************************************************/

/*****************************************************************
C Library Files Included
*****************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#ifdef _MSC_VER
void sleep( unsigned int uSec );
#elif __BORLANDC__
#include <dos.h>
#elif __WATCOMC__
#include <dos.h>
#endif

/*****************************************************************
ND Library Files Included
*****************************************************************/
#include "ndtypes.h"
#include "ndpack.h"
#include "ndopto.h"

/*****************************************************************
Defines:
*****************************************************************/

#define NUM_MARKERS     6
#define FRAME_RATE      (float)50.0
#define COLLECTION_TIME (float)100.0

/*****************************************************************
Name:               main

Input Values:
    int
        argc        :Number of command line parameters.
    unsigned char
        *argv[]     :Pointer array to each parameter.

Output Values:
    None.

Return Value:
    None.

Description:

    Main program routine performs all steps listed in the above
    program description.

*****************************************************************/
void main( int argc, unsigned char *argv[] )
{
    unsigned int
        uFlags,
        uElements,
        uFrameNumber,
        uSpoolStatus,
        uSpoolComplete,
        uRealtimeDataReady;
    static Position3d
        p3dData[ NUM_MARKERS];
    char
        szNDErrorString[MAX_ERROR_STRING_LENGTH + 1];

    /*
     * Load the system of transputers.
     */
    if( TransputerLoadSystem( "system" ) )
    {
        goto ERROR_EXIT;
    } /* if */

    /*
     * Wait one second to let the system finish loading.
     */
    sleep( 1 );

    /*
     * Initialize the transputer system.
     */
    if( TransputerInitializeSystem( OPTO_LOG_ERRORS_FLAG ) )
    {
        goto ERROR_EXIT;
    } /* if */

    /*
     * Load the standard camera parameters.
     */
    if( OptotrakLoadCameraParameters( "standard" ) )
    {
        goto ERROR_EXIT;
    } /* if */

    /*
     * Set up a collection for the OPTOTRAK.
     */
    if( OptotrakSetupCollection(
            NUM_MARKERS,        /* Number of markers in the collection. */
            FRAME_RATE,         /* Frequency to collect data frames at. */
            (float)2500.0,      /* Marker frequency for marker maximum on-time. */
            30,                 /* Dynamic or Static Threshold value to use. */
            160,                /* Minimum gain code amplification to use. */
            1,                  /* Stream mode for the data buffers. */
            (float)0.4,         /* Marker Duty Cycle to use. */
            (float)7.5,         /* Voltage to use when turning on markers. */
            COLLECTION_TIME,    /* Number of seconds of data to collect. */
            (float)0.0,         /* Number of seconds to pre-trigger data by. */
            0 ) )
    {
        goto ERROR_EXIT;
    } /* if */

    /*
     * Wait one second to let the collection finish setting up.
     */
    sleep( 1 );

    /*
     * Activate the markers.
     */
    if( OptotrakActivateMarkers() )
    {
        goto ERROR_EXIT;
    } /* if */

    /*
     * Initialize a file for spooling of the OPTOTRAK 3D data.
     */
    if( DataBufferInitializeFile( OPTOTRAK, "C#001.S07" ) )
    {
        goto ERROR_EXIT;
    } /* if */

    /*
     * Initialize the necessary spooling variables and a file for spooling
     * of the OPTOTRAK data.
     */
    uSpoolStatus       =
    uSpoolComplete     =
    uRealtimeDataReady = 0;

    /*
     * Loop until marker 1 comes into view.
     */
    fprintf( stdout, "Waiting for marker 1...\n" );
    do
    {
        /*
         * Get a frame of 3D data.
         */
        if( DataGetLatest3D( &uFrameNumber, &uElements, &uFlags, p3dData ) )
        {
            goto ERROR_EXIT;
        } /* if */
    } /* do */
    while( p3dData[ 0].x < MAX_NEGATIVE );

    /*
     * Start the OPTOTRAK spooling data to us.
     */
    if( DataBufferStart() )
    {
        goto ERROR_EXIT;
    } /* if */
    fprintf( stdout, "Collecting data file...\n" );

    /*
     * Loop around spooling data to file until marker 1 goes out of view.
     */
    do
    {
        /*
         * Get a frame of 3D data.
         */
        if( DataGetLatest3D( &uFrameNumber, &uElements, &uFlags, p3dData ) )
        {
            goto ERROR_EXIT;
        } /* if */

        /*
         * Check to see if marker 1 is out of view and stop the OPTOTRAK from
         * spooling data if this is the case.
         */
        if( p3dData[ 0].x < MAX_NEGATIVE )
        {
            if( DataBufferStop() )
            {
                goto ERROR_EXIT;
            } /* if */
        } /* if */

        /*
         * Write data if there is any to write.
         */
        if( DataBufferWriteData( &uRealtimeDataReady, &uSpoolComplete,
                                 &uSpoolStatus, NULL ) )
        {
            goto ERROR_EXIT;
        } /* if */
    } /* do */
    while( !uSpoolComplete );

    fprintf( stdout, "Spool Status: 0x%04x\n", uSpoolStatus );

    /*
     * De-activate the markers.
     */
    if( OptotrakDeActivateMarkers() )
    {
        goto ERROR_EXIT;
    } /* if */

    /*
     * Shutdown the transputer message passing system.
     */
    if( TransputerShutdownSystem() )
    {
        goto ERROR_EXIT;
    } /* if */

    /*
     * Exit the program.
     */
    fprintf( stdout, "\nProgram execution complete.\n" );
    exit( 0 );

ERROR_EXIT:
    if( OptotrakGetErrorString( szNDErrorString,
                                MAX_ERROR_STRING_LENGTH + 1 ) == 0 )
    {
        fprintf( stdout, szNDErrorString );
    } /* if */
    OptotrakDeActivateMarkers();
    TransputerShutdownSystem();
    exit( 1 );

} /* main */


Justus-Liebig-Universität   |  Psychologie Abteilungen

Valid CSS! Valid HTML 4.01 Transitional