Outils pour utilisateurs

Outils du site


staubli

TP Robot Staubli à l'AIP

Présentation du projet

L'objectif de ce projet est de vous familiariser avec l'outils Staubli Robotic Suite afin de programmer une tâche robotique sur un robot manipulateur 6 axes. La tâche consiste à saisir un bouchon de bouteille et à venir le visser sur le goulot d'une bouteille. Afin de réaliser cette tâche, il aura fallu procéder à l'intégration d'une infrastructure de capteurs communicants comportant notamment:

  1. Un capteur de couple (déjà étudié dans le module capteur) permettant la mesure du couple de serrage
  2. Un système de vision 3D Intel Realsense permettant la localisation du bouchon dans l'espace de travail du robot.

Pour le développement de cette tâche, vous procéderez d'abord à la configuration d'un projet et de la cellule robotique. Ensuite vous développerez votre programme en réalisant des simulations, et utiliserez à cette occasion des logiciels fournis pour simuler les capteurs, puis finalement vous pourrez tester sur le robot réel en fin de projets afin de procéder aux réglages fins permettant d'adapter les mouvements du robots à la configuration spatiale des éléments dans la cellule.

Dans un premier temps, vous programmerez le robot sans utiliser les capteurs. Le capteur de couple sera intégré dans le cadre de cet projet dans un second temps et le capteur de vision sera intégré plus tard dans le cadre d'une séance dédiée.

Dans le cadre de ce projet, les communications entre le robot et l'infrastructure se feront via Socket TCP à l'aide de chaînes de caractères ASCII et les autres entrées/sorties numériques et analogiques ne seront pas utilisées.

TODO: lien vers vidéo

Le logiciel SRS étant payant, vous ne pourrez malheureusement pas reproduire la manip en dehors de l'AIP. l'AIP dispose de 9 licences de SRS 2016 permettant à 8 postes + celui connecté au robot d'utiliser le logiciel simultanément.

Informations sur la structure d'un programme VAL3 et sur les types utilisés

L'enseignant vous guidera au cours du projet dans la lecture de la documentation du langage VAL3 utilisé par SRS pour programmer le robot. Cette documentation est disponible à l'adresse: http://homepages.laas.fr/bvandepo/files/staubli/documentations/Val3.PDF

Informations sur l'infrastructure de capteurs communicants

Configuration d'un projet de départ

Durant tous le projet, vous travaillerez sur des fichiers stockés en réseau sur le disque L: afin de pouvoir y accéder depuis différents ordinateurs.

Ouvrir le programme SRS en cliquant sur: Menu Démarrer→Tous les programmes→Staubli Robotic Suite 2016→Staubli Robotic Suite 2016.6.1

Création d'un projet utilisant les IO physiques de l'armoire de commande

L'armoire de commande dispose de cartes d'entrées/sorties (IO, liens série, lien sockets etc…). Pour que ces cartes soient accessibles depuis le projet, il faut que le projet soit configuré lors de la création de la cellule en récupérant les informations matérielles depuis l'armoire de commande.

  1. Dans SRS, cliquer en haut à gauche sur l'icone de bras jaune.
  2. Cliquer sur “Nouvelle→ Assistant nouvelle cellule”
  3. Donner un nom au projet, par exemple CellStaubliAIP
  4. S'assurer que l'armoire de commande est sous tension et démarrée depuis 2 minutes
  5. Cliquer sur “A partir d'un contrôleur distant”
  6. Choisir l'adresse IP de l'armoire de commande: 192.168.0.112
  7. La version de l'émulateur s7.9.1 n'est pas installée, il faut donc sélectionner la 7.10
  8. Cliquer sur “Suivant”

En cas de problème pour créer la cellule, vous pouvez, après accord de l'enseignant, télécharger le fichier zip suivant en remplacement: http://homepages.laas.fr/bvandepo/files/staubli/projets_SRS/CellStaubliAIPVide.zip

Toutes les cartes ne sont pas automatiquement ajoutées au projet. Il faut:

  1. Choisir l'onglet Cellule dans la fenêtre de droite
  2. Cliquer sur la flèche à gauche du nom de la cellule pour faire apparaître “Controller1 [s7.10]”
  3. Cliquer droit sur “Controller1 [s7.10]” puis cliquer gauche sur “Configuration du contrôler”
  4. Sélectionner le bon type de bras (sinon par défaut un Scara sera choisi). Choisir “RX60B, Fixation Sol, Horizontal base cable outlet, UL Certified arm power on light”
  5. cliquer sur l'onglet I/O et cocher “BIO” ainsi que “BIO2/MIO”, puis “Ok”
  6. Si l'onglet “IO physiques-Controller1” est ouvert, il faut le fermer et l'ouvrir à nouveau pour que les modifications soient visibles.

