3A Projet Post-WIMP - Numérisation 3D avec Optitrack
Ce projet permet d’étudier une nouvelle interaction consistant à mesurer un objet et le volume de sa boîte englobante. Cette mesure étant faite la plupart du temps à la main avec un outil de mesure comme un mètre, nous avons implémenté une méthode utilisant l’accessoire Wiimote et le système Optitrack afin de faciliter la mesure. Il s'agit ensuite de voir s’il y a un gain d'efficacité et de temps avec notre méthode et de quantifier ce gain.
Sommaire
Membres de l'équipe
- Jean-Michel LAO
- Jeremy JUSTON
- Teva NEYRAT
- Yu HUA
Introduction
Prendre les dimensions de meubles peut être long et fastidieux pour des professionnels visant à faire un inventaire de leurs mobiliers. En effet, il se peut que le professionnel fasse des erreurs de mesure en allant trop vite ou bien qu'il se fatigue rapidement lorsque le nombre de meubles à mesurer est conséquent. Nous avons alors développé un dispositif permettant de faciliter la prise de mesure consistant à numériser un meuble avec le système Optitrack.
Nous définissons la tâche de l'expérience comme étant l'acquisition des dimensions d'un objet ainsi que du volume de sa boite englobante.
Ainsi nous utilisons deux outils pour numériser un meuble qui sont un système Optitrack et une Wiimote. La Wiimote servira de pointeur dans l’espace mais aussi d'appareil servant à effectuer la numérisation grâce à ses boutons. Quant au dispositif Optitrack, celui-ci permet d’obtenir les coordonnées du point dans l'espace désigné par la Wiimote. Le choix d'utiliser le système Optitrack ainsi que la manette Wiimote est expliqué ci-dessous.
Objectif
L’objectif de ce projet est de vérifier que notre dispositif :
- est efficace pour la tâche définie au dessus
- est pertinent avec les interactions que l’on a choisies
- présente un gain par rapport à la méthode dite classique
Présentation du dispositif de numérisation
Le système Optitrack
Le système Optitrack est basé sur des caméras infrarouges (IR) connectées par USB (parfois ethernet) à un hub USB Optihub, lui-même connecté à un PC dédié exécutant le logiciel de suivi Motive Tracker.
Les lentilles des caméras sont entourées de diodes électroluminescentes (LED) qui envoient de la lumière infrarouge dans la direction de l'axe optique des lentilles. Cette lumière est réfléchie dans la direction opposée par les marqueurs rétro-réflexifs et capturée par les caméras. Par conséquent, les caméras ne voient qu'un ensemble de petits points dans leurs images 2D. Le système doit connaître la position relative et le champ de vision de chaque caméra, afin de pouvoir calculer la position 3D des points à partir de leurs positions 2D dans les images des caméras.
Nous avons choisi d'utiliser le système Optitrack car c'est le système le plus adapté pour notre dispositif de numérisation. Il est possible d'obtenir de localiser spatialement les marqueurs et ainsi les utiliser comme pointeurs pour effectuer la numérisation.
Nous avons installé six caméras infrarouges dans la salle Fablab à chaque coin. Nous avons ajusté ces six caméras pour que leur portée visuelle soit dans la même zone. L’avantage est qu’il suffit d’une caméra pour capturer le marqueur, cela évite les situations d'occlusion où notre corps cache une ou plusierus caméras lorsque l’on numérise. Avant chaque utilisation, il est nécessaire de calibrer les caméras depuis le logiciel Motive.
On peut ici voir le champ de vision des six caméras ainsi que le marqueur représenté par un point rouge dont la position est capturée en temps réel.
Depuis le logiciel Motive, il est possible de stream les données des marqueurs en temps réel sur le réseau.
Un script C fourni permet de récupérer ce stream de données et de les afficher en temps réel frame par frame indéfiniment.
Ce script a été modifié de sorte :
- qu'il récupère seulement la position des marqueurs non identifiés, c'est à dire que les rigid body sont ignorés
- que les coordonnées du marqueur sont récupérées seulement à la première frame.
- que ces coordonnées sont ensuite écrites sous le format [x, y ,z] dans un fichier texte avec une précision au millimètre
- que le script termine son exécution juste après l'écriture
Le choix de la Wiimote
Nous avons réfléchi à plusieurs interactions afin de rendre la numérisation ergonomique, efficace et intuitive. Une première approche consistait à placer un marqueur sur chaque doigt de la main gauche et deux marqueurs sur le pouce et l'index de la main droite. La main gauche permettrait de naviguer entre plusieurs modes en effectuant des gestes différents et la main droite d'acquérir les points en pinçant les doigts.
Cette approche a été abandonnée car elle présentait plusieurs défauts. Tout d'abord, les mouvements de la main gauche pouvait être difficiles à capturer s'il y a occlusion. De plus les différents mouvements n'étaient finalement pas nécessaires et pratiques à réaliser. Finalement, pincer des doigts pour récupérer un point est une méthode d'acquisition dont la une précision varie beaucoup.
Nous avons alors opté pour la Wiimote qui est une manette de jeu présentant plusieurs avantages.
D'un point de vue ergonomique, la Wiimote est légère, sa prise en main simple et légère en fait d'elle un très bon pointeur. Nous avons alors revêtu la Wiimote d'une coque en plastique avec un trou au niveau du bout de la manette qui a été bouché avec une tige verticale. Nous avons ensuite attaché un marqueur au bout de la tige, le système Optitrack peut alors localiser la Wiimote.
D'un point de vue interaction, les boutons de la Wiimote permettent de réaliser une multitude d'actions, le tout à porté de main. Dans notre cas, nous avons décidé d'utiliser un seul bouton pour l'action : Acquérir un point. Les deux boutons principaux A et B sont les meilleurs candidats pour réaliser cette action.
Une première intuition a été de choisir le bouton B car il s'agit du bouton au dos de la manette servant de gâchette. Mais après quelques prises en main, nous avons remarqué qu'appuyer sur la gâchette provoque des mouvements de la manette qui sont certes légers mais qui peuvent créer des imprécisions. Nous avons alors choisi le bouton A qui ne provoque aucun mouvement après appui.
Méthode de numérisation
Un script Python a été écrit pour lancer l'acquisition des points ainsi que la visualisation de la boite englobante. Pour commencer la numérisation, il faut exécuter le programme Python qui va lancer une interface interactive Tkinter.
Toutes les commandes sont expliquées sur l'interface en cas de problème.
On lance la numérisation en appuyant sur le bouton I du clavier qui va connecter l'ordinateur à la Wiimote via bluetooth. L'utilisateur dispose de quelques secondes pour effectuer la connexion en appuyant sur les boutons 1 et 2 simultanément.
Une fois la manette connectée, l'utilisateur est invité à acquérir trois points en appuyant sur le bouton A comme expliqué dans la section ci dessus. Afin d'obtenir le volume d'un objet, on numérise une boite englobante de l'objet. L'utilisateur a seulement besoin d'acquérir trois points situés aux coins pour calculer la boite englobante.
Un point en bas, le point au dessus du premier point et le point haut diagonalement opposé. Les autres points sont ensuite calculés automatiquement par le programme. En appuyant sur le bouton, le script C évoqué au-dessus s'exécute et écrit les coordonnées du marqueur qui sont ensuite lues directement et stockées en mémoire. Après l'acquisition d'un point, un délai de 1 seconde a été ajouté pour éviter que le programme récupère d'autres points car l'appui du bouton peut enclencher plusieurs acquisitions à la fois. Les LED de la Wiimote s'allument au fur et à mesure que les points sont acquis afin de faire un retour visuel à l'utilisateur.
Une fois les trois points récupérés, les cinq autres points de la boite englobante sont calculés à partir des coordonnées de ces trois points. Grâce à la librairie Python matplotlib, la boite englobante est alors visualisable avec ses valeurs : longueur, largeur et hauteur en centimètre et le volume en m3.
Notre dispositif possède également une fonctionnalité de correction de point. Si l'utilisateur juge qu'un des points a été mal acquis, il peut appuyer sur la gâchette B pour déclencher le mode Correction après avoir sélectionné trois points.
Si l'utilisateur ne veut pas corriger des point il lui suffit d'appuyer sur le bouton "Home" pour finir l'acquisition des points.
Il peut naviguer avec les touches "+" et "-" de la manette pour naviguer entre les différents points. L'allumage des LEDs permet à l'utilisateur de savoir sur quel point il souhaite faire la correction.
Une fois que l'utilisateur a décidé du point qu'il souhaite corriger, la correction s'effectue simplement en appuyant de nouveau sur le bouton A avec le marqueur situé à la nouvelle position voulue pour lancer de nouveau l'acquisition du point.
Pour quitter le mode Correction, il suffit d'appuyer sur le bouton "Home".
Expériences réalisées
Pour mesurer l'efficacité de notre dispositif, nous avons effectué des expériences pour le tester. La tâche consiste à mesurer les dimensions de la boite englobante de trois objets avec un mètre et ensuite avec notre dispositif. Les trois objets sont : une chaise, un écran d'ordinateur ainsi qu'une table.
Pour chaque expérience, deux critères sont évalués:
1) La précision du dispositif par rapport aux mesures ground truth avec le mètre
2) Le temps de mesure pour les deux méthodes
Les trois objets sont les suivants:
Voici des photos prises lors des mesures effectuées :
Voici les mesures que nous avons relevées (en cm):
Et les temps associés en secondes (sachant que le temps de mesure au mètre comprend le temps qu'il faut pour noter les mesures relevées sur papier ou ordinateur) :
Calculs d'erreurs :
Nous avons ensuite fait quelques calculs d'erreurs sur ces mesures.
Les erreurs quadratiques en terme de longueurs sont de :
Chaise : 1,7 cm
Ecran : 1,7 cm
Table : 3,7 cm
Puis, nous avons comparé le ratio des volumes créés avec ces valeurs (volume calculé avec l'application / volume calculé avec le mètre) :
Chaise : 0.96
Ecran : 0.90
Table : 1.01
Enfin, après comparaison des temps, on trouve que l'application est en moyenne 2,8 fois plus rapide que la mesure au mètre.
Limitations du dispositif
Le principal défaut du dispositif reste l'occlusion des caméras qui empêche l'acquisition correcte des points. Il faudrait mettre plein de caméras dans toute la pièce pour que le marqueur soit visible peu importe sa position.
La précision du dispositif est de même forcément moins efficace qu'un mètre du diamètre du marqueur au bout de la Wiimote pour l'Optitrack. De plus, lorsque l'objet à mesurer ne possède pas une forme rectangulaire, il faut estimer la boite englobante en prenant des points "flottants"ce qui entraine naturellement des imprécisions. Cela s'est particulièrement fait remarquer lors de l'acquisition des mesures de l'écran. En effet, les temps d'acquisition sont plus longs à cause de la forme de l'écran.
Le problème d’autonomie de la Wiimote était également une pierre d’achoppement pour nos expériences. Nous avons souvent dû interrompre nos expériences en cours de route car la Wiimote n’avait plus de batterie.
Conclusion
Avec les différentes expériences que nous avons mises en place pour évaluer notre dispositif, nous avons pu observer un gain de temps sur la prise de mesure d'un meuble. Ce gain de temps n'est pas négligeable pour un professionnel en action qui passe beaucoup plus de temps à faire ses mesures.
Plusieurs pistes d’amélioration du système sont envisageables:
1) Tout d'abord, pour que le dispositif soit utilisable par de vrais professionnels, il est bien entendu impensable d'installer des caméras partout et mettre en place tout le système Optitrack. En effet, se passer du système Optitrack serait primordial pour un professionnel, pour cela on pourrait utiliser le système de l'accéléromètre intégré de la Wiimote afin de récupérer sa position. Il faudrait en revanche voir si le pourcentage d'erreur du système serait équivalent ou non.
2) Notre dispositif permet seulement une numérisation en boîte englobante qui est une fonctionnalité principalement utile pour des déménageurs. Mais on pourrait élargir les interactions en essayant de numériser un meuble de façon précise en respectant bien sa forme et ensuite générer un modèle 3D à partir de la numérisation. Cette fonctionnalité pourrait être utile pour un architecte d'intérieur qui souhaite aménager une pièce par exemple.