Aide au réaménagement d'intérieur par interactions tangibles (Post-WIMP 16/17)
Sommaire
Présentation de l'équipe
L'équipe ayant réalisé ce projet est composée de :
- Matthieu Baumann (MMIS)
- Guillaume Betmont (MMIS)
- Hugo Mathias (MMIS)
- Isabelle Morin (MMIS)
Nous avons été encadrés par François Bérard.
Contexte et objectifs
Motivations
L'aménagement ou le réaménagement d'une pièce, que ce soit dans un cadre purement privé (son appartement) ou professionnel (réorganisation d'un entrepôt), est une situation qui arrive à chacun couramment et pour laquelle les outils mis à disposition sont rarement intuitifs. Il existe en effet différentes façons d'aborder le problème: la première est par l'élaboration d'une maquette, ce qui est pratique pour se représenter facilement les déplacements, mais coûteux car nécessite souvent beaucoup d’objets et d'espace, et ne permet par réellement une immersion. La seconde est l’utilisation de logiciels spécialisés dans le domaine, qui apportent plus de polyvalence mais proposent en contrepartie des interactions peu adaptées, non intuitives, ou qui demandent beaucoup de temps pour être pris en main.
Notre objectif a alors été de fusionner ces deux approches pour présenter un nouvel outil de réaménagement d'intérieur basé sur une interaction tangible, qui donne à la fois le côté pratique de la gestion d'objets comme on peut le faire sur une maquette, et la facilité de déplacement dans la pièce donnée par les logiciels spécialisés.
Public visé
Notre logiciel s'adresse à un public varié, aussi bien un particulier qu'un professionnel, qui cherche à réaménager une pièce. Il ne s'agit pas ici d'ajouter des meubles via un catalogue par exemple, mais bien de positionner et repositionner des objets déjà présents dans la pièce. Nous avons également cherché à rendre cette tâche le plus facile possible pour des utilisateurs n'ayant pas l'habitude des logiciels de modélisation 3D via la transmission directe des gestes dans le monde virtuel.
Solution envisagée
Pour répondre à ce besoin nous avons envisagé un logiciel qui regroupe le meilleur des 2 mondes, dans lequel l’utilisateur aura à sa disposition des pavés droits (petites briques, plus longues que larges) qui pourront être liés aux meubles (chaises, tables, armoires etc...) situés à l'écran. Via l'utilisation de briques de couleurs en carton, nous avons voulu rendre notre logiciel le plus facile d'accès possible, sans avoir besoin d'utiliser du matériel coûteux que tout le monde n'a pas forcément chez soi.
Le déplacement d'une de ces briques dans le monde réel permettra le déplacement de l'objet auquel la brique est liée dans le monde virtuel. Nous prévoyons seulement 3 degrés de liberté à ces briques : 2 translations et une rotation, ce qui signifie que les objets auront une hauteur fixe (il seront à la hauteur du sol) et ne pourront tourner qu'autour de l'axe dirigé vers le haut.
Notre logiciel disposera également de 2 vues : une vue maquette pour effectuer la majeure partie des déplacements, et une vue “1ere personne” pour s’immerger dans la pièce et affiner.
Travail réalisé
Spécifications techniques
Matériel et logiciels utilisés :
- Caméra couleur : Nous avons choisi d'utiliser une webCam USB car la qualité de l'image était suffisamment bonne pour détecter des couleurs bien différentes, et elle ne nécessite qu'une prise USB contrairement à une caméra ethernet par exemple. Cela s'inscrit dans notre volonté de rendre le logiciel accessible à tous.
- Briques de couleurs en carton : nous avons fabriqué des briques en carton recouvertes de papier coloré. Globalement, n'importe quel objet de forme non symétrique (nécessaire pour pouvoir détecter l'orientation) peut faire l'affaire, mais il est préférable de choisir des objets ayant la même taille et n'étant pas trop gros.
- Librairie OpenGL pour la création de la scène 3D
- Librairie OpenCV pour les outils de traitement d'images
Partie traitement d'images
La première partie de notre travail a été d'être capable de repérer les cubes dans le monde réel, et de les différencier les uns des autres. Nous avons donc pensé à créer des cubes de différentes couleurs, et d'utiliser des algorithmes de traitement d'images pour récupérer la position des cubes et leur orientation. Nous avons donc développé, en c++ aidé par openCV, les algorithmes nécessaires.
Les cubes sont détectés de la façon suivante :
- On convertit notre image source vers l'espace de couleur HSV, qui est plus adapté à notre problème que RGB.
- Chaque cube ayant une couleur qui est prédéfinie dans le code(une limite haute et basse dans l'espace HSV), il nous suffit de supprimer tous les pixels de l'image qui ne sont pas de la bonne couleur lors de la phase de calibration.
- La position de l'objet nous est donnée en calculant l'isobarycentre des pixels non nuls de l'image filtrée.
- L'orientation nous est donnée en utilisant les outils d'analyse en composantes principales
On obtient alors la détection suivante, avec pour exemple 4 briques :
Partie graphique
La seconde partie consistait en la représentation graphique de notre pièce. Nous avons choisi d'utiliser OpenGL pour réaliser notre scène 3D et GLSL pour un bref moteur 3D disposant des fonctionnalités suivantes :
- loader / parser de mesh 3D (.obj) pour la pièce et les meubles.
- texturing avec mipmapping.
- éclairage avec un shader blinn-phong.
- shadow mapping pour un rendu encore plus réaliste.
Nous avons créé la pièce en utilisant le logiciel Blender, comme on peut le voir sur la capture d'écran ci-contre :
Nous avons ainsi commencé par créer une scène 3D basique et des contrôles caméras liés au clavier et à la souris pour pouvoir tester les fonctionnalités implémentées dès le départ. Une fois que la partie détection fonctionnait, nous avons pu lier les déplacements des objets et de la caméra aux briques, de la manière suivante :
- chaque brique est liée à une croix, le déplacement d'une brique induit donc le déplacement de la croix correspondante dans la scène virtuelle
- si une croix est suffisamment proche d'un des objets de la scène, elle est déplacée à la position exacte de l'objet et tout nouveau déplacement de la brique associée déplacera la croix et l'objet à l'écran
- si la brique disparait du champ de vision de la caméra durant un certain temps, la croix disparait de l'écran et son objet associé s'immobilise. Lorsqu'elle réapparait elle n'est plus liée à aucun objet de la scène.
- Si une croix est liée à un objet, elle ne peut plus se lier à un autre.
Nous avons implémenté un changement de vue de la caméra grâce à une touche du clavier, pour permettre une vue rapprochée de la scène. Dans cette vue il est possible de se déplacer avec le clavier également, pour évaluer de façon plus précise la qualité de l'aménagement.
Problèmes rencontrés et solutions mises en place
Problèmes techniques
L'un des principaux problèmes rencontrés a été de définir très précisément comment lier l'objet physique et l'objet virtuel. Nous avions au départ évoqué la solution d'avoir autant de briques que d'objets virtuels, pour éviter les problèmes de liaisons. Puis nous avons décidé de représenter chaque brique dans la scène virtuelle par une croix pouvant se lier à un objet lorsque la distance entre les deux est suffisamment faible. Cela nous a permis de résoudre facilement le problème de liaison, et d'avoir la possibilité d'un nombre infini d’objets virtuels.
La taille des briques est au final assez problématique, une chaise dans le monde réelle n'a pas vraiment la même taille qu'une table ou une armoire. Ainsi, comme notre implémentation est basée sur la détection des centres des briques, il est parfois difficile, voire impossible, d'être précis.
La détection des couleurs a également été une source de problèmes durant notre projet. En effet selon la luminosité, la qualité de la caméra, le type de matériau, les couleurs peuvent être perçues de façon différente et donc engendrer des erreurs. De plus il a fallu trouver des couleurs suffisamment différentes pour que chacune soit bien détectée.
De la même manière, nous avions prévu le changement entre les 2 vues et le déplacement de la caméra à l'aide d'une brique dédiée à la caméra. Néanmoins, la détection des cubes n'est pas assez précise pour gérer correctement une caméra (en effet des petits mouvements perpétuels de caméra sont très vite désagréables à l'oeil humain). D'autre part, nous n'avons pas réussi à trouver de solution satisfaisante pour le switch de vue : en effet détecter la présence ou l'absence de la brique caméra n'est pas trivial. Nous avons donc décidé de garder l'utilisation de quelques touches du clavier pour cette vue.
Problèmes d'organisation
Du fait de l'importance de travaux à réaliser, nous avons vite pris la décision de segmenter le projet en autant de parties qui pourraient être présentées en temps que tels, afin d'être sûrs d'avoir un rendu à la fin du temps imparti.
En particulier, il a été décidé que la volonté de rendre la scène immersive grâce au système de suivi Optitrack couplé aux lunettes de vision 3D serait réalisée en dernier si le temps nous le permettait puisqu'il ne s'agissait pas d'une caractéristique fondamentale de notre projet.
Et effectivement la difficulté de mettre cet outil en place et le manque de temps s'est avéré problématique et nous avons choisi de ne pas le réaliser pour ne pas mettre en danger le reste de notre travail.
Évaluation de l'interaction créée
Scénario d'utilisation : Charger une table et 4 chaises, essayer de placer convenablement les chaises autour de la table.
Impressions :
- Isabelle Morin : C'est facile d'utilisation et pratique, même si la rotation est un peu capricieuse.
- Guillaume Betmont : Le déplacement est intuitif, c'est un bon prototype même s'il y a des choses à améliorer. La vue 1ère personne est agréable
- Matthieu Baumann : L'interaction est plutôt pratique, même si les déplacements sont parfois imprécis dû à une mauvaise détection des contours des objets.
- Hugo Mathias : La prise en main est plutôt intuitive et ludique. On arrive bien à mettre les objets où on veut.
- Mikaël Muller : C'est rigolo ! Les rotations posent problème, et parfois le lâcher d'objets n'est pas suffisamment précis, mais globalement c'est bien.
- Ilyès Kacher : L'interaction me plait bien ! C'est plus simple de placer des objets qu'avec clavier souris. Les limitations sont dûes au prototype, mais l'interaction est efficace et simple !
Conclusion
Ce projet nous a permis de mettre nos connaissances au service d'une idée innovante que nous avons développée et enrichie au fil du temps. Nous avons pu mettre en place la plupart des fonctionnalités imaginées au départ du projet, malgré quelques compromis dû au manque de temps ou à des difficultés techniques mal évaluées. Toutefois notre prototype est fonctionnel et permet de tester notre interaction avec succès.
Améliorations possibles
Pour rendre notre logiciel plus performant, il faudrait trouver un meilleur moyen de gérer les rotations des objets. De plus nous n'avons pas trouvé de moyen satisfaisant pour gérer la caméra en vue proche, il aurait fallu imaginer un autre système, se servir d'une manette ou autre par exemple. Ajouter une dimension immersive à notre logiciel par l'utilisation de lunettes stéréoscopiques permettrait également d'apporter une plus grande valeur ajoutée à notre système.