Travaux Pratiques : LUSTRE Commande d’un bras …

15
Travaux Pratiques : LUSTRE Commande d’un bras manipulateur deux axes INSA 5ième année T.R.S, 2005-2006 Cortier Alexandre ONERA (Office nationale d’Etudes et de Recherches Aérospatiales) email : [email protected] 9 novembre 2005

Transcript of Travaux Pratiques : LUSTRE Commande d’un bras …

Page 1: Travaux Pratiques : LUSTRE Commande d’un bras …

Travaux Pratiques : LUSTRE

Commande d’un bras manipulateur deux axes

INSA 5ième année T.R.S, 2005-2006

Cortier AlexandreONERA (Office nationale d’Etudes et de Recherches Aérospatiales)

email :[email protected]

9 novembre 2005

Page 2: Travaux Pratiques : LUSTRE Commande d’un bras …

2

Page 3: Travaux Pratiques : LUSTRE Commande d’un bras …

Table des matières

0.1 Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

0.2 Description du système. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

0.3 Description de l’interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

0.4 Travail à réaliser. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

0.4.1 Exercice de prise en main du langage Lustre. . . . . . . . . . . . . . . . . . . . . . . . . . . 8

0.4.2 Programmation du bras robot.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

.1 Organisation multi-tâches du projet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

.1.1 Organisation multi-tâche du projet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

.2 Utilisation du noyau VxWorks et de l’interface de développement TORNADO. . . . . . . . . . . . . 13

.2.1 Ouverture de tornado et création d’un projet. . . . . . . . . . . . . . . . . . . . . . . . . . . 13

.2.2 Utilisation du noyau temps réel VxWorks. . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

.2.3 Download du projet de Tornado vers la cible VxWorks. . . . . . . . . . . . . . . . . . . . . 14

.3 Caractéristique du bras robot. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3

Page 4: Travaux Pratiques : LUSTRE Commande d’un bras …

0.1 Introduction

Le but du TP est de contrôler un système réactif. Ce système réactif est un bras manipulateur deux axes.

Dans le cadre du TP, nous ne manipulerons pas le bras réel : nous travaillerons sur une simulation disposantd’une interface graphique, détaillé en section0.3.

Pour ce faire nous allons :

1. Débuter parquelques exercices de prise en maindu langage Lustre ;

2. Réaliser un modèle Lustredu système considéré (ide : écrire un programme réactif en Lustre) ;

3. Générer du code Cà partir du modèle Lustre ;

4. Embarquer le code sur lenoyau temps réel Vx-Works.

En Annexes.3 et ?? vous trouverez des informations complémentaires sur la programmation et le protocolede communication utilisé pour communiquer avec le noyau temps réel. Ces informations ne sont pas directementnécessaire pour le TP, mais peuvent aider à comprendre le système.

0.2 Description du système

Le système à contrôler est un bras manipulateur 2 axes équipé d’une pince fonctionnant en tout ou rien. Dansle cadre du TP, nous contrôlerons uniquement les 2 axesθ1 (angle épaule),θ2 (angle coude), ainsi que la pince.

FIG. 1 – Bras manipulateur 2 axes

Un opérateur pilote le bras à partir d’un calculateur (local ou distant) disposant d’une interface graphique. Cettedernière permet la saisie des commandes et la visualisation des positions angulaires de chaque axe.

4

Page 5: Travaux Pratiques : LUSTRE Commande d’un bras …

Un calculateur de commande (noyau temps réel VxWorks), interfacé au bras, gère les ordres de déplacementet de préhension saisis par l’opérateur. De plus il fournit les informations permettant de visualiser l’état du système(Historiques des commandes réalisées et en attente, graphe d’évolution des positions de chaque axe, ...).

Les deux calculateurs dialoguent sur leréseau Ethernetvia une communication par socket TCP-IP. Les pri-mitives de communication sont accessibles à partir du fichiersocketsTCP386.h.

