Projet C IG (1A)

IHM (2A)


VR/AR/Post-WIMP (3A)


Projet image (2A)


HCI (MoSIG 2)


Projects Docs

Aménagement d'intérieur en vision augmentée

La tête de MarcelinLa tête de PierreLa tête de FlorianLa tête de Tan Luc
Marcelin LazzarottoPierre LeboucherFlorian MinetTan Luc Pham
Développement d'une petite API pour
pouvoir utiliser la Wiimote dans le projet,
afin de manipuler les objets virtuels.
Gestion d'OpenGL pour les objets virtuels
et de la caméra pour afficher ces objets
à l'écran.
Manipulation de l'OptiTrack, pour déterminer
les positions des objets et la taille de la scène.

Introduction

Description du sujet


Exemple d'aménagement d'intérieur virtuel idéal à l'aide d'une tablette

Lorsque l'on achète un meuble, il n'y a rien de pire que se rendre compte qu'il ne rentre pas chez soi, ou s'intègre mal au décor.

Lorsque l'on déplace des meubles dans une pièce, il arrive parfois que l'on se rende compte, lorsque l'on a fini, que l'agencement n'est pas aussi harmonieux qu'espéré. Les plus courageux tenteront de redisposer les meubles d'une autre façon, tandis que la plupart des gens abandonneront et laisseront les meubles où ils sont.

Notre projet permet d'obtenir une prévisualisation, depuis l'intérieur d'une pièce, d'un aménagement à l'aide d'un casque de réalité augmentée. L'utilisateur pourra ainsi choisir un meuble virtuel et le voir dans le casque, afin de lui permettre de prendre une décision concernant l'achat de son mobilier. Nous pouvons également envisager d’autres possibilités, comme pouvoir visualiser une pièce après rangement ou réagencement des meubles qu’elle contient. Ceci implique un certain nombre de fonctionnalités à implémenter :

  • Choisir un meuble parmi un catalogue d'objets virtuels
  • Positionner ce meuble dans une pièce
  • Repositionner un meuble déjà placé
  • Supprimer un meuble placé

Profil de l'utilisateur

Comme vous pouvez le penser, l'utilisateur d'un tel système pourrait être quelqu'un de tout à fait ordinaire, qui aurait juste envie de redécorer son intérieur. Il pourrait également s'agir d'un vrai décorateur d'intérieur, qui a besoin d'un moyen plus efficace que ce qu'il existe de faire son travail.

Réalisation

Spécification préliminaires

Les intéractions qui devront être proposées à l'utilisateur doivent lui permettre de manipuler les meubles virtuels, pour pouvoir aisément les déplacer au sein de la plèce. Nous distinguons trois types d'interactions avec le système :

  • Les intéractions de génération, qui correspondent à l'apparition d'une interface nécessaire à l'ajour de meubles virtuels à la pièce.
  • Les intéractions de manipulation, qui correspondent à la selection, au déplacement, au positionnement et à la suppression d'un meuble de la pièce.
  • Les interaction de personnalisation, qui influent sur l'esthétisme des objets.

Ces intéractions se feraient au moyen de commandes gestuelles.

Pour réaliser ce projet, nous avons utilisé 3 équipements disponibles dans la salle du FabLab : l'Optitrack, le Trivisio et une Wiimote. Le projet a été développé à l'aide des langages Python et C/C++.

Optitrack/Tracking d'objet et récupération des coordonnées


Des caméras Optitrack

L'Optitrack est le système utilisé pour réaliser une capture globale de la scène afin de faire un tracking des composant principaux et de l'agencement de la pièce. En effet, la précision donnée par l'ensemble des caméras installées est très importante. Cela permet de faire correspondre une scène OpenGL avec la réalité avec précision. Les caméras sont à infrarouge et détectent des surfaces réfléchissant cette longueur d'onde qui vont entre autre permettre de calibrer, puis de suivre un objet. À l'aide de ces capteurs, il est possible de définir un repère pour un objet, ce qui permet d'avoir son angle de vue.


Tracking d'un objet avec Motive

Par conséquent, afin de pouvoir repérer la position de l'utilisateur ainsi que la direction dans laquelle celui-ci regarde, un solide composé de boules réfléchissantes est intégré au casque Trivisio (voir ci-après). L'Optitrack repère donc le casque et calcule sa position et son orientation dans l'espace. On relie ensuite à l'aide d'un câble Ethernet le système Optitrack à un deuxième ordinateur auquel on envoie les données utiles.

