IMA5 2019/2020 P18

De Wiki de Projets IMA
Révision datée du 28 janvier 2020 à 18:32 par Fdinatal (discussion | contributions) (semaine 3)


Présentation générale

Sujet : Virtual Reality Old Gaming
Etudiant : Ibrahim Ben Dhiab et Fabien Di Natale
Encadrant : Laurent Grisoni

Description

L'équipe de recherche MINT, dans le cadre d'un projet européen, travaille sur un système permettant de jouer, via un système de réalité virtuelle, à de vieux jeux, utilisés sous la forme d'émulateurs logiciels. Ce dispositif est développé par l'équipe dans le cadre d'un projet européen portant sur l'utilisation de la RV pour la rééducation. Le dispositif existant utilise un PC portable combiné à un casque de RV (Oculus Quest).
Nous souhaitons:

  • faire l'adaptation nécessaire à l'allègement de la forme physique du dispositif, ou nous souhaitons passer à une version n'utilisant plus le portable, mais une émulation sur carte Rapsberry. Le travail de proposition d'architecture a déjà été fait pour ce point.
  • faire en sorte d'étendre le système pour avoir une appli de configuration permettant de choisir la console et le jeu. Une partie de ces éléments de configuration pourront être utilisables dans le casque de RV par le malade, l'autre partie par le médecin, via une application tierce.
  • éventuellement et en fonction de l'avancement du projet, mettre en place quelques scénarios d'interaction spécifiques, déjà déterminés, dans le dispositif interactif utile à l'avancée du projet européen.

Objectifs

Mettre en place quelques fonctionnalités dans un émulateur RV d'ancienne console

Préparation du projet

Cahier des charges

Le projet est fait suite à un besoin des hôpitaux et cliniques de rendre la rééducation moins compliquée et plus attrayante. Nous utilisons donc de vieux jeux vidéo en réalité virtuel afin d'amener les personnes à bouger comme si elle faisait des exercices tout en s'amusant rendant ainsi le processus de rééducation moins pénible et plus facile à suivre. De plus, toutes les personnes ayant besoin de rééducation ou ayant besoin de faire de l'exercice dans les hôpitaux ont des maladies ou ont eu des accidents très variés. Notre dispositif doit alors être polyvalent et facilement configurable par les médecins ou les infirmières qui serait amené à faire les rééducations.

Ainsi, nous allons nous concentrer sur la partie polyvalence et configuration du système. Nous avons pour objectif de rendre le système le plus polyvalent afin qu'il puisse convenir au plus de personnes possible. Le plus facilement et le plus rapidement utilisable par l'équipe médical.

Choix techniques : matériel et logiciel

Ce projet est fait à l'aide de unity avec les scripts en C# couplé à un serveur node.js sur une Raspberry pi donnant l'accès à une page web pour le personnel médical permettant la configuration et renvoyant la configuration à l'oculus. Nous utilisons un Oculus car c'est un casque de réalité virtuel de bonne qualité, dans des prix raisonnables mais surtout ne nécessitant pas d'ordinateur derrière pour faire tourner les jeux.

Liste des tâches à effectuer

Nous devons :

  • Améliorer la page web afin de proposer les personnalisations de paramètre suivant:
    • Choisir le nombre de manettes (type NES) utilisables par le patient
    • Possibilité d'avoir juste les boutons que le personnel soignant pourra déplacer
  • Ajout de script C# en concordance avec le serveur web
    • Décoder correctement les configurations envoyant par la page web (la raspberry pi)
    • Créer un groupe d'objet que de boutons sans la manette
    • Créer une fonction pour déplacer tous les boutons séparément de la manette de base
  • Vérifier si un scénario ayant pour objectif faire marcher le patient en déplaçant l'affichage du jeu et en fixant la manette NES sur les déplacements du casque est possible

Calendrier prévisionnel

Réalisation du Projet

Semaine 1

