Topo sur la récupération du travail de Cédric Pradalier

TODO

  • Basculer sur CVS sed (S0S0) Done 2004-07-06
  • Manips sur Cycab réel Done

Organisation Générale du logiciel développé autour du Cycab

  1. Partie Robot
  • Modifications Syndex
  • Drivers
    1. Robot
      • liés à l'architecture générale de la plateforme
      • écran tactile
      • joystick
    2. Capteurs rajoutés
      • SICK
      • Camera
      • GPS
  • Synchronisation de données entre le Cycab et machines distantes

b.Outils de développement
  • Pilotage du Cycab via architecture client/serveur à base de Socket
  • Enregistreur de données oedométriques + laser
  • IHM de l'écran tactile
  • Oscilloscope/Espion de données
  • Simulateur

c. Applications
  • Evitement d'obstacle
  • SLAM/localisation
  • Planificateur

Pré-requis

  1. Accéder au serveur Gforge Inria http://gforge.inria.fr

  • Infos pour récupérer les sources du Cycab sur http://gforge.inria.fr
    • Nom du projet : CycabTk
    • Repository : cycabtk
b. Sur le Pc embarqué dans le Cycab
  • Les fichiers contenus sur le serveur CVS sont recopiés sous /root/src

c. Syndex V5
  • Ce logiciel est installé sur le PC du cycab blanc : bcycab
  • Question : est-il installé sur une autre machine ? laquelle ? faut-il l'installer sous $ROBOTIQUE ?

c. Acronymes utilsés dans les codes source
  • CP : Cédric Pradalier (Sharp/eMotion)
  • PP : Pierre Pommier (RobotSoft)

d. Répertoire de Travail où on va garder le travail
  • export WRKREP=$ROBOTIQUE/Robots/Cycab/TmpDesktop

e. Variables à positionner
  • export CYCAB_SYS=$ROBOTIQUE/Robots/Cycab/

Packages à récupérer pour travailler sur les modules source

  • Récuperer les modules dans le répertoire de Travail
cd $WRKREP
cvs -d :ext:sonlogin@scm.gforge.inria.fr:/CVS/cycabtk checkout 
  • Récupérer les librairies "utilitaires" suivantes
    • gsl : vérifier si le package gsl est installé sur la machine ou sous $CYCAB_SYS sinon recupérer le package gsl-1.4 (présent sous le répertoire $WRKREP/targz/ et sous $WRKREP/utils/ ?)

Partie Robot

Architecture bas niveau

Entre MPC555 + Syndex - PC embarque pour developpement
%DRAWING{LowLevelArchiCycab}%

