Outils de maquettage virtuel

De Wiki de Projets IMA
Révision datée du 20 novembre 2013 à 09:37 par Mde-bie (discussion | contributions) (Gestion de Projet)

Matthias De Bie - Pierre-Jean Petitprez

Présentation

Objectif

En collaboration avec l'équipe de recherche MINT (IRCICA/LIFL), l'objectif du projet est de développer, en se basant sur un échantillon de code déjà fourni, des outils simples et avec un nombre de commandes réduit permettant d’interagir avec des applications d'édition de géométrie. Cette application sert à créer une couche supplémentaire entre le SDK ThreeGear et toute autre partie responsable de l'affichage de la géométrie. Elle se présente sous forme d'un outil générique qui doit permettre d'interfacer les flux du SDK ThreeGear avec Unity dans un premier temps.

Matériel requis

En raison de l'utilisation de code déjà écrit, il est nécessaire de reprendre les mêmes outils.

  • Utilisation du moteur Unity[1] : requiert Microsoft Windows
  • Bibliothèque ThreeGear[2] permettant d'utiliser une Kinect et de faire du hand tracking : requiert un système 64 bits
  • une caméra Microsoft Kinect

Démarche d'installation

  • Installation des librairies et pilotes requis :
    • Java SE
    • ThreeGear SDK
    • OpenNI 1.5.2.23 64-bit
    • NITE 1.5.2.21 64-bit
    • SensorKinect 5.1.0.25 64-bit
    • Calibration de la caméra et lancement du serveur avec les scripts camerasetup.bat et handdriver.bat
    • Installation de Unity
    • Autres : Visual Studio et bibliothèques requises pour la connexion TCP entre le serveur ThreeGear et le client

Gestion de Projet

Semaine 1

Choix des projets

Semaine 2

Réunion avec le professeur encadrant le mercredi 18 septembre : description de l'état de l'art, définition des attentes et des besoins, définition des choix technologiques.
Mise en place des outils sur PC personnel, l'idéal serait de pouvoir également travailler sur un poste fixe en salle de projet : nécessité d'installation de Windows 64 bit sur un poste.

Semaines 3 et 4

Interfaces Unity et ThreeGear

Prise en main du SDK ThreeGear et de la scène Unity fournie, après la phase d'installation plutôt longue mais documentée. Demande d'une licence académique chez ThreeGear (validité : 12 mois).

Problématique : la caméra Kinect doit se trouver à une certaine hauteur au-dessus du plan de travail (de l'ordre de 1 m), en étant le plus horizontale possible afin de bénéficier de la meilleure détection des mains possible.

Première étape : analyser et s'approprier le début de code fourni sous Unity. Repérer les différents flux d'entrée provenant de ThreeGear.

Deuxième étape : Créer une application en C++ indépendante de Unity qui récupère le flux de sortie de ThreeGear et l'interprète.


Semaines 5 et 6

La phase de code débute réellement, avec l'écriture d'une application C++ qui reçoit les informations provenant de ThreeGear par TCP. La protocole déjà écrit dans l'application Unity en C# est à réécrire complètement en utilisant les conventions C++.

Semaine 7

L'utilisation de l'API ThreeGear se révèle assez fastidieuse car la documentation se limite aux headers des exemples C++.


Semaines 8 et 9

Nous avons développé une application qui récupère les messages de ThreeGear et qui les envoie tels quels à l'application Unity (sur protocole TCP). Les messages de configuration (Welcome et User) sont sauvegardés afin que la connexion des différentes parties puisse être indépendante.
On ouvre une socket TCP entre le serveur ThreeGear et notre application sur le port 1988 (port par défaut de ThreeGear). Ensuite une deuxième socket est créée entre notre application et le client Unity sur le port 1989.

Semaine 10

La prochaine étape est de repérer les messages provenant de ThreeGear et contenant les points remarquables comme les bouts des doigts, ou le centre de la main, ce qui va permettre de reconnaître de nouveaux mouvements et de nouvelles positions.

Semaine 11

En utilisant les coordonnées des bouts des doigts nous essayons de repérer les amplitudes de déplacement pour chaque doigt entre chaque réception. De cette manière nous pourrions savoir quand survient un mouvement d'un doigt. Pour y parvenir nous utilisons un singleton de manière à mémoriser les valeurs des coordonnées.

Technologies

ThreeGear

ThreeGear est un système de captation de mouvement destiné à récupérer les positions ainsi que l'orientation des mains de l'utilisateur, il peut aussi interpréter quelques poses basiques (en utilisant notamment les 10 doigts) telles que la saisie et le pointé.

Limitations

Ce système n'est pas générique, dans le sens où il s'appuie sur une base de données pour reconnaitre des mouvements. Des poses et mouvements ne faisant pas partie de la base de données de ThreeGear ne peuvent pas être utilisés car ils ne seront pas reconnus. C'est pourquoi l'idée du projet est de rendre plus générique ce système.

Singleton

Afin de résoudre les problèmes d'accès à une variable dans les différents threads de l'application (partie client, partie serveur), il est nécessaire d'utiliser une variable "globale". En C++, nous utilisons une classe qui contient les différentes variables nécessitant d'être accessibles partout. Or, cette classe ne doit être instanciée qu'une fois dans tout le programme. C'est pourquoi nous utilisons le pattern Singleton qui permet de créer une unique instance de la classe.