Maintenant que le contrôleur est configuré, il faut créer une nouvelle application, pour cela:

  1. Choisir l'onglet Cellule dans la fenêtre de droite
  2. Cliquer sur la flèche à gauche du nom de la cellule pour faire apparaître “Controller1 [s7.10]”
  3. Cliquer droit sur “Controller1 [s7.10]” puis cliquer gauche sur “Nouvelle application”
  4. Saisir un nom, par exemple “Projet”, puis Ok

Il faut maintenant configurer l'outils du robot, pour cela:

  1. Choisir l'onglet Géométrie dans la fenêtre de droite
  2. Cliquer sur la flèche à gauche du nom de la cellule pour faire apparaître “Controller1 [s7.10]” puis faire de même pour votre Projet
  3. Cliquer droit sur “Flange” (qui signifie Bride en français, soit l'emplacement où fixer l'outils) puis cliquer gauche sur “Nouvelle donnée”
  4. Saisir un nom pour l'outils, ou laisser le nom par défaut (tTool) puis cliquer sur Ok
  5. Vérifier que tTool apparaît maintenant en cliquant sur la flèche à coté de “flange[0]”

Edition du programme

  1. Cliquer sur l'onglet “Accueil” puis sur “Afficher la vue 3D”
  2. Choisir l'onglet Cellule dans la fenêtre de droite
  3. Cliquer sur la flèche à gauche du nom de la cellule pour faire apparaître “Controller1 [s7.10]” puis “Projet” puis double cliquer sur “start()” pour ouvrir la fenêtre d'édition du programme.

Afin d'organiser la disposition des sous fenêtres pour permettre de voir simultanément le programme et le simulateur 3D du robot, cliquer gauche longuement sur l'onglet Projet-start puis, tout en maintenant le clic déplacer la flèche vers le carré de droite qui vient d'apparaître, relacher alors le clic gauche. Vous devriez obtenir un affichage ressemblant à:

La vue 3D utilise les mêmes principes que Catia pour naviguer:

  • clic molette maintenu pour déplacer la caméra
  • clic molette + clic droit maintenus pour orienter la caméra

En fonction de la position de départ du mouvement de souris, la rotation obtenue n'est pas la même. Pour afficher le disque délimitant les zones de départ, il faut cliquer sur l'icone rotation en bas à droite à coté de zoom.

Il peut parfois falloir désactiver l'affichage du plancher car il fait buguer l'application. Pour cela, cliquer droit sur la vue 3D, “réglages affichage” et décocher “afficher plancher”.

Le programme propose par défaut un certain nombres de vues (de face, de coté, etc…). Il peut être intéressant d'ajouter des caméras fixes dans l'environnement pour observer les mouvements du robot depuis des points de vues particuliers. Pour cela, configurer la vue à l'aide de la souris puis dans l'arbre à gauche de la vue 3D, cliquer droit sur la vue 3D et sélectionner Caméras→ajouter une camera pour la vue courante. Il suffira de double cliquer sur la caméra créée dans l'arbre pour revenir sur cette vue.

Dans certains cas l'affichage de trièdres est trop petit pour être visible. Pour changer leur taille, aller dans l'onglet Simulation→réglage affichage→taille des trièdres (en pixel).

Lorsqu'il est nécessaire de définir un repère à l'aide de clics de souris, l'ordre de clics des points définit l'orientation du 3° axe par la règle de la main droite (aussi appelée du tire-bouchon).

Modification de la configuration du robot

Pour modifier la configuration du robot, double cliquer sur Scène→Robot→Controller dans l'arbre, ce qui fait apparaître des disques permettant de contrôler chaque articulation. Cliquer gauche maintenu sur un des disque pour faire tourner l'articulation. Il est également possible de modifier la configuration du robot en cartésien en jouant sur le trièdre placé au niveau de la bride du robot. Cliquer droit sur le robot pour faire apparaître le menu et clic gauche sur “position articulaire” pour faire apparaître la fenêtre de configuration du robot qui permet un réglage fin et la visualisation des valeurs extrémales atteintes par chaque articulation:

Le pilotage manuel en cartésien se fait à l'aide de la fenêtre:

L'affichage de l'espace de travail (righty ou lefty) est obtenu en sélectionnant Scène→Robot→Controller dans l'arbre, puis clic droit sur le robot et afficher l'espace de travail… Il s'agit du volume atteignable par le milieu de l'axe 5 du robot, ce sont juste 2 sphères calculées statiquement à partir du modèle du robot, mais elle permette de se faire un idée pour positionner les différents éléments dans la cellule.

Configuration de la cellule

Les différents fichiers STL des objets à insérer sont disponibles à l'adresse: https://homepages.laas.fr/bvandepo/files/staubli/stl/

Import du modèle de pince

Récupérer le modèle STL de la pince Schunk: https://homepages.laas.fr/bvandepo/files/staubli/stl/pince_schunk_staubli_ouverte.stl

Le modèle téléchargé est déjà référencé correctement pour faciliter le positionnement du Handler (point saisisseur) et du Handle (base: point de saisie). La bride du robot (Flange) est un Handler en Val3, et nous allons connecter ce Handler au Handle de l'outils pince.

