REVOLTA-BLAUDEAU Frédéric

ISMRA - ENSI de CAEN
Filière Génie Informatique

Année1994-1995




Rapport de stage

de

fin d'études d'ingénieur


NAVIGATION DANS LES MONDES VIRTUELS

Résolution des références, raisonnement géométrique et exécution d'actions






Au Laboratoire M. Pierre Nugues, Maître de Conférence




Je tiens tout d'abord à remercier

Christophe Godéreaux, pour m'avoir apporté toute son expérience de DIVE, pour son aide et pour sa constante disponibilité,

Pierre-Olivier El-Guedj pour ses explications sur l'analyseur syntaxique, ses idées,

et Pierre Nugues pour toutes ses idées, ses conseils, ses techniques, sa méthode.


1. Introduction

Le but de ce stage est de réaliser un prototype d'agent d'aide à la navigation dans un monde virtuel, la navigation se révélant être l'un des points les plus délicats pour les nouveaux utilisateurs de ce type d'environnement. Ce stage, qui durera six mois, s'intègre dans un projet de réalisation d'un agent conversationnel pour le programme COST-14 de la Commission des communautés européennes sur le travail coopératif à l'aide de l'ordinateur DIVE. Les entités du prototype déjà réalisés ont pour rôle de traîter l'analyse syntaxique et sémantique. Les modules qui nous intéressent ici sont ceux du gestionnaire d'actions qui permet d'exécuter les ordres de navigation d'un utilisateur. Ce gestionnaire utilise module de résolution des références et module de raisonnement géométrique. Le système résultant s'intégrera dans un outil de téléconférence.






2. Un système de réalité virtuelle pour le travail en groupe : DIVE

DIVE, Distributed Interactive Virtual Environment, est un environnement virtuel réparti. Il se fonde sur le système d'exploitation Unix et les protocoles Internet [ANDERSON 94]. Il a été développé par le Swedish Institute of Computer Science (SICS), membre de COST 14. Il a notamment comme but d'être un outil de téléconférence.

L'environnement DIVE s'articule autour d'une base de donnée géométrique partagée. Il est constitué de processus pouvant être soit des utilisateurs humains soit des automates. Lorsque l'utilisateur est connecté à DIVE par le réseau Internet, il est représenté graphiquement par un agent virtuel disposant d'un véhicule. Ce véhicule est représenté sur l'écran par trois icônes attachées à trois modes de déplacement (voir tableau 1).


      Type de déplacements              Icônes              Représentation

    déplacement dans le plan                                                     
           horizontal:                                                           
un axe de translation, un axe de                                                 
            rotation                                                                 déplacement dans le plan                                                     
            vertical:                                                            
    deux axes de translations                                                         deux axes de rotations                                                      



Tableau 1: les icônes de navigation

Un utilisateur peut voir, rencontrer (figure 1), collaborer avec d'autres participants pouvant être des utilisateurs ou des applications. Une application est un automate qui a pour but de contrôler des tâches simples et/ou de répondre à des interactions avec les utilisateurs.


Figure 1: un monde de DIVE avec deux utilisateurs connectés

Conceptuellement, ce système peut se décrire comme une mémoire partagée par un ensemble de processus interagissant sur celle-ci (voir figure 2). Cette mémoire partagée se répartit en mondes. Chaque monde représente un ensemble spécifique d'objets et de paramètres complètement distincts des autres mondes. Un processus de DIVE est un membre d'exactement un seul monde mais il peut changer dynamiquement de monde. Lorsque l'utilisateur se connecte à DIVE, il perçoit et interagit sur le monde par l'intermédiaire de dispositifs matériels ou logiciels. Ces dispositifs sont gérés par des applications. Ils permettent la visualisation (sur un écran, un visiocasque...), l'interaction tactile (Data Glove, souris), la gestion d'ascenseurs, d'agents virtuels...

Figure 2: le fonctionnement conceptuel de DIVE.






3. Le corpus de dialogues

Tout d'abord, un corpus de dialogues a été réuni afin d'étudier l'utilisation de la langue orale dans ces environnements virtuels. Cette démarche est cruciale pour identifier les problèmes n'apparaissant pas dans la réalité et laisser de côté ceux ne semblant intéressants que dans l'abstrait [ALLEN 94]. Pour chaque dialogue, une personne joue le rôle de l'utilisateur et une autre celui de l'agent virtuel. Ces dialogues sont enregistrés sur bandes magnétiques et retranscrits sur machine. Quatre dialogues d1, d2, d3 et d4 ont été collecté avec à chaque fois un utilisateur différent. C'est à partir de ces corpus que j'ai construit la présente application, [GODEREAUX 95] soumis.


