Alexandre Alapetite & Pierre Cohade   16/01/2003
Enseignant : Julien Pettre

BE de vision en robotique sur robot
COGNEX - SANKYO

Sommaire

Quitter

Introduction

Un robot industriel peut être vu comme un système mécanique articulé. Les différents axes sont commandés par l'intermédiaire d'un moteur (pas à pas ou continu) et l'ensemble constitue un système multivariable.

Pour pouvoir faire exécuter une action ou tâche au robot manipulateur, il est nécessaire de commander ce système multivariable pour positionner les différents axes.

Le but de la programmation robotique est de fournir les consignes de position qui permettent d'exécuter la tâche désirée. Il faut disposer de langages et d'environnements de programmation souples et structurés.

Beaucoup de constructeurs ont crée des langages de programmation spécifiques facilitant le travail des programmeurs non initiés en robotique et permettant par là même de créer et de modifier plus rapidement les programmes d'utilisation de leur robot.

En général, on distingue 4 niveaux de programmation classés par ordre de flexibilité croissante :

  1. Niveau articulaire : la tâche est décrite en termes de positions successives des axes.
  2. Niveau effecteur : la tâche est décrite en termes de mouvement de l'organe terminal.
  3. Niveau objet : la tâche est décrite en termes d'opérations que les diverses pièces doivent subir.
  4. Niveau objectif : la tâche est décrite en termes généraux et globaux sous forme de résultat final à atteindre.

AML/2

Le langage AML/2 possède des caractéristiques de niveau effecteur. Il s'agit d'un langage interprété qui va manipuler des données de type constantes ou variables. Sa particularité est d'intégrer des fonctions spécifiques à la robotique telles que :

De telles fonctions impliquent que le système prenne en compte les calculs du modèle géométrique direct et inverse. Il devient alors plus simple d'amener l'effecteur d'un robot en un point quelconque de l'espace, référencé par ses coordonnées cartésiennes et d'orienter la pince comme on le désire. Le programmateur est donc libéré d'une somme de calculs liée à la structure du robot.
AML/2 intègre les modèles géométriques de 2 robots IBM : 7575 et 7576.


Problème

L'objectif de ce BE est de réaliser la saisie automatique d'une pièce après détection de sa situation par un système de vision.
L'effecteur du robot est muni d'une caméra qui lui est rigidement fixée. Celle-ci est couplée à un système industriel programmable de reconnaissance des formes, le COGNEX.

La tâche robotique à réaliser s'effectuera donc en deux étapes : la localisation de la pièce par la vision, puis sa saisie par le robot. La localisation est réalisée par le COGNEX, à l'aide d'un programme (fourni) développé en LV (langage de programmation de ce système de reconnaissance). Le COGNEX renvoie alors la position et l'orientation de la pièce considérée exprimées dans le repère lié à la caméra. Le robot ne pouvant être commandé que par rapport à son repère de base, la saisie de la pièce considérée requiert la détermination des différentes transformations nécessaires à l'expression des coordonnées de l'objet dans ce repère.

Le travail à effectuer consistera à calculer les changements de base adéquats et à programmer le robot à l'aide du langage AML/2. Après avoir validé en simulation les programmes AML, un test réel sera mené sur le robot SANKYO. Ce robot industriel étant très rapide, une attention particulière est impérative lors de son fonctionnement.

  1. Placer le dé sous la caméra et en déduire les axes Xc et Yc du repère caméra.
  2. Relever les valeurs de la situation du dé lorsque celui-ci est positionné au centre de la pince. En déduire la situation de la caméra relativement à la pince.
  3. Calculer la situation de la pince pour aller saisir un objet, connaissant ses coordonnées dans le repère caméra. Vérifiez votre calcul en positionnant la pince à l'aide de la boîte à boutons.
  4. Copier le programme appl4.aml et le compléter.
  5. Uploader le programme sur le robot.

Modèle de robot utilisé

On utilise un robot de type IBM 7576 possédant 4 degrés de liberté.
robot IBM 7576


Communication COGNEX - SANKYO

Un programme sur PC permet de faire communiquer le COGNEX avec le robot SANKYO. Le dialogue entre le robot et le système de reconnaissance se fait par l'intermédiaire d'une ligne RS232.
Le système de reconnaissance effectue les tâches de vision suivantes :

Lorsque l'objet est reconnu par le COGNEX, la position retournée correspond au centre de gravité. Les coordonnées sont transmises en 1/10 mm. L'orientation de l'objet est calculée par rapport à une orientation de référence apprise lors de la phase d'apprentissage. Elle est également donnée en 1/10 de degré.


