ロボットハンド・アイ・キャリブレーション

Windows OS で hand_eye_calibration サンプルプログラムを使用してハンド・アイ・キャリブレーションを実行する方法について説明します。

HALCON サンプルプログラムの使用ガイドをお読み、サンプルプログラムを入手してください。

hand_eye_calibration フォルダには 2つのサンプルプログラムがあります。

  • determine_calibration_poses:アイ・ハンドキャリブレーションを実行する時のキャリブレーション位置姿勢を取得するために使用します。

  • perform_hand_eye_calibration:アイ・ハンドキャリブレーションを実行するために使用します。

  • 6 軸ロボットに適用します。

  • UHP カメラを使用してアイハンドキャリブレーションを実行する場合、撮影モードは必ず Camera1 を選択してください。

事前準備

HALCON サンプルプログラムを使用してアイ・ハンドキャリブレーションを実行する前に、以下のように準備してください:

  1. ロボットの精度をチェックしてください。またロボットが正常に稼働できることを確認してください。

  2. カメラの付属キャリブレーションボードを用意します。キャリブレーションボードの取り付けを行います。

  3. 2D 画像と深度画像をチェックします。

  4. カメラの内部パラメータをチェック します。

サンプルプログラムを編集する

determine_calibration_poses を使用してキャリブレーション位置姿勢を取得してから perform_hand_eye_calibration を使用してアイ・ハンドキャリブレーションを実行します。

2つのサンプルプログラムは、以下の情報が一致するようにしてください。

  • 接続されたカメラ

  • キャリブレーションボードの型番

なお、位置姿勢を取得する前に、robot_pose.json ファイルのオイラー角のタイプを指定する必要があります。

同じカメラを選択する

サンプルプログラムを実行する前に、カメラを変更する必要があります。2つのサンプルプログラムでは同じカメラを使用するように設定します。以下のように設定します:

  1. HALCON でサンプルプログラムを開きます:HALCON を起動し、サンプルプログラムを HALCON のプログラムウィンドウにドラッグします。

  2. 変数検査:MechEyeCameras ウィンドウが表示されるまでプログラムを 1 ステップずつ実行します(ツールバーのstep overボタンをクリックしてください)。

  3. このウィンドウには全ての接続可能カメラが表示されます。カメラを選択してダブルクリックし、unique_name: あるいは user_name: の後につくカメラ名をコピーします。

    camera name
    user_name はユーザーにより指定されたカメラ名です。Mech-Eye Viewer で設定できます。
  4. 以下の行で MechEyeunique_name あるいは user_name に取り替えます。

    DeviceInfo := 'MechEye'

キャリブレーションボードの型番を設定する

手順:

  1. HALCON でサンプルプログラムを開きます:HALCON を起動し、サンプルプログラムを HALCON のプログラムウィンドウにドラッグします。

  2. キャリブレーションボードの型番を設定します:デフォルトでは BDB-5 となっています。以下のコマンドで BDB-5 を対応するキャリブレーションボードの型番に取り替えます。

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

オイラー角のタイプを設定する

determine_calibration_poses を使用して取得したキャリブレーション位置姿勢を robot_pose.json ファイルに入力する必要があります。robot_pose.json ファイルではデフォルトのオイラー角のタイプは sxyz であり、単位は角度です。以下の手順を実行してオイラー角のタイプと型式を設定します:

  1. robot_pose.json ファイルを開きます。

  2. オイラー角のタイプを設定します:以下のコマンドで sxyz を使用するロボットのオイラー角のタイプに取り替えます。サンプルプログラムがサポートしているオイラー角のタイプについては、ロボットオイラー角のタイプをお読みください。

    "EulerType":"sxyz"
  3. オイラー角の単位を指定します:ラジアンを単位とするオイラー角を入力する場合、以下のコマンドに truefalse に取り替えてください。

    "FromDegree":true
  4. robot_pose.json ファイルを保存します。

キャリブレーション位置姿勢を取得する

フローチャート

extri teach flow

手順

アイ・ハンドキャリブレーションを実行するには、少なくとも 15 セットのキャリブレーション位置姿勢を取得する必要があります。以下のように取得します:

  1. ツールバーのrunボタンをクリックするか、F5を押して実行します。read_char (WindowHandle, Char, ReCode) を実行する時に停止します。手動でコマンドを入力して続けて実行します。

    カメラを接続できない場合に、そのカメラが Mech-Eye Viewer または GenICam 対応のソフトウェアに接続されているかを確認してください。
  2. ティーチングペンダントを使用してロボットを適切な位置に移動します。

    キャリブレーション位置姿勢の要件については、HALCON のヘルプ  HALCON ユーザーズマニュアルCalibration をお読みください。
  3. Pを入力してカメラを撮影させます。

    • キャリブレーションボードが視野内にない、あるいは一部だけが視野内にある場合、ロボットを移動して再度撮影してください。

    • キャリブレーションボードが全部視野内に入れたら次のステップを実行します。

  4. Tを入力し、カメラに特徴認識の結果がある画像を撮影させます。

    • キャリブレーションボードの円を認識できない場合、HALCON は画像を表示しません。ロボットを移動して再度取集してください

    • カメラがキャリブレーションボードの円を認識できた場合に、HALCON は以下のように特徴認識の結果がある画像を表示します。次のステップを実行します。

      calib sample
  5. ティーチングペンダントに表示されているロボットの位置姿勢を robot_pose.json ファイルに入力します。位置姿勢の並進の単位を mm にしてください。回転の単位(オイラー角)の単位は robot_pose.json ファイルの設定と一致させてください。

    位置姿勢をティーチングペンダントに保存します。アイ・ハンドキャリブレーションを実行するとき、ティーチングペンダントに保存された位置姿勢を使用してロボットを移動することができます。
  6. ステップ 2~5 を繰り返して位置姿勢を収集します。

  7. 少なくとも 15 セットの位置姿勢を収集した後、Qを入力して終了します。

  8. robot_pose.json ファイルのキャリブレーション位置姿勢の数を設定します:robot_pose.json ファイルを開き、以下の行で 15 を実際に収集した位置姿勢の数に取り替えます。

    "pose_count":15

