Pour utiliser notre programme, il faut tout d'abord enregistrer des images des formes pour le template matching avec le programme rec_temp.py. Ensuite, on peut lancer le programme template_match.py pour obtenir les variables à envoyer au robot. Enfin, on utilise le programme socket.py pour envoyer les variables sur RobotStudio.
Notre projet était d'établir une connexion entre le robot YuMi de ABB et une caméra de profondeur. Il peut se hiérarchiser en différentes étapes :
- Acquisition de l'image
- Traitement de l'image
- Communication des informations à RobotStudio
- Actionnement du robot
Nous avons fixé une caméra Intel au-dessus du robot YuMi, nous permettant de capturer des images en vue du dessus des objets.
Une fois l'image traitée, on peut récupérer tout d'abord le centre de gravité
Comme les plans de la caméra et d'interaction (celui où les objets sont disposés) sont parallèles, cela permet d'établir une relation linéaire entre les coordonnées des objets dans le repère de la caméra et le repère du robot.
Changement de repère
Où :
-
$(x, y, z)$ sont les coordonnées du point source, -
$(x', y', z')$ sont les coordonnées du point transformé (destination), -
$(a, b, c, d, e, f, g, h, i)$ sont les coefficients de la transformation affine, -
$(t_x, t_y, t_z)$ sont les composantes de la translation dans les directions$x, y$ et$z$ respectivement.
Dans ce contexte, la matrice
est dite de transformation affine où les coefficients de cette matrice correspondent aux paramètres de la transformation affine. On trouve cette matrice en faisant une résolution linéaire en choisissant 4 points dont on connaît les coordonnées dans les deux repères. On trouve ensuite les coordonnées de l'objet dans le repère du robot.
Ensuite, on calcule l'orientation de l'objet. Pour ce faire, on prend les coordonnées
On crée alors une matrice C telle que
Où
On extrait le vecteur propre associé à la valeur propre maximale de la matrice C, ce qui correspond à l'orientation de l'objet. On convertit ensuite ce vecteur en quaternion.
Nous communiquons avec RobotStudio par protocole TCP/IP, nous transmettons les coordonnées
Nous utilisons alors les variables acquises pour lancer le programme sur le bras droit.