Exemple de programme 8.1
Type d’exemple :
Utiliser des tampons d’image et la propriété ImageOp SubtractAbs
Configuration
- Nombre de robots : 1
- Nombre de distributeurs : 1
- Nombre de types de pièces sur le distributeur : 1
- Nombre de positionnements : 1
- Orientation de la caméra : caméra fixe et orientée vers le bas au-dessus du distributeur n° 1
Description
Même lorsque le rétroéclairage est activé, des ombres peuvent apparaître dans les coins du plateau. Si la fenêtre de recherche du Blob de la pièce inclut les coins et si les seuils du Blob ne sont pas correctement réglés, les ombres peuvent alors être faussement identifiées comme des pièces.
La séquence Part Blob sert à détecter des pièces individuelles ou un groupe de pièces. Si le Blob de la pièce détecte les ombres comme des pièces, le système prendra alors une mauvaise décision quant à la manière de vibrer ou la fonction de rappel PF_Control risque de ne pas activer la trémie, car le système estimera qu’il y a suffisamment de pièces dans le plateau.
Voici un exemple illustrant comment les ombres dans les coins peuvent être confondues avec des pièces de la structure.
Un objet de vision ImageOp peut être ajouté à la séquence Part Blob pour aider à résoudre ce problème. L’objet ImageOp utilisera l’opération SubtractAbs. L’opération SubtractAbs affiche la différence entre deux tampons d’image. Dans cet exemple, la propriété ImageBuffer1 correspondra à un fichier image représentant le distributeur vide, tandis que la propriété ImageBuffer2 correspondra à l’image acquise par la caméra (la valeur « 0 » correspond au tampon d’image de la caméra). Une fois les tampons d’image soustraits, le distributeur sera effectivement supprimé de l’image.
Voici les étapes.
Créez une nouvelle séquence de vision et nommez-la « Part Blob ».
Allumez le rétroéclairage du distributeur et retirez toutes les pièces présentes dans le plateau du distributeur.
Cliquez sur le bouton « Click to Save » (Cliquer pour enregistrer) de la propriété SaveImage du Blob de la pièce. Dans cet exemple, nous allons nommer le fichier « Empty IF-240 ». L’image du fichier est présentée ci-dessous.
Faites glisser et déposez un objet de vision ImageOp depuis la barre d’outils de Vision Guide.
Redimensionnez l’objet ImageOp pour qu’il couvre l’intégralité du champ de vision de la caméra.
Modifiez la propriété Operation de l’objet ImageOp sur la valeur « SubtractAbs ».
Modifiez la propriété ImageBuffer1 de l’objet ImageOp sur la valeur « File ».
Cliquez sur le bouton ImageBufferFile et sélectionnez le fichier précédemment enregistré sous le nom « Empty IF-240 ».
Ajoutez un Blob à partir de la barre d’outils de Vision Guide. Redimensionnez la fenêtre de recherche de Blob afin qu’elle soit plus grande que le plateau du distributeur.
Modifiez la propriété ThresholdColor du Blob sur la valeur « White ».
Placez une pièce sur le plateau et cliquez sur le bouton Histogram (Histogramme) dans la barre d’outils de Vision Guide.
Faites glisser la barre rouge ThresholdHigh de l’histogramme jusqu’à ce que la pièce soit correctement binarisée. Cliquez sur Update (Mettre à jour) si nécessaire, puis sur le bouton OK dans la fenêtre de l’histogramme une fois l’opération terminée.
Désormais, lorsque la séquence Part Blob est exécutée, l’image du distributeur sera entièrement supprimée. La pièce apparaîtra en noir sur un fond entièrement blanc. Le distributeur a été efficacement masqué dans la séquence Part Blob.
Sélectionnez « PartBlob » comme séquence de vision Blob pour la pièce souhaitée dans le menu Epson RC+ 8.0, sous [Tools] (Outils) - [Part Feeding] - page Vision.
Aucun code d’alimentation des pièces spécifique n’est requis.
Exemple de code
Main.prg
Function main
If Motor = Off Then
Motor On
EndIf
Power Low
Jump Park
PF_Start 1
Fend
PartFeeding.prg
Function PF_Robot(PartID As Integer) As Integer
Do While PF_QueLen(PartID) > 0
P0 = PF_QueGet(PartID)
Jump P0
On Gripper; Wait 0.2
Jump Place
Off Gripper; Wait 0.2
PF_QueRemove PartID
If PF_IsStopRequested(PartID) = True Then
Exit Do
EndIf
Loop
PF_Robot = PF_CALLBACK_SUCCESS
Fend