=====Intégration du capteur de vision=====
Ce sujet est la suite de: [[staublivissage]]
En début de séance, le groupe de TP sera coupé en 2 pour faire travailler la moitié du groupe sur le robot, pendant que l'autre moitié travaillera avec un capteur simulé.
=====Partie Robot Réel=====
====Réapprentissage des positions de saisie et de dépose====
{{https://bvdp.inetdoc.net/files/iut/tp_tns/TODO.jpg}} Depuis la dernière fois, la cellule du robot a été reconfigurée, vous devez donc réapprendre les positions de saisie et de dépose du bouchon ainsi que les configurations articulaires du robot avant d'aller saisir le bouchon. Faites tout d'abord des réglages grossiers en simulation puis faites l'apprentissage sur le robot à l'aide du pendant.
====étalonnage géométrique et colorimétrique du système de vision====
{{https://bvdp.inetdoc.net/files/iut/tp_tns/TODO.jpg}} Avec l'enseignant, définir la zone de saisie du bouchon sur le plan de la table (en posant la mire + pions élévateurs) et faire l'étalonnage géométrique de la caméra vis à vis de la mire placée dans la zone de saisie. Dessiner les limites de la zone (Z) comprise entre les 4 coins de la mire sur la table. Procéder également à l'étalonnage colorimétrique pour apprendre les deux couleurs présentes sur le bouchon dans les conditions d'éclairage de la cellule, après avoir disposé un éclairage adapté sur la zone de saisie.
====étalonnage géométrique entre le système de vision et le robot====
{{https://bvdp.inetdoc.net/files/iut/tp_tns/TODO.jpg}} Procéder à l'estimation du changement de repère entre le repère vision (définie par la mire lors de l'étalonnage précédent et le repère de travail du robot.
Charger le projet sur le contrôleur et sélectionner en mode jog l'outil pince+mors.
Saisir le bouchon à une position connue (il faut que la hauteur du bouchon dans les mors soit correcte).
Ensuite, nous utiliserons le capteur de vision qui se comporte comme un capteur émettant en UDP vers le serveur de données capteurs à partir de la donnée numéro 30:
* **trouve**=1 si le bouchon est détecté, 0 sinon
* **x_vision** = coordonnée x du centre du bouchon dans le repère vision exprimé en mm, comprise entre 0 et 169
* **y_vision** = coordonnée y du centre du bouchon dans le repère vision exprimé en mm, comprise entre 0 et 169
* **x_robot** = coordonnée x du centre du bouchon dans le repère robot exprimé en mm
* **y_robot** = coordonnée y du centre du bouchon dans le repère robot exprimé en mm
Dans un premier temps, les coordonnées **x_robot** et **y_robot** fournies par le système ne sont pas correctes. Nous allons devoir apprendre la transformation à appliquer aux coordonnées pour qu'elles deviennent correctes. Pour cela, vous allez devoir déposer (avec le robot) le bouchon à différentes positions (suffisamment éloignées et non alignées) et relever les positions cartésiennes du repère outils dans le repère du robot et les positions correspondantes retournées par le système de vision. Procéder ainsi pour au moins 4 positions du bouchons réparties dans la surface de la zone de saisie (délimitée par la mire). Pour chaque position, lâcher le bouchon en ouvrant la pince, déplacer le robot dans la direction z+ du repère robot pour l'éloigner du bouchon sans le déplacer, puis le faire tourner autour de la liaison j1 en articulaire pour dégager le champ de vision de la caméra, et relever les positions fournies par le système de vision (à l'aide du middleware en relevant les données capteurs comme vu dans le TP réseau en faisant une requête TCP, avec un programme Python ou avec le programme VAL3 au choix).
Sauver les données collectées dans un fichier texte **rigidtransform.in** organisé avec le format suivant:
x1_image,y1_image,x1_robot,y1robot,x2_image.....
Si vous avez dejà fait la séance [[visionlproaip]], vous pouvez lancer votre programme **rigid_transform_2D.py** pour calculer la transformation rigide 2D entre les repères robot et image, sinon demander à l'enseignant d'utiliser sa version. Ceci créer un fichier **rigidtransform.out** utilisé par le système de vision pour qu'il puisse fournir des positions de bouchon valides dans le repère robot.
=====Partie Robot En Simulation=====
====Simulation du capteur de vision et intégration dans le programme du robot====
{{https://bvdp.inetdoc.net/files/iut/tp_tns/TODO.jpg}} Utiliser l'application Python vue dans le tp [[staubli]] pour simuler le capteur de vision. L'appui sur le bouton doit permettre de piloter **trouve** et les sliders doivent piloter **x_robot** et **y_robot**.
{{https://bvdp.inetdoc.net/files/iut/tp_tns/TODO.jpg}} Intégrer dans votre programme sur le robot Staubli la lecture des données capteurs (simulées) pour déclencher la séquence de saisie quand le bouchon est détecté et faire en sorte que le robot vienne saisir le bouchon dans la zone de saisie à la position dans le repère robot indiquée par le système de vision. Vous devrez vérifier que la position de saisie fournie par le capteur est atteignable par le robot avant de tenter la saisie! Ensuite, visser le bouchon sur la bouteille.
{{https://bvdp.inetdoc.net/files/iut/tp_tns/TODO.jpg}} Tester avec le robot réel et le capteur de vision réel.
-----------------------------------------------
coordonnées relevées 2022:
48,31,465,182,112,57,402,157,120,113,395,100,14,103,499,111
-----------------------------------------------
Pour la suite, vous développerez vos propres programmes de vision en python sur: [[visionlproaip]]