Partie Syndex

  • Consulter le guide d'utilisation de Syndex
  • Répertoire $WRKREP/syndex
    • Répertoires origine fournis par Robosoft
      • linuxI0_
      • man_drv
      • spys (de T. Noel - projet Sosso)
    • Répertoire qui nous intéresse (modifié par CP)
      • linuxIO2_

  • Sous linuxIO2_
    • linio.m4x : fichier qui comprend les modifications de CP et qui est relatif à tout le bas niveau géré par Syndex (gestion du bus CAN, des noeuds MPC555)
      Voir les modifs de CP dans ce fichier !
    • linio.sdx : fichier à éditer (normalement) sous Syndex.
      Il contient le format du graphe Syndex modifié par CP pour gérer la sécurité.
      Pour visualiser ce graphe sous Syndex V5:
      1. se connecter sur la machine bcycab
      2. lancer la commande syndex5
      3. Ouvrir le fichier : /root/syndex/linuxIO2_/linio.sdx
      4. Sur le menu "Adequation"
        • lancer DoIt
        • lancer GenExec
          L'interface Syndex vient de générer le code relative au graphe sous /root/syndex/linuxIO2_/
          Voir le fichier $ROBOTIQUE/Robots/Cycab/doc/SchemaSyndex.ps pour visualiser le graphe syndex

  • Pour générer l'applicatif (à partir du code généré par Syndex)
    • Lancer : make
      La commande make utilise le fichier GNUMakefile fournit par RobotSoft.
      Ce fichier fait appel à la commande m4 qui va produire entre autre le fichier linio.mk qui sert à la compilation de l'applicatif syndex.
    • Voir les commentaires du fichier GNUMakefile pour les infos concernant les fichiers produits et leurs formats.
    • ALERT! D'après le fichier makefile, la commande make va non seulement compiler, faire l'édition de lien, mais aussi démarrer les modules pour RTAI et charger les modules produits sur les noeuds => lancement de l'appli !!!!
      • Pour arrêter l'application, décharger l'application des noeuds, les modules RTAI
        • make stop
      • Utiliser plutôt l'applicatif décrit par starter.cpp (sous $WRKREP/CycabDevpt/SickApplis/) qui ouvre une IHM texte qui permet via bouton de démarrer les applis dont l'applicatif Syndex linuxIO2_ (starter permet aussi l'arrêt pour cette application)

Partie Driver

  • Asservissement en vitesse côté Syndex toutes les 1ms (via interruption timer sur les mpc555)
  • Le bus CAN envoie une nouvelle commande / recupère un nouveau vecteur d'état du robot toutes les 10ms à la partie RTAI du pc embarqué.
  • ALERT!: débit limité côté bus CAN (valeur ?? voir doc...) car traitement de la donnée à faire en 1ms (cf asservissement) : environ 30-40 entiers de 32 bits ...
  • Les programmes espace utilisateur récuperent le vecteur d'état du robot et transmettent nouvelle commande de la partie espace noyau via mémoire partagée (RTAISHM).
  • $WRKREP/syndex/linuxIO2_/linio.h : fichier autogénéré par le fichier $WRKREP/syndex/linuxIO2_/linio.m4x et installé sur le PC embarqué sous /root/include/linuxIO. Voir : $WRKREP/syndex/linuxIO2_/GNUMakefile et l'étiquette install.
  • Pour ne pas à travailler directement sur le PC du Cycab et pouvoir faire les compilations, il existe un répertoire $WRKREP/CycabDevpt/include/linuxIO contenant linio.h. Ce répertoire est généré via Makefile sous $WRKREP/CycabDevpt/CycabTools/. Sinon plus généralement voir : $WRKREP/CycabDevpt/Makefile qui appelle les différents fichiers Makefiles présents dans les répertoires de l'arborescence débutant à partir de $WRKREP/CycabDevpt/. En particulier, voir $WRKREP/CycabDevpt/src/Makefile.

  • La classe la plus "importante", à savoir VirtualCycab représente la meta description de la ressource Cycab. Cette classe est implantée (spécialisée) en fonction des types d'applications :
    • simulation -> cf. $WRKREP/CycabDevpt/CycabServ
    • robot -> cf. $WRKREP/CycabDevpt/CycabDrv/cycabTools.cpp
    • control TCP/calcul deporté -> cf. $WRKREP/CycabDevpt/EtherCycab

  • Description sous $WRKREP/CycabDevpt/CycabDrv :
    • VirtualCycab.h : fichier définissant la classe virtuelle pour le Cycab
    • cycabSpec.h : fichier définissant les grandeurs physiques (longueur, largeur, position du SICK, distance des roues ...) du robot Cycab
    • cycabTools.h/.cpp : ce fichier implante la classe virtuelle VirtualCycab
    • JoystickDrv.h/.cpp : fichier implante la conversion des donnees issues du Joystick en donnees vitesse et angle de braquage (saturation, filtrage, securité, changement de gain si freinage d'urgence detecte ...)
    • calibFile.h/.cpp : fichier qui implante la mémorisation des données de calibration du Joystick (la gestion de ces données est gérée au niveau des applications qui en ont besoin)
    • apiManDrv.cpp : exemple d'application qui utilise la classe définie par cycabTools (conduite manuelle avec une IHM utilisant la librairie newt).
Pour une documentation à la doxygen : http://bulle.inrialpes.fr/mylibs/CycabDrv.html/classes.html

Partie Capteur:

Sick
Il est relié au PC embarqué sur carte Moxxa patchée via liaison RS422 (patch pour cause de debit du SICK qui n'est pas compatible (pas un multiple ..) avec le débit des lignes série)

Au niveau Hard, la carte Moxxa est de type ISA. Au niveau de l'adressage hard, pas de jumper !
Sinon, l'adresse est fixée à A700.
Pour des infos sur l'installation de la carte Moxxa sur linux kernel 2.2.x, consulter ce document.

Rem: la tâche prioritaire du SICK = émission des données.
Si on veut données à la demande, débit plus bas (freq 8Hz) et faire plus. fois les requêtes pour que SICK réponde ...

  • Description :
    • $WRKREP/CycabDevpt/src/VirtualSick : répertoire définissant les classes virtuelles pour le capteur Sick (VirtualSick.h) et la gestion des données issues du Sick (VirtualSickData.*). Voir : http://bulle.inrialpes.fr/mylibs/VirtualSick.html/classVirtualSick.html.
    • $WRKREP/CycabDevpt/src/NewSick : répertoire implantant les classes virtuelles pour le capteur Sick installé sur le Cycab (Sick.*, SickData.*). Ce code a été écrit en C++ par CP à partir du travail de M. Riess. Voir : http://bulle.inrialpes.fr/mylibs/NewSick.html/classSick.html
    • $WRKREP/CycabDevpt/src/NewSick/SickSetBaudRate.cpp : fichier qui définit le programme pour initialiser la valeur de debit utilise par le Sick. Ce programme définit le mode de démarrage du Sick et met à jour dans la flash du Sick la valeur du débit. ALERT! Si la carte Moxxa venait à cramer il faudrait sans doute faire un reset de la flash dans le capteur Sick (ie ouvrir le boîtier).
    • $WRKREP/CycabDevpt/src/NewSick/SickTest.cpp : programme (bien utile !) qui permet de tester la communication et visualiser les données issues du Sick.

Ecran tactile

L'écran est connecté (normalement) sur /dev/ttyS1. Le programme définit dans $WRKREP/CycabDevpt/src/TouchPad/testcom.cpp permet de tester l'existence de cette connexion et le fonctionnement de l'écran.

  • Description:
    • $WRKREP/CycabDevpt/src/TouchPad/testcom.cpp : programme permet de tester l'existence de la connexion de l'écran sous /dev/ttyS1 et le fonctionnement de l'écran.
    • $WRKREP/CycabDevpt/src/TouchPad/calibrate.cpp : programme qui calibre en mode vga 640x480 les coordonnées des positions issues de l'écran tactile. Ce programme produit dans le répertoire courant le fichier CalibData. Ce fichier est recopié sur le PC qui pilote le Cycab sous /root/etc/TPCalib-640x480=. Ce programme s'exécute une seule fois (à la réception d'un nouveau Cycab ??) ou si effacement du fichier /root/etc/TPCalib-640x480.
    • $WRKREP/CycabDevpt/src/TouchPad/sys_config.h : fichier définissant entre autres le chemin pour accéder au fichier de calibration issu du programme calibrate.cpp. Tous les programmes qui ont besoin de l'écran tactile font appel à ce fichier.
    • $WRKREP/CycabDevpt/src/TouchPad/newCalib.cpp : calibre en mode texte (en utilisant newt) les coordonnées des positions issues de l'écran tactile
    • $WRKREP/CycabDevpt/src/TouchPad/TouchPad.* : fichiers qui définissent les classes virtuelles implantant le decodage des paquets de données issues de l'écran tactile
    • $WRKREP/CycabDevpt/src/TouchPad/CTouchPad.* : fichiers qui implantent le décodage des données de l'écran tactile en mode calibré.
    • $WRKREP/CycabDevpt/src/TouchPad/JTouchPad.* : fichiers qui implantent l'émulation du décodage de l'écran tactile par le joystick en mode calibré. TIP Le joystick doit être au préalable calibré, d'où penser à lancer l'application de conduite manuelle avant (inclus la procédure de calibration du joystick). A améliorer ?
    • $WRKREP/CycabDevpt/src/TouchPad/JCTouchPad.* : fichiers qui implantent le décodage des données de l'écran tactile en mode calibré + qui décode les positions provenant du joystick. ALERT! code dupliqué avec le code des fichiers de JTouchPad.*. Voir : http://bulle.inrialpes.fr/mylibs/TouchPad.html/classTouchPad.html.

Outils de Développement

Architecture des applications sur le Cycab

%DRAWING{DevelArchiCycab}%

Pour écrire une application qui commande le Cycab, on utilise la meta classe VirtualCycab qui permet d'adresser:
  • le Cycab simulé (classe CycabSimul)
  • le Cycab réel (classe CycabInterface)
  • un serveur TCP/IP pour se connecter au Cycab (classe EtherCycab)

Le principe de communication entre les exécutables sont des mémoires partagées. Il en existe 5 dans le cas de l'application du simulateur :
  • pour le cycab (la même que dans l'API Syndex dans le cas réel)
  • pour les données sick
  • pour la carte des obstacles
  • pour la carte des landmark
  • pour les piétons
L'API utilisée pour gérer l'accès à la mémoire partagée est l'API IPC SystemV (cf /usr/include/sys/shm.h). HELP la commande /usr/bin/ipcs est très utile pour voir l'état de la mémoire partagée.

Répertoire $WRKREP/CycabDevpt/SickApplis

Programme starter.cpp
  • But : Lance une IHM en mode texte (utilise newt) qui permet le demarrage d'une liste d'applications sur le Cycab.
  • Utilisation : Un fichier de configuration : $HOME/.cycabrc (cf $WRKREP/CycabDevpt/SickApplis/.cycabrc) permet de configurer la liste des applications disponibles à travers cette IHM.
  • Syntaxe du fichier .cycabrc :
    • Le fichier est composé de succession de lignes telles que, ex:
            "Automatic Parking (needs *)" "/root/Igor" "./run"
            
      • 1er param : titre de l'application (qui sera affiché dans l'IHM)
      • 2ème param : répertoire de travail nécessaire à l'applicatif (le programme appelle la commande cd sur ce répertoire)
      • 3ème param : le fichier exécutable relatif à l'applicatif à lancer.
    • ALERT!: si on ne fournit pas de chemin absolu pour l'accès à l'exécutable, celui-ci sera recherché dans $PATH
      • Dans l'exemple ci-dessus, l'éxecutable run se trouve sous : /root/Igor
  • Librairie utilisée :

Compilation

  • Mise à jour de CycabDevpt/Makefile.Arch
  • Enlever de CycabDevpt/Makefile le module genomInterface
  • CycabDevpt/CycabServ :
    • Créér simul.cfg (1 exemple chippé chez Cédric)
    • il faut créér le répertoire avec le lien sur SickSimul.h CycabDevpt/include/CycabSimul/SickSimul.h
  • nécessite la librairie gsl (gnu scientific library)
  • Copie chez Cédric de fichiers de config dans CycabDevpt/etc; N'était pas dans la base CVS.
  • Il manque la compil de ManuelDriving dans le Makefile. Manuellement cd CycabDevpt/CycabDrv; make install-bin

Applications

  • export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/local/projets/robotique/Robots/Cycab/TmpDesktop/CycabDevpt/lib
  • On peut lancer les binaires par par run.sh nom_du_binaire (positionne LD_LIBRARY_PATH et 1 fichier de log dans /tmp)
  • CycabDevpt/bin
    • cycabServ serveur et simulation Cycab (affiche l'état du Cycab).
    • CycabInter Interface et affichage X 2D du Cycab (rem: fleches pour simuler le joystick)
    • cycabTest Boucle de test (connection avec cycabServ)
  • launch script tcl/tk qui fournit une interface pour lancer/tuer les exécutables.

  • Comment lancer l'exemple de conduite manuelle en simulation
    • cd CycabDevpt/bin/
    • launch interface avec 2 colonnes de bouton
      • Cliquez sur 'All' pour lancer les serveurs. On doit voir 2 fenêtres X : les données sick, la carte 2D avec le parking et le cycab.
      • Cliquez sur 'Manual Driving' pour lancer le programme de conduite manuelle. Il apparait la même fenêtre qu'avec le Cycab réél. Lancer l'application.
      • Avec les flèches clavier dans la fenêtre de la carte 2D, vous pouvez piloter le Cycab

-- SorayaArias - 13 Jan 2006
Topic attachments
I Attachment Action Size Date Who Comment
.cycabrccycabrc .cycabrc manage 649 bytes 24 Jun 2004 - 16:26 RogerPissard Un fichier de config pour $HOME
DevelArchiCycab.drawdraw DevelArchiCycab.draw manage 6 K 22 Jul 2004 - 14:45 SorayaArias TWikiDraw draw file
DevelArchiCycab.gifgif DevelArchiCycab.gif manage 3 K 22 Jul 2004 - 14:41 SorayaArias TWikiDraw GIF file
LowLevelArchiCycab.drawdraw LowLevelArchiCycab.draw manage 6 K 20 Jul 2004 - 13:40 SorayaArias TWikiDraw draw file
LowLevelArchiCycab.gifgif LowLevelArchiCycab.gif manage 7 K 09 Jul 2004 - 11:24 SorayaArias %PLUGINSWEB%.TWikiDraw GIF file
LowLevelArchiCycab.pngpng LowLevelArchiCycab.png manage 6 K 08 Jul 2004 - 10:40 SorayaArias Low Level Architecture Graphic
moxa-smartioEXT moxa-smartio manage 16 K 20 Jan 2005 - 13:13 SorayaArias Document d'installation de la carte Moxa en linux
simul.cfgcfg simul.cfg manage 807 bytes 24 Jun 2004 - 16:25 RogerPissard Un exemple de fichier de configuration Cycab
Topic revision: r34 - 31 Jul 2013, SorayaArias
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding SedWiki? Send feedback