Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

articles:architecture_software_m32 [2019/10/26 21:08] (Version actuelle)
Ligne 1: Ligne 1:
 +===== Architecture Software M32 =====
  
 +FIXME //Recherche des images en cours...//
 +
 +Le cerveau du robot ClubElek est représenté par un micro-processeur Renesas M32. Sur celui-ci, nous déployons un système d'​exploitation temps-réel léger, appelé µC-OS II.
 +
 +** Ce document a été fait lors de la phase de conception du projet. Il est censé etre indépendant du théme de 2011. Enfin, il est possible que certains concepts aient changés **
 +
 +m32-chip.jpgmoe-m32-board.jpg
 +
 +==== Description des tâches ====
 +=== La tâche « Actuators » ===
 +
 +__Rôle de la tâche__
 +  * commande les actionneurs après avoir reçu les messages (actions) de la tâche « Interpreter ​
 +
 +__Phase moteur__
 +
 +  * attendre un message dans « ActuatorsMailbox »
 +  * exécuter l'​action indiquée par le message (à définir plus en détails plus tard)
 +  * si besoin, signaler l'​événement « NextDecision »
 +  * si c'​était le dernier message de la « ActuatorsMailbox », alors signaler «ActuatorsDecision»
 +
 +=== La tâche « Displacement » ===
 +__Rôle de la tâche__
 +
 +  * s'​occupe du déplacement du robot
 +  *  déplace le robot dans la position spécifié dans la MPP « Destination ». 
 +Optionnellement,​ cette MPP peut contenir des points intermédiaires. Dans ce cas la tâche «Displacement» définira le chemin avec prise en compte des points intermédiaires. Entre chaque deux poins de la MPP « Destination », la tâche peut fonctionner en deux modes (en fonction du bit pour indiquer le mode):
 +
 +** avec le pathFinder **
 +
 +La tâche « Displacement » accède à la MPP « PlayArea » pour récupérer une liste des obstacles et zones préférentielles. A partir de ces données, elle calcule le chemin à suivre en évitant les obstacles (le rôle de zones préférentielles à expliquer plus tard).
 +
 +** sans le pathFinder **
 +
 +Le chemin calculé dans ce cas est fait en supposant que aucun obstacle/​zone préférentielle se trouve sur le terrain. Ce mode est utile dans le cas d'​utilisation d'une IA qui décide elle même le chemin du robot (et pas seulement la destination).
 +
 +__Phase moteur__
 +
 +  * Attendre les descisions stratégiques de la tache interpreter
 +  * Exécuter en toute sécurité les ordres de déplacement en dégradant les choix au besoin (courbes/​lignes,​ évitement...)
 +  * Signaler lorsque l'​action a été exécutée ou lorsqu'​elle n'a pas pu être réalisée
 +
 +=== La tâche « Interpreter » ===
 +__Rôle de la tache__
 +
 +  * interprète les décision prises par l'IA (ou injectées par l'IHM)
 +
 +  * découpe la décision en deux parties:
 +
 +//la partie actionneurs //– des messages seront déposés dans la « ActuatorsMailbox »
 +
 +//la partie déplacement //– le point destination (sans ou avec une liste des points) sera communiqué à la tâche « Displacement » à l'aide de la MPP « Destination ». 
 +
 +  * en fonction de la décision, elle écrit dans la MPP « EventMask » pour définir les événements qui peuvent provoquer un déclenchement de l'IA. Après écriture, elle signale le changement de masque à la tâche « Trigger » à l'aide de l'​événement « MaskReady »
 +
 +__Phase moteur__
 +
 +  * attendre la signalisation de l'​événement « NextDecision » pour interpréter une décision. Cet événement est signalé par:
 +      *  la tâche **Decision** dans le cas d'une décision prise par l'IA
 +      * la tâche **IHM** dans le cas d'une commande envoyé par l'​utilisateur
 +      * les tâches **Actuators** ou **Displacement** dans le cas d'une décision qui nécessite une synchronisation déplacement-actionneurs. Pour ce cas, la décision doit être communiqué par l'IA (ou par l'IHM) sous forme de plusieurs sous-décisions. La tâche **Interpreter** doit se charger de communiquer aux tâches **Actutators** et **Displacement** après quelle action doivent-elles signaler l'​événement **NextDecision**
 +  * récupérer le message de la **DecisionMailbox** (récupération sans attente). Si aucun message est disponible, alors réprendre l'​attente de **NextDecision**
 +  * communiquer la décision aux actionneurs (à l'aide de plusieurs messages dans **ActuatorsMailbox**).
 +  * communiquer la destination à la tâche de déplacement (écrire dans la MPP ** Destination ** + signalisation du sémaphore ** DestinationReady **)
 +  * calculer la masque pour les événements et l'​écrire dans la MPP **EventMask**
 +
 +=== La tâche « Decision » ===
 +__Rôle de la tache__
 +
 +  *  à la demande, utilise le module (une procédure) IA pour prendre une nouvelle décision
 +
 +  * signale à la tâche « Interpreter » la disponibilité d'une nouvelle décision à l'aide de l' événement « NextDecision »
 +
 +__Phase moteur__
 +
 +  * attendre le sémaphore « Trigger Decision »
 +  * appeler la méthode principale de l'IA
 +  * signaler l'​événement « NextDecision » pour que l'​interpréteur traite la décision.
 +
 + === La tâche « IHM » ===
 +__Rôle de la tache__
 +
 +  * permet le contrôle du robot à partir de l'​extérieur (ex: à partir du PC)
 +  * remplace l'IA
 +
 +__Phase moteur__
 +
 +  * attendre un message dans « IHMMailbox »
 +  * comprendre la commande « Command » => une ou plusieurs décisions à exécuter
 +  * vider le « DecisionMailbox » pour écraser les éventuelles sous-décisions restantes
 +  * écrire ces décisions dans « DecisionMailbox »
 +
 +=== La tâche « Environment » ===
 +__Rôle de la tache__
 +
 +  * traite (et filtre) les informations reçues sur l'​environnement (tourelle, vision, etc)
 +  * si besoin, appelle l'IA pour prendre une nouvelle décision
 +
 +__Phase moteur__
 +
 +  * attendre un message dans « EnvironmentMailbox »
 +  * modifier la MPP « PlayArea » avec les données contenues par ce message
 +  *  si le message provient d'un autre périphérique et les informations apportées implique de prendre une nouvelle décision (par exemple la tourelle nous dit que l'​adversaire est trop proche de nous) alors il faut également signaler le besoin d'une nouvelle décision (l'​événement « Trigger Decision »)
 +
 +conception_if_m32_v5.png
 +
 +La structure "​Critical Actuators"​ n'a pas été implementé. Sa fonction est remplie à l'​intérieur de la tache ActuatorTask.
 +
 +Article écrit par SAVOYAT Marc-Antoine
 +
 +27 août 2011