FIG. 2 – Synoptique générale

5

Page 6: Travaux Pratiques : LUSTRE Commande d’un bras …

0.3 Description de l’interface

FIG. 3 – Bras manipulateur 2 axes

1. Gestion de la connexion par socket :– Serveur TCP : nom de la cible ou adresse IP– Port Distant : numéro de port du socket cible– Bouton “ ouverture socket ” : établissement dçune connexion sur la cible ou adresse IP– Bouton “ fermeture socket ” : fermeture de la connexion sur la cible– Message d’état de la connexion

Remarque : le panneau de contrôle du bras n’apparaît que lorsqu’une connexion TCP est activée. En casd’erreur de communication ou rupture de la connexion, le panneau de contrôle disparaît.

2. Contrôle du bras– Bouton “ rejoindre ” : demande d’exécution d’un ordre de ralliement d’une position avec les paramètres :

6

Page 7: Travaux Pratiques : LUSTRE Commande d’un bras …

– % vitesse max: 1 à 100% de la vitesse maximum admissible– angle épaule: consigne angulaire de 0o à 180o.– angle coude: consigne angulaire de -170o à 170o

– Bouton “ ouvrir pince ” : demande d’ouverture de la pince– Bouton “ fermer pince ” : demande de fermeture de la pince– Bouton “ arrêt urgence ” : à tout instant, la commande de déplacement du bras peut être stoppée par l’appui

sur le bouton d’arrêt d’urgence. Les commandes en attente d’exécution sont alors annulées.– Historique des commandes: Suite à l’appui sur un bouton de commande, l’ordre correspondant apparaît

dans la zone historique (non coché). L’ordre est coché suite à la détection de sa fin d’exécution.

3. Visualisations:– Période d’acquisition : période d’acquisition des informations des capteurs de 2 à 100 ms. Cette période

peut-être modifiée à tout instant. Dans le cadre du TP nous ne prendrons pas en compte cette commande.– Courbes positions: ces courbes sont rafraîchies environ toutes les 200 ms.– Courbes vitesses: ces courbes sont obtenues par une dérivation simple des positions ; elles sont rafraîchies

environ toutes les 200 ms.– Animation : cette visualisation de l’évolution du bras et l’état de la pince est rafraîchie environ toutes les 200

ms .– Sélection visualisations: selon les performances graphiques du calculateur d’interface, ce sélecteur permet

d’activer ou d’inhiber les différentes visualisations temps réel.– Etat Pince : message indiquant l’état de la pince.

Remarque: Règles quant à l’exécution des ordres :– La pince peut être commandée pendant l’exécution d’un mouvement– Le nombre d’ordres en attente d’exécution est limité à 10

7

Page 8: Travaux Pratiques : LUSTRE Commande d’un bras …

0.4 Travail à réaliser

Nous allons commencer par une prise en main de Lustre via quelques exercices. Certains nœuds seront réutiliséslors de la programmation du système de commande du bras manipulateur.Votre travail fera l’objet d’un rapport. Les consignes concernant ce rapport seront données durant les séances de TPs.

0.4.1 Exercice de prise en main du langage Lustre

1. Prise en main desopérateurs classiques

(a) Ecrire un nœudAbs() qui prend un flot d’entrée réel et renvoie sa valeur absolue.

(b) Ecrire les nœudsDegToRad() , RadToDeg() qui font les conversions respectives degrées en radians,radians en degrées. Ajouter en assert l’hypothèse que le flot d’entrée est dans les bornes [-360o, 360o] pourDegToRad() et [-2π ; 2 π ] pourRadToDeg() .

2. L’opérateurpre :

(a) Ecrire un nœudEdge() qui prend un flot d’entrée booléen et renvoie vrai quand le flot d’entrées subi unemontée de signal (passe de false à true). Il s’agit de la détection d’un front montant.

(b) Ecrire un nœudOsc() qui génère le signal(true,false,true,false,...)

