Calibration œil-main

Vous consultez actuellement la documentation pour la dernière version (2.5.4). Pour accéder à une autre version, cliquez sur le bouton "Changer de version" situé dans le coin supérieur droit de la page.

■ Si vous n’êtes pas sûr de la version du produit que vous utilisez, veuillez contacter le support technique Mech-Mind pour obtenir de l’aide.

Ce sujet présente la manière d’effectuer une calibration œil-main avec les exemples hand_eye_calibration sous Windows.

Veuillez consulter Guide d’utilisation des exemples HALCON pour obtenir les exemples et vérifier les prérequis d’utilisation des exemples.

Le dossier hand_eye_calibration contient les deux exemples suivants:

  • determine_calibration_poses: utilisé pour déterminer les poses de calibration utilisées pendant la calibration œil-main.

  • perform_hand_eye_calibration: utilisé pour effectuer la calibration œil-main.

  • Actuellement, les exemples ne prennent en charge que la calibration œil-main des robots 6 axes.

  • Pour la série UHP, afin d’effectuer la calibration œil-main, le paramètre Capture Mode doit être réglé sur Camera1.

Préparation

Avant d’utiliser les exemples HALCON pour effectuer la calibration œil-main, effectuez les étapes suivantes:

  1. La précision du robot est suffisante et le robot fonctionne correctement.

  2. Préparez la plaque de calibration fournie avec la caméra, et installer la plaque de calibration.

  3. Assurez-vous que la qualité de l’image 2D et de la carte de profondeur répond aux exigences.

  4. Assurez-vous que les paramètres intrinsèques de la caméra sont exacts.

Modifier les exemples

Après avoir déterminé les poses de calibration avec l’exemple determine_calibration_poses, vous utiliserez l’exemple perform_hand_eye_calibration pour effectuer la calibration œil-main.

Les informations suivantes doivent être identiques dans les deux exemples:

  • La caméra à connecter

  • Modèle de plaque de calibration

En outre, la convention des angles d’Euler dans le fichier JSON robot_pose doit être définie avant de déterminer les poses de calibration.

Sélectionner la caméra

Avant d’exécuter les exemples, vous devez définir dans l’exemple la caméra à connecter afin de vous assurer que les deux exemples se connectent à la même caméra. Procédez comme suit:

  1. Ouvrez l’exemple dans HDevelop : ouvrez HDevelop, puis faites glisser l’exemple dans HDevelop.

  2. Avancez pas à pas dans le programme (cliquez de façon répétée sur le bouton step over de la barre d’outils), jusqu’à ce que la fenêtre Inspection des variables : MechEyeCamers apparaisse.

  3. Cette fenêtre affiche toutes les caméras disponibles. Double-cliquez sur la caméra à laquelle vous souhaitez vous connecter, puis copiez le nom après unique_name: ou user_name:.

    camera name
    user_name est le nom personnalisé de la caméra. Vous pouvez personnaliser le nom de la caméra dans Mech-Eye Viewer.
  4. Repérez la ligne suivante et remplacez MechEye par le unique_name ou user_name copié.

    DeviceInfo := 'MechEye'

Définir le modèle de plaque de calibration

Suivez ces étapes pour définir le modèle de plaque de calibration:

  1. Ouvrir l’exemple dans HDevelop : ouvrez HDevelop et faites glisser l’exemple dans HDevelop.

  2. Définir le modèle de plaque de calibration : le modèle par défaut est BDB-5. Si vous utilisez un autre modèle, repérez l’opérateur suivant et remplacez BDB-5 par le modèle de plaque de calibration utilisé.

    set_framegrabber_param (AcqHandle, 'BoardType', 'BDB-5')

Définir la convention et l’unité des angles d’Euler

Les poses de calibration déterminées à l’aide de l’exemple exemple determine_calibration_poses doivent être saisies dans le fichier JSON robot_pose. La convention des angles d’Euler par défaut dans ce fichier est sxyz, et l’unité par défaut est le degré. Suivez ces étapes pour définir la convention des angles d’Euler:

  1. Ouvrez le fichier JSON robot_pose.

  2. Définir la convention des angles d’Euler : repérez la ligne suivante et remplacez sxyz par la convention des angles d’Euler du robot utilisé. Pour les conventions d’angles d’Euler déjà prises en charge dans l’exemple, veuillez vous référer à Conventions d’angles d’Euler prises en charge.

    "EulerType":"sxyz"
  3. Définir l’unité des angles d’Euler : si vous devez saisir des angles d’Euler en radians, repérez la ligne suivante et remplacez true par false.

    "FromDegree":true
  4. Enregistrez le fichier JSON robot_pose.