Pour ajouter la pince au robot:

  1. masquer le robot→ cliquer droit sur l'arborescence de scène sur Controller et décocher “Afficher le robot”
  2. Onglet Modeleur→Ajouter un modèle CAO
  3. choisir Copier et insérer le fichier
  4. l'objet apparaît dans l'arbre en tant que Géométrie, cliquer droit dessus et faire “nouvel outils”
  5. NE PAS déplacer l'outils (car il est normalement bien positionné)
  6. choisir dans l'arbre l'outils et son handle
  7. cliquer sur “Edition” sous la barre de menu
  8. cliquer droit sur handle et “Editer la position”
  9. Régler tout à 0 dans la position absolue
  10. cliquer droit sur handler et “Editer la position”
  11. Régler tout à 0 dans la position absolue sauf Z à 117.25
  12. Sortir du mode Edition
  13. Cliquer droit sur Tool1 dans l'arborescence, attacher à et choisir le handler du robot
  14. réactiver l'affichage du robot

Vous devriez obtenir un affichage tel que:

Ensuite il faut associer l'outils à la variable tTool, pour cela:

  1. Sélectionner le Tool1 dans l'arborescence puis faire CTRL+C
  2. pour utiliser un outils de la géométrie graphique vers une variable val3, il faut clic gauche sur le handler de l'outils, CTRL+C et coller dans la ligne de la variable tTool[0] dans l'onglet données. Vous devriez obtenir un vecteur dont toutes les composantes sont à 0 à l’exception du champ Z à 117.25.

cliquer droit sur le handler de l'outils puis définir comme TPC (Tool Center Point= Centre De l'Outils) pour pouvoir déplacer l'outils.

Vous devriez obtenir des repères de handle et de handler tels que visible sur les images suivantes:

Optionnel: importer le modèle de gripper adapté au bouchon depuis https://homepages.laas.fr/bvandepo/files/staubli/stl/adaptateur_pince_bouchon_ouvert.stl et le rajouter à la pince en configurant son handler et son handle correctement. Pour cet outils, le handler est le handle doivent être distant de 10mm selon Z. Faire clic droit sur l'adaptateur puis “attacher à” et sélectionner le handler du Tool1. Après avoir attaché ce nouvel outils au précédent, vous devriez obtenir:

Ajout des éléments dans la cellule

Pour ajouter un objet dans l'espace de travail du robot:

  1. Onglet Modeleur→Ajouter un modèle CAO
  2. Télécharger le fichier et aller le chercher dans l'arborescence avec le bouton “…”
  3. Choisir Copier et insérer le fichier
  4. L'objet apparaît dans l'arbre en tant que Géométrie

Insérer dans l'espace de travail du robot:

Vous devez positionner les éléments pour obtenir une configuration proche de celle visible sur la figure suivante (respecter le positionnement du robot indiqué par les câbles):

Activation de la détection de collision

Pour activer la détection de collision dans le simulateur, il faut griser le bouton Simulation→Collision + choisir les événements qui déclenchent les collisions + activer la gestion des collision dans chaque objet (Propriétés F4).

Démarche de développement et de simulation

Structure du programme

Il sera peu fait usage de la notion de sous programme dans la suite, la plus grande partie de votre programme résidera dans le fichier “start”. Vous veillerez à informer l'utilisateur du pendant de l'état de votre programme à l'aide de fonction d'affichage, afin d'être capable d'identifier facilement la partie du programme en cours d’exécution etc…

Nommage des variables

Vous veillerez à respecter les règles de nommages des variables en fonction de leurs types (voici ce que nous manipulerons dans le projet):

  • variable bool commençant par bBool
  • variable frame commençant par fFrame
  • variable jointRx commençant par jJointRx
  • variable mdesc commençant par mMdesc
  • variable num commençant par nNum
  • variable pointRx commençant par pPointRx
  • variable string commençant par sString
  • variable tool commençant par tTool
  • variable trsf commençant par trTrsf

Ceci permettra notamment d'ajouter automatiquement une variable à partir du code en faisant clic droit sur la variable puis ajouter donnée. Le type de la variable est alors inféré d'après la convention de nommage.

Pour info, même si nous n'utiliserons pas ces concepts dans le projet, les noms des variables locales sont préfixés par l_ à ajouter en tant que nouvelle variable locale (pas donnée) et les nom des paramètres sont préfixés par x_.

Gestion du temps

TODO: expliquer delay, waitEndMove, la file d'ordre et le lissage de trajectoire

dans un premier temps, mouvements saccadés puis lissés

Programmation des mouvements de saisie et de transport du bouchon

Nous allons mettre en place un mouvement semblable à celui présenté page 145 de la documentation pour saisir le bouchon et l'amener en face du goulot de la bouteille. Les fonctions de mouvement utilisables sont:

  • movej(): mouvement en point à point, la trajectoire entre les points optimise la vitesse de déplacement
  • movel(): mouvement linéaire dans l'espace de travail (en interpolant sur les articulations ou en cartésien selon le mdesc)
  • movec(): mouvement circulaire dans l'espace de travail (en interpolant sur les articulations ou en cartésien selon le mdesc)