(c) Ecrire un nœudOsc2() qui génère le signal(true,true,false,false,true,true,false,...)

(d) Ecrire un nœudCompteur() qui prend en entrée un flot booléenRESET, en sortie un flot d’entiersN.A chaque instant le compteur incrémente la sortieN sauf quandRESETestvrai . Dans ce dernier casNest remis à zéro. La première fois que le compteur est appelé et si il n’y a pas de remise à zéro alorsNdoitvaloir 1.

3. Les opérateurswhenetcurrent :

(a) Ecrire un nœudCompteur2() qui reprend les caractéristiques deCompteur() mais va deux fois pluslentement.

(b) Différence entre lewhenet le if . then . else .: Testez le programme suivant avec Luciole et comprenez cequi ce passe...

node ChangeCompteur(RESET,C :bool) returns(N :int) ;letN = if C then Compteur(RESET) else Compteur2(RESET) ;tel

4. Vérification sur programme :

(a) Ecrire un nœud qui formalise la proposition sur le nœudOsc2() suivante : “ QuandOsc2() produit unfront montant alors à l’instant suivant le signal est encore vrai. ”

(b) Ecrire un nœud qui formalise la proposition : “ Sous l’hypothèse oùRESETest toujoursfaux la sortieNdu nœudCompteur() est croissante (non strictement).”

i. tester ce noeud avec Luciole,

ii. demander au model-checker Lesar de prouver la propriété. Qu’obtenez-vous ? Pourquoi ?

0.4.2 Programmation du bras robot.

Objectif

Pour la commande du bras robot, vous devez prendre en compte :

8

Page 9: Travaux Pratiques : LUSTRE Commande d’un bras …

1. les commandes correspondant aux deux positions angulaires de l’épaule et du coude du robot (θ1 etθ2) ;

2. les commandes d’ouverture et de fermeture de la pince ;

3. le pourcentage de la vitesse max autorisée pour le ralliement des positions du coude et de l’épaule.

Un identifiant (entier) est associé à chaque action (ralliement d’une position ou action). Cette identifiantpermet d’une part à l’interface de répertorier la liste des commandes en attente et, d’autre part, permet au noyau tempsréel d’acquitter l’interface lorsqu’une commande a été éffectuée (la commande est alors cochée au niveau de la listede l’interface).

Consignes et gestion du projet

Pour menez à bien le projet, voici quelques consignes et conseils :

1. Vousne prendrez pas en comptela commande permettant de modifier la période ;

2. Le prototype de votre nœud principaldoit absolument suivre le prototype donné ci-après ;

3. Dans un premier temps, produisez uniquement la portion de code correspondant à la gestion de la pince. Testezcette partie pour vérifiez qu’elle répond aux spécifications ;

4. Intéressez vous ensuite au ralliement des positions angle et coude du bras .Dans un premier temps, essayezuniquement de faire rallier les positions sans vous préoccuper de profil de vitesse. Par exemple réaliserle ralliement avec une vitesse constante. S’il vous reste du temps tentez d’obtenir un profil de vitesse pour leralliement (voir.3) ;

5. N’hésitez pas à vérifier au fur et à mesure (avec le simulateur Luciole ou bien avec le prouveur Lesar) que votrecode produit bien les résultats souhaités . . . ;

6. En vue d’une vérification formelle, ajoutez des hypothèses sur les flots d’entrées sous forme d’assertions. No-tamment, l’interfaçage qui est réalisé pour embarquer le code lustre assure les points suivants :

(a) une commande de pince ne vient jamais perturber le nœud tant que celui-ci n’a pas fini d’exécuter laprécédente commande de pince.(Gestion par file d’attente au niveau de l’interfaçage) ;

(b) Idem pour les commandes liées au déplacement du coude ;

(c) Idem pour les commandes liées au déplacement de l’épaule.

Prototype du noeud principal

