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
- Partie Robot
- Modifications Syndex
- Drivers
- Robot
- liés à l'architecture générale de la plateforme
- écran tactile
- joystick
- Capteurs rajoutés
- 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
- 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)
- 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:
- se connecter sur la machine
bcycab
- lancer la commande
syndex5
- Ouvrir le fichier :
/root/syndex/linuxIO2_/linio.sdx
- 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.
- 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
- 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é.
- : 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. 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é. 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. 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
).
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
:
- 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