Pour ce projet, nous sommes intégrés à l'équipe mint s'occupant du contrat complet. Dans ce cadre nous pouvons alors découvrir complètement le sujet et voir les différentes personnes qui sont affectés à ce contrat. Nous avons ensuite installé tous les logiciels nécessaires au lancement du projet sur l'Oculus:

  • Télécharger le projet à partir du git
  • Suivre les instructions des read.me (téléchargement de Unity, de certain assets et paramétrage d'Unity; téléchargement de node.js et paramétrage de la raspberry pi)

Ce sujet et divisé en deux parties:

  • Une première partie web
  • Une seconde partie Unity

Pour cette fin de première semaine nous avons pu découvrir la partie web qui est un serveur web écrit en node js. Le serveur web tourne sur la raspberry et a pour but de faire la liaison entre le praticien et le patient. Pour cela la raspberry héberge un serveur web sur lequel nous pouvons choisir la configuration du casque. Pour l'instant nous pouvons choisir entre:

  • Contrôler le jeu à l'aide de la manette directement sur le serveur web
  • Contrôler le jeu avec les pads matérialisé devant le joueur. Le nombre de pad peut varier de 1 à 3.

Semaine 2

Prise en main du projet avec un apprentissage des langages javascript, node.js et C# que nous avons peu utiliser pour le javascript et jamais utiliser pour les deux autres.

Pour cette deuxième semaine dans l'équipe mint nous avons pu découvrir la seconde partie du projet sous unity. Celle-ci se compose principalement de deux chose, les scènes et les scripts permettant aux scènes d'évoluer. Pour les scènes nous en avons une seule composée des objets suivant :

  • L'objet statique créant la pièce de jeu, l'environnement que nous pouvons retrouver autour de nous lorsque nous avons le casque de réalité virtuelle devant les yeux. Cet objet est statique et n'est pas relié à des scripts ou autre d'où son nom.
  • L'objet quad qui est un affichage reliè à 4 scripts, cet objet est l'endroit où l'image que la raspberry produit va apparaître, en d'autre mot, ça sera là où l'on peut voir le jeu comme une télévision. Les 4 scripts permettent la connexion et les échanges avec la raspberry, nous avons les scripts TCP config, TCP Commande, TCP screen et Vibration manager. TCP config permet de récupérer la configuration envoyée par la raspberry et lancer toutes les fonctions nécessaires afin de reconfigurer l'oculus selon la configuration reçue. À finir

Première réunion avec tous les membres du projet afin de trouver les meilleurs scénarios et les meilleurs paramètre à mettre en place pendant notre PFE. Au cours de cette réunion nous avons pu déduire que le scénario le plus intéressant avec le temps que nous disposons. Nous devons donc créer un nouveau set d'objet que nous appelons gamepad libre. C'est objet correspondent aux boutons que nous pouvons retrouver sur les manettes NES sans avoir la contrainte de les lier à un support en théorie. Cependant en pratique Unity nous oblige à créer un objet parent permettant de relier les boutons algorithmiquement et ainsi pouvoir les manipuler plus facilement et plus efficacement. Ainsi ces boutons devront être reliés au site web et la raspberry, ce qui permettra de configurer les différents paramètre du projet. De plus lors de cette réunion une idée particulière est ressortie, essayer de faire marcher le patient à travers un autre scénario. Pour cela l'idée et de faire bouger l'écran afin que le joueur soit obliger de s'approcher de l'écran ou se reculer pour bien voir et ainsi se déplacer. Notre mission est alors d'en étudier la faisabilité pour la suite du projet.

Du côté du serveur web nous devons créer deux affichages gérant les boutons afin que l'utilisateur puisse bouger les boutons en 3D et ainsi augmenter ou diminuer la dificulté de l'exercice en temps réel. Ceci pose plusieurs problèmes :


Du côté du casque de réalité virtuel nous devons créer un nouvel objet manette NES couplé à un nouveau script afin de placer les boutons en fonction de la configuration que nous recevons. Pour commencer nous avons du nous entendre sur la formation du message json permettant de transférer la configuration entre la raspberry et le casque. Nous avons choisi de créer un sous fichier json pour chaque bouton composé de ses trois coordonnées. Notre choix de créer un nouvel objet indépendant de tous les autres objets de la scène à pour but de garder le projet le plus propre possible. Comme nous sommes en coopération avec l'équipe mint nous avons préféré modifier le moins possible les fichiers de base afin de pouvoir mieux identifier ce que l'on a fait et permettre à l'équipe de pouvoir utiliser les fonctionnalité que nous allons rajouté le plus pertinemment possible. Dans ce projet nous sommes nouveau et ne connaissons pas toute les subtilités de celui ci, il est donc plus prudent de faire tout à part et ajouter notre travail au projet une fois que tout fonctionne et aura était validé par notre tuteur. Une fois cela définit nous avons du apprendre comment manipuler un fichier json en C#, récupérer les informations que l'on souhaitez. Cela nous a pris quelque temps car avec le programme déjà en place nous avons pu voir comment récupérer les éléments basique d'un fichier json et les traiter. Cependant le fait que nous aillons choisi d'avoir mis des objets json pour chaque boutons cela impliqué une nouvelle méthode de lecture car celle utilisé dans ce projet ne fonctionné pas. Nous avons remarqué que lors de l'appel à la fonction affichage, l'affichage se fait correctement mais lorsque nous essayons de manipuler les objets le compilateur nous produit des erreurs. Nous avons donc choisi de reproduire une parti de la fonction d'affichage, la parti cast nous permettant alors de manipuler les sous objets comme des strings pour pouvoir enfin récupérer les données qui nous on était envoyé. Nous envoyons ensuite la configuration des boutons dans le casque. Afin que tous cela fonctionne nous avons du modifier le fichier de configuration qui est l'une des pièces maîtresse du projet. Nous avons fait en sorte que cette fonction ne soit pas la prioritaire et que la fonction prioritaire soit la manette NES totalement prédéfinie. Nous avons pu tester tout cela au fur et à mesure directement sur le logiciel Unity nous permettant de créer des projets de ce type et simuler leur lancement.

semaine 3

Pour cette troisième semaine, nous reprenons notre travaille en cours, maintenant que les partie programmation web et programmation Unity pour les boutons sont fini nous pouvons tester le tout. Lors de ce test nous avons découvert un nouveau type de bug qui entraînait la fin de l'update du côté de l'oculus. Dans un projet Unity tous les scripts qui sont lié à un objet Unity possède une fonction Start qui se lance lors du lancement du projet et une fonction Update permettant la mise à jour des images, elle est donc appelé à chaque images formé par l'Oculus. Nous faisons tourner l'Oculus sur une base de 60 images par seconde se qui produit un appelle de la fonction Update 120 fois par seconde car l'oculus fonctionne avec deux écrans, un par oeil.
Ainsi lorsque le programme s'arrête pendant l'update, le jeu continuera de fonctionner et ignoreras seulement la fin de la fonction Update et la rappellera au prochain rafraîchissement. De plus lorsque nous transférons le projet Unity sur le casque de réalité virtuel celui ci devient indépendant donc nous n'avons aucune façon conventionnelle de trouver les erreurs. Nous avons alors du créer un objet dans la scène unity affichant des messages, pour aller avec cela nous avons du créer des logs afin de trouver pourquoi l'Update ne se faisait pas.

Documents Rendus