Déterminer les poses de calibration

Flux de travail

extri teach flow

Instructions

Avant d’effectuer la calibration œil-main, vous devez déterminer au moins 15 poses de calibration. Suivez ces étapes pour déterminer les poses de calibration:

  1. Exécutez l’exemple en cliquant sur run dans la barre d’outils ou en appuyant sur la touche F5. Lorsque l’exemple atteint la ligne read_char (WindowHandle, Char, ReCode), il se met en pause et attend une commande aux étapes suivantes.

    Si la caméra ne peut pas être connectée, veuillez vérifier si elle est déjà connectée par Mech-Eye Viewer ou un autre client GenICam.
  2. Déplacez le robot vers une pose de calibration candidate à l’aide du pupitre de programmation (teach pendant).

    Les poses de calibration doivent satisfaire certains critères. La Référence HALCON fournit des indications : cliquez sur menu: Aide[Référence HALCON] dans HDevelop et consultez le chapitre Calibration.
  3. Appuyez sur P pour obtenir l’image 2D depuis la caméra.

    • Si la plaque de calibration n’est pas entièrement capturée, déplacez le robot et obtenez de nouveau l’image 2D.

    • Si la plaque de calibration entière est capturée, passez à l’étape suivante.

  4. Appuyez sur T pour obtenir l’image 2D contenant les résultats de détection des caractéristiques.

    • Si la caméra n’a pas détecté les cercles sur la plaque de calibration, aucune image ne sera affichée dans HDevelop. Dans ce cas, déplacez le robot et obtenez à nouveau l’image 2D originale ainsi que l’image 2D contenant les résultats de détection des caractéristiques.

    • Si la caméra détecte les cercles sur la plaque de calibration, une image 2D contenant les résultats de détection des caractéristiques (comme illustré ci-dessous) sera affichée dans HDevelop. Veuillez passer à l’étape suivante.

      calib sample
  5. Vérifiez le pupitre de programmation du robot et saisissez la pose actuelle du robot dans le fichier JSON robot_pose. La composante translationnelle de la pose doit être en mm, et l’unité de la composante rotationnelle (angles d’Euler) doit correspondre au paramétrage du fichier JSON robot_pose.

    Il est recommandé d’enregistrer la pose sur le pupitre de programmation. Lors de la calibration œil-main, vous pourrez utiliser les poses enregistrées pour déplacer le robot.
  6. Répétez les étapes 2 à 5 pour déterminer davantage de poses de calibration.

  7. Après avoir déterminé au moins 15 poses de calibration, appuyez sur Q pour quitter l’exemple.

  8. Définissez le nombre de poses de calibration dans le fichier JSON robot_pose : ouvrez le fichier JSON robot_pose et repérez la ligne suivante. Remplacez 15 par le nombre réel de poses de calibration déterminées.

    "pose_count":15

Effectuer la calibration œil-main

Après avoir déterminé les poses de calibration du robot, vous pouvez effectuer la calibration œil-main en exécutant l’exemple perform_hand_eye_calibration.

Flux de travail

extri calib flow

Définir la méthode de montage de la caméra

Avant d’effectuer la calibration œil-main, veuillez définir la méthode de montage de la caméra dans l’exemple.

La méthode de montage par défaut est Eye in Hand. Si votre caméra est montée en mode Eye to Hand, repérez l’opérateur suivant et remplacez EyeInHand par EyeToHand.

set_framegrabber_param (AcqHandle, 'CalibrationType', 'EyeInHand')

Changer le repère de référence

L’exemple contient un opérateur qui peut basculer le repère de référence dans lequel le nuage de points est émis par la caméra.

Le réglage par défaut ne change pas le repère de référence. Si vous souhaitez passer au repère de référence du robot, repérez l’opérateur suivant dans la procédure captureTranformedPointCloud et remplacez false par true.

set_framegrabber_param (AcqHandle,'Scan3dCoordinateTransformEnable',false)

Instructions