A nous sommes connectés au monde robot. U8 tourne sur toi-même. A vers la droite ou vers la gauche? U9 vers la droite. A voilà. U10 prends de la hauteur. U11 arrête de monter. U12 monte. A oui. U13 stop. Figure 3 : Extrait 1 du dialogue d4


            U45        va jusque là.
            A          je me dirige vers la montagne.
            U46        fait le tour de la montagne.
            A          oui.
            U47        retourne sur l'île précédente
            A          je ne connais pas l'île précédente.
            U48        regarde à droite.
            A          voilà.
            U49        encore.
            U50        c'est ici.
            A          je me dirige vers la montagne.

         Figure 4 : Extrait 2 du dialogue d4








4. Architecture

Le système se compose d'un analyseur syntaxique, d'un analyseur sémantique, d'un gestionnaire de dialogues, d'un gestionnaire d'actions, un résolveur de référence et un raisonneur géométrique (figure 5). J'ai réalisé les 3 derniers. Les trois premiers, plus spécifiques au traitement linguistique, ont été réalisés par Pierre-Olivier El-Guedj et Christophe Godéreaux.

L'analyseur syntaxique est fondé sur les techniques de Chart [EL GUEDJ 94], et utilise un lexique fondé sur l'analyse des corpus. Il accepte des treillis de mots permettant le traitement en parallèle de plusieurs hypothèses lexicales. Il utilise des grammaires syntagmatiques et des dépendances enrichies d'équations d'unification. Pour cette application, nous nous sommes restreints à une grammaire syntagmatique du fait de la brièveté des énoncés à analyser. L'analyseur accepte les mots séquentiellement et les analyse au fur et à mesure de leur énonciation jusqu'à ce que la phrase soit complète.

L'analyseur sémantique décompose le Chart, retourné par l'analyseur syntaxique, en une liste d'actions. D'après les énoncés qui apparaissent dans notre corpus, cette décomposition dépend de plusieurs paramètres :

· le nombre de propositions et leur fonction dans l'énoncé.

· le nombre de verbes dans chaque proposition et la fonction de chacun de ces verbes: s'il dirige la proposition principale, s'il appartient à un complément de circonstance...

Nous utilisons une grammaire de cas afin de représenter sémantiquement une action sous la forme de structure prédicative. Ceci s'inspire du système de dialogue EVAR [MAST 93]. Le verbe de l'action correspond au nom du prédicat. Les autres constituants de la phrase sont associés aux paramètres de la structure prédicative. Par exemple, le verbe “ monter ” et le verbe “ regarder ” sont associés aux prédicats:

monter([sens, ALLER],[lieu_par_defaut, EN_HAUT]).

regarder([sens,REGARDER],[lieu_par_defaut, EN_AVANT]).

Ce qui est fourni par l'analyseur sémantique présente un certain nombre de références ambiguës. Elles sont résolues par le résolveur de références. Une fois la liste d'actions déterminée sans ambiguïté, elle est transmise au gestionnaire d'actions. Si ces actions sont exécutables, le gestionnaire de dialogues acquiescera l'ordre de l'utilisateur par un message positif aléatoire. Dans le cas contraire le gestionnaires de dialogues signalera oralement la cause de la non-exécution de l'ordre. La synthèse orale permettra à l'utilisateur de modérer son attention visuelle ordinairement accaparée par le flot continu d'images.

Le gestionnaire d'actions vérifiera et exécutera les actions transmises par l'analyseur sémantique.


Figure 5: architecture du prototype

Pour l'instant, l'interfaçage entre l'analyseur sémantique et le gestionnaire d'actions n'est pas réalisée car l'analyseur sémantique n'est pas totalement terminé. Le gestionnaire n'accepte, pour le moment, que des phrases simples du type verbe-préposition-nom et éventuellement un adjectif se rapportant à ce nom. Il utilise un résolveur de références et un module de raisonnement géométrique.






5. La résolution des références

5.1. Le nommage et le codage des objets

