Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
informatique:simulateur [2013/11/28 19:25] qchateau [Autre] |
informatique:simulateur [2014/08/18 23:09] (Version actuelle) tfuhrman [Ok ! Et ça se passe comment la suite ?] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== UTCoupe : explication du simulateur ====== | + | ====== UTCoupe : documentation du simulateur 2014 ====== |
- | __Objectif du document__ : expliquer à quoi sert le simulateur et son fonctionnement. | ||
+ | N'avez-vous jamais rêvé de savoir ce qu'il se passe dans la tête de votre robot ? De pouvoir afficher le résultat des milliers de lignes qui en composent son intelligence artificielle ? Ou tout simplement de pouvoir bosser alors que les mécanos sont pour une énième fois en train de bidouiller le robot ? | ||
- | ===== Simulateur : Qu’est-ce que c’est ? ===== | + | C'est pour répondre par l'affirmative qu'a été développé le simulateur ! Compagnon de tous les jours des développeurs de l'IA du robot, voici la documentation de la bestiole qui aura été améliorée depuis plusieurs années. |
- | 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. | + | ===== Explication générale : le simulateur ===== |
- | Et ça ressemble actuellement à ça : | ||
- | {{:simu_2013.png|}} | + | ==== Le simulateur, qu’est-ce que c’est ? ==== |
- | ===== C’est bien beau, mais pour simuler quoi ? ===== | + | En général, un simulateur est un logiciel qui permet de simuler un procédé physique. Dans notre cas, le simulateur sera simplement un logiciel graphique qui simule le comportement de nos robots et des objets de la table de jeu. Cela nous permet de tester et de débugger notre Intelligence Artificielle. |
+ | En effet, plutôt que de procéder à des tests sur un vrai robot (qu'il faut avoir…), il est intéressant de passer une grande partie du temps de débug sur le simulateur. Ainsi le développement de l'IA sera plus rapide et le robot pourra être utilisé pour d'autres choses. | ||
- | 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 : | + | Pour vous donner une idée, notre simulateur ressemble à ça : |
- | * 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. | + | {{ :informatique:simu_fenetre_principale.png |}} |
- | 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. | ||
+ | ==== C’est bien beau, mais pour simuler quoi ? ==== | ||
- | ===== Et comment qu’on fait tout ça ? ===== | ||
+ | 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 : | ||
+ | * Trajectoire des robots | ||
+ | * Comportement des actionneurs | ||
+ | * Système d’évitement (géré par l’IA dans notre architecture) | ||
+ | * Choix pertinent des actions au cours du match (dynamique dans notre architecture) | ||
- | 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'objectif principal étant d'avoir un retour graphique sur le comportement général du robot et son interaction avec la table de jeu. |
- | 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é. | ||
+ | ==== Et comment qu’on fait tout ça ? ==== | ||
- | ===== Ok ! Et ça se passe comment la suite ? ===== | ||
+ | Le simulateur doit gérer principalement 2 choses : | ||
+ | * L'affichage des robots et des éléments de jeu | ||
+ | * L'interaction entre les robots et les éléments de jeu | ||
- | 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é. | + | Notre simulateur s'appuie sur 2 librairies python : |
+ | * PyGame, le moteur graphique qui va s'occuper de l'affichage | ||
+ | * PyMunk, le moteur physique qui aura à charge la gestion de la physique de tous les objets | ||
- | 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...). | + | Concrètement, on va afficher un fond de carte vierge, sur lequel on va dessiner un ensemble d'objets que l'on peut déplacer (les robots et les éléments de jeu). Le gestionnaire de collision se chargera de simuler l'interaction entre les différents objets. |
- | 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…). | + | En définitive, le simulateur fonctionne un peu comme un jeu, où les éléments sont contrôlés par une IA. |
- | Une fois que tout cela est fait et que les liens sont établis, l’IA se lance == le match commence ! | ||
+ | ==== Ok ! Et ça se passe comment la suite ? ==== | ||
- | === Petite précision sur les actionneurs du robot : === | + | Maintenant que le cadre est posé, la grande question est : comment l'IA fait pour faire bouger les éléments du simulateur ? Comment se passe l'interaction des deux logiciels ? |
+ | En réalité, le simulateur implémente l'ensemble des ordres qui peuvent être envoyés par l'IA à travers le protocole (voir section [[informatique:simu14:code-detail|Le code en détail !]], titre communication). Et c'est à travers ces ordres là que les éléments du simulateur bougent. | ||
- | Les éléments de la table de jeu ont une taille fixe durant le jeu, ce qui n'est pas le cas des robots. On en effet, au cours du match, le robot peut activer des actionneurs qui auront pour effet de rendre sa surface au sol plus grande (on sort un bras par exemple). | + | Par ailleurs, le simulateur doit aussi intégrer les codes de retour, envoyés normalement par le robot physique (ou en l'occurrence les cartes arduino clientes du point de vue du protocole de communication). |
- | Du fait du caractère dynamique de l'évolution du robot, un système d'extension a été intégré au simulateur. Ainsi notre robot peut se voir doté de bras (et pour la simulation, on peut activer l'option via un raccourci clavier), mais ceux-ci sont a une certaine hauteur, donc ils ne percutent pas tout (un paramètre important à prendre en compte dans la simulateur). | + | Le simulateur se substitue donc totalement aux clients du protocole de communication, tout en exécutant les ordres reçus et en envoyant les mêmes codes de retour. L'idée étant que du point de vue de l'IA, tout soit transparent (ce qui n'est malheureusement pas le cas étant donné notre architecture). |
- | Bref, les robots peuvent être associés à une liste d'extensions activable et désactivable au cours du match du simulateur (à l'aide de raccourci claviers). | + | ===== La documentation ===== |
- | ===== 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. | + | * [[.:simu14:architecture|Architecture utilisée]] |
- | + | * [[.:simu14:installation|Installation et lancement du simulateur]] | |
- | 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. | + | * [[.:simu14:interaction|Comment interagir avec le simulateur ?]] |
- | + | * [[.:simu14:code-détail|Le code en détail]] | |
- | 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). | + | * [[.:simu14:adapter|Comment adapter le simulateur pour une nouvelle coupe ?]] |
- | Mais d’une règle général, le comportement de l’IA doit être identique dans les deux cas. | + | |
Ligne 72: | Ligne 75: | ||
===== Autre ===== | ===== Autre ===== | ||
- | + | [[simu:simu13|Documentation version 2013]] | |
- | * [[.:explication-code|Explication du code du simulateur]] | + | |
- | * [[.:ameliorations|Idées d'amélioration du simulateur pour la coupe 2014]] | + |