Outils d'utilisateurs

Outils du Site


simu

Différences

Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue

simu [2013/10/21 21:08]
tfuhrman
— (Version actuelle)
Ligne 1: Ligne 1:
-====== UTCoupe : explication du simulateur ====== 
  
- 
-__Objectif du document__ : expliquer à quoi sert le simulateur et son fonctionnement. 
- 
- 
-===== Simulateur : Qu’est-ce que c’est ? ===== 
- 
-Le simulateur d’UTCoupe est un petit logiciel graphique qui représente la carte de la coupe (avec l’ensemble des objets) et qui **sert à simuler le comportement de l’IA**. 
- 
-En effet, plutôt que de procéder à des tests sur un vrai robot, il est intéressant de passer une grande partie du temps de débug sur le simulateur. Si celui-ci est bien fait, il pourra retranscrire le comportement réel du robot assez fidèlement. 
- 
- 
-===== C’est bien beau, mais pour simuler quoi ? ===== 
- 
- 
-C’est une très bonne question ! On parle de simuler le comportement du robot, mais quoi exactement ? En fait, la principale fonction du simulateur est de pouvoir observer ces différents points : 
-  * Choix pertinent des actions au cours du match 
-  * Trajectoires du robot (par exemple s’il ne fonce pas dans un mur) 
-  * Système d’évitement (géré par l’IA) 
- 
-Les actions en elle-même sont assez difficiles à simuler (surtout celles en 3d, le simulateur étant limité à 2 dimensions), d’autant plus qu’il est presque impossible de reproduire relativement fidèlement les actionneurs et les senseurs. 
- 
-Le simulateur se concentre donc sur la prise de décision de l’IA par rapport à l’état actuel du jeu, les trajectoires qu’elle prend et si son système d’évitement est efficace. 
- 
- 
-===== Et comment qu’on fait tout ça ? ===== 
- 
- 
-Le simulateur, afin de simuler un environnement réel, s’appuie principalement sur un moteur graphique (qui permet de gérer l’affichage sur l’écran) et un moteur physique (qui permet de simuler un minimum de physique, le robot a une masse, une accélération, etc… ce sont plein de petites choses à gérer dans le simulateur), le tout coupler par un engine (engine.py dans le code). 
- 
-L’ensemble des objets déplaçables (robots, feux, foyers, etc…) sont chacun des objets indépendants (au sens informatique du terme). La carte est générée, le moteur graphique se charge de charger l’ensemble des objets afin de compléter la carte. On se retrouve ainsi dans une position de début du match, en simulé. 
- 
- 
-===== Ok ! Et ça se passe comment la suite ? ===== 
- 
- 
-Le simulateur est un client comme un autre au niveau de l’architecture globale. Donc l’IA, via le protocole de communication, appel le simulateur (au lieu d’appeler l’asserv) et le lien se fait entre les 2. Pour l’IA c’est totalement transparent : elle pense qu’elle est en train de jouer un vrai match, pas un match simulé. 
- 
-Il incombe donc au simulateur de renvoyer tous les événements et messages nécessaires pour que l’IA pense qu’un match est en train de se dérouler (check de l’asserv, position des robots ennemis, etc...). 
- 
-Cela est possible en émulant l’ensemble des organes du robot en virtuel. C’est la partie un peu délicate du simulateur, car on doit tout émuler afin que l’IA pense qu’elle tourne en normal, et non sur le simulateur (donc émuler l’asserv, les actionneurs et senseurs, l’hokyo, etc…). 
- 
-Une fois que tout cela est fait et que les liens sont établis, l’IA se lance == le match commence ! 
- 
- 
-===== Conclusion ===== 
- 
- 
-En gros, le simulateur créé un environnement virtuel identique à une table de jeu et l’IA contrôle l’ensemble des actions qui se passent (par l’intermédiaire d’un robot virtuel) et le simulateur se contente d’appliquer les ordres de l’IA et de lui renvoyer les informations utiles pour son bon fonctionnement. 
- 
-Ainsi on est capable de déterminer si les prises de décisions de l’IA sont correctes, si les chemins empruntés sont cohérents et conformes et si le système d’évitement est fonctionnel. 
- 
-La seule différence entre un match réel et un match simulé est la physique : l’asserv ne répondra pas exactement de la même façon, les actionneurs et les senseurs non plus, et l’exactitude des informations ne sera pas la même (sur le simu on connait exactement la position du robot, en réel il peut y avoir des décalages). 
-Mais d’une règle général, le comportement de l’IA doit être identique dans les deux cas. 
- 
- 
-===== Explication rapide du code (les différents fichiers) ===== 
- 
- 
-**Dossier « engine » :** 
-  * engine.py : permet de coupler le moteur physique et le moteur graphique 
-  * engineobject.py : permet de créer les différents éléments de base (poly, cercle, etc) 
-  * motorgraphic.py : moteur graphique basé sur PyGame 
-  * motorphysic.py : moteur physique basé sur PyMunk 
- 
-Ce sont les extensions PyGame et PyMunk qui s’occupent de la gestion de la partie graphique et de la partie physique, nous nous contentons de les utiliser avec les bons paramètres (aucune gestion n’est faite). 
- 
-**Dossier « objects » :** 
- 
-Liste l’ensemble des objets de la table de jeu. Un objet physique correspond à 1 classe (et donc à 1 objet virtuel). 
-Chaque classe permet d’initialiser l’objet (taille, forme, couleur, physique, liens d’interactions) et possède un ensemble de méthodes qui permettent d’interagir avec l’objet. 
- 
-__Exemple :__ 
-Le robot (classe mère robot et classes filles pour le gros et le petit de chaque équipe) possède une méthode « récupérerFeu » qui s’active lorsque le robot touche un feu. L’objet feu possède une méthode « capturé » qui s’active quand le robot le touche : la couleur du feu passe de noir à rouge, ce qui indique que le robot a récupéré un feu (et un des états du robot permet de stocker l’information comme quoi le feu a bien été récupéré). 
- 
-Les objects sont le cœur du simulateur : c’est eux qui vont déterminer le comportement à adopter dans telle ou telle situation et renvoyer à l’IA les bonnes indications pour simuler ce qui se serait passé lors d’un match réel. 
- 
-**Dossier racine :** 
-  * define.py : liste de define pour tout un tas de paramètres, dont les raccourcis claviers, les types de collisions ou encore des données relatives aux distances. 
-  * hokyo.py : permet de simuler l’hokyo (pour avoir la position de l’ennemi, très utile pour tester le système d’évitement) 
-  * maploader.py : permet de charger le fond de carte (en dehors des moteurs graphiques et physiques, la fenêtre affiche en fond le map en 2d : ceci permet de se repérer efficacement) 
-  * match.py : j’imagine que ça sert à simuler le match (non touché l’an dernier) 
-  * simubot.py : pas utilisé (c’était pour le client irc, à faire un autre truc pour le nouveau client de cette année) 
simu.1382382537.txt.gz · Dernière modification: 2013/10/21 21:08 par tfuhrman