Utilisation de COGNEX

Le système COGNEX, programmé en Visual Basic et utilisant l'environnement de vision OMIWin, permet de mettre en oeuvre la reconnaissance et la localisation d'objet en temps réel.
Avant toute utilisation, il est nécessaire de configurer et de calibrer le système de vision.

logiciel de vision

Calcul de la translation dans le repère de base

Il faut faire une translation de l'organe terminal pour le placer au dessus du dé.

Voici les deux bras du robot représentés dans le repère de base.
On a besoin de l'angle Θ entre le repère caméra porté par l'organe terminal et le repère de base.
  1. Soit Θ' le complémentaire de Θ.
  2. Θ' = π - q2 - q1 (somme des angles d'un triangle).
  3. D'où Θ = π - Θ' = π + q1 + q2.
changement de repère 2

On va maintenant utiliser les informations de coordonnées provenant de COGNEX pour calculer la translation à effectuer.

changement de repère 1 Voici le repère caméra représenté dans le repère de base du robot.
  • Tous les repères sont en millimètres mm.
  • Le point C1(Xc1,Yc1), appelé (Xg,Yg) dans le logiciel de vision, est la position du dé retournée par COGNEX dans le repère caméra.
  • Le point C0(Xc0,Yc0) correspond au point où le dé doit se trouver dans le repère caméra pour permettre la prise par la pince.
  • Le point C1 et C0 sont confondus lorsque le dé est juste sous la pince et que la saisie est possible.
  • Θ est l'angle formé par le repère caméra et le repère de base.
Il faut calculer la translation (dxw,dyw) de la pince dans le repère de base de manière à ce que les points C0 et C1 soient confondus.
  1. Cette translation dans le repère caméra (dxg,dyg) correspond au déplacement C1 vers C0 soit la translation (dxg,dyg) = (Xc0−Xc1,Yc0−Yc1) dans le repère caméra.
  2. Il faut faire un changement de repère du repère caméra vers le repère de base :
    • dxw = dxg × cos Θ − dyg × sin Θ
    • dyw = dxg × sin Θ + dyg × cos Θ
Finalement, pour corriger les mauvaises orientations des repères sur la figure, on doit faire une translation dans le repère de base de (−dyw,dxw).

Calcul de la rotation dans le repère de base

On va simplement utiliser l'information de l'angle du dé dans le repère caméra fourni par COGNEX.
On fera donc une rotation de l'organe terminal d'un angle Θ pour être aligné sur les faces du dé.


Programme réalisé

##partie binôme irr03--------------------------------------
 ##le point c0 (-130.0729,58.36754) est la coordonnée du dé dans le repère caméra lorsqu'il est sous la pince
 ##le point c1 (Xc1,Yc1) est la coordonnée actuelle (par vision) du dé dans le repère caméra
 dxg = -130.0729 - Xc1; ##translation à effectuer dans le repère caméra en X.
 dyg = 58.36754 - Yc1; ##translation à effectuer dans le repère caméra en Y.
 <q1,q2> = INVKIN(QPOSITION()); #récupère q1 et q2 de la position courante (liaisons 1 et 2)
 ##calcul de la translation (dxw,dyw) dans le repère de base
 dxw = dxg * cos(90 + q1 + q2) - dyg * sin(90 + q1 + q2);
 dyw = dxg * sin(90 + q1 + q2) + dyg * cos(90 + q1 + q2);
 ##de_teta est l'angle du dé dans le repère image constaté par reconnaissance
 DPMOVE(<-dyw,dxw,0,de_teta>); ##déplacement relatif
 DPMOVE(<0,0,-230,0>); ##on abaisse l'outil
 DELAY(1); ##pause de 1 seconde pour contrôler l'alignement
 DPMOVE(<0,0,-15,0>); ##mise en position de saisie
 DELAY(1);
 GRASP(); ##fermeture de la pince
 DELAY(2);
 DPMOVE(<0,0,245,23>); ##on remonte et on tourne
 DELAY(1);
 DPMOVE(<0,0,-244,0>); ##on redescend
 DELAY(1);
 RELEASE(); ##ouverture de la pince
 DELAY(1);
 DPMOVE(<0,0,244,-de_teta>>); #et on remonte en tournant
##fin partie binôme irr03----------------------------------
Sommaire
https://alexandre.alapetite.fr

Retour