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