Créer une ligne de production en multi-robot

V.1.1

Créer une ligne de production en multi-robot

Difficulté : difficile

Temps : ~40 min

Note

Ce tutoriel est fonctionnel à partir de :
La version v4.1.0 de la ned_ros_stack
La version v4.1.0 de Niryo Studio
La version v1.1.2 de PyNiryo

Si vous utilisez un Niryo One, référez vous à ce tutoriel.

Introduction

Apprenez à simuler une ligne de productiion en multi-robot (threading) avec cette nouvelle application. Vous utiliserez le Set Vision, le convoyeur, le package PyNiryo et deux Ned/Ned2. Cliquez ici pour voir le dépôt Github utilisé pour créer une ligne de production en multi-robot.

Ce dont vous avez besoin

  • 2 Ned (ou 2 Ned2)

  • Une pompe à vide

  • Un gripper large

  • Les pions rouges, bleus et verts

  • Le Set Vision ainsi que le workspace pour le convoyeur

  • Le convoyeur

  • La rampe du Set Education

Installation

Matériel

Attachez l’avant du convoyeur au premier Ned/Ned2 puis branchez-y le Gripper large. Ensuite, branchez la pompe à vide au second Ned/Ned2, à l’arrière du convoyeur. Entre les deux Ned/Ned2, attachez la rampe fournie avec le Set Education et attachez les quatre marqueurs du workspace à l’avant du convoyeur, en face du premier Ned, comme sur la photo ci-dessus et la vidéo ci-dessous.

Pour finir, calibrez le workspace.

Logiciel

Avant de lancer le programme, trois variables doivent être modifiées dans le fichier robot.py :

  • front_ned_ip_address : l’adresse IP du robot placé devant

  • back_ned_ip_address : l’adresse IP du robot placé à l’arrière

  • workspace1 : le nom du workspace. Ce workspace doit exister dans la mémoire du robot.

Note

Si le workspace n’existe pas dans la mémoire de votre robot, le programme vous demandera d’en créer un. Calibrez votre workspace à votre habitude, puis pressez la touche Entrée quand vous vous trouvez au dessus d’un marqueur.

Ensuite, lancez :

python3 robot.py

Pour le premier lancement, vous devez donner les six positions au programme avec le mode apprentissage activé (appuyez sur Entrée pour confirmer la position). Faites le dans cet ordre :

  • Ned/Ned2 situé à l’avant :
    • La position d’observation depuis laquelle Ned/Ned2 est capable de voir les quatre marqueurs du workspace.

    • Une position à quelques centimètres au dessus du haut de la rampe.

    • La position depuis laquelle le robot peut lâcher le pion sur la rampe.

  • Ned/Ned2 situé à l’arrière
    • La position depuis laquelle le robot peut attraper un pion en bas de la rampe.

    • Une position à quelques centimètres au dessus de la position précédente.

    • Une position à l’arrière du convoyeur où le robot peut lâcher le pion (en face du second Ned/Ned2).

Ces cinq positions sont stockées dans un fichier nommé data.txt.

Une fois que cette étape est terminée, le convoyeur commencera a bouger, le Ned/Ned2 situé à l’avant attendra qu’un pion apparaisse dans le workspace. Une fois qu’un pion est détecté, le convoyeur est arrêté, le Ned/Ned2 à l’avant attrape le pion et le place sur la rampe, pendant que le convoyeur redémarre. Ensuite, le Ned/Ned2 situé à l’arrière attrapera un pion au bas de la rampe et la placera de nouveau sur le convoyeur.

Fonctionnement

Ned

Multithreading permet d’exécuter plusieurs parties d’un même programme de manière parallèle. Vous pouvez ensuite exécuter plusieurs instructions simultanément, dans un même process. L’échange d’informations entre les threads est rapide et facile, ce qui facilite le contrôle de plusieurs Ned/Ned2 en même temps.

Le fil d’exécution principal du programme (thread) lance un fil d’exécution pour tous les robots à contrôler. Ils communiquent entre eux par le biais de variables partagées et de la classe threading.Event(). De cette manière, on organise les interactions entre les deux robots tout en contrôlant le convoyeur et le partage de la rampe. Tous les fils d’exécution sont connectés à un robot et le contrôle. Les fils communiquent ensemble par le biais de variables situées dans la classe mère RobotsMains.

Caractéristiques

Le mode apprentissage permet de sauvegarder les positions. Afin d’obtenir de nouvelles positions au lancement, utilisez l’argument {–reset}.

Il est possible de changer les paramètres de la ligne de production :

  • La vitesse du convoyeur peut être changée avec la variable conveyor_speed dans le dossier robot.py.

  • La distance entre les pions peut être changée avec la variable conveyor_place_interval.

  • La largeur de la distribution des pions sur le convoyeur peut être changée avec la variable rand_drops.

{–reset}

python3 robot.py --reset

Supprime les positions sauvegardées et lance l’acquisition de nouvelles positions (action similaire au fait de supprimer ou renommer le fichier data.txt).

FAQ

Pourquoi le robot ne détecte pas les objets sur le convoyeur ? (Le convoyeur ne s’arrête pas).

Si le robot ne détecte pas les objets placés sur le convoyeur, cela peut être dû à la caméra du robot qui ne peut pas détecter les quatre marqueurs du workspace. Essayez alors d’ajuster la position d’observation du robot de manière à ce que le robot puisse voir les quatre marqueurs.

Le convoyeur ne s’arrête pas à la fin du programme.

Dans ce cas, relancez le programme et arrêtez le de nouveau quand le convoyeur s’arrête.Si le robot prend l’objet trop haut ou trop bas, modifiez l’offset. Si le robot a du mal à reconnaître les objets et/ou les couleurs, vous pouvez ajuster les paramètres de luminosité de la caméra.