Travaux Pratiques : Langage LUSTRE Commande d’un bras manipulateur deux axes EN

Travaux Pratiques : Langage LUSTRE Commande d’un bras manipulateur deux axes ENSA, 2007 Cortier Alexandre & Forget Julien ONERA (Office nationale d’Etudes et de Recherches Aérospatiales) email : {alexandre.cortier,julien.forget}@cert.fr 7 décembre 2007 1 Table des matières 1 Introduction 3 2 Description du système 3 3 Description de l’interface 5 4 Travail à réaliser 7 4.1 Exercice de prise en main du langage Lustre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 4.2 Programmation du bras robot. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 4.2.1 Objectif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 4.2.2 Consignes et gestion du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 4.2.3 Prototype du noeud principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 A Organisation multi-tâches du projet 10 A.1 Organisation multi-tâche du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 B Utilisation du noyau VxWorks et de l’interface de développement TORNADO 12 B.1 Ouverture de tornado et création d’un projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 B.2 Utilisation du noyau temps réel VxWorks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 B.3 Download du projet de Tornado vers la cible VxWorks . . . . . . . . . . . . . . . . . . . . . . . . . 13 C Caractéristique du bras robot 14 2 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 disposant d’une interface graphique, détaillée en section 3. Pour ce faire nous allons : 1. Débuter par quelques exercices de prise en main du langage Lustre ; 2. Réaliser un modèle Lustre du système considéré (écrire un programme réactif en Lustre) ; 3. Générer du code C à partir du modèle Lustre ; 4. Embarquer le code sur le noyau temps réel Vx-Works. En Annexes A et C vous trouverez des informations complémentaires sur la programmation et le protocole de com- munication utilisés pour communiquer avec le noyau temps réel. Ces informations ne sont pas directement nécessaire pour le TP, mais peuvent aider à comprendre le système. 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. Dans le 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. Cette dernière permet la saisie des commandes et la visualisation des positions angulaires de chaque axe. Un calculateur de commande (noyau temps réel VxWorks), interfacé au bras, gère les ordres de déplacement et 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 le réseau Ethernet via une communication par socket TCP-IP. Les primitives de communication sont accessibles à partir du fichier socketsTCP386.h. 3 FIG. 2 – Synoptique générale 4 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 cas d’erreur de communication ou rupture de la connexion, le panneau de contrôle disparaît. 2. Contrôle du bras 5 – Bouton “ rejoindre ” : demande d’exécution d’un ordre de ralliement d’une position avec les paramètres : – % 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 6 4 Travail à réaliser Nous allons commencer par une prise en main de Lustre via quelques exercices. Certains nœuds seront réutilisés lors de la programmation du système de commande du bras manipulateur. 4.1 Exercice de prise en main du langage Lustre 1. L’opérateur pre : (a) Ecrire un nœud Edge() qui prend un flot d’entrée booléen et renvoie vrai quand le flot d’entrées subi une montée de signal (passe de false à true). Il s’agit de la détection d’un front montant. (b) Ecrire un nœud Osc() qui génère le signal (true,false,true,false,...) (c) Ecrire un nœud Osc2() qui génère le signal (true,true,false,false,true,true,false,...). Vous utiliserez uniquement les opérateurs pre et ->. (d) Ecrire un nœud Compteur() qui prend en entrée un flot booléen RESET, en sortie un flot d’entiers N. A chaque instant le compteur incrémente la sortie N sauf quand RESET est vrai. Dans ce dernier cas N est remis à zéro. La première fois que le compteur est appelé et si il n’y a pas de remise à zéro alors N doit valoir 1. 2. Les opérateurs when et current : (a) Ecrire un nœud Compteur2() qui reprend les caractéristiques de Compteur() mais va deux fois plus lentement. (Vous pouvez faire appel aux noeuds Compteur() et Osc() définis précédemment.) (b) Différence entre le when et le if . then . else . : Testez le programme suivant avec Luciole et comprenez ce qui ce passe... node ChangeCompteur(RESET,C :bool) returns(N :int) ; let N = if C then Compteur(RESET) else Compteur2(RESET) ; tel 4.2 Programmation du bras robot. 4.2.1 Objectif Pour la commande du bras robot, vous devez prendre en compte : 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é à uploads/Management/ tp-ensa07.pdf

  • 220
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager
  • Détails
  • Publié le Aoû 09, 2022
  • Catégorie Management
  • Langue French
  • Taille du fichier 0.4450MB