Calibration œil-main
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.
|
Préparation
Avant d’utiliser les exemples HALCON pour effectuer la calibration œil-main, effectuez les étapes suivantes:
-
La précision du robot est suffisante et le robot fonctionne correctement.
-
Préparez la plaque de calibration fournie avec la caméra, et installer la plaque de calibration.
-
Assurez-vous que la qualité de l’image 2D et de la carte de profondeur répond aux exigences.
-
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:
-
Ouvrez l’exemple dans HDevelop : ouvrez HDevelop, puis faites glisser l’exemple dans HDevelop.
-
Avancez pas à pas dans le programme (cliquez de façon répétée sur le bouton
de la barre d’outils), jusqu’à ce que la fenêtre Inspection des variables : MechEyeCamers apparaisse. -
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:.
user_name est le nom personnalisé de la caméra. Vous pouvez personnaliser le nom de la caméra dans Mech-Eye Viewer. -
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:
-
Ouvrir l’exemple dans HDevelop : ouvrez HDevelop et faites glisser l’exemple dans HDevelop.
-
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:
-
Ouvrez le fichier JSON robot_pose.
-
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" -
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 -
Enregistrez le fichier JSON robot_pose.
Déterminer les poses de calibration
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:
-
Exécutez l’exemple en cliquant sur
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. -
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. -
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.
-
-
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.
-
-
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. -
Répétez les étapes 2 à 5 pour déterminer davantage de poses de calibration.
-
Après avoir déterminé au moins 15 poses de calibration, appuyez sur Q pour quitter l’exemple.
-
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.
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:
-
Exécutez l’exemple en cliquant sur
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. -
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. -
Exécutez l’exemple en cliquant sur
dans la barre d’outils ou en appuyant sur la touche F5. La caméra va acquérir des données. -
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.
-
-
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. -
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 |
/ |
|
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. |