Home
Paramétrage d`agents dans le cadre de la navigation
Contents
1. Counter Strike A unnamed 100 Health SET REZ Sse r dscapture widDsCreate DirectSoundCapture flag not set is sound card s driver does not support direct access e slower DirectSound HEL mode will be used instead AE E E a ARN ONCE akaa aak aaa EEEE le r300_render c function r300_get_num_verts line 188 er error Need more than 2 vertices to draw primitive TS AH HOK ee a a HOME OK OO OO a a e OO OO OO OO OO OK OO OO OO OO OO OO OC OO KO HO OO a a a El GL guillaume eladamrhi bin O emacs eladamrhi visioGacs Ce a L id e est de faire tourner VisioGacs en parall le de la simulation pour pouvoir faire des r glages comme le montre la figure pr c dente avec a gauche l application VisioGacs et a droite la simulation Counter Strike Pour cela il va falloir charger une instance de VisioGacs en m me temps que les agents a param trer Ainsi il va falloir passer par le fichier SATA contenant l agent a observer et y ajouter un composant VisioGacs qui sera charg C est de cette mani re que VisioGacs s int gre dans le reste de l architecture Kodamat Gr ce la gestion multi langages le s rialiseur XML de SATOM charge indiff remment en m moire des instances C ou JAVA Prise en main Grace au projet effectu lors de la premi re ann e de Master j avais d j pris connaissance de la marche a suivre pour r cup rer les informations n cessaires en C
2. Communication locale ou r seau Langage C Java ou La communication JAVA C se fait de la mani re suivante a partir de JAVA l appel a une m thode d une classe donn e est renvoy e vers la classe d interpr te associ la Gate Cet interpr te a pour but de d coder le message Ensuite l interpr te appelle une classe statique de SATOM qui partir de l identit de l appelant va trouver l interpr te autre que celui de JAVA c t C capable de traiter le message Et partir de C c est le m me processus qui se produit SATOM remarque que l objet sur lequel on fait l appel est local il passe par la Gate pour transmettre le message qui est ensuite d s rialis et interpr t le retour est lui aussi serialis dans une cha ne de caract re Cette cha ne arrive la Gate JAVA qui d s rialise la r ponse et la retourne II n y a qu un seul et unique interpr te JAVA et une table de gates la Gate en question est celle qui avait fait l appel Le principe g n ral est donc fond sur l envoi de messages traduisant les appels de m thodes Le message est construit s rialisation puis interpr t et traduit en un v ritable appel d s rialisation Ces cha nes de caract res respectent une syntaxe XML mais ce n est en aucun cas une obligation c est le choix qui a t fait dans l implantation de SATOM C SMUGLU SMUGLU SiMUlateur GLUe est une convention de l AnimatLab d finissa
3. gt lt component data identity animatlab kodamat kodabot navigation LinearlIntensityFunction bind intensityFun gt lt property name computedId type int value 206 gt lt property name a type float value 0 0 gt lt property name b type float value 10 0 gt lt component data gt lt component data identity animatlab kodamat kodabot navigation WallAvoidingOrientationFunction bind orientationFun gt lt property name computedId type int value 206 gt lt property name angle type float value 128 gt lt property name UTurnDistance type float value 0 1 gt lt component data gt lt component data gt Dans cet extrait de code XML on remarque que les fonctions de calcul de forces sont une fonction de calcul d intensit lin aire ainsi qu une fonction d orientation d vitement des murs De m me le Behaviour permet d associer une fonction de gain la force obtenue lt component data identity animatlab kodamat kodabot navigation CMapIdGainEntry gt lt property name id type int value 206 gt lt component data identity animatlab kodamat kodabot navigation ConstantGainFunction bind gainFun gt lt property name constant type float value 1 0 gt lt component data gt lt component data gt On retrouve bien la logique suivante la force est cr e avec un id gal 206 et le gain doit s appliquer cette force donc a son id pr ci
4. tout moment animatlab kodamat visiogacs wrapper Dans ce package on retrouve la d finition de Wrapper d objets composant le bot c est a dire d objets C non r cup rables directement en JAVA Notamment les Map C utilis es du c t de la navigation package animatlab kodamat kodabot navigation dont les entr es ne sont pas r cup rables en JAVA Par exemple prenons les tables mettant en relation un Pattern et des fonctions de calcul de forces tables utilis es pour repr senter le composant ForceGenerationList en m moire Lorsque l on souhaite obtenir une entr e de cette table le m canisme est le suivant Cr ation d un Wrapper JAVA de VisioGacs On donne cet objet une r f rence a la Map compl te On indique cet objet l indice de l entr e que l on souhaite r cup rer Ce syst me ne pose pas de probl me particulier tant donn que la table compl te est pass e par r f rence l objet Wrapper animatlab kodamat visiogacs utils Classes constituant la majeure partie du mod le ces classes regroupent les informations utilis es par la vue voici la liste des parties du mod le Gestion de l agent Agent GacsAgent amp AgentList Gestion des composants GACS InterestingComponent amp InterestingComponentList Gestion du graphe de Waypoint WaypointGraph amp Waypoint Gestion d objets suppl mentaires Positions amp Utils Par exemple la classe Agent conserve les multiples casts
5. 1 lt component data identity animatlab kodamat kodabot navigation CMapIdRangeEntry gt lt property name id type int value 1 gt lt property name closeRange type float value 0 0 gt lt property name farRange type float value 100 0 gt lt component data gt Behaviour Un Behaviour est une table mettant en relation un Pattern avec des fonctions d orientation et d intensit qui permettent de cr er une force a partir des points trouv s Le Pattern contient les id des points d int r t a traiter pour g n rer une force ici 1 et 2 les points d impacts des rayons Et les fonctions pr cisent quant elles l id de la force r sultante ici 206 lt component data identity animatlab kodamat kodabot navigation CForceGenerationListEntry gt lt Le pattern contenant plusieurs entr es gt lt component data identity animatlab kodamat kodabot navigation CPattern bind pattern gt lt component data identity animatlab kodamat kodabot navigation CPatternEntry gt lt property name id type int value 1 gt lt property name rank type int value 1 gt lt component data gt lt component data identity animatlab kodamat kodabot navigation CPatternEntry gt lt property name id type int value 2 gt lt property name rank type int value 1 gt lt component data gt lt component data gt lt les fonctions de calcul de force
6. de Braitenberg est relativement simple II s agit d un agent muni de deux capteurs en fait deux lanc s de rayons ici R1 et R2 Chacun de ses capteurs est reli un frein associ chaque roue Plus la longueur du rayon est courte c est dire plus le point d impact du rayon est proche plus le frein se serre Ainsi l agent peut se d placer en esquivant les murs et autres obstacles gt Direction du bot Rayons d tecteurs R2 Fonctionnement d un agent de type Braitenber Comment cet agent peut il tre repr sent avec les composants de GACS Voici les constituants d taill s d un tel agent Detector Deux Detector vont tre n cessaires ici des WallDetector un pour chaque lanc de rayon lt component data identity animatlab kodamat kodabot navigation WALLDetector gt lt property name generatedId type int value 1 gt lt property name rayAngle type float value 0 52359878 gt lt component data gt Le m me composant sera d clar pour le rayon droit ayant par exemple un generatedld gal 2 et un rayAngle gal l oppos de la valeur du rayon gauche Les id donn s ici sont des identifiants de points d int r t Sensor Un Sensor g rant les port es de d tection pour chacun des deux rayons par exemple les points d impact pourront tre visibles entre 0 et 100 m tres Voici la gestion de port e pour le point d impact du rayon gauche id gal
7. de l agent en diverses interfaces de SMUGLU comme vu pr c demment La classe GacsAgent h rite d Agent et a pour r le de charger les composants GACS animatlab kodamat visiogacs test Ce package contient une batterie de tests JUnit a enrichir faute de temps qui a t n cessaire pour tester le bon fonctionnement des premi res communications JAVA C En effet cet aspect n a pas t vident a prendre en main Par exemple on y retrouvera des tests simples comme testic Another modification of a StringList XX public void testlc this stringList IStringList Satom stnew org satom CStringList IStringList class this stringList pushBack I ll this stringList pushBack be this stringList pushBack back this stringList pushBack assertEquals this stringList get 2 back test2a Creation of a FloatList XX public void test2a this floatList IFloatList Satom stnew org satom CFloatList IFloatList class assertNotNull this floatList Partie 5 Param trage et r sultats obtenus L apr s VisioGacs n est que le commencement en effet l objectif final n est pas de cr er l application de param trage mais de l utiliser pour avoir diff rentes configurations d agents r alistes Un bot de type Braitenberg ayant un objectif Contournement d agents Formation triangulaire A Force vers le but
8. et contournement d obstacles Une fois que l on a obtenu un agent de type Braitenberg bien param tr comme vu pr c demment l aspect contournement d obstacles est g r Or on souhaite ajouter une force d attirance vers le but puis observer les r sultats La force vers un but est tr s simple mettre en place car elle est d j implant e dans GACS il suffit pour cela de fixer la cible courante de l agent Une fonctionnalit int ressante a t mise en place dans VisioGacs pour exploiter cette propri t ainsi en faisant un clic de souris sur la carte dans la fen tre de VisioGacs la cible de l agent courant est directement remise jour avec les nouvelles coordonn es Avec un tel dispositif il a t possible de param trer l agent pour quilibrer les forces d attirance au but et celles de r pulsion aux obstacles Le meilleur r sultat obtenu est que l agent suit le chemin d sir en ne passant que par un Waypoint sur quatre Par contre en guidant le bot la souris on peut encore diminuer l utilisation de Waypoint Je pense qu en redisposant les Waypoint judicieusement sur la carte il serait possible de diviser leur nombre actuel par dix Le principal avantage est la diminution significative du nombre de sommets et d ar tes du graphe induisant un chargement plus rapide de la simulation et un calcul de chemin bien plus efficace Dans le clich pr c dent on remarque que l on peut faire traverser la carte un
9. ne fait qu all ger cette op ration qui est pour le moins laborieuse Elle n apporte pas la solution tant attendue c est a dire un param trage facile et universel Les r sultats que j obtiens m me s ils sont int ressants sont bien moins importants que pr vus au tout d but de mon stage La navigation pr sente des probl mes qui interviennent dans certains cas impr vus En effet on peut passer un temps consid rable configurer un agent sur un parcours d une carte donn e tre satisfait du r sultat obtenu et se rendre compte en testant ce bot sur une zone diff rente ou dans un cas bien pr cis que a ne correspond pas du tout l attente le bot se bloquant dans un coin de la carte L enjeu tait de porter la navigation GACS dans les exp riences de s lection de l action r alis es par Thomas Degris Nicolas Despr s et Jean Philippe Dubus qui utilisent une navigation de type StraightToTarget limit e et pr sentant de nombreux inconv nients La r ponse ce probl me peut tre donn e par une utilisation de VisioGacs par un expert dans le domaine en tout cas VisioGacs est facilement modifiable et am liorable Durant ce stage j aurais appris monter une v ritable application JAVA reposant sur un mod le MVC non pas ferm e sur elle m me mais devant communiquer avec divers syst mes en d veloppement et partiellement document s comme SATOM SMUGLU et Kodabot J ai d mener ce projet seul et ainsi g rer un r pertoire so
10. par contre je n avais pas encore appris a le faire du c t Java Cette prise en main a t plus longue que ce a quoi je m attendais car il y a de nombreuses subtilit s comprendre et appliquer comme par exemple les cast SATOM qui ne se font pas de la m me mani re que les cast JAVA En JAVA IWorldEntity world IWorldEntity Satom stnew animatlab smuglu CWorldEntity IworldEntity class IPointerList entityList this world getEmbeddedEntities IClockEntity clock null for int i 0 i lt entityList getSize i if entityList get i toString contains CClockEntity clock IClockEntity Satom stnew entityList get i IClockEntity class INotifier notifier INotifier Satom stnew clock INotifier class notifier addListener this getListener notifier removeListener this getListener En C StRef lt IWorldEntity gt world animatlab smuglu CWorldEntity StRef lt IClockEntity gt clock clock Set world gt GetEmbeddedEntity animatlab smuglu CClockEntity IpointerList list world gt GetEmbeddedEntities animatlab kodamat kodabot navigation CGACSReactive StRef lt INotifier gt notifier clock notifier gt AddListener this notifier gt RemoveListener this Pour l occasion une branche vierge a t mise a ma disposition sur Subversion pour accueillir l application VisioG
11. utilis e pour stocker ce graphe ainsi que le temps de calcul pour calculer un chemin dans ce graphe En effet si l on prend par exemple la carte de dust de Counter Strike de la figure suivante sur laquelle sont affich s les sommets du graphes pas les ar tes par soucis de clart voici ses caract ristiques 500 sommets 2500 ar tes 3a5 ar tes par sommet Carte De dust de Counter Strike B Le principe de GACS Le formalisme de GACS est l un des r sultats de la th se de Fabien Flacher L id e consiste a construire le d placement d un agent comme r sultant de la combinaison d un ensemble de forces d attraction et de r pulsion qu exercent sur lui des objets environnants Plus pr cis ment le comportement d un agent est sensible a un ensemble de points d int r t dont la localisation d pend des entit s pertinentes pr sentes dans le domaine per u par l agent Par exemple dans le cas de Counter Strike ces objets pertinents sont les partenaires les adversaires le point d impact de rayons perceptifs sur les murs environnants certains sites particuliers comme le site de la bombe A chaque point d int r t est associ e une force dont l intensit varie en fonction de la distance entre l agent et ce point pertinent si bien qu elle peut tre attractive une certaine distance et r pulsive une autre Le d placement de l agent r sulte d une combinaison lin aire des forces qui s exercent s
12. ACS et vice versa comme nous le verrons plus loin dans ce rapport D autre part Fabien Flacher va pouvoir utiliser l application de param trage afin d obtenir des contr leurs pour le jeu vid o Counter Strike qui touche un grand public C est une tape de plus vers l objectif principal qui est de confronter un agent du projet Kodamat de l AnimatLab avec un agent script pr sent sur internet comme PodBot ou m me des joueurs humains sur le Web En t che de fond il y a la volont d exposer et de mettre plat les r sultats de recherche obtenus l heure actuelle par l AnimatLab Partie 2 Environnement de d veloppement Kodamat A Le projet Kodabot SMUGLU est un ensemble d interfaces d velopp es a l AnimatLab il a pour but de pouvoir int grer diff rentes parties d un robot en un tout coh rent et ex cutable c est a dire de s abstraire le plus possible du simulateur choisi pour mener les exp riences Le projet permet de connecter diff rentes parties de l IA du robot entre elles celles qui nous concerneront directement sont celle de navigation car GACS est un contr leur de navigation Nous utiliserons aussi toutes les classes interfaces qui concernent les drivers Ce framework est bas sur un gestionnaire de composants appel SATOM Kodabot CBuildStates ale MHICS uu IState CBuildRewards IReward ActionSelection CEffector CMDPActionSelection lActioninterpreter lActioninterpreter Structu
13. JAVA et C SATOM dispose galement d un systeme de comptage de r f rence pour g rer le cycle de vie des composants d truire les objets inutilis s Pour fonctionner le logiciel utilise des fichiers de configuration en XML des fichiers stc dans lesquels doivent tre d clar s les interfaces et composants d un projet des fichiers sata qui d crivent les interactions des composants La politique de SATOM est pour r sumer what you get is what you did car ce logiciel se contente de g n rer des fichiers C est l utilisateur de faire le travail n cessaire pour obtenir un composant utilisable car le syst me est orient interface et apporte donc tr s peu de services L utilisation des interfaces oblige crire le code qui va avec Par exemple m me pour des interfaces tr s basiques comme l utilisation de propri t s dans une classe l utilisateur devra g rer la main l impl mentation des propri t s Ses principaux atouts sont son chargeur de classes via fichiers XML fichier SATA qui permet d viter la recompilation des fichiers de tests la communication entre objets C et JAVA Ce dernier m canisme permet actuellement de composer un agent avec un algorithme de s lection de l action crit en JAVA nomm SPITI et d velopp par Thomas Degris L agent tant cod en C dans Kodabot Langage C Java ou Langage C Java ou Communication locale ou r seau
14. Module de navigation coordonn e dans le cadre des jeux vid o directement en lien avec le Laboratoire d Informatique de Paris 6 et plus pr cis ment l AnimatLab Durant ce projet qui a dur tout un semestre j ai appris utiliser l environnement de d veloppement pr sent c est dire les diff rents frameworks de composants ainsi que les m thodes de travail adopter ce qui dans un premier temps n a pas t vident Renforc par l exp rience acquise durant ce projet et int ress par le jeu vid o c est tout naturellement que je me suis tourn vers l AnimatLab pour entreprendre ce stage Mon responsable de stage est Olivier Sigaud que je remercie pour m avoir accept durant les mois de juillet et ao t La plupart du temps j ai t encadr par Thomas Degris qui effectue actuellement sa th se concernant l apprentissage par renforcement Mais j ai aussi travaill aux c t s d autres tudiants stagiaires tout comme moi tudiants de diff rentes fili res aussi bien de parcours d intelligence artificielle que de g nie logiciel Dans un premier temps j introduirai le sujet et les probl mes pos s J en profiterai pour faire une br ve description du principe de GACS l algorithme de navigation d velopp dans la th se de Fabien Flacher Ce stage s incrivant dans la continuit du projet effectu pr c demment d crit je vais donc viter tant que possible de donner trop de d tails concernant l environnement de d velopp
15. Universit Pierre amp Marie Curie Rapport de stage juillet ao t 2006 Pa etrage d agents dans le cadre la navigation coordonn e pour les jeux video Guillaume Riby ae X Responsable de stage Olivier Sigaud UNIVERSITE a IERRE amp MARIE CURIE Master Informatique Sp cialit STL SCIENCE A PARIS Ann e 2005 2006 Table des mati res Pr face Partie 1 Introduction et probl matique A Description des objectifs B Apports scientifiques Partie 2 Environnement de d veloppement Kodamat A Le projet Kodabot B SATOM et SATOMJAVA C SMUGLU Partie 3 La navigation dans Kodabot A Navigation StraightToTarget B Le principe de GACS C Navigation GACS Partie 4 VisioGacs Application de param trage en ligne A Motivations B Mise en place C Structure de l application Partie 5 Param trage et r sultats obtenus A Force vers le but et contournement d obstacles B Evitement des autres entit s C Maintien de formation Conclusion Lexique Annexes A Manuel d utilisateur de VisioGacs B Capture de vid os dans Counter Strike Pr face Dans le cadre de ma formation de Master sp cialit informatique l Universit des Sciences et Techniques de Paris 6 il m a t propos de suivre un cursus dit de Magist re ce cursus impose entre autre la r alisation d un stage la sortie de la premi re ann e L ann e pass e j ai effectu avec deux autres tudiants un projet intitul
16. acs Elle donne naissance un nouveau composant dans le projet Kodamat composant qui peut d sormais tre ajout n importe quel fichier SATA permettant de contr ler les agents r actifs et de modifier les comportements des agents de type GACS il est nomm animatlab kodamat visiogacs VisioGacs La mise en place dans les fichiers SATA se fait en utilisant la technologie Xpath pour r f rencer des composants d j d finis dans le fichier lt component data identity animatlab kodamat visiogacs VisioGacs gt lt component data reference component data bind x gt autres bind et references sur des composants des agents lt component data gt Dans cet exemple le composant r f renc est d sign gr ce un chemin relatif gt au noeud courant et la valeur de son attribut bind Cette mani re de r cup rer les l ments est tr s pratique car elle permet de cr er une r f rence vers le graphe de Waypoint o tout autre l ment li l agent et qu il serait int ressant d observer voire modifier Structure globale kodabot navigation visiogacs visiogacs utils wrapper visiogacs visiogacs visiogacs visiogacs test view xml Diagramme de packages de VisioGacs Les d pendances au package animatlab kodamat kodabot navigation sont indiqu es en gris de la m me mani re l ensemble des packages de VisioGacs d pendent du package org satom ce qui n est p
17. active en g n ral on y trouve les l ments suivants dans l ordre dans lequel ils interviennent Plusieurs Detector un par type de point d int r t ou marque que l on veut percevoir Un Sensor g rant les port es de d tection Un Behaviour constitu de plusieurs Pattern expliqu plus loin Un Effector qui r alise la normalisation GACS permet le param trage d un maximum de composants et ce comme expliqu dans la th se de Fabien Flacher et plus pr cis ment dans le papier suivant GACS an Evolutionary Approach to the Spatial Coordination of Agents par Fabien Flacher et Olivier Sigaud Ces fichiers SATA sont assez pratiques car ils permettent de modifier quelques valeurs sans avoir a recompiler l application Les composants sont charg s au lancement mais d un autre c t le param trage a pour effet de demander beaucoup d informations au niveau du SATA ce qui alourdit consid rablement son criture Dans le Behaviour on retrouve des composants param trables tels que des fonctions d orientation fonctions d intensit fonctions de gain Ce sont d ailleurs les composants qu il sera int ressant de param trer Exemple Prenons un exemple simple un agent de type Braitenberg Dans un premier temps nous allons expliquer rapidement le principe du Braitenberg puis nous verrons la correspondance en terme d agent GACS Le principe de d placement d un agent de type Braitenberg ou encore v hicule
18. as pr cis sur le diagramme pr c dent A pr sent passons la description d taill e des diff rents packages composant VisioGacs animatlab kodamat visiogacs VisioGacs est la seule classe a ce niveau de package Elle est charg e par le s rialiseur de SATOM elle doit r cup rer et initialiser les informations n cessaires par la suite dans le mod le mais d autre part lancer la vue et le contr leur Comme vu pr c demment un agent peut tre vu sous diff rents angles c est a dire cast en diff rentes interfaces chacune d elles permettant l acc s a des m thodes particuli res Le travail de la classe VisioGacs r side principalement en la collection de ces diff rentes entit s obtenues afin d viter des cast r p titifs et lourd en terme d criture travers le reste du code de VisioGacs De plus si l agent a charger dans VisioGacs est de type GACS alors on remonte l ensemble de ces composants param trables en m moire dans VisioGacs ceci pour viter les appels JAVA C abusifs animatlab kodamat visiogacs view Ce package contient la fois les parties vue et contr leur qui sont toutefois clairement s par es de telle mani re qu il sera ais d ajouter de nouvelles fonctionnalit s VisioGacs sera tr s certainement amen voluer ceci en fonction des besoins si par exemple de nouveaux composants viennent s ajouter dans GACS Le param trage et l affichage 2D y sont g r s comme le montre
19. atteint son objectif Un probl me vident se pose alors comment choisir le prochain point Mais aussi comment faire pour que le bot puisse l atteindre en ligne droite Pour naviguer la plupart des bots classiques par exemple PodBot utilisent un graphe de tr s nombreux points de passages ou Waypoints qui couvrent toute la carte en un r seau serr de telle fa on que le bot puisse se rendre d un waypoint au waypoint voisin en ligne droite sans rencontrer d obstacle Etant donn es la localisation courante et la destination du bot il suffit de rechercher un chemin dans ce graphe l aide d un algorithme comme A puis le bot n a plus qu passer par la liste des waypoints qui constituent le chemin Probl mes rencontr s Cette approche pr sente plusieurs inconv nients D une part la construction du graphe de waypoints se fait la main ce qui est d autant plus fastidieux que les waypoints sont tr s nombreux D autre part la trajectoire du bot est tr s st r otyp e puisqu il emprunte toujours les m mes lignes droites en passant par les m mes waypoints successifs En particulier il n est pas capable d adapter cette trajectoire la pr sence de partenaires ou d adversaires autour de lui Pour ce type de navigation ce sont les graphes de PodBot qui sont utilis s des graphes avec un maillage suffisamment serr pour que le bot ne rencontre aucun obstacle entre 2 points donn s L inconv nient principal est la place m moire
20. b L objectif principal est de mettre disposition des chercheurs du LIP6 un jeu de contr leurs de type GACS c est dire utilisant le framework de calcul d velopp et dont je connais le fonctionnement ayant particip sa r alisation Ce type d agents est totalement param trable et par cons quent devait tre le r sultat d un algorithme g n tique comme expliqu dans la th se originelle En raison de certaines complications que nous verrons plus loin ce param trage doit tre fait la main et pour faciliter ce travail une application doit tre mise en place pour permettre le param trage d un agent pendant que celui ci tourne dans un simulateur donn C est donc le but principal de mon stage qui s inscrit dans un objectif commun Obtenir des agents intelligents Une feuille de route a t mise en place d s le d but regroupant les objectifs de mon stage ainsi que ceux des autres membres de l AnimatLab Elle a permis d observer la progression des diff rentes t ches B Apports scientifiques L AnimatLab travaille donc au d veloppement d agents intelligents la navigation ne constituant qu une partie du r sultat obtenir Il est n cessaire d avoir un contr leur de type GACS pleinement op rationnel qui pourra tre combin avec des modules de planification de s lection de l action Dans le cas de la planification un travail de cartographie a t men par d autres stagiaires au LIP6 Ce module va apporter G
21. bot de ce type en six clics de souris indiqu s par des croix rouges chaque clic remettant a jour la cible a atteindre et l indice 0 tant la position initiale de l agent Cette situation ne serait pas possible avec un bot de type StraightToTarget vu pr c demment en effet dans l exemple les cibles sont s par es par des obstacles si bien que l on ne peut pas atteindre la suivante en ligne droite Avant pr s d une quarantaine de Waypoint taient n cessaires pour r aliser ce parcours B Evitement des autres entit s Ces deux images provenant de VisioGacs montrent l importance de pouvoir viter les entit s pr sentes sur la carte En effet si l on met en sc ne 2 agents GACS ayant un comportement de type Braitenberg on obtient le cas pr sent par l image de gauche c est dire que les 2 agents de ne se voient pas et finissent l un contre l autre Par contre sur l image de droite les 2 agents sont quip s de d tecteurs qui leur permettent de percevoir les entit s environnantes telles que les amis les ennemis et les leaders d quipe Dans ce cas l impact est vit gr ce une force de r pulsion Voici le principe de l vitement il faut avant tout pouvoir d tecter les entit s environnantes une certaine distance D1 puis le calcul se fait en deux temps D abord un point d vitement est calcul c t de l agent que l on souhaite contourner ici gauche une distance D2 II suffit ensuite d ap
22. e install of SatomJava after Satom Smuglu and Kodabot are installed Then use the build xml file by making ant Dsatom SATOM satominstall Launch the VisioGacs application Choose a Sata file and add the following lines 1 Labels need to be added on bots we want to control label botx as followed lt component data identity animatlab kodamat kodabot navigation CGACSReactive label bot1 gt ee lt component data gt lt component data identity animatlab kodamat kodabot navigation CGACSReactive label bot2 gt lt component data gt 2 Then use these labels by declaring only one VisioGacs component which contains all references lt component data identity animatlab kodamat visiogacs VisioGacs gt lt component data reference satom data component data label lt component data reference satom data component data label sea lt component data gt botl gt bot2 gt Control commands Panel s buttons NEXT switch to the next bot PAUSE stop the current bot In controller text field UP DOWN amp LEFT RIGHT move the bot SPACE make the bot jump CTRL make the bot crouch R make the bot reload S make the bot shoot X make the bot change shoot In parameter text field W X down upgrade of 0 05 value contained in the current field Q S down upgrade of 1 0 value contained in the current field A Z down upgrade of 100 0 value contai
23. ement bien que quelques explications sommaires soient indispensables Puis je poursuivrai sur la repr sentation actuelle de la partie Kodabot c est dire les diff rents constituants de l agent comme la planification et les diff rents types de navigation Une fois ces bases pos es je pourrai pr senter l application que j ai mise en place application de param trage en ligne nomm e VisioGacs enfin j exposerai les r sultats obtenus gr ce cette application mais aussi les probl mes non r solus Partie 1 Introduction et probl matique Ce projet s inscrit dans la continuit du projet annuel de premi re ann e de Master que j avais effectu en trin me quelques mois plus t t Il consistait faire l ing nierie le codage et l int gration d un module de navigation d crit dans la th se de Fabien Flacher Ce module de navigation a pour avantage d tre param trable et donc int ressant dans le cadre des exp riences effectu es l AnimatLab Ce projet ayant t r ussi et valid par Olivier Sigaud certaines t ches m ont t confi es d s mon arriv e au LIP6 A Description des objectifs Dans un premier temps il m a t demand de compl ter la documentation de GACS et d int grer le travail pr c demment effectu dans le projet Kodabot C est une t che qui a demand beaucoup de temps car il n tait pas question de glisser des erreurs dans le tronc de Kodabot qui est utilis par les d veloppeurs de l AnimatLa
24. eur sous la forme d un arbre d entit s Chaque entit est un composant impl mentant l interface IEntity permettant d obtenir son type son nom la liste des entit s filles etc Une entit peut galement proposer des fonctionnalit s suppl mentaires adapt es sa nature Enfin la racine de l arbre est une entit proposant l interface WorldEntity Sur la figure pr c dente on distingue en bleu les effecteurs du robot et en vert ses capteurs Partie 3 La navigation dans Kodabot Kodabot a pour r le de regrouper les diff rentes parties constituant un agent c est dire la liste des r compenses pour les actions effectu es la liste des tats du bot mais aussi le m canisme de s lection de l action ainsi que la planification et la navigation Dans un jeu comme Counter Strike une bonne partie du probl me des joueurs et des bots consiste se trouver au bon endroit au bon moment R soudre efficacement ce probl me suppose de savoir naviguer au sein de la carte sur laquelle se d roule le jeu Et c est le probl me que nous allons aborder plus pr cis ment dans cette partie A Navigation StraightToTarget Avant l int gration de GACS au projet Kodamat il fallait bien disposer d une navigation pour mener les exp riences de s lection de l action cette navigation simpliste nomm e StraightToTarget consiste faire progresser l agent en ligne droite jusqu atteindre une cible cible qui sera mise jour chaque fois qu il
25. ite des calculs trigonom triques car il faut bien noter que lorsque l on fait un appel getMoveSpeed le vecteur retourn est relatif au rep re du bot c est dire que les X sont croissants devant Le graphe de Waypoint dans VisioGacs peut tre affich cette fonctionnalit a t utilis e pour afficher les sommets du graphe associ a la carte De dust de Counter Strike montr e pr c demment dans ce rapport Voici un exemple d ajout int ressant que je vais d tailler br vement Il est n cessaire de dans le fichier SATA binder WaypointGraph la r f rence au graphe dans le code effectif de VisioGacs charger l ensemble de la structure pour viter de r p ter la communication JAVA C inutilement animatlab kodamat visiogacs xml Un parseur XML pour la sauvegarde de configuration apr s param trage a t mis en place Dans ce package on notera l utilisation de la technologie SAX De plus certaines modifications ont t faites au niveau du s rialiseur de SATOM c est dire c t C Le s rialiseur pr sent dans SATOM a 2 fonctions Le chargement des fichiers SATA l instanciation d objets d crit en XML L criture XML d objets instanci s Dans le cas pr sent c est la deuxi me fonctionnalit qui va tre exploit e ceci en r cup rant comme suit une instance du s rialiseur puis en faisant un appel la m thode Write en mettant en param tre l objet d s rialiser S
26. leader repr sent sur la figure suivante Il repose sur un leader de type Braitenberg et ayant une force vers un but il servira de guide Les deux autres agents quant a eux sont aveugles et ne percoivent que leur alli s via des capteurs d entit s Prenons l exemple de l agent Ag2 deux forces lui seront appliqu es la premi re le tenant une distance D1 du leader Agl la deuxi me une distance D2 de son homologue droit Ag3 Le second syst me vient en r ponse la question suivante que se passe t il si le leader vient dispara tre En effet dans le cas pr c dent si le leader disparaissait les deux autres agents seraient perdus Pour r soudre ce probl me le second syst me part du principe qu il n y a pas de leader dans une quipe tous les agents d une m me quipe sont alli s et ont le m me comportement Pour cela chaque agent sa propre attirance vers un but ainsi que son vitement d obstacles Le probl me d un tel syst me est encore une fois le param trage c est dire la proportion donner entre les forces de maintien de formation d vitement d obstacles et de l objectif A chaque fois que l on ajoute une nouvelle notion et donc au moins une nouvelle force qui intervient dans le calcul il faut revoir l ensemble des param trages Conclusion Revenons point par point sur les r sultats obtenus Tout d abord l application VisioGacs fonctionne et permet un param trage plus rapide seulement elle
27. les images qui suivent dans ce rapport Affichage des agents de leur points d int r ts des waypoints et gestionnaire de cartes tete File Display NEXT PAUSE LinearintensityFunction 205 v float a 0 0 float b 10 0 Ces deux images repr sente le paneau sup rieur de l application VisioGacs Il est possible de modifier l affichage via le menu Display d obtenir de l aide de mettre l agent en pause et d en prendre le contr le ou bien encore de le param trer en agissant directement sur les champs et les composants inclus dans la ComboBox WisioGacs File Display NEXT PAUSE MapldGainEntry 200 x float constant 1 25 On remarque que les valeurs param trables pr sentes dans le champs texte ont un identifiant ainsi qu un type pr cis qui sont tous deux rappel s pour faciliter la prise en main Par contre le nom des composants n est pas tr s explicite ce qui force l utilisateur consulter le fichier SATA auparavant Des commandes simples ont t ajout es comme le saut le tir le rechargement mais aussi le contr le de l agent mise en pause et d placement manuel La pause est d ailleurs la premi re des fonctionnalit s qui a t disponible dans VisioGacs elle tait demand e par les diff rents participants au projet Kodamat au m me titre que le contr le manuel Affichage 2D des agents avec la carte courante utilis e sur le
28. lus souple et param tr On pourra de m me obtenir diff rents comportements seul avec et sans contournement d agents plusieurs en formation triangulaire diamant ou tas Probl me Pour lancer l application et effectuer diff rents tests autrement dit pour instancier des objets dans GACS nous devons passer par l outil mis en place par le gestionnaire de composants SATOM Celui ci n cessite de repr senter les objets cr er au lancement dans un fichier SATA qui permet de d crire les composants souhait s ainsi que de les lier entre eux L int r t d une application de param trage est donc d viter d avoir stopper la simulation pour modifier le fichier de configuration la main et ensuite relancer la simulation ce qui est fastidieux Solutions Pour r pondre ce probl me il existe au moins deux solutions La premi re consisterait en la programmation d un algorithme g n tique comme d crit dans le GACS d origine th se de Fabien Flacher Or pour lancer un tel algorithme il est n cessaire de pouvoir acc l rer la simulation ce qui n est pas possible dans le cas du jeu vid o Counter Strike dans lequel tous les tests sont effectu s La seconde solution qui a t retenue est l utilisation d une application tournant en parall le de la simulation et qui permet un utilisateur de param trer en live les composants de l agent GACS En effet un agent est totalement configur dans un fichier au f
29. ned in the current field Basic text output XML output and screenshot This function is accessible from the menu bar in File gt Save the result is a text output which looks like that Name Bot 2 WALLDetector 1 float rayAngle 0 5235988 LinearintensityFunction 206 float a 0 0 float b 10 0 WallAvoidingOrientationFunction 206 float angle 64 0 float UTurnDistance 0 1 ConstantGainFunction 206 float constant 1 0 and also an XML output that can be directly loaded and a screenshot corresponding to drawing panel content B Capture de vid os dans Counter Strike Voici le script qui m a permis de faire des vid os pour le site Web de l AnimatLab II sert notamment de HOWTO pour la capture de vid os dans Counter Strike mais il permet aussi d automatiser les taches de conversion et la cr ation de la vid o finale Au pr alable il sera n cessaire de fixer la variable d environnement nomm e HALF LIFE qui pointe sur le r pertoire de Half Life dans mon cas sa valeur est HOME c_drive Sierra Half Life bin sh Debut de convert sh FILE 1 How to get bmp images from CStrike 1 Launch a server and a client 2 In client s console do a record X where X is the name of dem file b stop and quit the client 3 Launch a client open a console and do a timedemo X b startmovie Y Z where Y is the name of bmp file
30. nt le protocole de communication entre un contr leur et un simulateur Il repr sente un compromis entre les diff rents besoins de chaque groupe de l AnimatLab Gr ce SMUGLU il existe un r el d couplage entre les algorithmes mis en uvre au sein des contr leurs d une part et les composants formant les simulateurs d autre part Ainsi la th orie voudrait qu un contr leur test dans un simulateur A fonctionne galement dans un simulateur B sans avoir r crire une seule ligne de code si ces deux simulateurs se conforment aux interfaces d finies par SMUGLU Le but ultime est de pouvoir charger le contr leur dans un robot impl mentant ces interfaces En effet ceci est int ressant car les exp riences sur simulateur sont beaucoup moins on reuses que celles sur un robot H las dans la pratique le passage d un contr leur d un simulateur un autre n est pas toujours aussi transparent et gratuit du point de vue du code Par exemple les principaux probl mes sont li s des moteurs physiques ne r agissant pas de la m me fa on Ainsi il faut rendre le contr leur robuste toutes ces variations Il faut noter galement que tester son contr leur dans deux simulateurs diff rents et videmment bien plus co teux que de le tester dans un seul Donc malgr l utilisation de SMUGLU un co t suppl mentaire subsiste Structure globale Horloge Robot Repr sentation SMUGLU d un simulateur SMUGLU repr sente un simulat
31. ormat XML ou fichier SATA fichier qui est charg par le s rialiseur de SATOM Le chargement est effectu une fois au lancement de la simulation ce qui entra ne le red marrage du simulateur chaque modification manuelle faite dans le fichier SATA B Mise en place Dans un premier temps il a t n cessaire d implanter des l ments inexistants dans SATOMJAVA et qui seraient utilis s dans l application de param trage comme par exemple les accesseurs et modificateurs de champs C partir de JAVA Il faudra pouvoir faire ce qui suit pour par exemple r cup rer l quipe d un agent donn MobileAgentEntity agent cast de l entit en IProperties pour acc der a ces attributs IProperties agentProperty IProperties Satom stnew agent IProperties class String team agentProperty getPropertyS team Ce qui n tait pas implant ici est la m thode getPropetyS mais il faut savoir qu il y a une m thode diff rente pour chaque type de retour Comme vu pr c demment on r cup rera la propri t d un objet en faisant appel aux m thodes getPropertyX sur l objet que l on aura cast au pr alable en l interface IProperties De m me il faut mettre en place une r cup ration des donn s complexes c est dire des bindings via l interface IBind Pour impl menter la classe IProperties on s appuie sur le m canisme d introspection de JAVA Ainsi il faut implanter les m thodes
32. pliquer une force vers le point g n r ce qui va avoir pour effet de d vier la r sultante du calcul de GACS vers la gauche Forces calcul es pour Ag1 x Point d vitement gt Force d vitement D2 Or En th orie cela para t tre tr s efficace seulement a ne fonctionne vraiment bien dans la pratique que sur quelques cas simples comme montr ci dessus C est dire lorsque l on fait se rencontrer deux agents qui arrivent l un en face de l autre Autrement dans la plupart des cas soit la force d vitement a une incidence trop forte sur le r sultat auquel cas l agent tente d viter les autres quitte rencontrer un obstacle soit la force d vitement est trop faible pour viter la rencontre J ai tent en vain d obtenir un param trage correct via VisioGacs et pour avoir pass un certains temps sur ce probl me je pense que le param trage est tr s difficile optimiser dans des cas aussi complexes que celui ci C Maintien de formation Forces calcul es pour Ag2 gt Force provenant de Ag1 gt Force provenant de Ag3 ag Leader D1 D1 Pour le maintien de formation il a fallu se pencher sur la mod lisation du syst me de force Comment doit on agencer les composants pour obtenir une formation triangulaire C est a dire quels composants utiliser et ceci avant m me de se poser les questions de param trage Deux syst mes ont t pens s Le premier est un mod le avec
33. re du projet Kodabot englobant SMUGLU L architecture de Kodabot a t pens e dans le but d tre le plus modulaire possible Cette modularit a t mise en oeuvre gr ce l utilisation de composants SATOM Cette architecture peut se diviser en deux grandes parties le contr leur et le simulateur La charni re entre les deux est faite par l ensemble d interfaces SATOM que constitue SMUGLU Les simulateurs sont galement appel s drivers ou pilotes car les composants logiciels qu ils impl mentent ont g n ralement pour r le de piloter un simulateur existant tel que Counter Strike plut t que d en fournir un partir de rien Les simulateurs proposent un environnement virtuel dans lequel l agent volue Les contr leurs impl mentent des composants logiciels dont le r le est de contr ler l agent dans un environnement Le d veloppement de diff rents contr leurs a t initi dans le cadre du projet Kodamat B SATOM et SATOMJAVA SATOM est un gestionnaire de composants comme J2EE ou Corba il est utilis dans la plupart des d veloppements de l AnimatLab et SMUGLU ainsi que Kodabot sont totalement d pendants de celui ci Cependant il est en cours de d veloppement et sans documentation ce qui ne simplifie pas la tache des nouveaux arrivants sur des projets au sein de l AnimatLab C est un logiciel qui instancie et lie des composants entre eux pour cr er un programme complexe De plus il est capable de g rer du code
34. s en bleu Effector Un Effector qui r alise la normalisation lt component data identity animatlab kodamat kodabot navigation CGlobalEffector bind globalEffector gt lt component data identity animatlab kodamat kodabot navigation RegularNormalizeFunction bind normalizeFun gt lt property name maximumForce type float value 12 0 gt lt component data gt lt component data gt Ce qu il faut retenir de cet exemple c est que malgr sa simplicit il n cessite une description XML qui est fastidieuse mettre en place D autant plus que je n ai rappel ici que les composants sans montrer tout le cadre dans lequel ils sont incorpor s Ainsi il est int ressant de se pencher sur une application de param trage et de g n ration automatique de fichiers de description d agents en XML dits fichiers SATA Partie 4 VisioGacs Application de param trage en ligne A Motivations Pourquoi mettre en place un outil de param trage en ligne d un agent Tout simplement car GACS le module de navigation est d velopp mais mal param tr II est bas sur un syst me de calcul de forces permettant la configuration de la navigation de l agent Il vient compl ter le module de planification qui via un graphe de Waypoints ou carte fournit une cible vers laquelle se diriger L objectif est de remplacer la navigation de type StraightToTarget pour obtenir un graphe de Waypoints all g ainsi qu un d placement p
35. s and Z the number of frame per second 25 is a good value c endmovie Import bmp images from Half Life directory mkdir 1 mv SHALF_LIFE 1 bmp 1 cd 1 Convert bmp images to jpg format ls 1 bmp xargs i basename bmp xargs i convert verbose bmp jpg Remove all bmp images rm f 1 bmp Make an avi video from jpg images mencoder mf 1 jpg mf w 800 h 600 fps 15 type jpg ovc lave lavcopts vcodec mpeg4 oac copy o 1 avi Make an mpeg video from an avi video mencoder ovc lavc oac copy l avi o 1 mpg Read the video obtained mplayer l avi ed Fin de convert sh
36. serveur en fond Les proportions sont recalcul es lors du changement de taille de la fen tre Il faut bien distinguer les trois dimensions que l on manipule la taille de l image de fond la taille courante de la fen tre la position de l agent dans le rep re g n ral de la carte Le syst me de gestion des cartes a t particuli rement soign afin de pouvoir accepter d autres cartes ce qui pourrait tre int ressant l avenir pour cela il faut ajuster l image de la carte au plus petit rectangle pouvant la contenir conna tre la taille de l image obtenue conna tre les valeurs minimum et maximum de position de l agent sur les axes X et Y r E VisioGacs ox File Display Bot 1 NEXT PAUSE z IReactiveAgentDetector 101 102 103 Six agents sur la carte De dust 2 vus par VisioGacs Il y a un affichage des points d int r ts qui est vraiment pratique Quand l agent est en pause les points sont mis a jour Il faut alors demander GACS de faire le calcul mais pas quand l agent tourne sans quoi les calculs seront effectu s en double chaque pas de temps ce qui surcharge l ex cution inutilement De m me on dispose de l affichage de la direction courante de l agent de son nom et de ses derniers d placements mais aussi de son statut de leader et de son quipe Contre Terroristes en bleu Terroriste en rouge et agent couramment s lectionn en vert Cette partie n cess
37. setProperty et getPropertyX en utilisant le principe suivant 1 R cup rer la classe de this l objet courant 2 R cup rer les m thodes li es cet objet existe t il une m thode getPropertyX ou setProperty correspondante Si oui on retourne le r sultat de l appel 3 Existe t il un getter ou un setter pour la propri t en question Si oui on retourne le r sultat de l appel 4 R cup ration des champs existe t il un champ correspondant Si oui on retourne le r sultat de l appel 5 Autrement une exception est lev e car le champ est inexistant Ces implantations se faisant directement dans SATOMJAVA elles ont donn lieu de nombreux tests JUnit pour v rifier que la communication JAVA C fonctionne correctement On ne peut pas prendre le risque de distribuer des m thodes si bas niveau sans v rifier leur bon fonctionnement C Structure de l application Pour mettre en place l application de param trage qui acc l rera le d veloppement d agents r alistes il a t d cid d utiliser le langage JAVA Ce qui peut para tre tonnant dans un premier temps tant donn que les agents sont cod s en C C est une mani re int ressante d utiliser les propri t s de gestionnaire de composants utilis au sein de l AnimatLab SATOM Co Applications Raccourcis Syst me Eo E3u sam 2 sep 18 10 g File Display Bot 6 NEXT PAUSE WALLDetector 1 zj float rayAngle 0 723599
38. tRef lt IComponentSerializer gt serializer org satom CComponentSerializer serializer gt Write this virtual StVoid Write IlBase component StString documentPath Celle ci permet l criture d une instance mais pas des composants qui la constituent il a donc t n cessaire de rentrer dans le code C de SATOM afin d y ajouter les modifications n cessaires et indispensables comme l criture r cursive des composants c est dire qu il faut aussi sortir la description des composants constituant un composant donn d o la cr ation d une m thode WriteWithBindAttribute De cette mani re le fichier XML r cup r en sortie n tait toujours pas satisfaisant dans le sens o il ne pouvait pas directement tre charg par le s rialiseur de SATOM Il a fallu cr er un cadre minimum dans lequel ins rer le code XML de l agent Or ces modifications n ont clairement rien faire au niveau du s rialiseur Ce n est en fait pas SATOM de s adapter au besoin de VisioGacs mais plut t VisioGacs de faire le travail En clair il a fallu reprendre le fichier XML brut et le parser gr ce un parseur SAX qui se trouve tre tr s adapt ce genre de modification Le SAX tant un parseur v nementiel on ne peut pas acc der l arborescence du fichier pars mais l ajout d attributs ou encore la modification de balises sont tr s faciles Avec ce package la configuration courante de l agent peut tre sauvegard e
39. ur lui chaque force se voyant attribuer un coefficient qui peut ventuellement varier en fonction de la situation Un point fort de GACS est que la d finition d un ensemble de forces exerc es par un agent se ram ne au bout du compte un ensemble de param tres num riques qui peuvent tre r gl s pour optimiser le d placement de l agent C Navigation GACS Les travaux men s sur la navigation r active ont permis de r soudre les deux probl mes voqu s pr c demment D une part les bots sont capables de naviguer entre deux waypoints tr s distants l un de l autre sans suivre une ligne droite entre les deux ce qui permet de r duire le nombre de waypoints n cessaires pour couvrir toute la carte D autre part le formalisme de GACS d crit permet de mettre en oeuvre des capacit s de navigation coordonn e qui font que des bots peuvent se d placer en patrouille ou en formation et adapter leur trajectoire la pr sence d adversaires autour d eux GACS n est rien d autre que le portage de GACS en C Un agent GACS est aux yeux de Kodamat un IReactive un composant qui contr le le d placement de fa on r active c est dire qu il r pond la commande GoTo position et se d brouille pour y aller Il faut faire en sorte que les Waypoints soient un nouveau type de points d int r t qui seront pris en compte dans le calcul de GACS Composition Nous allons nous arr ter sur la composition de cette navigation r
40. us Subversion vierge de tous fichiers au lancement de mon stage Cela m a demand de mettre en place un structuration claire des sources ainsi que les fichiers permettant aux utilisateurs d installer facilement ce composant Je remercie encore une fois les personnes m ayant aid durant ce stage qui a t tr s enrichissant et qui me rapproche petit petit de mon objectif professionnel Si r duits au d sespoir ils viennent pour vaincre ou pour p rir vitez leur rencontre Sun Tzu L art de la guerre Article VII Lexique GACS G n ration Ascendante de Coordination Spatiale these de Fabien Flacher Counter Strike C est le simulateur utilis dans le cadre des recherches effectu es par l AnimatLab C est en fait un jeu de type FPS First Person Shooter connu des joueurs et tr s jou sur le Web II est utilis car c est celui pour lequel les drivers ont t le plus d velopp s pour r cup rer les informations n cessaires au calcul des d placements mais aussi pour la partie s lection de l action PodBot quipe de bots script s pour Counter Strike d velopp par CountFloyd L IA employ e est du niveau d un joueur moyen C est la r f rence actuelle en la mati re SPITI SPITI est le syst me d apprentissage par renforcement et de s lection de l action d velopp par Thomas Degris dans le cadre de sa th se Annexe A Manuel d utilisateur de VisioGacs Install VisioGacs application Do a mak
Download Pdf Manuals
Related Search
Related Contents
RM214-2 Manual WB.cdr ADV PHARMA RESPIMER 2012 v9 Lennox Hearth ELITE VIN User's Manual MANUALE D`ISTRUZIONI Manuale di installazione, manutenzione ed Pyle PL90HRTN car kit MTD 285 Snow Blower User Manual elaboración de procedimientos - Institucionalidad de los Programas FSQ-076K(SQ657)Japanese-A [更新済み].ai 12 pages - Ville de Briançon Copyright © All rights reserved.
Failed to retrieve file