Simulation

La simulation peut se faire en mode “exécution continue” ou en mode “Debug”.

Mode "Debug"

Dans le mode “Debug”, il est possible de positionner des points d'arrêt dans le programme, d’exécuter des instructions en pas à pas, ou fonction par fonction, et d'espionner la valeurs de variables.

Presser la touche F9 pour activer ou désactiver un point d'arrêt sur une ligne d'un programme. Un point rouge apparaît à gauche de la ligne pour indiquer la présence du point d'arrêt.

Pour synchroniser l'affichage 3D avec le simulateur:

  1. Onglet “Simulation”, cliquer sur icone “PLAY” triangle bleu (Démarrer la synchro)

Pour lancer le Debug du programme

  1. Dans l'onglet Cellule, ouvrir le Controller1→Projet et cliquer gauche sur “start()” pour choisir le programme
  2. Onglet “Val3”, cliquer sur “Démarrer et Debugguer l'application” (CTRL+R,D). On doit alors observer une flêche jaune sur la ligne du premier point d'arrêt visité

Pour éxecuter en pas à pas:

  1. Onglet “Déboguer”, “Pas principal” (raccourci F10)

Observer dans la fenêtre “Emulator Controller” les affichages utilisateurs (au besoin cliquer sur l'onglet “User”)

Amener la souris sur le “?” de la fenêtre de l'émulateur pour voir les raccourcis clavier.

Arrivé à l’exécution de l'instruction WaitEndMove(), le simulateur semble bloqué, ceci est dû au fait que le robot est par défaut en mode “Hold”

  1. Dans la fenêtre “Emulator Controller”, il faut:
  2. Choisir le mode automatique en cliquant sur le bouton rond blanc jusqu'à ce que l'icone “auto” soit en bleu
  3. Mettre le robot sous puissance: cliquer sur le bouton rond avec un trait noir vertical pour le faire devenir vert
  4. cliquer sur l'onglet “Move” (qui devient “Hold”) (SHIFT+F7) pour autoriser le robot à bouger

Pour arrêter un Debug en cours et recommencer:

  1. Onglet “Deboguer” Arrêt du débogueur. (CTRL+D,S abbrégé de Débugguer Stop) .
  2. Onglet Val3, cliquer sur “Démarrer et Debugguer l'application” (CTRL+R,D abbrégé de Run Débugguer )
  3. Fenêtre “Emulator Controller”, cliquer sur “Move”

TODO : expliquer espions sur variables locales et globales

Mode "Exécution continue"

L’exécution en mode “exécution continue” est accessible depuis le bouton “Démarrer l'application” dans l'onglet “VAL3” ( raccourci (CTRL+R,X)).

A part cela, la synchronisation avec l'affichage 3D et l'émulateur de contrôleur se passent comme pour le mode “Debug”. Les points d'arrêt éventuellement présents dans le programme sont ignorés.

Réglage de la configuration du robot

Pour pouvoir configurer la pose du robot en cliquant sur la vue 3D il faut cliquer sur Onglet Simulation, icone “STOP” afin d’arrêter la synchronisation entre de simulateur et la vue 3D.

Utilisation du mode automatique déporté

Il est également possible d'utiliser le mode automatique déporté (remote) pour simuler l'application. Dans ce mode, le bouton de mise en marche de la puissance du robot du pendant n'est pas utilisable. Pour débugger, dans le pendant, changer le mode en automatique déporté à l'aide du bouton blanc. Une tentative d'exécution de votre programme provoquera l'affichage d'une erreur “Demande de mise sous puissance du bras refusée: la baie est en mode déporté ou invalide”. Pour débloquer cette situation, il suffit d'appeler la fonction VAL3 enablePower() au début de votre programme. Grâce à cela vous n'aurez plus à agir sur le bouton “Move/Hold” et mise sous puissance du pendant virtuel.

Configuration du robot pour permettre le vissage

Le poignet du robot est configuré par défaut avec des butées logicielles pour pouvoir tourner le poignet de plus de -270° à +270°, afin de ne pas détériorer les flexibles pneumatiques permettant de piloter la pince. Dans notre manip, nous débrancherons ces flexibles et utiliserons un plus grand débattement pour le poignet, qu'il va falloir configurer, sur le pendant virtuel ainsi que sur le pendant réel (sur ce dernier, ce sera fait par l'enseignant). Le poignet du robot RX60 peut faire une rotation de +- 18000°.

Afin d'accéder à la configuration du pendant, il faut utiliser le “profil de maintenance”:

sur l'émulateur, presser: SHIFT + F11 + F3

sur le vrai pendant, presser: SHIFT+USER

