Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
informatique:ia:explication-code [2013/11/28 19:21] qchateau [Code en détail] |
informatique:ia:explication-code [2014/06/20 23:00] (Version actuelle) bacheced [Dossier : /ia/event/goals/viso] |
||
---|---|---|---|
Ligne 2: | Ligne 2: | ||
- | Vous l'avez surement remarqué, mais le code actuel n'est presque pas commenté, ce qui le rend extrêmement difficile à comprendre. Je vais tâcher de vous expliquer dans les grandes lignes la façon dont le code a été structuré à travers les différents fichiers. | + | Vous l'avez surement remarqué, mais le code actuel n'est presque pas commenté, j'espère que les nom de variables assez explicite permettront malgré tout de rendre l'ensemble compréhensible. |
- | Je n'entrerai pas trop dans les détails pour 2 raisons : j'en suis incapable, et certaines parties seront amenées à être modifiée pour la coupe 2014. | + | Je vais tâcher de vous expliquer dans les grandes lignes la façon dont le code a été structuré à travers les différents dossier. |
- | ===== Dossier "graph" : ===== | + | ===== Dossier : "/ia" ===== |
+ | Contient tout le code source de l'ia | ||
+ | * main.py Permet se lancer directement l'ia ou peut être lancé par le simulateur pour démarrer l'ia | ||
+ | * constantes.py Contient toutes les constantes utiles à l'ia | ||
+ | ===== Dossier : "/ia/communication" ===== | ||
+ | Pour discuter avec les tourelles et le petit robot | ||
+ | * - commSimulateur.py Uniquement destiné à simuler la communication dans le cas où l'ia est démarré par le simulateur | ||
+ | * - parser_c.py Parse les ordres directement depuis le fichier de define des arduino. | ||
+ | * - communicationGlobale.py Gérer toute la communication, son but est d'assurer la bonne réception des tous les messages | ||
+ | * - conversion.py Effectue la conversion des ordres des types usuels vers le binaire | ||
+ | * - serial_comm.py Gère un port de communication série | ||
+ | * - metaData.py Gère toutes les autres données, tel que le temps, la couleur de départ | ||
+ | * - pullData.py Maintient les données ci dessus à jour avec les données réel. | ||
+ | * - script_*.xml Contient le script de départ d'un robot | ||
+ | |||
+ | ===== Dossier : "/ia/data" ===== | ||
+ | Stocke toutes les données relatives aux robots et aux tourelles. | ||
+ | * - data.py Classe principale, elle instancie toutes les autres | ||
+ | * - ourBot.py et enemyBot.py stocke les données des robots | ||
+ | * - tourelle.py gère les tourelles | ||
+ | |||
+ | |||
+ | ===== Dossier : "/ia/event" ===== | ||
+ | Gère les évènements et apport une réponse au besoin. | ||
+ | - eventManager.py Gère les évènements et notamment l'envoi des actions au bon moment. | ||
+ | - collision.py Détecte un collision sur le chemin prévu | ||
+ | - timeManager.py Gère le temps de jeu | ||
+ | - subProcessCommunicate.py Gère la communication avec les subprocess de choix d'objectif (un sub par robot) | ||
+ | |||
+ | ===== Dossier : "/ia/event/goals" ===== | ||
+ | * - subProcessManager.py Gère le démarrage d'un subprocess ainsi que sa communication avec son père | ||
+ | * - goalsChoice.py Choisi les objectifs à effectuer en fonction des données | ||
+ | * - goalsLibrary.py Contient des fonctions de base pour le choix et la gestion des objectifs | ||
+ | * - goalsManager.py Charge et gère les objectifs disponibles | ||
+ | * - goal.py Représente un objectif | ||
+ | * - elemGoal.py Représente un des points d'entrée d'un objectif ainsi que toutes données associé à cette entrée | ||
+ | * - goals.xml Contient la liste des objectifs et de leurs points d'entrée | ||
+ | * - elemScripts.xml Contient la liste des tous les enchainements d'actions possible. | ||
+ | |||
+ | ===== Dossier : "/ia/event/goals/viso" ===== | ||
+ | Permet à la camera embarqué dans le robot de renvoyer la position des triangles ainsi que leur couleur | ||
+ | * - visio.py Interface vers le lib de viso: /superviso | ||
+ | |||
+ | ===== Dossier "ia/event/goals/navigation" : ===== | ||
+ | |||
+ | Ce code n'a pratiquement pas évoluée depuis l'année 2012. On a rencontré quelques difficultés avec celui-ci cette année 2014, mais globalement ça fonctionne très bien. | ||
Regroupe le code pour la construction du graph de recherche et la recherche de chemin pour le robot, en prenant en compte les parties de la table qui son inaccessible. Le graph possède une fonction de mise à jour permettant de prendre en compte le déplacement des obstacles. | Regroupe le code pour la construction du graph de recherche et la recherche de chemin pour le robot, en prenant en compte les parties de la table qui son inaccessible. Le graph possède une fonction de mise à jour permettant de prendre en compte le déplacement des obstacles. | ||
Deux stratégies sont fournies pour la construction du graph : un découpage par tiles et un découpage par polygones convexes (polygones qui n'ont pas d'angle rentrant). | Deux stratégies sont fournies pour la construction du graph : un découpage par tiles et un découpage par polygones convexes (polygones qui n'ont pas d'angle rentrant). | ||
Ligne 20: | Ligne 65: | ||
=== Découpage en polygones convexes (navgraph) === | === Découpage en polygones convexes (navgraph) === | ||
- | Découpage plus complexe à réaliser, le but est de découper la zone accessible en un minimum de polygones convexes. Avec cette implémentation le calcul du plus court chemin est fortement acceléré car le nombre de noeud est très faible, la taille du graphe ne dépend plus de la taille de la carte mais de la complexité de celle-ci (nombre d'obstacles et formes de ces obstacles). | + | Découpage plus complexe à réaliser, le but est de découper la zone accessible en un minimum de polygones convexes. Avec cette implémentation le calcul du plus court chemin est fortement accéléré car le nombre de noeud est très faible, la taille du graphe ne dépend plus de la taille de la carte mais de la complexité de celle-ci (nombre d'obstacles et formes de ces obstacles). |
Le calcul des polygones convexes est réalisé à l'aide un petit programme en c++ qui utilise la libCGAL, une librairie mathématique de haute voltige. | Le calcul des polygones convexes est réalisé à l'aide un petit programme en c++ qui utilise la libCGAL, une librairie mathématique de haute voltige. | ||
Ligne 30: | Ligne 75: | ||
=== Debug et visualisation === | === Debug et visualisation === | ||
- | Dans le dossier vizgraph il y a les outils necessaire pour observer le découpage réalisé selon l'un ou l'autre des algorithmes, on peut aussi déplacer un objet fixtif pour forcer la mise à jour du graph pui demander le calcul d'un chemin. Pour chaque opération on peut voir le temps d'execution. | + | Dans le dossier vizgraph il y a les outils nécessaire pour observer le découpage réalisé selon l'un ou l'autre des algorithmes, on peut aussi déplacer un objet fictif pour forcer la mise à jour du graph pui demander le calcul d'un chemin. Pour chaque opération on peut voir le temps d'execution. |
- | + | ||
- | =====Dossier "load" ===== | + | |
- | + | ||
- | Dans ce dossier il y a toutes les classes necessaires au chargement de la map. Deux formats sont possibles : le format matrice de collision (image black & white) et le format descriptif en xml (qui pourrait être passé en json ca ferait du bien). | + | |
- | + | ||
- | === Format jpg === | + | |
- | + | ||
- | /!\ format adapté pour la génération d'un tile graph seulement /!\ | + | |
- | + | ||
- | L'image doit être en noir et blanc, toute zone noir est inaccessible. | + | |
- | + | ||
- | === Format descriptif === | + | |
- | + | ||
- | Le ficier doit décrire les zones inaccessibles à partir de formes géométriques. | + | |
- | + | ||
- | === Visualisation === | + | |
- | + | ||
- | Le fichier window.py permet de voir comment le decoupage a été fait. Il ne gère actuellement que le navgraph avec fichier descriptif mais libre à vous d'étendre son comportement. | + | |
- | + | ||
- | ===== Fichiers : ===== | + | |
- | + | ||
- | + | ||
- | * **ia_base.py :** Regroupe les méthodes de base d'une ia (setup des connections, setup de l'état interne, etc...), cette class implémente une ia basic qui ne fait rien à part demander les informations de l'hokyo et de l'asservissement puis de mettre à jour son état interne. La class doit être surchargée.Regroupe les méthodes de base de contrôle de l'IA, à savoir start/stop, la détection du jack, les boucles et quelques autres méthodes relatives aux actionneurs (la classe risque d'être éclatée pour en avoir une dédiée aux actionneurs). | + | |
- | + | ||
- | * **ia_utcoupe.py :** L'ia d'utcoupe, c'est la classe qui surcharge IaBase, elle implémente tooutes les spécificités de l'IA de cette année, elle pourrait être renommé en IAUtcoupe20XX pour avoir une trace d'année en année. | + | |
- | + | ||
- | * **action.py :** Super classe de actions.py. Cette classe regroupe l'ensemble des méthodes relatives à toutes les actions. A savoir principalement les calculs de chemins, de score et de priorité. | + | |
- | + | ||
- | * **actions.py :** Fichier qui regroupe toutes les classes d'actions. Cette architecture là sera amenée à évoluer. | + | |
- | + | ||
- | * **gamestate.py :** Classe représentant la connaissance de l'IA, toutes les infos récupérées et filtrées des différents drivers (hokuyo, asservissement, visio, ...). La classe possède une méthode pour mettre à jour ses informations au fil du match. | + | |
- | + | ||
- | * **robot.py :** Classe représentant la connaissance de l'ia sur un robot. La classe fournit aussi quelques méthodes utilitaires sur les calculs de chemins. | + | |
- | + | ||
- | * **smartasserv.py :** Ne fonctionne pas actuellement, mais permet de gérer l'asserv d'une façon "intelligente". C'est un module qu'il faudra absolument rendre fonctionnel pour la coupe 2014 afin de passer par celui-ci et non d'interroger directement l'asserv à partir de l'IA (ce qui est actuellement fait). | + | |
- | gateau.py, ia_test.py et verre.py ne sont plus utilisés (gateau et verre étaient des classes séparées pour els actions sur le gateau et avec les verres durant la coupe 2013). | ||
- | ===== Code en détail ===== | ||
- | * [[ .:Main ]] | ||
- | * [[ .:IA_base ]] | ||
- | * [[ .:Robot ]] | ||
- | * [[ .:Gamestate ]] | ||
- | * [[ .:Action ]] | ||
- | * [[ .:Actions ]] |