アイハンドキャリブレーション実行する

ロボットキャリブレーション位置姿勢を取得したあと、perform_hand_eye_calibration サンプルプログラムを実行してアイ・ハンドキャリブレーションを開始します。

フローチャート

extri calib flow

カメラの取り付け方法を確認する

キャリブレーションを開始する前に、カメラの取り付け方法を確認してください。

デフォルトでは Eye in Hand となっています。Eye to Hand の場合に、以下の行で EyeInHandEyeToHand に取り替えます。

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

座標系を切り替える

サンプルプログラムには、カメラから出力される点群の座標系を切り替えるコマンドがあります。このコマンドを実行することでロボット座標系における点群を出力することが可能です。

デフォルトでは座標系を切り替えません。ロボット座標系に切り替えたい場合、captureTranformedPointCloud 関数で以下のコマンドの falsetrue に取り替えてください。

set_framegrabber_param (AcqHandle,'Scan3dCoordinateTransformEnable',false)

手順

以下の手順を実行します:

  1. ツールバーのrunボタンをクリックするか、F5を押して実行します。stop の行では停止します。

  2. ロボットを robot_pose.json ファイルにあるキャリブレーション位置姿勢に移動します。

    robot_pose ファイルの順序に沿ってロボットを移動します。そうしないと外部パラメータを計算できないことがあります。
  3. ツールバーのrunボタンをクリックするか、F5を押して実行し、カメラで画像を撮影します。

  4. 画像を収集したあと、制御変数CollectResult の値を確認します。

    • SUCCESS の場合、次のステップを実行します。

    • エラーメッセージが表示される場合、エラーコードに基づいてトラブルシューティングを行って再度キャリブレーション位置姿勢を取得します。

  5. Move the robot to the next calibration pose というメッセージが表示されると、ステップ 2~3 を繰り返します。

    ロボットが robot_pose.json ファイルにある位置姿勢に全部到達したあとサンプルプログラムを実行した場合、外部パラメータを自動的に計算します。
  6. 制御変数CalibResult の値を確認します。

    • SUCCESS と表示された場合、アイ・ハンドキャリブレーションが正常に実行されました。サンプルプログラムがあるフォルダで外部パラメータファイル Extrinsics.txt と座標系変換済みの点群を確認してください。

    • エラーメッセージが表示される場合、エラーコードに基づいてトラブルシューティングを行って再度キャリブレーション位置姿勢を取得します。

ロボットオイラー角のタイプ

キャリブレーションサンプルプログラムは、以下のオイラー角タイプと四元数の転換をサポートします。

入力順序 オイラー角のタイプ ロボットブランド

Z-Y'-Z"/OAT

rzyz

Kawasaki

Z-Y'-X"/yaw, pitch, roll

rzyx

ABB

KUKA

X-Y-Z/WPR

sxyz

FANUC

YASKAWA

ROKAE

UR

X-Y'-Z"

rxyz

/

Z-X'-Z"

rzxz

/

  • オイラー角タイプ一致してもロボットオイラー角の表示順所が異なることがあります。以上の順序に従ってオイラー角を入力してください。

  • ほかのオイラー角タイプのロボットを使用する場合、手動で転換を追加してください。perform_hand_eye_calibration サンプルプログラムの euler_to_quad 関数に転換を追加してください。

キャリブレーションパラメータについて

ここではアイ・ハンドキャリブレーションのために使用するパラメータについて説明します。

BoardType

使用するキャリブレーションボードの型番を設定します。

オプションの説明:

オプション 説明

BDB-5

キャリブレーションボードとカメラとの推奨距離:< 0.6m

BDB-6

キャリブレーションボードとカメラとの推奨距離:0.6~1.5m

BDB-7

キャリブレーションボードとカメラとの推奨距離:> 1.5m

OCB-005

高い精度が求められ、Eye to Hand 取り付け方法の現場にのみ使用する

OCB-010

OCB-015

OCB-020

CGB-020

キャリブレーションボードとカメラとの推奨距離:< 0.6m

CGB-035

キャリブレーションボードとカメラとの推奨距離:0.6~1.5m

CGB-050

キャリブレーションボードとカメラとの推奨距離:> 1.5m

ExtrinErrCode

設定できないパラメータ。アイ・ハンドキャリブレーション実行時のステータスコードとエラーメッセージを確認できます。

ステータスコード 説明

SUCCESS

実行成功

POSE_INVALID

間違っている位置姿勢の形式。四元数を入力してください

IMAGE2D_EMPTY

無効な 2D 画像

FIND_CORNERS_FAIL

2D 画像の特徴認識に失敗。2D 画像関連パラメータ調整を調整して 2D 画像を再度取得してください

DEPTH_EMPTY

無効な深度画像

CORNERS_3D_INVALID

深度画像の特徴の認識に失敗。3D パラメータを調整して深度画像を再度取得してください

POSES_INSUFFICIENT

位置姿勢の数は足りない。少なくとも 15 セットの位置姿勢を入力してください

Mech-Mindは、お客様のプライバシーを重視しています

このサイトでは最高の体験を提供するために Cookie を使用しています。サイトの閲覧を続ける場合、Cookie の使用に同意したことになります。「拒否する」を選択すると、このサイトを訪れた際に追跡や記憶が行われないように単独の Cookie が使用されます。