Asservissement-Positionnement

Usine à gaz - Utilisation


Présentation
DSP TMS320VC31
Carte d'évaluation TI DSP Starter Kit
Carte d'Extension - Asservissement Positionnement
Soft

Usine à gaz - Utilisation
Usine à gaz - Historique


Introduction

On va essayer de décrire ici le fonctionnement côte 'utilisateur' de l'usine à gaz.

Documentations

Malheureusement aucune, hormis celle-ci. Ce soft est quasiment 100% fait maison. Il comporte quelques routines incluses d'autres sources :

  • Routines TI de com avec la carte DSK StarterKit
  • Routines TI de conversion de floats format DSP vers format IEEE(PC)

Aperçu global

L'usine a gaz a été continuée après la coupe (le prog PC lm629_dsp.exe ET le prog sur le dsp asser_dsp). Ces nouvelles versions sont dans Asservissement-balisees\asser_dsp_new

Il y'a en plus

  • les trajectoires courbes
  • la com PC<->DSP(debug) en utilisant le port parallèle en mode bidirectionnel et en utilisant un très long cable
  • la possibilité d'envoyer des ordre par le debug
  • un utilitaire pour déplacer le robot à partir du clavier (powered by flemme power)

Lorsque l'on démarre le fichier Asservissement-balisees\asser_dsp_new\Asser_DSP\lcc\lm629_dsp.exe, on doit voir apparaitre quelquechose qui ressemble à ça. Le programme peut aussi planter ... ce qui est le mauvais cas. La cause du plantage est TRES difficile à déterminer sans examiner les sources.

 

 

Aperçu global de l'usine à gaz

A partir de ce point, il ne faut plus chercher à trouver des explications rationelles au pourquoi du comment. Il s'agit d'un amoncelage de fenêtre et de code qui a été utilisé pour différents essais, recherches,etc.

Cette barre contrôle l'apparition des différentes fenêtres :