Ensuite, depuis cet ordinateur, en utilisant le programme "NatnetLinux", nous pouvons récupérer les données envoyées. Nous pouvons donc manipuler notamment la position de l'objet traqué et son orientation. Le programme est disponible à cet adresse : http://brouet.imag.fr/fberard/Docs/OptitrackDev/.

Enfin, nous utilisons ces données pour gérer la position du meuble que l'on est en train de déplacer par rapport à l'utilisateur à l'aide de la Wiimote.

Wiimote

Wiimote
Une Wiimote noire

Afin de gérer la sélection et la manipulation des différent objets virtuels affichable à l'écran, la Wiimote s'est présentée comme un bon choix parmi les outils disponibles. Dans l'idée, appuyer sur un bouton permet de sélectionner un objet virtuel. Déplacer la Wiimote permet de déplacer l'objet et, pour une précision plus pointue, presser la croix directionnelle également.

Pour ne laisser personne perplexe, la Wiimote est une manette conçue par l'entreprise Nintendo pour ses consoles Wii et Wii U. Comme en témoigne la photographie, il s'agit d'une manette relativement longue pouvant être saisi à une main et intégrant un accéléromètre. La manette détecte les pressions sur chaque boutons et l'accéléromètre renvoie des informations concernant les déplacement dans l'espace de celui-ci et donc les rotations appliquées sur la manette. Également, la manette que nous avons utilisé était équipé du Wii Motion Plus, qui possède un second accéléromètre afin d'avoir une meilleure précision sur les mouvements dans l'espace : nous possédons les informations de rotation selon les 3 axes (yaw, pitch et roll), contre 2 axes pour une Wiimote sans Wii Motion Plus.

La librairie utilisée pour interagir avec la Wiimote étant WiiC. Toutes les informations sont disponibles sur le lien suivant : http://wiic.sourceforge.net/. L'utilisation technique est simple : la Wiimote est sondée ("poll") très fréquemment pour connaître le bouton actuellement pressé ainsi que l'orientation actuelle de la Wiimote. Le programme gère ensuite ces informations pour appliquer les éventuels changement à la scène 3D.

Réalité augmentée et Trivisio

ARvision Trivisio
Le casque ARvision de Trivisio

Pour afficher l'environnement alentour en réalité virtuelle, l'outil utilisé est un casque de capture Trivisio. Il s'agit d'un casque de réalité augmenté, d'où le nom du projet. Celui-ci est équipé de deux caméra sur le devant qui permettent de capturer la réalité. Le flux vidéo est retransmis à un PC qui peut retoucher l'image. Le casque a deux écrans sur lesquels afficher l'image finale : un devant chaque œil.

La configuration du casque étant légèrement compliquée, nous avons fait une page sur l'Ensiwiki pour expliquer la mise en place : https://ensiwiki.ensimag.fr/index.php/Utilisation_du_Trivisio.

Pour pouvoir retoucher l'image extraite des caméra, il est nécessaire de passer par deux choses. La première est OpenGL, afin de concevoir une scène virtuelle 3D, basée sur la réalité (en partie grâce à l'Optitrack). Cette scène permet ainsi de gérer les objets virtuels et de les manipuler. Ensuite, nous intégrons cette scène à l'image filmée par la Trivisio, manipulée par OpenCV.

Problèmes rencontrés et solutions

Calibration de l'Optitrack et création de socket UDP

Concernant l'Optitrack, il était très laborieux de récupérer les données envoyés par l'Optitrack à l'ordinateur. Nous avons fini par réussir en configurant l'interface réseau du PC à l'aide de l'enseignant. Cependant, la création d'une socket UDP pour la réception des données de l'Optitrack posait problème : cela fonctionnait très rarement et nous ignorions la cause (parfois, cela fonctionnait du 1er coup, la plupart du temps des journées de travail étaient gâchées).

De plus, lors de la calibration de l'Optitrack, il était difficile de configurer le repère du sol en plaçant le carré de calibration car des obstacles matériels (bureau, personnes travaillant dans la salle) empêchaient certaines caméras de détecter celui-ci.

Gestion de la scène avec OpenGL

Un gros problème que nous n'avons pas anticipé est que le responsable de la gestion des scène OpenGL avait déjà implémenté la scène OpenGL en Python alors que les données reçues depuis l'Optitrack ne peuvent qu'être traité par un programme C++. Nous avons dû créer un programme Python qui appelle un code C++ compilé.