Associer un nom à un objet est parfois une tâche complexe [KARLGREN 95]. Les utilisateurs peuvent utiliser un vocabulaire différent pour désigner la même chose. Ils peuvent aussi considérer certains objets comme des compositions ou des hiérarchies et des relations entre les objets, alors que dans la base de données, ils forment des entités uniques. Une maison peut se représenter comme un ensemble de lignes polygonales ou bien un ensemble de sous objets tels qu'un toit, une porte, des fenêtres, etc. Ces sous objets étant constitués soit d'autres sous structures, soit des lignes polygonales. De plus, il faut tenir compte de l'orientation des objets : le " devant d'une maison " n'est pas la même chose que le " devant d'un cube ".

Dans le prototype présent, les objets sont des entités géométriques (figure 6) de la base de données du monde auxquelles on associe un concept par exemple maison. Ce nommage est bien sûr dépendant de la structure de la base de données géométrique. Nous avons cherché à établir les correspondances les plus pertinentes en fonction de notre corpus. Les objets du monde sont identifiés de manière unique et sans hiérarchie par deux paramètres: un nom choisi pour désigner l'objet correspondant aux mots utilisés dans le corpus, par exemple cube, maison, voiture et un numéro (cube numéro 1, cube numéro 2, ...). Si un utilisateur n'utilise pas ce nom, il faudra résoudre le problème par le dialogue.

object {
maj_descr "CUBE"
min_descr "2"
material "BLUE_NEON_M"
translation v -18 0 39
eulerxyz v 0 0.6 0
view 0
{
RBOX
v -0.5 0 0.5
v 0.5 1 -0.5
}
}

Figure 6: définition d'un cube bleu pour DIVE

Pour ce qui concerne l'orientation, nous avons cherché à respecter un principe unique : si on peut aller à l'intérieur de l'objet, le centre de son référentiel est au centre de l'objet et c'est l'endroit où sera placé l'utilisateur s'il demande à rentrer à l'intérieur. Il faut donc le définir judicieusement. De plus, pour repérer sa face de devant s'il en a une, l'axe des z de son référentiel est orienté vers cette face.

Le monde virtuel actuel se compose des objets suivants:


                   objet      possède un devant
                               et un derrière

                   maison           oui

                   table            non

                   chaise           oui

                  affiche           oui

                 ordinateur         oui

                  voiture           oui

                  drapeau           non

                    cube            non

                   boule            non

                    sol             non


           Tableau 2: les objets du monde actuel

5.2. L'algorithme de résolution des références

Les références et les désignations ambiguës sont multiples dans les corpus. Elles proviennent notamment de références déictiques

prends ça

ou de possibilité de choix multiples

va vers la maison (parmi plusieurs)

La résolution de référence a été étudiée dans la littérature [KARLGREN 95] utilise le focus, [HULS 95] utilise une salience value pour résoudre les références et les anaphores. Cette salience value, propre à un objet, est calculée par une somme de poids, dépendant du contexte (par exemple dépendant de la visibilité, du fait que des objets aient été désignés explicitement...), sur chaque instance de la classe à laquelle appartient l'objet considéré. Les pluriels sont gérés par des ensembles. Elle distingue les références de personnes, de temps et d'espace. Finalement, elle conclut que son système n'a pas encore prouvé sa supériorité par rapport à d'autres plus complexes, mais il donne déjà de bons résultats et il est relativement simple à mettre en œuvre.

De notre côté, pour lever ces ambiguïtés de désignations, nous avons utilisé deux critères:

Le fait qu'un objet soit dans le champ de vision de l'utilisateur ou non.

Un focus dont on a pourvu chaque objet. Le focus s'inspire de [KARLGREN 95]. Il consiste en un coefficient mis à jour en fonction des interactions de l'utilisateur. Il permet de résoudre d'une manière simple les ambiguïtés de désignation. Pour chaque utilisateur, chaque objet du monde dispose d'un focus - un nombre entier -. Le focus d'un objet devient majorant de tous les autres lorsque l'utilisateur clique sur cet objet (désignation sans équivoque) ou lorsqu'il le désigne dans une phrase.

L'algorithme de résolution des références fonctionne différemment suivant que l'utilisateur mentionne ou non explicitement un objet.

1. Lorsque l'utilisateur a énoncé un nom d'objet, on établit une liste compatible avec l'énoncé. De plus, le module vérifie la concordance des adjectifs : (par exemple " avance vers le cube rouge "). Soit il ne reste qu'un objet dans ce cas la résolution est terminée, soit il en reste plusieurs. Si le focus de l'un d'eux est majorant, on choisit cet objet et la référence est terminée. Sinon, on considère le verbe utilisé. Nous avons catégorisé des couples verbes-prépositions en deux ensembles, l'un indiquant une position par rapport à l'axe de vision de l'utilisateur et l'autre indiquant un objet déjà désigné:

· Les verbes du type " va vers ", " avance devant ", " entre dans " " tourne-toi vers le cube " signifient que l'objet est visible et sans doute dans l'axe de mouvement de l'utilisateur, tous les objets non visibles sont donc éliminés. S'il reste plus d'un objet, la résolution n'est pas possible et l'agent informe l'utilisateur qu'il ne sait pas quel objet choisir.

· Pour les autres verbes comme " retourne vers ", " reviens devant " par exemple avec la phrase: " retourne vers la maison ", la visibilité n'entre pas en compte. On considère alors le focus et sélectionne l'objet compatible dont le focus est le plus élevé. Ce choix correspond à l'intuition suivante : l'utilisateur désigne sans doute le dernier des objets - ici une des maisons - vers laquelle il s'est précédemment dirigé. Dans ce cas le focus de cette maison est le plus élevé.

2. Lorsque l'utilisateur ne spécifie pas explicitement de nom d'objet (par exemple " avance devant ", " regarde le "). On recherche alors l'objet dont le focus est le maximum parmi tous les focus. Ceci correspond généralement à un objet mentionné dans la phrase précédente ou à un objet désigné à la souris. Dans ces deux cas l'objet aura le focus maximal. Si aucun objet n'est trouvé (tous les focus sont à zéro, ou plusieurs focus ont une valeur maximale, dans le cas de pluriels qui n'est pas encore traîté) on indique à l'utilisateur qu'on ne comprend pas de quel objet il s'agit.






6. Le module de raisonnement géométrique

Le module de raisonnement géométrique intervient comme intermédiaire entre les énoncés de l'utilisateur et le monde virtuel. Il constitue la principale entité de raisonnement de l'agent. Nous présentons ici le raisonnement que cet agent met en œuvre lorsque l'utilisateur lui donne des ordres de navigation. Ces ordres consistent dans des énoncés qui contiennent toujours un verbe. Pour l'instant, nous distinguons six catégories de verbes. Les deux premières correspondent à la catégorie Change of Locations citée par Sablayrolles, les deux catégories suivantes sont apparues dans le corpus, les deux dernières correspondent à la catégorie Change of Postures de Sablayrolles [SABLAYROLLES 95]:


Catégorie      Verbes                     Explication                          

va             va, avance, rentre,        correspondent à un changement de
               monte, approche, marche,   lieu avec éventuellement une         
               pénètre, entre, sors,      rotation du personnage               
               ressors                                                         

retourne       retourne, reviens          Cette catégorie est distincte de la  
                                          précédente par le fait que l'objet   
                                          devra être recherché par le focus    
                                          et non par la visibilité             

stop           stop, arrête               arrêt de l'action en cours           

continue       continue                   reprise de cette action              

tourne         tourne, oblique, pivote,   correspondent à une simple rotation  
               dévie, vire                du corps                             

regarde        regarde                    correspond à une simple rotation de  
                                          la tête                             


Tableau 3: les catégories de verbes

L'algorithme est le suivant :

1. on recherche à quelle catégorie appartient le verbe.

2. suivant le verbe :

