|
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 sample2:
%Name: SAMPLE2.M
%Description:
% OPTOTRAK Sample Program #2.
% 1. Load the system of transputers with the appropriate
% transputer programs.
% 2. Initiate communications with the transputer system.
% 3. Set the optional processing flags to do the 3D conversions
% on the host computer.
% 4. Load the appropriate camera parameters.
% 5. Set up an OPTOTRAK collection.
% 6. Activate the IRED markers.
% 7. Request/receive/display 10 frames of real-time 3D data.
% 8. De-activate the markers.
% 9. 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 =100; %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 =0; %Stream mode for the data buffers.
coll.DutyCycle =0.35;%Marker Duty Cycle to use.
coll.Voltage =7; %Voltage to use when turning on markers.
coll.CollectionTime =1; %Number of seconds of data to collect.
coll.PreTriggerTime =0; %Number of seconds to pre-trigger data by.
coll.Flags={'OPTOTRAK_BUFFER_RAW_FLAG';'OPTOTRAK_GET_NEXT_FRAME_FLAG'};
%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'});
%Set optional processing flags (this overides the settings in OPTOTRAK.INI).
optotrak('OptotrakSetProcessingFlags',...
{'OPTO_LIB_POLL_REAL_DATA';
'OPTO_CONVERT_ON_HOST';
'OPTO_RIGID_ON_HOST'});
%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')
%Get and display 10 frames of 3D data.
fprintf('\n\n3D Data Display\n');
for FrameCnt = 1:10
fprintf('\n');
%Get a frame of data.
data=optotrak('DataGetLatest3D',coll.NumMarkers);
%Print out the data.
fprintf('Frame Number: %8u\n',data.FrameNumber);
fprintf('Elements : %8u\n',data.NumMarkers);
fprintf('Flags : 0x%04x\n',data.Flags);
for MarkerCnt = 1:coll.NumMarkers
fprintf('Marker %u X %f Y %f Z %f\n', MarkerCnt,...
data.Markers{MarkerCnt}(1),...
data.Markers{MarkerCnt}(2),...
data.Markers{MarkerCnt}(3))
end
end
%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 sample2:
/*****************************************************************
Name: SAMPLE2.C
Description:
OPTOTRAK Sample Program #2.
1. Load the system of transputers with the appropriate
transputer programs.
2. Initiate communications with the transputer system.
3. Set the optional processing flags to do the 3D conversions
on the host computer.
4. Load the appropriate camera parameters.
5. Set up an OPTOTRAK collection.
6. Activate the IRED markers.
7. Request/receive/display 10 frames of real-time 3D data.
8. De-activate the markers.
9. Disconnect the PC application program from the transputer
system.
*****************************************************************/
/*****************************************************************
C Library Files Included
*****************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.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_SENSORS 3
#define NUM_MARKERS 6
/*****************************************************************
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,
uFrameCnt,
uMarkerCnt,
uFrameNumber;
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 */
/*
* Set optional processing flags (this overides the settings in OPTOTRAK.INI).
*/
if( OptotrakSetProcessingFlags( OPTO_LIB_POLL_REAL_DATA |
OPTO_CONVERT_ON_HOST |
OPTO_RIGID_ON_HOST ) )
{
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. */
(float)100.0, /* 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. */
0, /* Stream mode for the data buffers. */
(float)0.35, /* Marker Duty Cycle to use. */
(float)7.0, /* Voltage to use when turning on markers. */
(float)1.0, /* Number of seconds of data to collect. */
(float)0.0, /* Number of seconds to pre-trigger data by. */
OPTOTRAK_BUFFER_RAW_FLAG | OPTOTRAK_GET_NEXT_FRAME_FLAG ) )
{
goto ERROR_EXIT;
} /* if */
/*
* Wait one second to let the camera adjust.
*/
sleep( 1 );
/*
* Activate the markers.
*/
if( OptotrakActivateMarkers() )
{
goto ERROR_EXIT;
} /* if */
/*
* Get and display ten frames of 3D data.
*/
fprintf( stdout, "\n\n3D Data Display\n" );
for( uFrameCnt = 0; uFrameCnt < 10; ++uFrameCnt )
{
/*
* Get a frame of data.
*/
fprintf( stdout, "\n" );
if( DataGetLatest3D( &uFrameNumber, &uElements, &uFlags, p3dData ) )
{
goto ERROR_EXIT;
} /* if */
/*
* Print out the data.
*/
fprintf( stdout, "Frame Number: %8u\n", uFrameNumber );
fprintf( stdout, "Elements : %8u\n", uElements );
fprintf( stdout, "Flags : 0x%04x\n", uFlags );
for( uMarkerCnt = 0; uMarkerCnt < 6; ++uMarkerCnt )
{
fprintf( stdout, "Marker %u X %f Y %f Z %f\n", uMarkerCnt + 1,
p3dData[ uMarkerCnt].x, p3dData[ uMarkerCnt].y,
p3dData[ uMarkerCnt].z );
} /* for */
} /* for */
/*
* 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 */
|
|