choisir “maintenance” (au lieu de “staubli”, en faisant entrée puis en sélectionnant avec les flêches), mot de passe: spec_cal, (caractère “_” obtenu par SHIFT+M) puis F8 pour OK

Il faut ensuite régler les butées du bras et de la cellule. cela va modifier les fichiers arm.cfx et cell.cfx

Pour cela, aller dans Menu→tableau de bord→Etat du contrôleur→Limites bras, et régler J6min à -18000 et J6max à +18000 puis F8

L'image suivante montre la configuration des butées sur le pendant virtuel:

Revenir au profil “staubli” après que la modification ait été effectuée.

Pour que la modification soit prise en compte, il faut que le programme soit en cours d'exécution mais que le robot ne soit pas en train de bouger. On peut pour cela par exemple exécuter le programme en mode debug, avec un point d'arrêt actif dans le programme sur un appel à la fonction delay(…)

Les limites de la cellule sont automatiquement mises à jour à partir des limites du bras.

Intégration des capteurs

La communication via Socket proposée par SRS ne fait pas de distinction entre les numéros de ports local et distant. Il n'est donc pas possible de faire communiquer directement l'émulateur de robot tournant sur votre PC de développement avec une application émulant un capteur sur le même PC. Nous utiliserons donc une autre machine appelée “serveur de capteurs” qui sera en charge de centraliser les données issues des différents capteurs réels ou simulés. SRS pourra communiquer avec ce serveur car il dispose d'une adresse IP différente de celle de votre PC. Dn plus la lecture de données via socket depuis SRS fonctionne de manière bloquante avec timeout, donc le fait d'avoir le pc serveur qui puisse répondre à des requêtes même si le capteur n'a pas fournit de valeur permet par exemple d'indiquer qu'il n'y a pas de donnée disponible sans bloquer le robot.

Python 3.4.1 est installé sur les PC Windows. Vous devrez installer un paquet de librairie et télécharger/modifier un programme python émulant un capteur à l'aide d'une interface graphique.

Installation de pyQT sur les postes étudiants

Télécharger le fichier suivant: https://download.lfd.uci.edu/pythonlibs/q4hpdf1k/PyQt4-4.11.4-cp37-cp37m-win_amd64.whl sur le Bureau, Puis saisir dans un terminal en faisant Touche Windows+R puis taper “cmd” et entrée, puis copier coller la ligne suivante:

pip install Desktop\PyQt4-4.11.4-cp37-cp37m-win_amd64.whl

Exécution du programme python de simulation d'un capteur

Voici le code du programme émulant un capteur:

simu_sensor_2_joystick.py
#!/usr/bin/python3
# -*- coding: utf-8 -* 
#Bertrand Vandeportaele 2019
import os
import sys
from PyQt4.QtGui import *
from PyQt4.QtNetwork import *
from PyQt4.QtCore import *
from PyQt4 import *
import re #pour découpage chaine comme sur https://stackoverflow.com/questions/2175080/sscanf-in-python
 
global etatBouton
etatBouton=0
global slider1Value
slider1Value=0
global slider2Value
slider2Value=0
 
global led0Button
################################################################################
def close():
  print('close')
  exit(0)
################################################################################
def commutTimer():
  global timer
  print('commutTimer')
  if timer.isActive():
     timer.stop()
     commutTimerButton.setText('start stream sensor')
  else:
     timer.start()
     commutTimerButton.setText('stop stream sensor')
################################################################################
def slider1ValueChanged( value ):
  #label.setText( str( value )
  global slider1Value
  slider1Value=value
  print('changed')
################################################################################
def slider2ValueChanged( value ):
  #label.setText( str( value )
  global slider2Value
  slider2Value=value
  print('changed')
################################################################################
def bouton0():
  global led0Button
  global  etatBouton 
  etatBouton=(etatBouton+1)%2
  if etatBouton==0:
    led0Button.setText('Appuyer sur le bouton')
  else:
    led0Button.setText('Relacher le bouton')
  print('etatBouton: '+ str(etatBouton) +" \n");
################################################################################
def sendUDP(i):
  global udpSocket
  global destIP
  global portOut
  DestIP = QHostAddress(destIP);
  global slider1Value
  global slider2Value
  global etatBouton
#  chaine=str(slider1Value)+ " " + str(slider2Value) 
#ajout @MAC bidon
#  chaine="00:00:00:00:00:00 "+str(slider1Value)+ " " + str(slider2Value) 
#ajout champs vides pour être compatible avec le joystick wifi
#@MAC: BC:DD:C2:FE:6F:F0 num: 0 0 -> 529.0 , 1 -> 534.0 , 2 -> 0.0 , 3 -> 0.0 , 4 -> 0.0 , 5 -> -73.0 , 6 -> 63.0 , 
  chaine="00:00:00:00:00:00 0 0 0 "+str(etatBouton)+" 0 0 "+str(slider1Value)+ " " + str(slider2Value) 
 
