Bonjour tout le monde !
Alors voila bientôt 2 semaine que je suis bloqué dans mon projet.
Je vous préviens de suite, j'ai un mal fou à clarifier mes explications Donc je vais essayer d’être le plus cours et précis possible afin de ne pas vous perdre !!
0 - Projet :
Tout d'habord mon projet est un projet scolaire, mon but est de : controler un Ar Drone 2.0 (PARROT) avec un casque Emotiv Epoc+ (par la pensée).
Le Drone est codé en NodeJS MAIS le casque est codé en C++.
1 - Demarche:
La structure du projet est du type :
Casque -> Serveur Node (envoie donnée)
Serveur Node -> Drone (envoie ordre)
Serveur Node -> Client(html) (envoie donnée)
Donc on suit l'etat du drone via une page html.
Apres de nombreux essais... La meilleur solution trouvé est :
J'utilise node-gyp pour transformer ma partie C++ en lib de NODE. Ensuite Je recupere les donnée en NODE puis les traites normalement en NODE (Dans le plus parfait des mondes )
2- Problemes
Après déjà un TRÈS TRÈS long moment pour comprendre comment marche node-gyp, j'ai finalement réussi à transformer mon programme c++ en lib pour Node !!
ILLUSTRATION SIMPLIFIER :
C++ :
Node :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 *** codes *** mentalCommandAction = static_cast<int>(IS_MentalCommandGetCurrentAction(eState)); mentalCommandActionPower = IS_MentalCommandGetCurrentActionPower(eState); *** codes ***
Le probleme reside ICI, certaines variables tel que (event.blink >0) fonctionne parfaitement la variable passe de 0 à 1 en fonction de l'etat !!
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 var Epoc = require('bindings')('index'); Epoc.connect(function(event) { if(event.blink > 0){ console.log('blink'); } if(event.mentalCommandAction > 1){ console.log(event.mentalCommandActionPower); } if(event.laugh > 0){ console.log('laugh'); } if(event.smile > 0){ console.log('smile'); } });
En revanche , mentalCommandAction(Power) reste CONSTAMMENT à 0 !!!!!!!!!!
Et alors le plus drole est que si je fait tournée exctement les MEMES programmes en c++ ou en node, c'est toujours pareil !!! Les variable tels que mentalAction, time, ... reste à 0 ou une valeur constante !! Et d'autre fonctionnent sans problemes
(Bon je crois que c'est bon j'ai perdu tout le monde je vais faire un vidéo pour réellement montrer ce qui se passe haha )
3 - SOLUTIONS ENVISAGEES
Plusieurs solutions sont envisageable :
- Je pense a un probleme de convertion de donnée ente c++ et js ? Mais cela est peu probable car normalement les valeur de mentalCommandAction sont 1,2,4,8,16,32.. et mentalCommandActionPower de 0 à 1
- La fonction EMIT par le casque n'est pas acceptable en JS donc il renvoi une erreur a al fonction (0) et c'est pour cela que j'ai ABSOLUEMENT toujours 0 ?
EDIT :
Voici les videos :
La premiere montre que ca marche tres bien en c++, puis on vois sur la deuxieme que certaines variables ne repondent pas comme il le faut :/
https://youtu.be/R1c0z5MESsU
https://youtu.be/a0ZWGErEn48
CODE SOURCE c++ : https://github.com/XavG/EpocUtils2.0
CODE SOURCE NodeJS : https://github.com/XavG/node-epocjs
EDIT2: N'hesitez surtout pas à me dire si certaines chose ne vont pas, des fichiers manquant (j’espère pas) ou autres.
Voila je suis COMPLETEMENT PERDU !!! Je vais tenter de vous faire un videu puis de relire mon post pour l'eclaircir un peu
Merci d'avance,
Xavier
Partager