Réalisation d'une application de réalité virtuelle pour l'évaluation des émotions

Rémi LEVILAIN & Fabien ROUSSEL


Présentation


L'ISTIA :

Composante de l’Université d’Angers, l’ISTIA (Institut des Sciences et Techniques de l’Ingénieurs d’Angers) est aujourd’hui une École d’Ingénieurs habilitée par la Commission des Titres d’Ingénieurs.
L'ISTIA a pour objectif de former des ingénieurs opérationnels grâce à des enseignements théoriques et pratiques ainsi qu'au travers d'expériences acquises lors de projets et de stages. A l'issue de la troisième année, commune à tous les étudiants, l'étudiant s'oriente vers l'option de son choix : Automatique et Génie Informatique, Qualité et Sureté de Fonctionnement, ou Ingénierie de l’Innovation.

Site internet de l'ISTIA

Notre projet :

Dans le cadre de notre 4ème année au sein de l'ISTIA en option Automatique et Génie Informatique nous avons eu un projet étudiant à réaliser dans les domaines de notre formation. Etant deux étudiants souhaitant nous orientés vers la réalité virtuelle nous avons choisi un sujet de réalisation d'une application ayant pour but l'identification des émotions. L'usage de l'immersion virtuelle est donc le meilleur moyen de simuler un environnement dans lequel on pourra observer l'évolution ainsi que les réactions d'une personne.

Objectifs


    Les objectifs ont été définis lors des premières réunions par nos encadrants: M. Richard Paul et Mme Follope Déborah. La validation technique était assuré par M.PAYEN Teddy. Après plusieurs rencontres, différentes propositions ont été retenues :

Périphériques


    L'Oculus Rift est un masque de réalité virtuelle. Il fonctionne grâce à un détecteur de mouvement intégré au casque et connecté à l'ordinateur via USB. Ce capteur permet d'adapter la caméra d'une application 3D en fonction de l'orientation de la tête du joueur. L'Oculus possède également un écran plat sur lequel est affichée une image stéréoscopique récupérée par deux caméras présentes dans l'environnement. Un système de lentilles placées devant les yeux du joueur permet à ce dernier d'obtenir une vision en relief de l'image. Ainsi, l'utilisation de l'Oculus Rift ajoute un vrai plus immersif dans une application de réalité virtuelle.
    Le Razer Hydra est un contrôleur de jeu à détection de mouvements conçue par l'entreprise Sixense. Ce périphérique présente plusieurs particularités intéressantes. Contrairement à une manette classique, l'Hydra est constituée de deux parties permettant ainsi aux deux mains d'être indépendantes. Il est également constitué d'une base possédant un capteur de mouvement électromagnétique d'une précision à l'échelle du millimètre.