Apposer un cube à la réalité à travers l'écran était aussi très compliqué. Il s'agit d'une manipulation que nous réalisions pour la première fois, c'est pourquoi nous avons eu plusieurs problème mineurs avant de parvenir à afficher un simple cube sur un écran. Par exemple, lors de la création d'un cube dans une scène OpenGL, l'image d'arrière-plan est la scène filmée par la Trivisio. Il était difficile de déplacer ce cube sans qu'il ne passe derrière l'arrière-plan. Pour résoudre ce problème, il faux sans cesse réinitialiser le Z-Buffer afin que le cube apparaisse tout le temps devant.

De plus, nous n'avons malheureusement pas eu le temps de gérer les collisions avec les obstacles de la pièce, en l'occurrence la gestion des limites de la pièce lorsque l'on déplace le meuble virtuel dans la scène OpenGL, ni d'utiliser autre chose qu'un cube comme "meuble" virtuel.

Positionnement 3D de l'objet virtuel dans une projection 2D

L'un des principal défaut que nous ayons fait preuve avec ce projet est la mauvaise gestion du temps. Dû à la quantité de projet que nous ayons eu, nous avons manqué de temps et donc peu testé l'interaction pour définir comment déplacer au mieux les objets dans la scène.

Nous savions d'avance qu'il aurait fallu gérer le déplacement de l'objet virtuel 3D dans la scène 2D. La décision d'utiliser la Wiimote s'est fait tardivement. Ce n'est pas forcément le moyen le plus efficace, malgré le fait que ce soit le plus efficace à disposition.

Quantité d'élément technique

La majeure difficulté de notre projet est sans aucun doute la quantité d'éléments que nous utilisons dans notre projet. Là où d'autres groupes ont choisi un seul équipement à utiliser, voire deux; nous en avons trois : le système Optitrack, le casque ARvision Trivisio et la Wiimote. Tout fonctionne séparément, mais c'est dans la communication des différents élément où le bas blesse et où nous avons perdu tant de temps.

Évaluation

L'interaction n'a pas encore été testée dans sa forme finale malheureusement.

Protocole de test de l'interaction

Afin de tester l'interaction dans le système sommaire actuel, nous avons eu l'idée suivante :

Le programme ne peut gérer qu'un cube pour l'instant. Pour vérifier la situation vis-à-vis de la réalité, il faudrait demander aux sujets de test de déplacer un objet cubique (par exemple un carton) vers plusieurs positions réelles et de calculer le temps nécessaire à ce déplacement. Il faudrait ensuite utiliser notre système pour déplacer le même objet, mais virtuel cette fois, à travers la pièce puis calculer le temps.

Comparer les deux temps serait un assez bon symbole de l'efficacité ou non du système.

Bien entendu, il y a 4 cas à vérifier :

1. Déplacement de l'objet physique sans connaissance de la manipulation. 2. Déplacement de l'objet physique en connaissant la manipulation. 3. Déplacement de l'objet virtuel sans avoir pris en main le système d'interaction. 4. Déplacement de l'objet virtuel après un temps d'adaptation avec l'interaction.

Protocole de test vis à vis d'un système WIMP

Un système WIMP existant pourrait être un logiciel de modélisation 3D fait spécialement pour représenter un espace intérieur et un catalogue de meuble. Il serait utile de constater la différence de vitesse pour placer par exemple 3 meubles avec le logiciel, et 3 meubles avec notre projet. Notre projet n'est évidemment pas assez abouti pour effectuer ce test.

Résultat de l'interaction

Cette interaction n'a malheureusement pas encore été testée.

Conclusion

Notre projet était très ambitieux mais il était théoriquement réalisable avec les outils à notre disposition. Cependant, nous nous sommes confrontés à de (trop) nombreuses difficultés techniques sur notre implémentation, ce qui a ralenti considérablement l'avancement.

Nous pensons toutefois qu'avec un peu de finalisation, nous aurions pu créer une interaction cohérente pour le but fixé. Bien entendu, il y aurait quelques ajustement à faire :

  • Utiliser un meilleur casque de réalité virtuelle. Le casque Trivisio n'est pas mauvais mais la résolution des écrans et des caméras n'est forcément optimal, notamment au niveau du taux de rafraîchissement des images des écrans.
  • Utiliser un meilleur système de manipulation que la Wiimote. On pourrait imaginer attacher des réflecteurs Optitrack à la Wiimote pour donner un repère et une orientation à celle-ci dans l'espace de la scène. Cela permettrait un déplacement extrêmement précis des objets manipulés.
Edit - History - Upload - Print - Recent Changes - Search
Page last modified on September 30, 2016, at 07:29 AM