Structure du soft

Nous utilisons le FreeRTOS comme système d'exploitation des cartes du serpent. Donc, notre software est divisé en pluisieurs tâches principales (et d'autres qui ne sont pas indisplensables). Ces tâches sont responsables surtout pour :

  • s'arrêter, avancer ou reculer le serpent
  • le tourner ou le faire revenir à un déplacement droit
  • identifier les cartes présentes
  • recevoir des commandes de l'ordinateur
  • recevoir des commandes de la carte maîtresse ou d'autres cartes

Déplacement avant et en arrière

Il y a une tâche principale qui fait le contrôle du servo qui permet le déplacement en avant et en arrière (le vertical). Tant que l'utilisateur ne choisi pas l'option de déplacement, le serpent ne bouge pas. Si un message du type déplacement arrive, toutes les cartes se mettent en attente de leur position, sauf la première qui va commencer le calcul de l'algorithme et qui va déclencher les calcules des toutes les autres. Lorsqu’une carte possède des informations nécessaires pour trouver l'angle auquel le servo doit se maintenir, elle lui envoie le signal PWM correspondant.
Alors, ce déplacement est fait à partir d'une propagation des positions.

Virage à droite et à gauche

Cela est fait par une propagation de la courbe, c'est-à-dire que lorsque la carte maîtresse reçoit une commande de tourner à droite ou à gauche, ou de revenir à un déplacement tout droit, elle envoie cette commande à la tête du serpent. Ensuite, ce message se propage aux autres cartes.

La carte qui est la première va faire l'action voulue et envoyer la même commande à la vertèbre suivante. Cette vertèbre attend un nombre variable de pas (dépendant de la vitesse de déplacement) avant de faire aussi cette action. Lorsqu’elle est faite, la commande passe à la vertèbre suivante. Cela se répète jusqu'à la dernière vertèbre.

Identification dynamique de présence

En parallèle, la carte maîtresse envoie des messages de vérification de présence. Lorsque les autres cartes les reçoivent, ils lui envoient une réponse. La carte maître vérifie qui est encore présent et détermine le plus grand nombre de cartes de manière séquentielle qui y sont encore connectées. Ensuite, les identifications de la première et de la dernière vertèbre active sont envoyées à toutes les vertèbres.
Cela est utile parce que le déplacement dépend toujours de la première carte pour déclencher tous les calculs.

Communication avec l'ordinateur

À tout instant, l'utilisateur peut envoyer des commandes vers le serpent. C'est toujours la carte dont ID vaut 0x09 qui va les recevoir, car c'est la seule à avoir un zigbee configuré. Dépendant de l'état du mouvement du serpent et aussi du type de commande, cette carte peut l'accepter ou la refuser. Par exemple, si le serpent marche en avant et l'utilisateur veut qu'il marche en arrière, il doit d'abord envoyer une commande d'arrêt pour ensuite envoyer celle de marcher en arrière.

Comme commande de déplacement, nous avons implémenté :

  • marcher avant, en arrière, s'arrêter ;
  • tourner à gauche ou à droite ou revenir à un déplacement droit.

Il y a aussi des commandes qui modifient les configurations de l'exécution :

  • attente entre deux calculs : cela modifie la vitesse de déplacement du serpent (plus rapide, moins rapide) ;
  • la hauteur de l'onde ;
  • la longueur de l'onde ;
  • l'angle d'un virage.

Commandes venues d'autres cartes

Il y a deux tâches qui sont responsables pour recevoir les messages venus par le bus CAN.
Une première tâche filtre les messages reçus et traite juste ceux dont le destinataire est la propre carte. Une deuxième tâche est responsable pour le traitement des messages qui sont envoyés en "broadcast".
Ces filtres sont utilisés au moment où un message arrive. C'est l'interruption concernée à l'un ou l'autre qui va être activée.

—-
Back

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License