#chaines bidons pour générer erreur de parsing sur le serveur
#  chaine="00:00:00:00:00:00 0 0 0 "+"687f"+" 0 0 "+str(slider1Value)+ " " + str(slider2Value) 
 
  chaine=chaine+chr(13)+chr(10)
  print("la chaine envoyée est: "+chaine)
  udpSocket.writeDatagram(chaine,DestIP, portOut);
################################################################################
def timerUpdate():
  sendUDP(0)
################################################################################ 
 
global led0Button
#destIP='192.168.1.50' #pc simulateur
#destIP='192.168.0.112' #pc simulateur
#destIP='192.168.1.49' #pc serveur rapid connecté en filaire à réseau AIP
#destIP='127.0.0.1' #pc serveur sur la boucle locale
destIP='192.168.3.5' #pc serveur rapid connecté en wifi à réseau AIP
 
portOut=10000
posx=10
posy=10
sizex=500
sizey=150
################################################################################ 
app = QApplication(sys.argv)
w=QDialog() 
statusLabel =QLabel('En attente de datagrammes UDP depuis le PIC32')
commutTimerButton=QPushButton('start clignote LED0')
quitButton = QPushButton('&Quit')
led0Button = QPushButton('Appuyer sur le bouton') 
 
udpSocket =QUdpSocket()
udpSocket.bind(portOut, QUdpSocket.ShareAddress) 
 
app.connect(quitButton,QtCore.SIGNAL('clicked()'), close)
app.connect(commutTimerButton,  QtCore.SIGNAL('clicked()'), commutTimer)
app.connect(led0Button,QtCore.SIGNAL('clicked()'), bouton0)
buttonLayout =QHBoxLayout()
buttonLayout.addStretch(1)
buttonLayout.addWidget(quitButton)
buttonLayout.addWidget(commutTimerButton)
buttonLayout.addStretch(1)
button1Layout =QHBoxLayout()
button1Layout.addStretch(1)
button1Layout.addWidget(led0Button)
button1Layout.addStretch(1)
 
 
#http://koor.fr/Python/CodeSamplesQt/PyQtSlider.wp
slider1 = QSlider(Qt.Horizontal); 
 
amplitude=1800;
 
slider1.setMinimum(-amplitude/2)
slider1.setMaximum(amplitude/2)
slider1.setGeometry( 10, 10, 600, 40 )
slider1.valueChanged.connect(slider1ValueChanged )
slider1.setValue( 0 )
 
 
 
#labelSlider1Value=QLabel( )
#labelSlider1Value.setGeometry(250, 50, 50, 35)
#labelSlider1Value.setText( str( slider1.getValue() ) )
sliderLayout =QHBoxLayout()
sliderLayout.addStretch(1)
sliderLayout.addWidget(slider1)
sliderLayout.addStretch(1)
#sliderLayout.addWidget(labelSlider1Value)
#sliderLayout.addStretch(1)
 
 
slider2 = QSlider(Qt.Horizontal); 
slider2.setMinimum(-amplitude/2)
slider2.setMaximum(amplitude/2)
 
slider2.setGeometry( 10, 10, 600, 40 )
slider2.valueChanged.connect(slider2ValueChanged )
slider2.setValue( 0 )
 
 
sliderLayout.addWidget(slider2)
sliderLayout.addStretch(1)
 
mainLayout = QVBoxLayout()
mainLayout.addLayout(buttonLayout)
mainLayout.addLayout(button1Layout)
mainLayout.addLayout(sliderLayout)
mainLayout.addWidget(statusLabel)
w.setLayout(mainLayout)
chaine='@BVDP2019: Port Em '+str(portOut) +' vers IP: '+str(destIP)
w.setWindowTitle(chaine)
 
#timer adapted from example 1 of https://www.programcreek.com/python/example/52106/PyQt4.QtCore.QTimer
timer = QtCore.QTimer()
app.connect(timer,  QtCore.SIGNAL('timeout()'), timerUpdate)
timer.setInterval(100)
timer.start()
 
w.setGeometry(posx,posy,sizex,sizey)
#donne le focus au bouton 1
led0Button.setDefault(True)
 
w.show()
app.exec_()

Sauver ce fichier sur le Bureau puis le lancer en faisant Touche Windows+R puis taper “cmd” et entrée, puis copier coller la ligne suivante:

C:\RoboDK\Python37\python.exe Desktop\simu_sensor_2_joystick.py

Editer ce fichier avec Notepad++ pour l'adapter selon les consignes données en séance.

Le robot en tant que capteur

TODO: faire une tâche périodique en VAL3 qui envoie en UDP la pose courante du robot T,R, et joint comme n'importe quel capteur.

Mise en oeuvre sur le robot

Le chargement du programme sur le robot se fait depuis le poste situé à coté du robot.

Mise sous tension de l'armoire de commande

Fermer les différents portes équipées de capteur d'ouverture (sinon il y aura un message User ES1-2 indiquant que le capteur porte ouverte empêche le robot de démarrer)