A partir d'ici plusieurs commande sont disponibles :

  • Reload, va effectuer le chargement du code dans le DSP. En fonction de l'état précédent (debug, pas debug, etc), il est censé changer d'état. Ce Reload va suivre la procédure décrite ici. Il va donc commencer par charger le Kernel, qui est situé dans le fichier C3X.DSK. Ce fichier doit donc être présent dans le même répertoire que lm629_dsp.exe. Il va ensuite charger le code situé dans le fichier ..\\..\\asser_dsp\\lcc\\asser_dsp.out
    Ce chemin est codé 'en dur' dans l'application. (NDLR : rappel à partir de ce point, il ne faut plus chercher pour qui pourquoi,etc). Il faut donc que le fichier à charger soit situé à cet endroit par rapport à lm629_dsp.exe.
    Soit le chargement va bien se passer, auquel cas, le titre de la fenetre se change de "DSP Util" en "Bootloading ..." puis revient à son titrre initial (pas de message)
    Soit le chargement va mal se passer et on va avoir une erreur qui peut être entre autre :
    • Erreur Initialisation du DSP
      Vérifier les cables, la présence du loader C3x.dsk dans le rep de l'appli
      Verifier que le DSP n'est pas en mode autonome (le jumper doit être ENLEVE sur la carte d'extension)
      Ce message indique que le kernel n'a pas réussi à se bootloader. Ce qui en soi indique un problème assez 'bas niveau'. La communication de base ne requiert pas beaucoup d'informations.On pourra donc vérifier que :
      • Les cables sont bien branchés (et en état de marche).
      • Le jumper est bien enlevé, ce qui permet de booter en mode non autonome.
      • Le fichier C3x.dsk est bien dans le même rep que lm629_dsp.exe.
      • La carte est bien alimentée.
      • Le sandwich est correctement mis,etc
    • Erreur chargement du programme d'application
      Vérifier sa présence dans le rep de l'appli
      L'erreur s'est produite au moment du chargement du programme d'application. CONTRAIREMENT à ce qui est dit, le prog n'est pas dans le rep de l'utilisateur, mais dans ..\\..\\asser_dsp\\lcc\\asser_dsp.out
      Lorsque cette erreur se produit de façon répétée, il peut y avoir comme problème :
      • Un problème sur la liaison, mais qui ne devrait pas se reproduire trop de fois.
      • Le DSP planté ou le Kernel planté, ou dans un état aléatoire, qui fait que le chargement plante. Dans ce cas, il faut faire un reset manuel de la carte (ce qui ne change normallement rien).
      • Essayer d'éteindre et de rallumer la carte. I
      • Essayer de redémarrer lm629_dsp.exe car cette erreur peut aussi venir du fait qu'il n'a pas réussi à ouvrir le fichier, car il a été mal refermé ou il y'a eu un problème dessus.
      • Le programme téléchargé contient un problème (pas un bug dans le code, mais une taille trop grande, qui fait qu'il ne loge pas dans la mémoire, ou un mapping mémoire incorrect qui fait qu'il déborde de la mémoire,etc)
    • Impossible de communiquer avec le DSP ou Communication erronée. Ces 2 actions sont effectuées après avoir bootloadé le programme, pour vérifier que la communication avec le Kernel est toujours possible (le programme n'est pas encore lancé, il est juste chargé). Une erreur de ce type peut indiquer :
      • Un problème dans le programme téléchargé (mapping mémoire, écrasement du Kernel, taille trop grande, etc)
      • Un problème de com' (cable, parasite, etc)
    • "Erreur SSTEP","Impossible de lancer le programme". Il y'a eu une erreur lors de l'exécution du Single Step NECESSAIRE (mais on ne sait pas exactement pourquoi -- sans doute une des spécificités du DSK, qui est troublé par le fait qu'on utilise pas son compilo) avant l'exécution du programme. Cette erreur peut survenir pour diverses raisons. Elle peut venir d'un problème dans le programme utilisateur.
    • Getmem après lancement du prog
      Erreur de communication ? Programme planté ?
      Cette erreur de loin la plus fréquente indique qu'il n'y a plus de communication possible avec le Kernel. Dans ce cas, le programme a planté la carte. Ce peut être dû à une erreur dans le programme ou sur le hard de la carte, ou etc, ....

    Il est à noter que l'assemblage du sandwich est assez suceptible et il peut être nécessaire de désasembler et réassembler l'ensemble des cartes.

    Attention ! Une fois le 'reload' effectué correctement, celà veut dire que :

    • Le Kernel est correctement chargé.
    • Le programme s'est chargé sans venir écraser le Kernel
    • Le programme a été lancé
    • Le Kernel était toujours fonctionnel après.
    • Mais ça ne VEUT PAS DIRE que le programme tourne, il peut très bien s'être planté sans endommager, ni géner le Kernel qui fonctionne sur IT.
  • Mem/Flash ouvre une fenêtre contenant des outils pour les tests de la mémoire et le flashage.(détaillé après)
  • Dbg // démarre le debug parallèle, c'est à dire que le soft va aller régulièrement demander au DSP un certain nombre de variables et va afficher les résultats dans la boite Position Management Unit Interface, et sur le terrain notamment (il peut y avoir quelques autres trucs aussi en fonction du mode)
  • Dbg I2C démarre le debug I2c, qui va aller lire via interface sur le port // les données de la carte (via l'i2C). Même chose en fait en plus lent, plus aléatoire,etc,etc
  • getmem, qui va permettre de lire de façon bien plus indistrielle (gros paquets) dans la RAM de la carte. A servi notemment pour le debug de l'I2C, le debug du recalage de ligne, le debug de l'asservissement, le debug des trajectoires courbes.
  • Chef, qui ouvre une autre fenêtre permettant de contrôler la carte principale, via le port série du PC (qui une fois relié à la carte principale) permet de contrôler celle-ci.
  • Goto Home qui ouvre une fenetre, qui permet de contrôler le robot au clavier. Cette fenêtre ne contient rien, mais lorsqu'elle est sélectionnée, il est possible de faire avancer, reculer, tourner le robot avec le flèches de direction. La touche espace stoppe le robot et réinitialise la position à son aire de départ.'A' permet de stopper sans réinitialiser la position.

Détail des fenêtres

Plusieurs fenêtres vont être détaillées :

  • La fenêtre principale "Position Management Unit Interface"
  • Le séquenceur qui apparait en haut à droite
  • Le terrain
  • La fenêtre "Mem/Flash" (accessible depuis la barre du haut)
  • La fenêtre "getmem" (accessible depuis la barre du haut)
  • La fenêtre "Chef" (accessible depuis la barre du haut)

Fenêtre principale "Position Management Unit Interface"

Fenêtre principale - Debug principal

Cette fenêtre a été la première de ce programme. Elle a été remaniée dans tous les sens. Elle indique dans l'état actuel, un certain nombre d'infos issues du code de positionnement-asservissement.
Cette fenêtre est remplie :

  • Lorsque la communication "debug //" (cf au dessus) est activée. Dans ce cas, les infos sont retournées directement par la communication PC<->DSP. Les variables correspondantes sont lues en mémoire et affichées.
  • Lorsque la communication "debug I2C" est activée. Dans ce cas, les infos sont demandées sur le bus I2C (via interface I2C // à base de PIC sur le port //)

Dans les 2 cas, la communication a lieu sur le port // mais est TOTALEMENT différente. En fonction du debug choisi, les infos affichées diffèrent. Certaines cases ne sont pas remplies, d'autres sont remplies mais avec des données différentes,etc.

Le debug // est le plus complet, il remplit les boites :

  • Current X,Current Y, Current THETA qui correspond à la position actuelle du robot (unité ? mm ? mm/10 ?)
  • Mean LM629s, Diff LM629, données de debug pour le positionnement.
    ATTENTION ! Dans le cas d'une communication I2C, la case DiffLM629s n'est pas affichée mais LUE. Sa valeur correspond à la durée (en nombre de tour de boucle for) du délai d'attente entre l'envoi de plusieurs infos au PIC qui fait la conversion // <-> I2C.
  • DesX, DesY, Goto Theta, étaient censés afficher la position à atteindre (dans le cas d'un ordre de déplacement GOTOXY). Maintenant ils doivent afficher quelquechose, il faudrait vérifier quoi.
  • DSP RXTX, les 2 cases en dessous de ces labels, sont des variables de debug utilisées sur le DSP. La première correspond à pas grand chose (elle est positionnée à certaines valeurs à certains endroit du code -- c'est tout dire). La 2ème est incrémentée à chaque interruption Timer du DSP. Cet affichage permet de déterminer TRES RAPIDEMENT si le DSP tourne ou pas. Le timer étant cadencé à 1KHz, cette valeur augmente de 1000 par s.
  • Les boutons situés dans le groupe "Commandes" euhhh .... résidus des anciennes interfaces. Là que font-ils réellement là ????
  • Position LM Gauche, Position LM Droite. Affiché, pas affiché ??? correct ?
  • Status DSP. Ce groupe contient plusieurs variables. Status contient le status(état) de la carte, c'est à dire celui qui est retourné par l'I2C lorsque l'on demande à la carte son état. La liste des status est au moins indiquée dans "robot.h". Adv euh ?? . Gen1 et Gen2, ce sont 2 valeurs (variables du dsp), qui ont été utilisées quand on voulait visualiser une variable pour savoir ce qu'elle devenait, dans un bout de code. Ce qu'il y'a dedans n'est pas défini, mais celà permet de debugguer assez rapidement un truc simple.
  • Error Com doit être censé donner le nombre d'erreurs de communication mais là ???
  • La boite au dessus a un rôle assez indéfini aussi.
  • Position Balise indique la position de la balise (x, y, theta)

En résumé :

Cette boîte est une des plus torturée. Son code a été changé x fois. Les seules infos restant sûres sont :
La position (x,y,theta) du robot, la position de la balise (x,y), theta ne servant pas est utilisée en variable de debug. Le status du DSP et la 2ème case RXTX (incrémentation du Timer == DSP pas planté, programme en train de tourner).

 

Terrain

Cette fenêtre est une fenêtre graphique. Elle reste une des plus présentable de la chose. Elle a été créée pour essayer de voir ce qui se passe. Elle peut paraître accessoire, mais il est toujours plus aisé de se représenter les choses graphiquement. Elle aussi a subi une considérable évolution.
Il est à noter que cette fenêtre a aussi été + ou - utilisée pour les différentes présentations, étant celle qui a le plus de facilité à attirer l'oeuil du passant ....

Représentation graphique du terrain

Fait extraordinaire, cette fenêtre est redimensionnable. En fait celà n'est pas très compliqué étant donné qu'on dessine tout dedans et ceci permet d'en faire ce qu'on veut.
Elle se redessine à chaque fois que win lui demande, mais ne redessine que le terrain, les 2 robots. Tous les autres éléments (trajectoires parcourue, recalage de ligne, etc ne sont pas réaffichés)

  • Cette fenêtre présente donc la position de notre robot et la position de l'adversaire, les 5 balises de chaque côté et les paniers. Les positions sont mises à jour, en général en même temps que les positions sont affichées dans la boite principale de debug.
  • Les trajectoires de notre robot, sont matérialisées par des points rouges.
  • En cliquant sur la fenêtre, on envoie un ordre au robot lui indiquant d'aller à cette position. Cet ordre était envoyé via l'I2C. Il a été par la suite envoyé via le com PC<->DSP. Ce truc avait été fait à l'origine pendant les journées portes ouvertes, juste histoire d'amuser la galerie .... Il avait été rajouté aussi un bricolage pour qu'il n'y ait pas d'ordre d'envoyé lorsque l'on active la fenêtre (ce qui se révélait TRES dangereux)
  • Cette fenêtre sert aussi à l'affichage des données du recalage de ligne.(qui est activé via une autre boite) Dans ce mode les touches haut et bas (ou droite et gauche ?) servent à passer à l'info suivante de recalage de ligne.
  • Elle a aussi servi à l'affichage de la position des boules (pour afficher graphiquement les boules repérées par la camera). Cette fonction est activée en appuyant sur 'u' ou 'U' (les 2 marchent). A ce moment, les positions des boules et la position actuelle du robot est affichée à partir des infos trouvées dans terrain.txt. Dans ce cas aussi, cette boite ne servait qu'à faire un 'debug' graphique.
  • Elle a enfin servi pour imprimer des feuilles ayant servies aux stratégies de match.

Sous l'apparence de gadjet, cette fenêtre s'est révéle bien utile, et ce genre d'élément de debug permet de 'voir' un certain nombre de choses. Là encore le code a été remanié très souvant pour coller aux 'besoins du moment'.

Séquenceur

Cette fenêtre est une de celle qui a reçue le plus d'insultes ...

Séquenceur

Le but était simplement à l'origine d'envoyer un certain nombre d'ordres de trajectoires au robot, les uns à la suite des autres (en séquence quoi). A la fois pour vérifier que les ordres font à peu près ce qu'on attend d'eux, mais aussi pour voir les problèmes d'asservissement, de positionnement, les décalages. Bref cette boite est aussi un des utilitaires assez utile(sic). Elle n'a pas subit de grosses modifications mais énormément d'ajouts.

L'idée de base est d'avoir une liste d'ordres à effectuer (Ordres). Ces ordres contiennent 5 éléments : x (position x),y (position y),Spé (code Spécial),V (Vitesse), A(Accélération).La siginification de ces éléments dépend de l'ordre effectué ...
On peut :

  • rentrer ces éléments pour un ordre dans la case destination.
  • En faisant ajouter, on peut ajouter un ordre (dans la liste ordre).
  • Avec les "flèches" haut et bas, on peut le déplacer dans la liste.
  • On peut éditer un ordre dans la liste en cliquant dessus (ses valeurs sont affichées dans les cases de 'Destination' et peuvent être modifiées (et ensuite mises à jour par 'modifier')
  • Supprimer, supprime le ou les ordres sélectionnés
  • Enregistrer et charger en haut permettent d'enregistrer et de charger une liste d'ordre (dans un fichier au format sm6 ... propre à l'appli bien sûr)
  • La liste déroulante en bas et le bouton charger permettent de charger 'rapidement' un fichier.
  • Les case P,I,D permettent de spécifier les paramètres du filtre d'asservissement.
  • Start démarre la trajectoire
  • Stop l'arrête. (n'importe quand normallement) surtout dans les cas d'urgence quoi ...

Les ordres étaient envoyés via l'I2C à l'origine, il le sont maintenant via la com PC<->DSP

Le 'type' d'ordre à envoyer est choisi par le contenu de la boite Spé (les valeurs possibles sont sommairement décrites à côté). On a donc comme code dans 'Spé' :

  • 0, qui execute un GOTOXY (va à une position en ligne droite).
    x, y : position de destination
    v : vitesse
    a : accélération
  • 1, effectue une rotation, d'un certain nombre d'unités (permet de calibrer la constante utile à la rotation dans le positionnement notamment). L'angle est indiqué dans x (unité ? degrés ?)
  • 2, effectue une translation directement (va tout droit quoi) d'une distance spécifiée en x(en mm ?). Permet de calibrer la constante utile aux translations dans le positionnement notamment.
  • 3, effectue une marche arrière. La distance est indiqué en mm dans x. Par l'I2C cette distance était limitée à 25.5 cm.Cet ordre, servait à se dégager d'un panier ou éviter le robot adverse.
  • 4, va vers un panier (le choix du panier doit être indiqué dans x ? Il s'agit d'un chiffre qui indique la direction Nord-Ouest, Nord-Est ,etc .. mais par rapport à quelle référence ??? . Cette ordre positionne le robot dans la direction du panier et avance jusqu'à rencontrer un panier -- capteur mécaniques.
  • 5, test ??? euhh ?
  • 6, Trajectoire courbe, le reste des infos doivent être dispo dans le source. Les trajectoires courbes nécessitent aussi de réaliser un enchainement des ordres. Il ne devait cependant rien y avoir de spécial dans ce code là, mais plutôt dans celui du DSP.

Pourquoi cette boite s'est fait insulter ? Tout simplement parce que la partie du principale du séquenceur (ajouter-enlever-modifier) des ordres a été faite ... assez vite ... et elle est totalement anti-ergonomique. Et on se fait souvant avoir ce p*** de b*** de truc de m*** qui bouffe la moitié des ordres, ne le modifie pas ou modifie le mauvais ou le rajoute à côté ... (ok, je prend ma pilule, vais allumer la lumière et me calme ... b*** de m***).

Cette boite garde quand même toute son utilité de debug. On pourrait faire le rapprochement côté debug entre cette boite qui permet de rentrer des ordres et la boite principale qui permet de voir l'état du système.

Mem/Flash

Boite Mem/Flash

Cette boîte a été réalisée au moment de la mise en marche de la carte d'extension. Pour faire marcher cette carte d'extension, il y'a eu besoin de tester la RAM. Il est à noter ici une subtilitée. Pour tester la RAM externe,il est impératif que le code tourne en RAM interne (sinon on ne sait pas si il marche, et on risque de l'écraser). Cette remarque est triviale au moment du premier test de la carte, beaucoup moins après.

L'ensemble de la communication avec la carte est faite via la com PC<->DSP. La communication permettant d'aller lire/écrire à n'importe quelle adresse sur le bus du DSP, elle convient pour tester assez facilement la RAM (sans avoir besoin de pondre un code spécifique sur le DSP, juste en chargeant le kernel)

Les adresses utilisées sont celles présentées dans le mapping mémoire de la carte. Elle sont codées en dur dans le programme.

Les fonctions disponibles pour la RAM sont :

  • Txt Dump qui permet d'effectuer un dump des x premiers octets de la RAM et de l'enregistrer dans un fichier texte(affiché sous forme Hexa). Il est ainsi possible de remplir la mémoire avec quelquechose de connu (1 ,2 ,3 ,4 ,5 ,etc par ex, ou un fichier texte, ou une chaine). En relisant on voit si il y'a un problème (données non identiques). En regardant de plus près le problème, on peut savoir quelle est la ligne d'adresses ou de données qui a un problème, ou quel est le paté de RAM,etc,etc.
  • Raw Dump permet de récupérer le contenu entier de la RAM et de l'écrire directement dans un fichier. Pratique pour la même chose qu'au dessus. (vérifier que toute la RAM marche)
  • Test permet de tester la RAM. Cette fonction est la dernière des 3. Elle commence par essayer de trouver la taille de la RAM (en écrivant et relisant à des adresses par multiples de 2). Elle teste ensuite l'intégralité de la RAM en écrivant des valeurs dedans (des valeurs qui s'incrémentent) et en relisant ensuite le contenu. Dès qu'une différence est détectée, l'@ de la différence est affiché (l'affichage n'est pas spéciallement explicite). Il doit y avoir un compteur qui doit s'incrémenter (juste au dessus de la zone de texte)

Pour la Flash, la même méthode est utilisée (communication PC<->DSP). La flash nécessite pour être pilotée en écriture, d'accéder à une adresse spéciale (cf doc électronique). Il faut ensuite suivre le protocole propre à la flash. A ce sujet, attention à la référence EXACTE de la flash, le protocole différe très légèrement entre une AM29F010 et une AM29F010A. Mais celà permet tout de même d'y perdre un certain nombre d'heures !!.

Les commandes dispo sont :

  • Identification-Test, qui permet de voir si on arrive bien à causer avec la flash (y'a en plus un moyen de l'identifer et de savoir si elle est protégée). Ces infos sont retournées dans un message.
  • Effacement Complet. envoie une commande d'effacement complet à la flash, attend ensuite qu'elle ait fini d'effacer.
  • Raw Flashage permet de flasher directement le contenu d'un fichier dedans (et la boite en dessous doit servir à indiquer le nom du fichier ?). Là encore permet de tester la chose.
  • Txt Dump et Raw Dump, même utilité qu'au dessus, cette fois ci pour la flash.
  • Flashage Appli. Ce bouton est le plus important de la boite. Il permet de flasher le code dans la flash (sic). Il est ensuite possible de démarrer la carte en mode autonome (en mettant le jumper). Le code qui est flashé doit suivre le format utilisé pour le bootload (exactement comme quand il bootloade son kernel au début). Il doit exister un utilitaire de chez TI permettant de convertir le code "qu 'on peut charger" donc 'brut' en code "à 'bootloader' au démarrage". Cependant il n'a pas été trouvé. La solution envisagée a été d'utiliser les routines de bootload, détournées de leur utilisation pour créer le fichier à flasher. Cette méthode marche d'ailleurs assez bien.
  • La boite de texte en dessous, avec ses 2 flèches permet de se balader dans le contenu de la flash. L'interêt de la chose n'apparait pas spécialement flagrant. Il a servi lors du debug de la flash, pour visualiser son contenu (et savoir si le flashage s'était bien passé, sans avoir à faire de dump, àouvrir un fichier texte,etc powerd by flemme power)

Le flashage de l'appli pourrait être avec avantage sorti de l'application, ou du moins son "code éparpillé", isolé dans un seul utilitaire.

Getmem

Get Mem

Cette boite est une des principales boite de debug de l'application en fonctionnement. Notamment des 'gros' systèmes, c'est à dire les données de l'asservissement, du recalage de ligne, des trajectoires courbes, de l'I2C.

Cette boite utilise la communication PC<->DSP pour aller lire des morceaux de mémoire du DSP. La partie gauche de la boite contient :

  • Adresse : adresse de la variable/plage de mémoire/structure à récupérer. Cette adresse n'est pas indiquée directement(elle l'était au debut) mais récupérée du fichier '.map' généré par le linker.
  • L'adresse est donc déterminée à partir du nom de variable/struture,etc mis dans la boite 'nom'. Cette boite lit le '.map' (son chemin est harcodé dedans, il doit se trouver dans ..\\..\\asser_dsp\\lcc\\asser.map, ce chemin est relatif par rapport au fichier exécutable lm629_dsp.exe) et recherche dedans le symbole qui a ce nom et lit son adresse.
  • La case à droite d'adresse indique le nombre de Mots (de 32 bits) à lire.(on peut mettre autant qu'on veut pas de pb)
  • 'Get' rapatrie ces données et les affiche dans la boite du dessous, elles doivent être affichées en hexa ??
  • Part défaut il est affiché comme nom de variable 'message I2C'. Ce tableau dans le code du DSP contient la liste des commandes arrivées sur le bus I2C, ce qui peut être très utile pour démontrer par A+B, que le problème ne vient pas de cette carte mais d'une autre (c'est pas moi, c'est le chef qui s'est craqué !)(ou pour finir de s'enfoncer dans son trou, moyennant un bon marteau piqueur ...)
  • Il est possible de visualiser n'importe quelle variable ayant une adresse dans le .map.(donc toutes les variables statiques, ou du moins définies en dehors de toute fonction == variables globales). Les variables locales sont créées à l'appel de la fonction et n'ont par conséquent pas d'adresse fixe, il n'est donc pas possible de les visualiser.
  • 'Get Traj C.' est un cas particulier, les données récupérées sont celles d'une structure, où le code DSP stocke des infos relatives aux trajectoires courbes. Les infos sont affichées dans la liste aussi (décodées de la structure)
  • 'Get Ligne' effectue la même chose pour le recalage de ligne. Ici il y'a un paquet d'infos à chaque recalage de ligne. Le nombre de ces paquets est affiché dans nb struct info. Les diverses infos du recalage de ligne sont affichées à droite de la boite. On peut changer de paquets d'info via les touches '+' et '-'. Il est à noter que ces infos s'affichent aussi graphiquement dans le terrain.
  • 'Get LM' récupère les infos venant de données stockées par l'asservissement pour pouvoir les visualiser. La visu est faite par un programme Matlab (permettant de faire du traitement dessus aussi), bien plus simplement qu'en C. A l'origine, les données étaient écrites dans un fichier texte qui était ensuite transféré via liaison série sur un autre PC, les données étaient ensuite affichées via le prog Matlab sur l'autre PC. Par la suite la communication série a été écrite directement dans ce prog. (et un autre petit prog de l'autre côté recevait les infos). (Seul truc, il n'y a plus de contrôle d'erreurs, les données peuvent alors arriver corrompues (mais bon ce n'est que de l'affichage et Matlab s'en rend assez vite compte surtout si le grabuge est important.)
  • Ces différents rapatriments de données, font que invariablement, il apparait à un moment ou un autre qu'il serait pratique de récupérer des floats depuis le DSP. Le hic, c'est que sur le DSP, le format est différent de celui du PC (IEEE). Il est donc nécessaire d'utiliser une routine de conversion (elle est fournie par TI) ces appels sont en général réalisés juste avant l'affichage des données. La boite simple n'affiche pas les données sous forme de float.

Chef

Controle de la carte principale

Cette carte n'a rien à voir avec la carte asservissement et permet de contrôler la carte principale. Il n'a pas spéciallement un interêt quelconque à être dans cette usine à gaz (sinon le fait de la grossir).

Cette boite permet donc de commander la carte principale via une liaison série(donc aucune connexion avec la carte d'asservissement). Il existait déjà un soft de commande pour la carte principale, mais il était fait sous Linux, et n'ayant qu'un ordi sous Linux -- qui n'était pas forcément toujours dispo, il a été refait pour permettre d'utiliser la carte principale directement à partir de ce soft.

L'ensemble des commandes n'a pas du être implémenté. Les principales sont :

  • >RAM. qui permet de passer en mode ramassage (envoi cet ordre à la méca)
  • >PAN. qui permet de passer en mode panier (envoi cet ordre à la méca)
  • GOBER qui permet de gober une boule (envoi cet ordre à la méca)
  • Status (case Méca), indique le satus de la carte mécanique (envoi cet ordre à la méca)
  • BR : nomlbre de balles rouges
  • BN : nombre de balles boires (infos retournées par la méca)

Les cases strat(égie) et Seq(enceur) ... ??? implémentées ???

La case Asser(vissement) qui représente donc la communication à la carte d'asservissement via la carte principale qui lui envoi des ordres sur le bus I2C (et reçoit les données par le même moyen). Implémenté ???

Conclusion

Ce soft nommé usine à gaz ne l'est pas spéciallement par la quantité de fonctions fournies (surtout si on ne compte que celles qui fonctionnent réellement)., mais bien plus par la façon de coder, et son évolution. Il s'agit d'un soft de debuggage. Pour faire fonctionner l'ensemble, ce soft est quasiment indispensable . Ici il se mêle des fonctions de debug et des fonctions plus 'indispensables' (chargement sur la carte, flashage,etc). Le regroupement de tout en un seul programme est juste une question de gain de temps et aussi parce que toutes les fonctions ont été crées ici et debuggée. Ce code est donc en perpétuel chantier, il y'a toujours un élément d'ajouté, retiré, modifié, pour palier au problème du moment.

Certains outils pourraient être 'extraits'. Le code peut soit être continué pour palier aux nouveaux besoins (mais en augmentant encore le côté 'foutoir'). Soit être repris, en se servant de morceaux de celui existant. Soit être épuré et continué. Il constitue en tout cas une certaine librairie d'exemples et de code pour utiliser avec la carte.