-
Notifications
You must be signed in to change notification settings - Fork 3
/
JunEMTracker.cpp
94 lines (76 loc) · 3.53 KB
/
JunEMTracker.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include "JunEMTracker.h"
#include <windows.h>
#include "handleErrors.h"
JunEMTracker::JunEMTracker()
{
Initialize();
}
bool JunEMTracker::getTransformation(int tracker_id, DOUBLE_POSITION_MATRIX_TIME_Q_RECORD& trasformation) const
{
int errCode = GetAsynchronousRecord(tracker_id, &trasformation, sizeof(trasformation));
if(errCode!=BIRD_ERROR_SUCCESS)
{
errorHandler(errCode);
return false;
}
return true;
}
void JunEMTracker::displayTransformation(int tracker_id, const DOUBLE_POSITION_MATRIX_TIME_Q_RECORD& transformation) const
{
COORD coordinate;
int i = tracker_id;
coordinate.Y=6+5*i; coordinate.X=4; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coordinate);
printf("%8.3f %8.3f %8.3f %8.3f", transformation.s[0][0], transformation.s[0][1], transformation.s[0][2], transformation.x*25.4);
coordinate.Y=7+5*i; coordinate.X=4; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coordinate);
printf("%8.3f %8.3f %8.3f %8.3f", transformation.s[1][0], transformation.s[1][1], transformation.s[1][2], transformation.y*25.4);
coordinate.Y=8+5*i; coordinate.X=4; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coordinate);
printf("%8.3f %8.3f %8.3f %8.3f", transformation.s[2][0], transformation.s[2][1], transformation.s[2][2], transformation.z*25.4);
}
::std::vector<int> JunEMTracker::getConnectedTrackerIds() const
{
int m_maxNumSensors = 4;
::std::vector<int> sensorIds;
for(int i = 0 ; i < m_maxNumSensors ; i++)
if(getTransformation(i, DOUBLE_POSITION_MATRIX_TIME_Q_RECORD()))
sensorIds.push_back(i);
return sensorIds;
}
void JunEMTracker::Initialize()
{
// ---------------------------------------------------------------- //
// CKim - Set up the Ascension EM tracker.
// Related include and library files are 'ATC3DG.h'
// ---------------------------------------------------------------- //
printf( "Initializing tracker wait please...\n" );
SYSTEM_CONFIGURATION trackerConfig; SENSOR_CONFIGURATION* sensorConfig;
TRANSMITTER_CONFIGURATION xmtrConfig; int trackerError; int sensorNum = 0; short xmtrId = 0;
DATA_FORMAT_TYPE type = DOUBLE_POSITION_MATRIX_TIME_Q;
// CKim - Initialize the tracker and get system configuration
trackerError = InitializeBIRDSystem();
if(trackerError!=BIRD_ERROR_SUCCESS) { errorHandler(trackerError); }
trackerError = GetBIRDSystemConfiguration(&trackerConfig);
if(trackerError!=BIRD_ERROR_SUCCESS) { errorHandler(trackerError); }
// CKim - Configure the sensors. Get the number of connected sensors. Set the data format for sensor reading
sensorConfig = new SENSOR_CONFIGURATION[trackerConfig.numberSensors];
for(int i=0; i<trackerConfig.numberSensors; i++)
{
trackerError = GetSensorConfiguration(i, &(sensorConfig[i]));
if(trackerError!=BIRD_ERROR_SUCCESS) { errorHandler(trackerError); }
if(sensorConfig[i].attached)
{
trackerError = SetSensorParameter(i,DATA_FORMAT,&type,sizeof(type));
if(trackerError!=BIRD_ERROR_SUCCESS) { errorHandler(trackerError); }
sensorNum++;
}
}
printf("Number of sensors connected : %d\n",sensorNum);
printf("Press any key to stat tracking");
std::getchar();
// CKim - Configure the transmitter and turn it on. xmtrId must be type short!!
trackerError = GetTransmitterConfiguration(0,&xmtrConfig);
if(trackerError!=BIRD_ERROR_SUCCESS) { errorHandler(trackerError); }
trackerError = SetSystemParameter(SELECT_TRANSMITTER, &xmtrId, sizeof(xmtrId));
if(trackerError!=BIRD_ERROR_SUCCESS) { errorHandler(trackerError); }
// JHa - Set number of sensors
m_nSensors = sensorNum;
}