Tuesday, 10 August 2010

Encore du travail ?

Comme promis, voici un post pour raconter un peu ce que je fabrique, maintenant que Pamplemousse marche bien.

Mais tout d'abord, voici l'info du jour.

- Cliquez sur l'image pour agrandir -

### Mon travail : Spatialy Augmented Reality

Et donc, depuis trois semaines, je passe mon temps sur un problème assez intéressant de réalité augmentée. Il s'agit d'étendre le concept phare de Inition mais avec des projecteurs.


Holition : une webcam, un marqueur en plastique en forme de bagouze ou de montre et wiiii


### La même chose, mais avec un projecteur, et en vraie 3D !

Mon problème est donc le suivant : imaginez que vous portiez un bracelet blanc et des lunettes 3D, et que dès que vous passiez votre bras dans le champ d'un projecteur. A la place du bracelet un peu moche est projetée l'image d'une vraie montre* en 3D, parfaitement adaptée et que vous pouvez admirer.

Une première réaction, justifiée, est de se dire "Tu projettes juste l'image de la montre un peu déformée là où se trouve le bracelet et hophophop". Et bien non.

Le premier soucis est qu'on ne peut pas approximer quoi que ce soit, car on n'a aucun sentiment de réalité sinon (on n'y croit pas). Le deuxième soucis est que tout doit être optimisé pour éviter du retard (si la montre est là où mon poignet était deux secondes avant, c'est pas terrible). Le troisième soucis est que l'intuition théorique que l'on a de la 3D est fausse et que c'est bien plus compliqué que ce que ça n'y parait pour faire quelque chose de réel.

### Premier boulot : éviter le retard en prédisant la trajectoire

J'ai donc passé un certain temps sur la deuxième problématique, tâchant d'utiliser un filtre prédictif : le filtre de Kalman, qui est utilisé dans les GPS pour prévoir où va se trouver la voiture dans les prochaines secondes sans avoir besoin d'attendre la longue mesure satellite.

Un bon tas ignoble de stats et de matrices


Mais s'il marchait dans certains cas, il contredisait la première problématique, et j'ai dû abandonner à regret.

### Deuxième boulot : faire marcher le bousin lui-même

L'idée générale est de décomposer le procédé en plusieurs étapes :
  1. - On imagine un modèle du vrai monde avec l'objet virtuel placé quelque part
  2. - On repère l'utilisateur dans ce monde avec une caméra
  3. - On calcule l'image que l'utilisateur doit avoir de l'objet virtuel suivant sa position
  4. - On calcule la transformation que doit subir cette image pour pouvoir être projetée correctement par le projecteur
L'idée. Heureusement qu'il y a un bouquin sur le sujet... et que Steve l'a lu :D

  • Un moteur 3D doit se charger de créer une version virtuelle du monde avec l'objet virtuel dedans.

Depuis deux semaines donc, j'apprends à utiliser un moteur 3D assez sympa : openSceneGraph. C'est en réalité plus ou moins juste un layer objet pour openGL, ce qui veut dire que c'est un framework très bas niveau qui permet de faire tout tout seul et de toucher au maths du fond. Ca, j'ai apprise toute seule.


  • Il faut également un moyen de repérer le bracelet.

J'apprends ainsi à utiliser un framework permettant de repérer des marqueurs (sortes de cartons avec des motifs) : ARToolkit, qui est la base d'un des produits d'Inition (MagicSymbol) Ca, c'est super laid, c'est fait en C et donc j'apprends avec Tom.


MagicSymbol est basé sur ARToolkit

  • Correction du projecteur

Pour le moment, Steve et moi, on a terminé la fin : la correction du projecteur. Par chance, il se trouve qu'une fois qu'on trouvé une bonne méthode de calibration, la relation unissant l'image à projeter et l'image que l'utilisateur se faire de l'objet virtuel dans le monde réel (pfiou) est une matrice constante qui multiplie une matrice qui dépend de la position de l'utilisateur.

C'est en gros le plus dûr, étant donné que Steve a déjà fait tout ce qui concerne les premières parties dans de précédents projets.

Pourquoi il faut corriger le projecteur
(L'écran bouge dans notre cas, puisque c'est le marqueur,
mais coup de bol, la correction est une matrice constante)


### Mon collègue Tom

Tom, c'est le gars qui a tout codé dans la boîte.

C'est le gars que tu vois en permanence les yeux perdus dans les abymes profondes du code, avec le regard de celui qui en sais trop. C'est lui qui a codé le programme mère qui fait vivre Inition, en six mois, dans son lit. C'est le gars qui a plus de barbe et de cheveux que Sébastien Chabal.

Et puis il est un peu taquin...






### Bisou bisou

Pour vous donner une idée de ce que la réalité augmentée peut donner, voilà une vidéo d'une boîte roumaine qui est venue faire une démo chez nous :


Je vous le conseille, ça vaut le coup d'oeil !
Des bisous !





* ou si vous ne trouvez pas ça cool, remplacez "montre" par "raptor".



4 comments:

  1. De la 3D sur un ecran, il n'y en a pas dans Star Wars. Ca n'a donc aucun avenir.

    ReplyDelete
  2. Justement tiens, ce qu'on fait ici permettra de faire apparaître la princesse Leia en hologramme.

    ReplyDelete
  3. Juste pour la tête de l'anglaise en haut de la page "Leonardo3D"...
    J'imagine Inition avec seulement des madames comme ça :D

    ReplyDelete