Vous devez programmer le nœud principalGererBras() qui répond à la spécification décrite dans le TP .En outre, Vous devez respecter au caractère près le prototype du nœud présenté en4 pour qu’il s’intègre correctementavec le code C réalisant l’interface entre Lustre et le bras de robot.

Voici la sémantique des flots d’entrées et de sorties présentés dans le prototype du nœud principal :

1. Les entrées :– EtatPince :Contient l’état de la pince à tout instant,false pour FERMEE, true pour OUVERTE– HCmdPince :Contienttrue quand une commande ouvrir ou fermer pince est en attente d’exécution,false

sinon.– CmdPince : Contient l’ordre de la commande,false pour FERMER, true pour OUVRIR.– NoOrdrePince : Contient le numero d’ordre de la commande CmdPince.– HCmdDeplacement : Contienttrue quand une commande de déplacement est en attente d’exécution,false

sinon.– NoOrdreDeplacement :Contient le numero d’ordre de la commande de déplacement.– CsgPourcentVitesse : Contient le pourcentage de vitesse de la commande de déplacement.

9

Page 10: Travaux Pratiques : LUSTRE Commande d’un bras …

node GererBras(EtatPince :bool ;HCmdPince :bool ;CmdPince :bool when HCmdPince ;NoOrdrePince :int when HCmdPince ;HCmdDeplacement : bool ;

NoOrdreDeplacement : int when HCmdDeplacement ;CsgPourcentVitesse : real when HCmdDeplacement ;CsgAngleEpaule :real when HCmdDeplacement ; -degréCsgAngleCoude : real when HCmdDeplacement ; -degréPositionEpaule : real ;PositionCoude :real ;

HArretUrgent : bool)returns(

HActPince :bool ;ActPince :bool when HActPince ;HNOExecPince :bool ;NOExecPince :int when HNOExecPince ;

HCsgMoteur : bool ;CsgMoteurEpaule : real when HCsgMoteur ;CsgMoteurCoude : real when HCsgMoteur ;HNOExecDeplacement : bool ;NOExecDeplacement : int when HNOExecDeplacement) ;

FIG. 4 – Prototype du noeud principal pour la commande du bras manipulateur.

– CsgAngleEpaule : Contient en degré l’angle que l’épaule doit atteindre pour cette commande de déplace-ment.

– CsgAngleCoude : Contient en degré l’angle que le coude doit atteindre pour cette commande de déplace-ment.

– PositionEpaule : Contient à chaque instant la position de l’épaule du bras, en radian.– PositionCoude : Contient à chaque instant la position du coude du bras, en radian.– HArretUrgent : Si contienttruealors le mouvement du bras est stopé.

2. Les sorties :– HActPince : Contienttruequand le noeud actionne la pince.– ActPince : Contienttruesi l’action estouvrir la pince,falsesi l’action estfermerla pince.– HNOExecPince : Contient true quand lçordre courant dçouverture ou de fermeture de la pince à été com-

plètement exécuté.– NOExecPince : Contient le numéro de l’ordre qui a été exécuté.– HCsgMoteur : Contienttruequand le noeud alimente les moteurs du bras.– CsgMoteurEpaule : Contient le voltage du moteur épaule à alimenter (-10 et 10 V).– CsgMoteurCoude : Contient le voltage du moteur coude à alimenter (-10 et 10 V).– HNOExecDeplacement : Contienttruequand le bras à atteint l’objectif.– NOExecDeplacement : Contient le numéro d’ordre de l’objectif attaint.

Remarque : Tous les flots préfixés parHsont des horloges.

10

Page 11: Travaux Pratiques : LUSTRE Commande d’un bras …

ANNEXES

.1 Organisation multi-tâches du projet

.1.1 Organisation multi-tâche du projet

La figure.1.1présente la structure multi-tâches du projet que nous allons embarquer sur le noyau temps réelVx-Works. Voici la description détaillée de cette architecture :