Suivez ces étapes pour effectuer la calibration œil-main:

  1. Exécutez l’exemple en cliquant sur run dans la barre d’outils ou en appuyant sur la touche F5. L’exemple s’arrêtera lorsqu’il atteindra l’opérateur d’arrêt.

  2. Déplacez le robot vers la pose de calibration indiquée dans le fichier JSON robot_pose.

    Veuillez déplacer le robot vers les poses de calibration exactement dans l’ordre où elles sont écrites dans le fichier JSON. Sinon, le calcul ultérieur des paramètres extrinsèques échouera.
  3. Exécutez l’exemple en cliquant sur run dans la barre d’outils ou en appuyant sur la touche F5. La caméra va acquérir des données.

  4. Dans la zone Control Variables, vérifiez la valeur de CollectResult.

    • Si SUCCESS est affiché, passez à l’étape suivante.

    • Si une erreur est affichée, veuillez dépanner en fonction du code d’erreur affiché, puis déterminez à nouveau les poses de calibration.

  5. Un message indiquant Move the robot to the next calibration pose s’affichera sur l’image. Veuillez répéter les étapes 2 à 3.

    Après que le robot s’est déplacé vers toutes les poses de calibration du fichier JSON robot_pose, lorsque vous exécutez à nouveau l’exemple, les paramètres extrinsèques seront calculés.
  6. Dans la zone Control Variables, vérifiez la valeur de CalibResult.

    • Si SUCCESS est affiché, la calibration œil-main a réussi. Dans le dossier où l’exemple est enregistré, vous trouverez le fichier TXT ExtrinsicParameters qui contient les paramètres extrinsèques et le nuage de points obtenu.

    • Si une erreur est affichée, veuillez dépanner en fonction du code d’erreur affiché, puis déterminez à nouveau les poses de calibration.

Conventions d’angles d’Euler prises en charge

La conversion des conventions d’angles d’Euler suivantes en quaternions est déjà prise en charge dans l’exemple.

Représentation courante Convention des angles d’Euler Marque de robot

Z-Y'-Z"/OAT

rzyz

Kawasaki

Z-Y'-X"/lacet, tangage, roulis

rzyx

ABB

KUKA

X-Y-Z/WPR

sxyz

FANUC

YASKAWA

ROKAE

UR

X-Y'-Z"

rxyz

/

Z-X'-Z"

rzxz

/

  • Même en utilisant la même convention d’angles d’Euler, différentes marques de robots peuvent afficher les angles d’Euler dans des ordres différents. Veuillez saisir les angles d’Euler dans l’ordre indiqué dans le tableau ci-dessus.

  • Si la convention d’angles d’Euler utilisée par votre robot ne figure pas dans le tableau ci-dessus, vous devez ajouter la conversion de cette convention d’angles d’Euler vers les quaternions. Veuillez vous référer au code de la procédure euler_to_quad dans l’exemple perform_hand_eye_calibration et ajouter votre propre conversion.

Paramètres de calibration œil-main

Cette section présente les paramètres utilisés pendant la calibration œil-main.

BoardType

Ce paramètre sert à définir le modèle de la plaque de calibration utilisée.

Liste des valeurs et descriptions :

Valeur Description

BDB-5

La distance recommandée entre la plaque de calibration et la caméra est < 0,6 m

BDB-6

La distance recommandée entre la plaque de calibration et la caméra est 0,6–1,5 m

BDB-7

La distance recommandée entre la plaque de calibration et la caméra est > 1,5 m

OCB-005

Uniquement utilisé pour les projets Eye-to-Hand avec des exigences élevées de précision

OCB-010

OCB-015

OCB-020

CGB-020

La distance recommandée entre la plaque de calibration et la caméra est < 0,6 m

CGB-035

La distance recommandée entre la plaque de calibration et la caméra est 0,6–1,5 m

CGB-050

La distance recommandée entre la plaque de calibration et la caméra est > 1,5 m

ExtrinErrCode

Ce paramètre en lecture seule permet de vérifier les codes d’état renvoyés pendant le processus de calibration œil-main.

Code d’état Description

SUCCESS

Exécution réussie.

POSE_INVALID

Le format de la pose est incorrect. Veuillez saisir des quaternions.

IMAGE2D_EMPTY

L’image 2D est invalide.

FIND_CORNERS_FAIL

La détection des caractéristiques sur l’image 2D a échoué. Veuillez ajuster les paramètres de l’image 2D.

DEPTH_EMPTY

La carte de profondeur est invalide.

CORNERS_3D_INVALID

La détection des caractéristiques sur la carte de profondeur a échoué. Veuillez ajuster les paramètres de la carte de profondeur.

POSES_INSUFFICIENT

Le nombre de poses saisies est insuffisant. Veuillez saisir au moins 15 poses de calibration.

Cette page est-elle utile ?

Veuillez nous indiquer comment améliorer :

Nous accordons de l’importance à votre vie privée

Nous utilisons des cookies pour vous offrir la meilleure expérience possible sur notre site web. En continuant à utiliser le site, vous reconnaissez accepter l’utilisation des cookies. Si vous refusez, un cookie unique sera utilisé pour garantir que vous ne soyez pas suivi ou reconnu lors de votre visite sur ce site.