36 #include "DTrackSDK.hpp" 45 static void output_to_console();
46 static bool data_error_to_console();
52 int main(
int argc,
char** argv )
56 std::cout <<
"Usage: example_dtrack1 <server host> <server port> <data port>" << std::endl;
60 std::istringstream portstream( argv[ 2 ] );
64 if ( portstream.fail() || rport == 0 )
66 std::cout <<
"invalid remote port '" << argv[ 2 ] <<
"'" << std::endl;
71 portstream.str( argv[ 3 ] );
75 if ( portstream.fail() )
77 std::cout <<
"invalid data port '" << argv[ 3 ] <<
"'" << std::endl;
83 dt =
new DTrackSDK( (
const char *)argv[ 1 ], rport, port );
87 std::cout <<
"DTrackSDK init error" << std::endl;
90 std::cout <<
"connected to ATC '" << argv[ 1 ] <<
"', listening at local data port " << dt->
getDataPort() << std::endl;
99 std::cout <<
"Measurement start failed!" << std::endl;
100 data_error_to_console();
106 while ( count++ < 1000 )
114 data_error_to_console();
128 static void output_to_console()
130 std::cout.precision( 3 );
131 std::cout.setf( std::ios::fixed, std::ios::floatfield );
146 std::cout <<
"DTrackSDK fatal error: invalid body id " << i << std::endl;
152 std::cout <<
"bod " << body->
id <<
" not tracked" << std::endl;
156 std::cout <<
"bod " << body->
id <<
" qu " << body->
quality 157 <<
" loc " << body->
loc[ 0 ] <<
" " << body->
loc[ 1 ] <<
" " << body->
loc[ 2 ]
158 <<
" rot " << body->
rot[ 0 ] <<
" " << body->
rot[ 1 ] <<
" " << body->
rot[ 2 ]
159 <<
" " << body->
rot[ 3 ] <<
" " << body->
rot[ 4 ] <<
" " << body->
rot[ 5 ]
160 <<
" " << body->
rot[ 6 ] <<
" " << body->
rot[ 7 ] <<
" " << body->
rot[ 8 ]
164 std::cout <<
"bod " << body->
id <<
" quatw " << quat.
w 165 <<
" quatxyz " << quat.
x <<
" " << quat.
y <<
" " << quat.
z << std::endl;
173 if ( flystick == NULL )
175 std::cout <<
"DTrackSDK fatal error: invalid Flystick id " << i << std::endl;
181 std::cout <<
"fly " << flystick->
id <<
" not tracked" << std::endl;
185 std::cout <<
"flystick " << flystick->
id <<
" qu " << flystick->
quality 186 <<
" loc " << flystick->
loc[ 0 ] <<
" " << flystick->
loc[ 1 ] <<
" " << flystick->
loc[ 2 ]
187 <<
" rot " << flystick->
rot[ 0 ] <<
" " << flystick->
rot[ 1 ] <<
" " << flystick->
rot[ 2 ]
188 <<
" " << flystick->
rot[ 3 ] <<
" " << flystick->
rot[ 4 ] <<
" " << flystick->
rot[ 5 ]
189 <<
" " << flystick->
rot[ 6 ] <<
" " << flystick->
rot[ 7 ] <<
" " << flystick->
rot[ 8 ]
194 for (
int j = 0; j < flystick->
num_button; j++ )
196 std::cout <<
" " << flystick->
button[ j ];
201 std::cout <<
" " << flystick->
joystick[ j ];
203 std::cout << std::endl;
210 if ( meatool == NULL )
212 std::cout <<
"DTrackSDK fatal error: invalid Measurement tool id " << i << std::endl;
218 std::cout <<
"mea " << meatool->
id <<
" not tracked" << std::endl;
222 std::cout <<
"mea " << meatool->
id <<
" qu " << meatool->
quality 223 <<
" loc " << meatool->
loc[ 0 ] <<
" " << meatool->
loc[ 1 ] <<
" " << meatool->
loc[ 2 ]
224 <<
" rot " << meatool->
rot[ 0 ] <<
" " << meatool->
rot[ 1 ] <<
" " << meatool->
rot[ 2 ]
225 <<
" " << meatool->
rot[ 3 ] <<
" " << meatool->
rot[ 4 ] <<
" " << meatool->
rot[ 5 ]
226 <<
" " << meatool->
rot[ 6 ] <<
" " << meatool->
rot[ 7 ] <<
" " << meatool->
rot[ 8 ]
233 for (
int j = 0; j < meatool->
num_button; j++ )
235 std::cout <<
" " << meatool->
button[ j ];
237 std::cout << std::endl;
245 if ( mearef == NULL )
247 std::cout <<
"DTrackSDK fatal error: invalid Measurement reference id " << i << std::endl;
253 std::cout <<
"mearef " << mearef->
id <<
" not tracked" << std::endl;
257 std::cout <<
"mearef " << mearef->
id <<
" qu " << mearef->
quality 258 <<
" loc " << mearef->
loc[ 0 ] <<
" " << mearef->
loc[ 1 ] <<
" " << mearef->
loc[ 2 ]
259 <<
" rot " << mearef->
rot[ 0 ] <<
" " << mearef->
rot[ 1 ] <<
" " << mearef->
rot[ 2 ]
260 <<
" " << mearef->
rot[ 3 ] <<
" " << mearef->
rot[ 4 ] <<
" " << mearef->
rot[ 5 ]
261 <<
" " << mearef->
rot[ 6 ] <<
" " << mearef->
rot[ 7 ] <<
" " << mearef->
rot[ 8 ]
270 if ( marker == NULL )
272 std::cout <<
"DTrackSDK fatal error: invalid marker index " << i << std::endl;
276 std::cout <<
"mar " << marker->
id <<
" qu " << marker->
quality 277 <<
" loc " << marker->
loc[ 0 ] <<
" " << marker->
loc[ 1 ] <<
" " << marker->
loc[ 2 ]
287 std::cout <<
"DTrackSDK fatal error: invalid FINGERTRACKING id " << i << std::endl;
293 std::cout <<
"hand " << hand->
id <<
" not tracked" << std::endl;
297 std::cout <<
"hand " << hand->
id <<
" qu " << hand->
quality 298 <<
" lr " << ( ( hand->
lr == 0 ) ?
"left" :
"right") <<
" nf " << hand->
nfinger 299 <<
" loc " << hand->
loc[ 0 ] <<
" " << hand->
loc[ 1 ] <<
" " << hand->
loc[ 2 ]
300 <<
" rot " << hand->
rot[ 0 ] <<
" " << hand->
rot[ 1 ] <<
" " << hand->
rot[ 2 ]
301 <<
" " << hand->
rot[ 3 ] <<
" " << hand->
rot[ 4 ] <<
" " << hand->
rot[ 5 ]
302 <<
" " << hand->
rot[ 6 ] <<
" " << hand->
rot[ 7 ] <<
" " << hand->
rot[ 8 ]
305 for (
int j = 0; j < hand->
nfinger; j++ )
307 std::cout <<
" fi " << j
313 std::cout <<
" fi " << j
326 std::cout <<
"no human model data" << std::endl;
334 std::cout <<
"DTrackSDK fatal error: invalid human model id " << i << std::endl;
340 std::cout <<
"human " << human->
id <<
" not tracked" << std::endl;
344 std::cout <<
"human " << human->
id <<
" num joints " << human->
num_joints << std::endl;
349 std::cout <<
"joint " << human->
joint[ j ].
id <<
" not tracked" << std::endl;
362 std::cout << std::endl;
372 static bool data_error_to_console()
376 std::cout <<
"--- timeout while waiting for tracking data" << std::endl;
382 std::cout <<
"--- error while receiving tracking data" << std::endl;
388 std::cout <<
"--- error while parsing tracking data" << std::endl;
double getTimeStamp() const
Get timestamp since midnight.
int getNumFlyStick() const
Get number of calibrated Flysticks.
double loc[3]
Location (in [mm])
const DTrackFlyStick * getFlyStick(int id) const
Get Flystick data.
const DTrackMeaTool * getMeaTool(int id) const
Get Measurement Tool data.
int getNumBody() const
Get number of calibrated standard bodies (as far as known).
bool receive()
Receive and process one tracking data packet.
double rot[9]
Rotation matrix (column-wise)
unsigned short getDataPort() const
Get UDP data port where tracking data is received.
int lr
Left (0) or right (1) hand.
double loc[3]
Location (in [mm])
Single marker data (3DOF).
double x
Quaternion component x.
double quality
Quality (0.0 <= qu <= 1.0, no tracking if -1.0)
int getNumHand() const
Get number of calibrated A.R.T. FINGERTRACKING hands (as far as known).
A.R.T. Flystick data (6DOF + buttons).
bool isTracked() const
Returns if joint is currently tracked.
double quality
Quality of joint (0.0 <= qu <= 1.0, no tracking if -1.0)
A.R.T. FINGERTRACKING hand data (6DOF + fingers).
int num_joints
Number of joints.
const DTrackBody * getBody(int id) const
Get standard body data.
bool isTracked() const
Returns if Measurement Tool reference is currently tracked.
struct DTrackSDK_Datatypes::DTrackHuman::DTrackJoint joint[DTRACKSDK_HUMAN_MAX_JOINTS]
Joint data.
double y
Quaternion component y.
int nfinger
Number of fingers (maximum 5)
double quality
Quality (0.0 <= qu <= 1.0, no tracking if -1.0)
double rot[9]
Rotation matrix of outermost phalanx (column-wise)
double loc[3]
Location of tip (in [mm])
const DTrackMeaRef * getMeaRef(int id) const
Get Measurement Tool reference data.
DTrack SDK main class derived from DTrackParser.
int id
ID number (starting with 1)
const DTrackMarker * getMarker(int index) const
Get single marker data.
int getNumMeaRef() const
Get number of calibrated Measurement Tool references.
double anglephalanx[2]
Angle between phalanxes (order: outermost, innermost; in [deg])
bool isTracked() const
Returns if body is currently tracked.
int id
ID number of joint (starting with 0)
double lengthphalanx[3]
Length of phalanxes (order: outermost, middle, innermost; in [mm])
int getNumMarker() const
Get number of tracked single markers.
double loc[3]
Location of joint (in [mm])
unsigned int getFrameCounter() const
Get frame counter.
double rot[9]
Rotation matrix (column-wise)
int id
ID number (starting with 0)
const DTrackHuman * getHuman(int id) const
Get ART-Human model data.
double quality
Quality (0.0 <= qu <= 1.0, no tracking if -1.0)
double quality
Quality (0.0 <= qu <= 1.0, no tracking if -1.0)
double loc[3]
Location of back of the hand (in [mm])
const DTrackHand * getHand(int id) const
Get A.R.T. FINGERTRACKING hand data.
double quality
Quality (0.0 <= qu <= 1.0)
int num_joystick
Number of joystick values.
int id
ID number (starting with 0)
int id
ID number (starting with 0)
Error while parsing command.
int num_button
Number of buttons.
bool isDataInterfaceValid() const
Returns if UDP socket is open to receive tracking data on local machine.
double rot[9]
Rotation matrix of joint (column-wise) in relation to room coordinate system.
Errors getLastDataError() const
Get last error at receiving tracking data (data transmission).
int button[DTRACKSDK_FLYSTICK_MAX_BUTTON]
Button state (1 pressed, 0 not pressed): 0 front, 1..n-1 right to left.
bool stopMeasurement()
Stop measurement.
bool startMeasurement()
Start measurement.
bool isTracked() const
Returns if human model is currently tracked.
double rot[9]
Rotation matrix of back of the hand (column-wise)
Measurement Tool reference data (6DOF).
double w
Quaternion component w.
double z
Quaternion component z.
double rot[9]
Rotation matrix (column-wise)
struct DTrackSDK_Datatypes::DTrackHand::DTrackFinger finger[DTRACKSDK_HAND_MAX_FINGER]
Finger data (order: thumb, index finger, middle finger, ...)
DTrackQuaternion getQuaternion() const
Returns rotation as quaternion.
bool isTracked() const
Returns if Flystick is currently tracked.
double radiustip
Radius of tip (in [mm])
int getNumHuman() const
Get number of calibrated ART-Human models.
bool isTracked() const
Returns if hand is currently tracked.
double loc[3]
Location (in [mm])
Standard body data (6DOF).
double loc[3]
Location (in [mm])
double joystick[DTRACKSDK_FLYSTICK_MAX_JOYSTICK]
Joystick value (-1.0 <= joystick <= 1.0); 0 horizontal, 1 vertical.
int id
ID number (starting with 0)
int id
ID number of human model (starting with 0)
ART-Human model (joints (6DOF) including optional Fingertracking).
int getNumMeaTool() const
Get number of calibrated Measurement Tools.