1. tDialogSocket : Cette tâche doit se charger d’établir la communication avec l’interface. Elle reçoit lesrequêtes de l’interface et communique avec la tâchetBoucleLustre via des boites aux lettres et des variablesglobales. Elle se doit de répondre immédiatement à l’interface (acquittement et dernier Ordre exécuté . . . )

2. tPince : Simule le temps d’exécution d’un ordre de la pince (1s). Renvoie l’information concernant l’état dela pince via une variable globale.

3. tBoucleLustre : Cette tâche peut être décomposée en deux parties.– la « fonction d’acquisition », qui en fonction des valeurs de sortie de la boucle lustreSTEP récupère ou

non les données envoyées par la tâchetDialogSocket . Cette fonction a pour rôle de déterminer les flotsd’entrée du nœud Lustre.

– la fonctionSTEPqui traite les flots suivant la spécification Lustre.

FIG. 5 – Architecture multi-tâches du projet

Lors du TP vous réaliserez la boucle Lustre STEP permettant le control du bras. Une fois le nœud Lustre réa-lisé, il devra être compilé en code source C (GererBras.c ).

11

Page 12: Travaux Pratiques : LUSTRE Commande d’un bras …

Toute la partie intégration est fournie : le code C correspondant aux tâchestDialogSocket et tPince , lagestion des les boites aux lettres, des variables globales sont également prises en compte...

Une fois le code .c du nœud Lustre intégré au reste du projet, ce dernier sera exécuter sur une cible VxWorks.

12

Page 13: Travaux Pratiques : LUSTRE Commande d’un bras …

.2 Utilisation du noyau VxWorks et de l’interface de développement TOR-NADO

Tornado est l’environnement de développement utilisé pour la compilation de projets VxWorks.

.2.1 Ouverture de tornado et création d’un projet

1. Lancer Tornado Registry ;

2. Lancer Tornado ;

3. Créer un projet sous Tornado :

(a) Choisir un nouveau projet de type :Create Downloadable application modules for VxWorks;

(b) Donner le nom du projet et sa place dans l’arborescence des fichiers. Appuyez surNEXT ;

(c) Choississez latoolchain 180486GNU;

(d) Votre projet apparaît alors dans la partie gauche de l’écran. Ajouter les fichiers (add files) composant leprojet :– socketsTCP386.c: il s’agit fichier gérant les communication TCP de type socket ;– IntegLustreBras.c : il s’agit du programme d’intégration. C’est à ce niveau que nous réalisons les

différentes tâches (TPince, TDialogSocket, TboucleLustre). La tâchetMain est la tâche principale quilance de manière effective l’ensemble des tâches du projet, qui crée les boites aux lettres, etc... ;

– calculsBras.c: ce fichier définit les fonctions permettant la simulation du bras ;– GererBras.c : il s’agit du code C que vous avez générer à partir du code Lustre ;

Remarque : Les .h sont inclus directement dans le projet à partir de la connaissance des .c ;

4. Compiler le projet (Rebuildall) : vous allez sans doute avoir une erreur lors de la compilation de GererBras. Ils’agit d’un petit problème lors de la génération du code C à partir de Lustre. En effet le code généré disposede certaines commandes C++, que le compilateur ne parvient à traiter Notamment la syntaxe de commentaire //n’est pas reconnu. Pour résoudre le problème, reportez vous dans le fichier GererBras ;h, à la ligne 7/8 et effacerle / (fin de ligne) de la première ligne de commentaire. Cette fois, ça doit compiler. La compilation génère unnom_fichier.out . pas à prendre en compte.

.2.2 Utilisation du noyau temps réel VxWorks

Choisissez un poste libre VxWorks.

1. Notez sur un papier le nom de la cible et l’adresse IP coorespondante (Cf la disquette de boot) ;

