Bonjour tout le monde
Je viens vers vous car j'ai un soucis avec une implémentation de vrpn en C++.
J'utilise actuellement le Leap Motion, et j'ai créé un serveur et un client vrpn pour transmettre les positions et orientations des doigts détectés.
Jusqu'ici, tout va bien, cela fonctionne parfaitement.
Le problème survient lorsque je tente de rajouter la vélocité.
Le code client est bon je pense, car les problèmes que je rencontre, je les aient également avec les clients par défaut (en ligne de commande).
Je précise que le serveur est sous Windows 7, si ca peut aider.
Voici le code server :
Et, voici l'erreur que reçoit les client vrpn me renvoient :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 void LeapMotionVrpnTracker::mainloop() { vrpn_gettimeofday(&_timestamp, NULL); vrpn_Tracker::timestamp = _timestamp; pos[0] = _finger->position().x; pos[1] = _finger->position().y; pos[2] = _finger->position().z; d_quat[0] = _finger->direction().x; d_quat[1] = _finger->direction().y; d_quat[2] = _finger->direction().z; d_quat[3] = 1.0f; vel[0] = _finger->velocity().x; vel[1] = _finger->velocity().y; vel[2] = _finger->velocity().z; vel_quat[0] = 0; vel_quat[1] = 0; vel_quat[2] = 0; vel_quat_dt = 0; d_sensor = _sensor; char msgbuf[1000]; int len = vrpn_Tracker::encode_to(msgbuf); if (d_connection->pack_message(len, vrpn_Tracker::timestamp, position_m_id, d_sender_id, msgbuf, vrpn_CONNECTION_LOW_LATENCY)) { fprintf(stderr,"can't write message: tossing\n"); } len = vrpn_Tracker::encode_to(msgbuf); if (d_connection->pack_message(len, vrpn_Tracker::timestamp, velocity_m_id, d_sender_id, msgbuf, vrpn_CONNECTION_LOW_LATENCY)) { fprintf(stderr,"can't write message: tossing\n"); } server_mainloop(); }
Et si je commente la partie du code suivant, je n'ai plus de soucis.vrpn_Tracker: vel message payload error
(got 64, expected 72d)
vrpn_TypeDispatcher::doCallbacksFor: Nonzero user handler return.
vrpn_Endpoint::mainloop: UDP handling failed, dropping connection
Je ne comprend vraiment pas le soucis.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 if (d_connection->pack_message(len, vrpn_Tracker::timestamp, velocity_m_id, d_sender_id, msgbuf, vrpn_CONNECTION_LOW_LATENCY)) { fprintf(stderr,"can't write message: tossing\n"); }
Si quelqu'un a une idée, je l'écoute avec plaisir
Edit :
Je précise que j'ai testé avec les api 7.29 et 7.30, que ce soit pour le client ou le serveur.
Partager