Programmation

    Pour commencer l'implémentation du Razer Hydra nous avons utilisés les pilotes ainsi que les projets de démonstration du constructeur : Sixense. Ceci nous a permis d'observer le fonctionnement de l'Hydra sous Unity3D et ainsi de nous inspirer de ce qui avait déjà été réalisé.
    Après différentes observations sur le code constructeur, il a été décidé de récupérer le plug-in reliant les données internes aux contrôleurs de l'Hydra à l'ordinateur et de refaire les couches de programmation supérieures. Nous avons alors choisi de réaliser une architecture 3-tiers.
    Une architecture 3-tiers comporte différents scripts permettant la récupération des données brutes du périphérique, leur traitement et leur transmission à l'utilisateur. Respectivement ce sont les couches d'accès aux objets (DAO), couche métier et couche client. Appliquer aux différentes scripts du Razer Hydra, nous obtenons le diagramme suivant:


    Un script "Hydata" contient les données d'une des manettes du Razer Hydra. Le script "Hydatas" contient 2 objets du type "Hydata", on peut donc l'associer à la représentation physique de l'Hydra. De plus c'est un "Singleton", cela signifie qu'un seul exemplaire de ce script peut être instancié, en effet l'application ne comporte qu'un seul Razer Hydra, la présence de plusieurs objets "Hydatas" nous poserait problème.

    Le fonctionnement ensuite est simple, les 2 objets "Hydata" enregistrent les données fournies par la couche DAO. L'objet "Hydatas" regroupe les "Hydata" et permet la lecture des données qu'ils contiennent. Enfin pour finir le script "HydrUpdate" met à jour continuellement les valeurs des objets Hydata via le Hydatas. On peut alors faire le distinguo entre les services qui sont les scripts effectuant des action alors que les entités ne contiennent que des informations utiles.

    Nous avons réalisé différentes fonctionnalités pour améliorer la navigation de base proposée par Unity3D. Dans un premier temps, nous avons écrit un script pour ajouter des bruits de pas lorsque le joueur se déplace. Cet effet sonore renforce nettement l'impression de marche de l'utilisateur et améliore ainsi son immersion. Nous avons récupéré pour cela plusieurs sons de pas sur plusieurs types de terrain (sentier, planché en bois, flaque d’eau). Lorsque que le joueur marche notre application reconnait le type de terrain et lance un son audio approprié. A chaque fois, on fait varier le volume et la vitesse de lecture pour que le bruit de pas soit différent et donne l’impression d’une marche réaliste. Nous avons ajouté également un effet qui permet d’imiter le hochement de tête lors de la marche en effectuant un léger mouvement vertical de caméra.

    De plus 2 modes de déplacement utilisant le Razer Hydra ont été réalisés. Le premier consiste tout simplement à utiliser les sticks pour diriger son personnage ainsi que la caméra. C'est le mode de déplacement le plus commun, on le retrouve dans la majorité des jeux vidéos actuels. Le second est plus immersif mais nécessite un temps d'adpatation. Pour se déplacer l'utilisateur devra incliner les contrôleurs du Razer vers l'avant/arrière pour avancer/reculer et vers la gauche/droite pour tourner son personnage. Le stick de la caméra peut toujours être utiliser si nécessaire.

    Pour répondre au cahier des charges il a été nécessaire de créer une suite de terrains correspondants aux émotions désirées. Sachant que l'ordre d'apparition des environnements ainsi que le sens dans lequel on les parcourt est aléatoire.
    Nous avons réalisé des portails pour permettre au joueur de se téléporter de terrain en terrain. Nous avons fait en sorte que chacun d’entre eux soient sélectionnés aléatoirement parmi une liste.
    A chaque fois que le joueur passe un portail, le terrain précédent est détruit et le terrain suivant est créé.
    Afin que le joueur s’habitue à se diriger avec les différents périphériques, nous avons créé une zone de tutoriel. Elle contient plusieurs instructions comme des mouvements de caméra ou des déplacements. A la fin du tutoriel, le joueur est téléporté et l’expérience commence.


    Pour finaliser l’interface de notre application, nous avons créé un menu dynamique ou l’on sélectionne le mode de navigation.

Gestion du projet

    Une fois l'ensemble des tâches et des moyens à notre disposition défini nous avons pu nous répartir le travail de manière à être le plus efficace possible. Fabien avait comme tâches la modélisation du déplacement dans l'environnement, l'ajout de l'Oculus Rift et la réalisation de la zone de tutoriel. Rémi travaillait sur l'implémentation du Razer Hydra, la réalisation des différentes méthodes de navigation ainsi que l'ajout de la veste haptique. Afin d'avoir une représentation plus explicite de la répartition ainsi que de l'importance des tâches que nous avons effectuées nous avons réalisé 2 diagrammes différents. Tout d'abord un GANTT afin de voir comment ont été répartis nos activités et un diagramme circulaire pour observer leur importance.


Conclusion


    L’objectif de ce projet était de mettre en place une application immersive de réalité virtuelle dans le but de pouvoir évaluer les émotions émises par l'utilisateur lors de son évolution au sein des environnements développés. Sur le plan technique, ce projet nous a apporté une expérience de travail de groupe mais aussi en équipe avec la réalisation des environnements par une autre équipe. La communication est bien entendu la clé du bon déroulement d'un projet que ce soit avec nos responsables de projets, avec une seconde équipe et entre nous.
    Lors de ce projet, nous avons pu mettre en application les connaissances acquises à l’ISTIA dans le domaine de la programmation ainsi que la réalisation d'environnement sous Unity3D.
    Sur le plan humain, cette expérience fut enrichissante. Il y a eu un réel échange avec M. PAYEN, consultant Unity3D sur ce projet, qui nous a fait part de son expérience, donné des conseils et accordé du temps si nécessaire. De plus Mme FOLOPPE a su nous indiquer ces exigences pour l'utilisation ultérieure de l'application afin de déterminer clairement le cahier des charges.

Téléchargement


Si vous souhaitez obtenir plus d'informations et de détails sur le projet que nous avons réalisé, nous vous invitons à télécharger notre rapport ainsi que notre présentation.

Rapport de projet :
Présentation :