2. Faites une copie sur votre compte du fichier VxWorks dans un nouveau repertoire contenu sur la disquette deboot. Ce fichier contient le noyau temps réel VxWorks (ide : l’ensembles des primitives du noyau). Vous aurezbesoin de ce fichier lors de la configuration ;

3. Lancez la cible avec la disquette de boot afin de charger le noyau temps réel sur la cible VxWorks ;

4. Configuration. Il faut ensuite communiquer à TORNADO la cible VxWorks avec laquelle il doit communiquer :

(a) Pour cela allez dansTools -> Target Server -> configure;

(b) Cliquer surnew;

(c) Remplissez les champsDescription et Target Server Nameavec le nom de la cible que vous utilisez (cf.les références de la disquette de boot que vous avez notez, naturellement !) ;

(d) Remplisser le champid adress, avec ... l’adresse IP de la cible ;

13

Page 14: Travaux Pratiques : LUSTRE Commande d’un bras …

(e) Dans le menuTarget Server Properties, choississez :– Console and Redirection. Cocher tout. Ceci permet une redirection du shell de la cible afin de pouvoir

agir à distance ;– Dans le meme menu déroulant choisissezCore File and Symbols: on vous demande le chemin d’un

fichier : indiquez le répertoire que vous avez créer et qui contient le fichier VxWorks ;

5. Si la cible à correctement booter, vous pouvez alors appuyer surLaunch pour établir la communication.

.2.3 Download du projet de Tornado vers la cible VxWorks

Afin d’exporter le projet sur la cible :

1. Au niveau du menu déroulant de l’interface Tornado choississez le nom de votre cible. Ce nom doit apparaîtresi vous avez bien effectuez la configuration ;

2. Click droit sur le projet etdownload GererBras.out. Il faut alors indiquer quelle est la tâche à lancer :tMain .

A ce moment, le programme tourne sur la cible VxWorks. Lancer alors l’interface du bras...

14

Page 15: Travaux Pratiques : LUSTRE Commande d’un bras …

.3 Caractéristique du bras robot

1. Caractéristiques mécaniques– longueur des segments : 0.5 m– débattements angulaire de l’épaule (θ1) : [0o,+180o]– débattements angulaire du coude (θ2) : [-170o,+170o]

2. Caractéristiques électriques et constantes de temps

(a) Amplificateur : Les moteurs à courant continu sont commandés à l’aide de tensions comprises entre +10V et -10 V.– constante de temps de chaque articulation : 100 ms– gain statique de chaque articulation : 0.066 rd/s/V

(b) Caractéristiques des potentiomètres de recopie : Ils délivrent tous les deux une tension comprise entre -10V et +10 V.– Recopie épaule : -10 V≡ 0o et +10 V≡ 180o

– Recopie coude : -10 V≡ -180o et +10 V≡ +180o

(c) Pince : La pince est commandée en tout ou rien en boucle ouverte.– 0 V : pince ouverte– 5 V : pince fermée– Constante de temps de la pince : 1 seconde

3. Contraintes liées aux déplacements

(a) L’asservissement des articulations est réalisé par le système informatique ; il doit donc être permanent dèsla mise en marche du système ;

(b) Pour chaque articulation, le ralliement d’une position doit être effectué en respectant le profil de vitesse(cf. figure.3) . La vitesse de déplacement est fixée par l’opérateur (% vitesse max) en pourcentage de lavitesse maximum des articulations ;

(c) Pour que le bras ait un déplacement harmonieux, les deux axes doivent atteindre leurs positions finalessimultanément ;

(d) Un déplacement doit pouvoir être interrompu à tout instant par la commande d’arrêt d’urgence. Suite àl’interruption du mouvement tous les ordres en attente sont annulés de façon à ce que l’opérateur puissereprendre le contrôle du bras ;

(e) La pince peut-être commandée pendant le déplacement du bras.

Nota : Le choix de la politique de ralliement est à définir. . .

FIG. 6 – Profil de vitesse pour le ralliement des positions coude et épaule

15