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_listening_multicast <multicast ip> <data port>" << std::endl;
60 std::istringstream portstream( argv[ 2 ] );
64 if ( portstream.fail() )
66 std::cout <<
"invalid port '" << argv[ 2 ] <<
"'" << std::endl;
76 std::cout <<
"DTrackSDK init error" << std::endl;
79 std::cout <<
"listening at multicast ip " << argv[ 1 ] <<
", local data port " << dt->
getDataPort() << std::endl;
87 while ( count++ < 1000 )
95 data_error_to_console();
107 static void output_to_console()
109 std::cout.precision( 3 );
110 std::cout.setf( std::ios::fixed, std::ios::floatfield );
125 std::cout <<
"DTrackSDK fatal error: invalid body id " << i << std::endl;
131 std::cout <<
"bod " << body->
id <<
" not tracked" << std::endl;
135 std::cout <<
"bod " << body->
id <<
" qu " << body->
quality 136 <<
" loc " << body->
loc[ 0 ] <<
" " << body->
loc[ 1 ] <<
" " << body->
loc[ 2 ]
137 <<
" rot " << body->
rot[ 0 ] <<
" " << body->
rot[ 1 ] <<
" " << body->
rot[ 2 ]
138 <<
" " << body->
rot[ 3 ] <<
" " << body->
rot[ 4 ] <<
" " << body->
rot[ 5 ]
139 <<
" " << body->
rot[ 6 ] <<
" " << body->
rot[ 7 ] <<
" " << body->
rot[ 8 ]
143 std::cout <<
"bod " << body->
id <<
" quatw " << quat.
w 144 <<
" quatxyz " << quat.
x <<
" " << quat.
y <<
" " << quat.
z << std::endl;
152 if ( flystick == NULL )
154 std::cout <<
"DTrackSDK fatal error: invalid Flystick id " << i << std::endl;
160 std::cout <<
"fly " << flystick->
id <<
" not tracked" << std::endl;
164 std::cout <<
"flystick " << flystick->
id <<
" qu " << flystick->
quality 165 <<
" loc " << flystick->
loc[ 0 ] <<
" " << flystick->
loc[ 1 ] <<
" " << flystick->
loc[ 2 ]
166 <<
" rot " << flystick->
rot[ 0 ] <<
" " << flystick->
rot[ 1 ] <<
" " << flystick->
rot[ 2 ]
167 <<
" " << flystick->
rot[ 3 ] <<
" " << flystick->
rot[ 4 ] <<
" " << flystick->
rot[ 5 ]
168 <<
" " << flystick->
rot[ 6 ] <<
" " << flystick->
rot[ 7 ] <<
" " << flystick->
rot[ 8 ]
173 for (
int j = 0; j < flystick->
num_button; j++ )
175 std::cout <<
" " << flystick->
button[ j ];
180 std::cout <<
" " << flystick->
joystick[ j ];
182 std::cout << std::endl;
189 if ( meatool == NULL )
191 std::cout <<
"DTrackSDK fatal error: invalid Measurement tool id " << i << std::endl;
197 std::cout <<
"mea " << meatool->
id <<
" not tracked" << std::endl;
201 std::cout <<
"mea " << meatool->
id <<
" qu " << meatool->
quality 202 <<
" loc " << meatool->
loc[ 0 ] <<
" " << meatool->
loc[ 1 ] <<
" " << meatool->
loc[ 2 ]
203 <<
" rot " << meatool->
rot[ 0 ] <<
" " << meatool->
rot[ 1 ] <<
" " << meatool->
rot[ 2 ]
204 <<
" " << meatool->
rot[ 3 ] <<
" " << meatool->
rot[ 4 ] <<
" " << meatool->
rot[ 5 ]
205 <<
" " << meatool->
rot[ 6 ] <<
" " << meatool->
rot[ 7 ] <<
" " << meatool->
rot[ 8 ]
211 std::cout <<
" radius " << meatool->
tipradius << std::endl;
217 for (
int j = 0; j < meatool->
num_button; j++ )
219 std::cout <<
" " << meatool->
button[ j ];
221 std::cout << std::endl;
229 if ( mearef == NULL )
231 std::cout <<
"DTrackSDK fatal error: invalid Measurement reference id " << i << std::endl;
237 std::cout <<
"mearef " << mearef->
id <<
" not tracked" << std::endl;
241 std::cout <<
"mearef " << mearef->
id <<
" qu " << mearef->
quality 242 <<
" loc " << mearef->
loc[ 0 ] <<
" " << mearef->
loc[ 1 ] <<
" " << mearef->
loc[ 2 ]
243 <<
" rot " << mearef->
rot[ 0 ] <<
" " << mearef->
rot[ 1 ] <<
" " << mearef->
rot[ 2 ]
244 <<
" " << mearef->
rot[ 3 ] <<
" " << mearef->
rot[ 4 ] <<
" " << mearef->
rot[ 5 ]
245 <<
" " << mearef->
rot[ 6 ] <<
" " << mearef->
rot[ 7 ] <<
" " << mearef->
rot[ 8 ]
254 if ( marker == NULL )
256 std::cout <<
"DTrackSDK fatal error: invalid marker index " << i << std::endl;
260 std::cout <<
"mar " << marker->
id <<
" qu " << marker->
quality 261 <<
" loc " << marker->
loc[ 0 ] <<
" " << marker->
loc[ 1 ] <<
" " << marker->
loc[ 2 ]
271 std::cout <<
"DTrackSDK fatal error: invalid FINGERTRACKING id " << i << std::endl;
277 std::cout <<
"hand " << hand->
id <<
" not tracked" << std::endl;
281 std::cout <<
"hand " << hand->
id <<
" qu " << hand->
quality 282 <<
" lr " << ( ( hand->
lr == 0 ) ?
"left" :
"right") <<
" nf " << hand->
nfinger 283 <<
" loc " << hand->
loc[ 0 ] <<
" " << hand->
loc[ 1 ] <<
" " << hand->
loc[ 2 ]
284 <<
" rot " << hand->
rot[ 0 ] <<
" " << hand->
rot[ 1 ] <<
" " << hand->
rot[ 2 ]
285 <<
" " << hand->
rot[ 3 ] <<
" " << hand->
rot[ 4 ] <<
" " << hand->
rot[ 5 ]
286 <<
" " << hand->
rot[ 6 ] <<
" " << hand->
rot[ 7 ] <<
" " << hand->
rot[ 8 ]
289 for (
int j = 0; j < hand->
nfinger; j++ )
291 std::cout <<
" fi " << j
297 std::cout <<
" fi " << j
310 std::cout <<
"no human model data" << std::endl;
318 std::cout <<
"DTrackSDK fatal error: invalid human model id " << i << std::endl;
324 std::cout <<
"human " << human->
id <<
" not tracked" << std::endl;
328 std::cout <<
"human " << human->
id <<
" num joints " << human->
num_joints << std::endl;
333 std::cout <<
"joint " << human->
joint[ j ].
id <<
" not tracked" << std::endl;
346 std::cout << std::endl;
352 std::cout <<
"no inertial body data" << std::endl;
358 if ( inertial == NULL )
360 std::cout <<
"DTrackSDK fatal error: invalid hybrid body id " << i << std::endl;
364 std::cout <<
" inertial body " << inertial->
id <<
" st " << inertial->
st <<
" error " << inertial->
error << std::endl;
367 std::cout <<
" loc " << inertial->
loc[ 0 ] <<
" " << inertial->
loc[ 1 ] <<
" " << inertial->
loc[ 2 ]
368 <<
" rot " << inertial->
rot[ 0 ] <<
" " << inertial->
rot[ 1 ] <<
" " << inertial->
rot[ 2 ]
369 <<
" " << inertial->
rot[ 3 ] <<
" " << inertial->
rot[ 4 ] <<
" " << inertial->
rot[ 5 ]
370 <<
" " << inertial->
rot[ 6 ] <<
" " << inertial->
rot[ 7 ] <<
" " << inertial->
rot[ 8 ]
382 static bool data_error_to_console()
386 std::cout <<
"--- timeout while waiting for tracking data" << std::endl;
392 std::cout <<
"--- error while receiving tracking data" << std::endl;
398 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)
double loc[3]
Location (in [mm])
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).
Hybrid (optical-inertial) body data (6DOF).
double error
Drift error estimate (only during inertial tracking, in [deg])
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])
int st
State of hybrid body (0: not tracked, 1: inertial tracking, 2: optical tracking, 3: inertial and opti...
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.
int id
ID number (starting with 0)
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.
const DTrackInertial * getInertial(int id) const
Get hybrid (optical-inertial) data.
Errors getLastDataError() const
Get last error at receiving tracking data (data transmission).
int getNumInertial() const
Get number of calibrated hybrid (optical-inertial) bodies.
int button[DTRACKSDK_FLYSTICK_MAX_BUTTON]
Button state (1 pressed, 0 not pressed): 0 front, 1..n-1 right to left.
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])
double rot[9]
Rotation matrix (column-wise)
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.
bool isTracked() const
Returns if body is currently tracked.
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.