· Si la phrase est du type verbe de déplacement (c'est-à-dire une des deux premières catégories) - préposition - objet cible; le module de résolution de référence est activé. Si un seul objet convient, on passe à l'analyse de la préposition, sinon (aucun objet ou plus d'un objet est susceptible de convenir) l'agent en informe l'utilisateur.

· Si le verbe est du type " arrête ", l'action en cours est simplement arrêtée.

· Si le verbe est du type " continue ", l'action précédemment en cours est reprise.

· Si le verbe est du type " tourne " ou " regarde ", deux cas sont possibles: " tourne vers objet " lancera la résolution de référence puis la représentation de l'utilisateur subira une rotation (de la tête ou du corps suivant la catégorie du verbe) telle que l'objet trouvé soit devant lui, sinon, il n'y a pas de nom d'objet mais une direction (" tourne à droite " par exemple), on applique alors à la représentation la rotation qui convient.

3. Analyse de la préposition dans le cas où le verbe est " va " ou " retourne " et où la résolution de référence est terminée et a abouti (un et un seul objet a été trouvé), la position à donner à l'utilisateur pour exécuter son ordre est déterminée en fonction de la préposition ou de la locution. Pour l'instant, nous avons traîté :

· devant: nous avons distingué les objets qui ont un " devant " (maison, voiture...) des objets qui n'en ont pas (cube, table...). Par exemple, " aller devant la maison " signifie se placer devant la face de la maison où apparaît la porte et à une distance suffisante pour que la maison tienne dans le champ de vision de l'utilisateur. " Aller devant le cube " signifie se tourner en direction du cube, avancer jusqu'à lui et s'arrêter à une distance suffisante. Pour ceci, chaque objet possède une distance caractéristique qui indique à quelle distance se placer de l'objet et si l'objet possède une face ou non. Ainsi, on peut calculer la position à donner à l'utilisateur et trouver son " devant ", s'il en a un.

· derrière: nous observons de même que les objets qui ont un " devant " ont un " derrière ". On distingue donc encore deux cas pour calculer la position : " derrière la maison " signifie devant la face opposée qui contient la porte (face de devant) et derrière le cube signifie à l'opposée de la position à laquelle l'utilisateur se trouve actuellement. On se place à la même distance que devant l'objet. (on utilise donc la même distance caractéristique que précédemment).

· vers, jusqu'à, près de: l'agent doit tourner l'utilisateur en direction de l'objet et le déplacer à une distance suffisante de l'objet (la même que précédemment).

· sur: de même que pour la distance, chaque objet possède une hauteur qui permet de calculer simplement la position à donner à l'utilisateur par rapport au référentiel de l'objet pour que celui-ci soit effectivement sur l'objet. Ce qui fait que " monte sur la chaise " place l'utilisateur sur le siège de la chaise.

· dans, à l'intérieur de: l'agent déplace l'utilisateur jusqu'au centre du référentiel de l'objet.

· hors de, dehors, à l'extérieur de: pour l'instant, l'agent se contente de déplacer l'utilisateur devant l'objet. Ainsi, il sort de l'objet.

· à gauche de, à droite de: on se positionne sur la droite perpendiculaire au segment passant par le centre du référentiel de l'objet et le centre du référentiel du personnage à une distance égale à la distance caractéristique de l'objet.

4. Analyse de la préposition dans le cas de " tourne ": si la phrase contient un nom d'objet, dans ce cas la résolution de référence est activée et l'agent appliquera une rotation à l'utilisateur, soit la phrase contient une direction, dans ce cas l'agent calcule l'angle correspondant et appliquera la rotation à l'utilisateur.

Le gestionnaire d'actions opérera régulièrement des petits déplacements et des petites rotations sur l'utilisateur: une rotation de la tête vers la direction demandée, une rotation du corps de l'utilisateur, ensuite elle translate l'utilisateur d'un petit déplacement élémentaire en direction du point à atteindre seulement si ce point est dans le champ de vision de l'utilisateur, ceci pour simuler le fait que nous nous tournons dans la direction où nous allons.






7. Implantation

Les mondes de la base de données de DIVE sont définis dans des fichiers. Le problème est que ceux-ci ne contiennent que des descriptions graphiques des objets et leur nom. Il a donc fallu d'une part redéfinir entièrement un monde de façon cohérente et d'autre part créer un fichier annexe comportant des descriptions supplémentaires sur les objets de ce monde et gérer ces données par rapport aux objets du monde.

7.1. Redéfinition d'un monde cohérent.

Un monde de DIVE est constitué de plusieurs référentiels : le référentiel du monde (ou référentiel absolu), et les référentiels des autres objets (par rapport au référentiel du monde), parmi lesquels les référentiels des utilisateurs (leur corps étant un objet comme un autre). Ces objets sont définis dans des fichiers lus par un préprocesseur de langage C et sont décrits par des primitives : lignes, polygones, cubes (voir figure 6)... Nous avons constaté que les descriptions des mondes existants ne sont pas cohérentes. En effet, il arrive que le référentiel d'un objet ne soit pas translaté par rapport au référentiel du monde, il en résulte que la position du cube de gauche de la figure 7 est (0, 0, 0), ce qui n'est pas souhaitable.

Il a donc fallu totalement redéfinir un monde comportant des maisons, des cubes, des tables... Nous avons défini le centre du référentiel au centre de l'objet comme pour le cube de droite de la figure 7. Nous avons orienté l'axe des z vers la face avant de l'objet s'il en a une et l'axe des y soit dirigé vers le haut de l'objet.

Figure 7 : exemple de positionnement de référentiels d'objets.

7.2. Descriptions supplémentaires

Au démarrage de l'application, l'agent virtuel lit un autre fichier comportant les descriptions supplémentaires des objets nécessaires au résolveur de références et au raisonneur géométrique:

nom et numéro de l'objet (cube 1, cube 2, ...) pour relier ces descriptions supplémentaires à l'objet de la base de donnée de DIVE.

genre du nom de l'objet (masculin ou féminin).

distance caractéristique de l'objet. C'est-à-dire la distance à laquelle placer un utilisateur pour qu'il soit devant l'objet et que cet objet tienne dans son champ de vision.

hauteur à laquelle placer une personne par rapport à l'axe des y du référentiel de l'objet (c'est celui qui est orienté vers le haut) pour que cette personne soit sur l'objet dans le cas ou elle demanderait à aller sur l'objet.

liste des adjectifs décrivant cet objet.

Chaque objet de la base de donnée de DIVE est représenté en mémoire par une structure, pour les besoins des applications qui utilisent les objets, un pointeur de cette structure est libre. Ces informations sont donc stockées dans une structure pointée par le pointeur de l'objet correspondant.

Cette liste est extensible en fonction des besoins. Par exemple, le paramètre hauteur pose un problème: si un objet subi une rotation (bien que pour l'instant, aucune application ne permette ce genre d'opération), il se peut que l'axe des y de l'objet (qui est normalement orienté vers le haut) soit orienté dans une tout autre direction comme le montre la figure 8. Pour résoudre ce problème, on devra accéder dynamiquement aux coordonnées des primitives des objets de la base de données de DIVE pour trouver la surface de l'objet la plus élevée.

Figure 8: le problème de la hauteur des objets.

7.3. Implantation du résolveur de références

Le résolveur de références est écrit en C++, il est appelé par le gestionnaire d'actions lorsqu'un ordre est reçu. Dans toutes les opérations, le résolveur s'arrête s'il ne reste qu'un objet, la résolution est alors terminée. Dans les autres cas (liste vide, ou contenant plusieurs objets), il faudra résoudre le problème par le dialogue.

Le résolveur de référence commence par remplir une liste de pointeurs sur des objets (au sens DIVE) ayant le nom spécifié dans l'ordre. Il retournera comme résultat au raisonneur géométrique un pointeur sur un objet. S'il y a un adjectif, il élimine de la liste tous les objets ne possédant pas cet adjectif. Il applique ensuite différentes fonctions dans différents ordres suivant le verbe et la préposition comme expliqué au paragraphe 2.

Pour la visibilité: pour chaque objet de la liste, on considère ses coordonnées (c'est-à-dire les coordonnées de son centre de gravité) dans le référentiel de la tête (c'est un objet comme un autre, il possède donc un référentiel) s'il est dans un cône d'axe l'axe des z de la tête, et de pente déterminée de manière pragmatique alors il est considéré comme visible (l'utilisateur doit le voir sur l'écran), sinon, il est éliminé de la liste (voir figure 9).


Figure 9: le cône de visibilité

Pour le focus: il suffit de parcourir la liste des focus des objets et de regarder quel est le plus grand des focus. Si plusieurs objets ont pour focus le focus majorant, le problème n'est pas résolu et il faudra utiliser d'autres critères ou résoudre le problème par le dialogue.

Pour mettre en place ces focus qui dépendent à la fois de chaque objet et de chaque utilisateur (puisqu'ils dépendent de ce qu'a dit ou fait l'utilisateur), une liste appartenant à un unique utilisateur est construite au démarrage de l'agent, elle contient, pour chaque objet (au sens DIVE), un pointeur sur cet objet (dans la base de donnée de DIVE) et la valeur de son focus. Ces focus sont mis à jour lors d'un clique de l'utilisateur sur un objet ou lorsque la résolution a abouti et a trouvé un seul objet.

7.4. Implantation du raisonneur géométrique

Le raisonneur géométrique est également écrit en C++. Conformément à l'algorithme décrit au paragraphe 6, il recherche la catégorie du verbe. Suivant la catégorie du verbe, il effectue les opérations suivantes:

Si le verbe est du type " va " ou " retourne ", le résolveur de référence est appelé, qu'un nom d'objet soit spécifié (" va devant la maison ") ou non (" va devant "). Il calcule ensuite la position où veut se rendre l'utilisateur par rapport à cet objet (le résolveur de référence a renvoyé un pointeur sur l'objet de la base de donnée de DIVE pour que le raisonneur géométrique puisse accéder aux coordonnées de cet objet) en fonction de la préposition. Il remplit alors une liste pour savoir où placer l'utilisateur et dans quel sens orienter son corps et sa tête, elle est donc propre à chaque utilisateur. Cette liste sera traîtée par le gestionnaire d'actions (voir paragraphe suivant). Si l'action à exécuter est complexe (" fait le tour de la maison "), elle est décomposée en actions élémentaires. La liste est donc composée de plusieurs objets (au sens C++), chacun décrivant une action élémentaire. Chaque objet est constitué des champs suivants:

1. Le point où l'utilisateur veut se rendre.
2. Une variable qui indique si le gestionnaire d'actions doit accomplir ce déplacement.
3. Le point vers lequel son corps doit être orienté.
4. Une variable qui indique si le gestionnaire d'actions doit accomplir cette rotation.
5. La direction (par rapport à son corps) vers laquelle il veut regarder. C'est-à-dire l'orientation de sa tête.
6. Une variable qui indique si le gestionnaire d'actions doit accomplir cette rotation.

Les variables 2, 4 et 6 servent à exécuter les ordres du type " stop " ou " arrête " et " continue ". Lorsque l'interfaçage avec l'analyseur sémantique sera réalisé, il sera possible d'implanter les ordres du type " arrête de tourner la tête " ou " arrête de marcher, continue de regarder à droite " par exemple.

D'autre part, nous ne tenons pas compte, pour l'instant, des déplacements des objets : si la maison bouge après que l'utilisateur ordonne de se placer devant, il se retrouvera au point initial. Celui qui était devant la maison avant qu'elle ne bouge.

Dans le cas " regarde " (tourne la tête) ou " tourne " (tourne le corps), et une direction, la même liste est remplie par un calcul d'angle (calcul des variables 3 et 5). Si c'est un nom d'objet qui est spécifié (" regarde la maison "), le résolveur de référence est appelé et la liste est remplie de la même manière après calcul.

7.5. Implantation du gestionnaire d'actions

Les ordres sont donnés par l'intermédiaire d'un petit programme C qui demande la saisie d'un verbe, d'une préposition et d'un nom, éventuellement d'un adjectif. Une fois l'ordre saisi, il l'écrit dans un fichier comme le fera l'analyseur sémantique, ceci facilitera l'interfaçage final avec l'analyseur sémantique. L'alarme du gestionnaire d'actions, appelée toutes les 500 millisecondes, lit ce fichier et considère que lorsqu'un point apparaît, l'ordre est complet. Elle déclenche alors le module de résolution de références (suivant le cas) et le raisonneur géométrique. Le résultat de ces deux fonctions, qui sera utilisé par le gestionnaire d'actions, se trouve alors dans la liste d'objets décrite ci-dessus.

Cette liste d'objets est traîtée par une autre alarme qui est, elle aussi, déclenchée toutes les 500 millisecondes. C'est cette alarme qui constitue le gestionnaire d'actions: elle agit physiquement sur l'utilisateur, elle permet d'obtenir un déplacement continu.

À chaque appel, l'alarme commence par traîter les positions de la tête: si le gestionnaire doit accomplir le mouvement (variable 6 positionnée correctement), il regarde alors si le corps doit aussi être bougé (variables 2 et 4).

Si non, il applique une petite rotation à la tête de l'utilisateur dans la direction demandée (champs 5).

Si oui, 2 cas sont à nouveau possibles.

Si la tête et le corps doivent tourner en sens opposé, l'angle de la rotation appliquée à la tête (qui est un petit angle pour que la tête tourne lentement) vaut deux fois l'angle utilisé dans les autres cas. En effet, le corps (y compris la tête puisqu'elle appartient au corps) subira par la suite une rotation dans l'autre sens (sens dans lequel tourner le corps) ce qui aura pour effet de refaire tourner la tête dans le mauvais sens mais d'un angle plus petit. Finalement, la tête aura tourné dans le bon sens.

Si le corps et la tête doivent tourner dans le même sens, on tourne le corps, la tête est alors également tournée dans le même sens.

Ensuite, le gestionnaire traîte les variables 3 et 4 et applique une petite translation au personnage en direction du point à atteindre.

Quand l'action est terminée, il en informe l'utilisateur.

Pour tester si la liste d'actions est bien gérée, le gestionnaire d'actions accepte aussi l'ordre dont le verbe est " fait le tour ", la préposition est " de ", et un nom d'un objet. La liste est alors remplie de 4 positions à atteindre (à droite, derrière, à gauche puis devant l'objet). Le personnage fait alors correctement le tour de l'objet.






8. Perspectives

Pour l'instant, seules deux fonctions (test de visibilité et focus) permettent de réduire la liste initiale d'objets ayant un nom donné, mais il sera facile de rajouter des fonctions permettant de résoudre d'autres références avec d'autres critères, dans d'autres situations quand l'interfaçage avec l'analyseur sémantique sera implanté, par exemple pour trouver " le cube de gauche ", " le cube à droite de la maison " et de gérer les pluriels " dirige-toi vers les cubes ". D'autres objectifs sont de pouvoir traîter les verbes pronominaux, les quantités (" regarde plus à droite ")...






9. Exemple de dialogue

Le gestionnaire d'actions permet des échanges tels que ceux-ci :

 Ordres et actions de     Réponses de l'agent              Séquences            
     l'utilisateur

Bonjour. Bienvenue dans le monde Ithaques. Avance devant la maison. Voilà. Regarde derrière. Voilà. Va dans la maison. Il y a plusieurs maisons ! (clique de l'utilisateur sur la maison de gauche) Entre dedans. Voilà. Sors. Va derrière. Voilà. av à droite de la maison. Je ne connais pas ce verbe. Va à droite de la maison. Voilà.

Tableau 4: un exemple de dialogue.







10. Conclusion

Nous avons décrit un gestionnaire d'actions, un raisonneur géométrique et un résolveur de références pour un prototype d'agent conversationnel. Ceci permet de naviguer oralement dans un système de réalité virtuelle. Ensuite, nous avons décrit l'implantation actuelle de cet agent.

Ce type d'agent conversationnel offre des perspectives importantes. Au fur et à mesure de nos tests nous mettons en évidence de nouveaux besoins, tels que de nouvelles actions de navigation ou la création d'un agent de manipulation d'objets. Plus généralement nous pensons que ce type d'agent offre un cadre d'expérimentation unique pour le dialogue, la linguistique informatique ou encore le raisonnement géométrique.










Références

[ALLEN 94] J. F. Allen, L. K. Schubert, G. Ferguson, P. Heeman, C. Hee Hwang, T. Kato, M. Light, N. G. Martin, B. W. Miller, M. Poesio, D. R. Traum, "The TRAINS Project: A case study in building a conversational planning agent", TRAINS Technical Note 94-3, University of Rochester New York, September 1994.

[BENFORD 93] A Spatial Model of Interaction in Virtual Environments, Proc of the 3rd Conference on CSCW, ECSCW 93, September 1993.

[BURDEA 93] G. Burdea, P. Coiffet, La réalité virtuelle, Hermes, 1993.

[COTECH 95] Virtual and Augmented Environments for CSCW, http://www.crg.cs.nott.ac.uk/CoTech, 1995.

[EL GUEDJ 94] P. O. El-Guedj, P. Nugues, "A chart parser to analyse large medical corpora", 16H Annual International Conference of the IEEE Engineering in Medicine and Biology Society, pp 1404-1405, November 1994.

[GODEREAUX 95] C. Godéreauw, P. O. El Guedj, F. Revolta-Blaudeau, P. Nugues, "Un agent conversationnel pour naviguer dans les mondes virtuels", soumis.

[HULS 95] C. Huls, E. Bos, W. Claassen, "Automatic Referent Resolution of Deictic and Anaphoric Expressions", Computational Linguistics, vol. 21, no. 1, March 1995.

[KARLGREN 95] J. Karlgren, I. Bretan, N. Frost, L. Jonsson, Interaction models, Reference, and Interactivity in Speech Interfaces to Virtual Environments, Eurographics Workshop, 1995.

[MAST 93] M. Mast, F. Kummert, U. Ehrlich, G. A. Fink, T. Kuhn, H. Niemann, and G. Sagerer, "A speech understanding and dialog system with a homogeneous linguistic knowledge base", IEEE Transactions on pattern analysis and machine intelligence, vol. 16, no. 2, February 1994.

[SABLAYROLLES] P. Sablayrolles, The Semantics of Motion, http://xxx.lanl.gov/cmp-lg, 1995.