Mettre l'interrupteur rotatif gris clair à gauche de l'armoire de commande en position “flêche vers le haut” pour alimenter le robot.

TODO: mettre les 2 photos de la façade

Ne surtout jamais rallumer le robot juste après l'avoir éteint sans attendre au moins une dizaine de secondes.

Choisir parmi les 3 modes en tournant la clef:

  1. En mode manuel, le robot s'arrête si l'utilisateur n'exerce pas de pression sur le bouton de l'homme mort et qu'il ne presse pas en continu le bouton Move/Hold. Ce sera le mode à utiliser pendant les tests et réglages sur le robot afin de pouvoir
  2. En mode automatique…

… TODO: expliquer les 3 positions de clef

Cas particulier du retour de vacances

Si l'alimentation de l'armoire a été coupée pendant longtemps, la batterie de l'armoire n'est pas suffisante pour conserver les paramètres de calibrage du robot, il faut donc refaire le calibrage. Pour cela, amener le robot en position de référence (les marqueurs traits noirs des différentes articulations doivent être en face les uns par rapport aux autres) en utilisant les mouvements manuels en mode Joint et faire sur le pendant:

  1. Bouton Menu
  2. Calibrage
  3. Presser le bouton Cal
  4. Presser le bouton Ok

Création d'une ressource Socket depuis le pendant

Cette opération a déjà été réalisée par l'enseignant mais est indiquée ici pour référence: Sur le pendant:

  1. Tableau de bord
  2. ES →
  3. Socket →
  4. Socket UDP, bouton “Nouveau”
  5. donner un nom: “udpsock” puis cliquer sur “Ok”
  6. Editer, bouton “entrée” pour choisir les paramètres à modifier
  7. filtre IP: 192.168.1.49
  8. port: 20000
  9. temps maxi: 5s (permet de régler la durée au bout de laquelle une tentative de lecture sur la socket n'ayant pas aboutie fera planter le programme VAL3
  10. caractère fin de chaine: 13 (identifie le caractère ASCII devant se trouver à la fin de toutes les chaines échangées via sockets)

TODO: Vérifier si il est possible d'ajouter des sockets au projet SRS via le pendant virtuel????

Chargement de l'application dans l'armoire de commande

S'assurer que l'armoire de commande du robot est sous tension.

  1. Dans SRS, sélectionner la fenêtre du programme start
  2. cliquer sur l'onglet VAL3, puis cliquer sur le bouton Télécharger l'application vers la cible

La fenêtre suivante apparaît, indiquant l'adresse IP et le numéro de port utilisé pour communiquer avec l'armoire de commande:

  1. Cliquer sur OK
  2. Une fenêtre apparaît demandant si l'on souhaite écraser l'ancien programme sur l'armoire, cliquer sur Oui

Avec le pendant:

  1. Bouton “Menu”
  2. Choisir “Gestionnaire d'applis” et valider avec le bouton Flèche droite
  3. Choisir “Application Val3” et valider avec le bouton Flèche droite
  4. Choisir “Disque” et valider avec le bouton Flèche droite
  5. Choisir newProject1 (ou le nom de votre projet) et valider avec le bouton Ok
  6. Pour que le programme s’exécute, mettre le bras sous tension en appuyant sur le bouton vert de mise sous tension tout en exerçant une pression modérée sur la poignée de l'homme mort
  7. Pour autoriser les mouvements du robot, appuyer sur le bouton Move/Hold
  8. Pour visualiser les messages utilisateurs sur l'écran du pendant, appuyer sur le bouton User

Gestion des fichiers sur l'armoire de commande avec winSCP ou FileZilla

il est également possible d'utiliser logiciel client FTP pour accéder aux fichiers du contrôleur (p15 de SRS-ManuelUtilisation2.PDF). L'armoire de commande héberge les différents programmes sur un serveur FTP. Il est possible d'utiliser un client FTP tel que winSCP (téléchargeable en version portable à l'adresse: https://winscp.net/download/WinSCP-5.15.9-Portable.zip )pour gérer les fichiers sur ce serveur. On pourra supprimer sur le contrôleur toutes les applications, sauf:

Cognex
CognexComm7en
commCamera2
EntreesSortie

Il faut être connecté en filaire au réseau local (pas via passerelle wifi). La connexion se fait à:

ftp://defaut@192.168.0.112
mot de passe vide

il faut accéder au dossier distant:

/usr/

Redémarrage de l'application

Pour exécuter à nouveau le programme sur l'armoire:

  1. Presser le bouton Stop
  2. Presser le bouton Run

Rechargement d'une application depuis le PC

Pour pouvoir recharger une application depuis le PC, il faut tout d'abord que l'armoire de commande arrête son exécution. Pour cela, à l'aide du pendant:

  1. Presser le bouton Stop
  2. Presser le bouton Menu
  3. choisir gestionnaire d'applis
  4. Presser le bouton Fer (F4)

Ensuite charger la nouvelle version de l'application en suivant les consignes de la section: “Chargement de l'application dans l'armoire de commande”

Arrêt de l'application en cours d’exécution

Pour arrêter l'application en cours depuis le pendant:

  1. bouton STOP
  2. bouton Menu
  3. Gestionnaire des tâches flêche droite
  4. choisir la tache et cliquer sur “Ter”

Adaptation du robot pour la scène réelle

Télécharger votre application vers l'armoire de commande. L'adaptation consiste à déplacer manuellement le robot à l'aide du pendant et à affecter des valeurs “correctes” aux variables de votre programme.

Il faut tout d'abord ouvrir l'application avec le pendant EN MODE MANUEL (sur l'armoire avec la clef et sur le pendant)! Pour déplacer le robot à un point donné:

  • choisir mode Point, en dessous de “Joint”, “Frame” et “Tool”
  • sélectionner le point dans la liste avec les flêches.
  • appuyer sur la poignée de l'homme mort et mettre la puissance (bouton vert), régler la vitesse avec “+/-” à 10% puis maintenir pressé le bouton “Move/Hold” jusqu'à ce que le robot ait atteint la consigne.

Pour éditer le point, utiliser le pendant en mode “Joint”, “Frame” et “Tool”et déplacer en ajustant Vitesse à 10% ou moins et X,Y,Z etc à la bonne valeur. Une fois l'outil à la bonne position, cliquer sur “Ici” puis sur “Enr”.

Rapatriement des données apprises de l'armoire de commande vers le projet SRS

Dans le gestionnaire de téléchargement, cocher à droite Projet→Projet→Données et faire télécharger. Le fichier Projet.dtx (xml) est mise à jour sur le PC mais SRS ne s'en rend pas compte, il faut faire clic droit dans l'onglet “Données”→Cell2→Controller1→Projet puis “Recharger l'application”.

L'enseignant expliquera en séance la démarche de pilotage manuel du robot et de mise à jour des variables du programme ainsi que du téléversement des valeurs numériques vers le programme. En cas de problème pour récupérer ces valeurs, il sera possible de relever manuellement les configurations du robot et de les mettre dans les variables correspondantes du programme avec des instructions telles que:

conf
 //configuration des points en articulaire par programme
  //position bras levé
  A={0,	0,	0,	0,	0,	0}
  //position bras vers le bas
  //B={0,	-50,	-90,	0,	-40,	0}
  //position bras vers le bas vers la fenêtre
   B={-50,-50,-60,0,-70,0}
 
          put("B[0]: ")
          put(B[0].j1)
          put(", ")
          put(B[0].j2)
          put(", ")
          put(B[0].j3)
          put(", ")
          put(B[0].j4)
          put(", ")
          put(B[0].j5)
          put(", ")
          put(B[0].j6)
          putln("       ")
          delay(3)
 
 
  pPointSaisieBou[0].trsf.x=-137.74
  pPointSaisieBou[0].trsf.y=510.87
  pPointSaisieBou[0].trsf.z=-303.78
  pPointSaisieBou[0].trsf.rx=-0.02
  pPointSaisieBou[0].trsf.ry=179.95
  pPointSaisieBou[0].trsf.rz=66.93
 
  pPointVisBou[0].trsf.x=72.04
  pPointVisBou[0].trsf.y=477.2
  pPointVisBou[0].trsf.z=-110.92
  pPointVisBou[0].trsf.rx=-0.02
  pPointVisBou[0].trsf.ry=179.94
  pPointVisBou[0].trsf.rz=66.93

Annexes

Informations réseau

IP et numéros de port

  1. IP pc rapid hébergeant le serveur de données capteurs en WIFI: 192.168.3.5
  2. IP pc rapid hébergeant le serveur de données capteurs en filaire: 192.168.1.49
  3. IP pc Windows à coté de l'armoire de commande: 192.168.1.50
  4. IP de l'armoire de commande Staubli: 192.168.0.112

Configuration du pc Windows à coté de l'armoire de commande:

IP: 192.168.1.50
Masque: 255.255.254.0
Passerelle: 192.168.1.13

Gestions des E/S TOR

L'armoire est équipée de deux cartes DIO:

  1. BASIC I/O
  2. DIO MIO

Pour les configurer dans le projet SRS: cliquer onglet cellule→prog1→Controller1, Acceuil, IO Physiques

BasicIO-1

cliquer gauche pour cocher Entrée digital %I13 puis cliquer gauche importer

dans l'onglet Données, Projet→dio doit contenir diB_13

ATTENTION Problème de numérotation sur le bornier, car les indices commencent à 1

Sortie doB_15 (numeroté 16) ne fonctionne pas

 putln("doB_12")
 while true
 doB_12[0]=true
 put("1")
 delay(1)
 doB_12[0]=false
 put("0")
 delay(1)
  

Alimentation pour les E/S 24V

Alimentation 24V pour les Entrées/Sorties à allumer (en bas sur cloison à coté robot staubli)

staubli.txt · Dernière modification: 2020/01/10 17:03 par bvandepo