HALCON——アイ・ハンドキャリブレーション
本節では、Mech-Mind が提供するサンプルプログラムを Windows オペレーティングシステムで使用してアイ・ハンドキャリブレーションを実行する方法について説明します。Mech-Mind は以下の 2つのサンプルプログラムを提供します。
-
determine_calibration_poses:アイ・ハンドキャリブレーションを実行する時のキャリブレーション位置姿勢を取得するために使用します。
-
perform_hand_eye_calibration:アイ・ハンドキャリブレーションを実行するために使用します。
|
事前準備
HALCON を使用してアイ・ハンドキャリブレーションを実行する前に、以下のように準備してください:
-
ロボットの精度をチェックしてください。またロボットが正常に稼働できることを確認してください。
-
カメラの付属キャリブレーションボードを用意します。キャリブレーションボードの取り付けを行います。
-
Mech-Eye SDK をダウンロードしてインストールします。
-
2D 画像と深度画像をチェックします。
-
カメラの内部パラメータをチェック します。
-
HALCON サンプルプログラムをダウンロードします。 をクリックすればいいです。
サンプルプログラムを編集する
determine_calibration_poses を使用してキャリブレーション位置姿勢を取得してから perform_hand_eye_calibration を使用してアイ・ハンドキャリブレーションを実行します。
2つのサンプルプログラムは、以下の情報が一致するようにしてください。
-
接続されたカメラ
-
キャリブレーションボードの型番
なお、位置姿勢を取得する前に、robot_pose.json ファイルのオイラー角のタイプを指定する必要があります。
同じカメラを選択する
サンプルプログラムを実行する前に、カメラを変更する必要があります。2つのサンプルプログラムでは同じカメラを使用するように設定します。以下のように設定します:
-
HALCON でサンプルプログラムを開きます:HALCON を起動し、サンプルプログラムを HALCON のプログラムウィンドウにドラッグします。
-
プログラムウィンドウで info_framegrabber の行を選択してツールバーのを押すか、キーボードのF6をクリックして実行します。
-
制御変数の DeviceInfos をダブルクリックして接続可能なカメラを表示します。
-
カメラを選択してダブルクリックし、unique_name: あるいは user_name: の後につくカメラ名をコピーします。
user_name はユーザーにより指定されたカメラ名です。Mech-Eye Viewer で設定できます。 -
以下の行で MechEye を unique_name あるいは user_name に取り替えます。
DeviceInfo := 'MechEye'
キャリブレーションボードの型番を設定する
手順:
-
HALCON でサンプルプログラムを開きます:HALCON を起動し、サンプルプログラムを HALCON のプログラムウィンドウにドラッグします。
-
キャリブレーションボードの型番を設定します:デフォルトでは BDB-5 となっています。以下のコマンドで BDB-5 を対応するキャリブレーションボードの型番に取り替えます。
set_framegrabber_param (AcqHandle, 'BoardType', 'BDB-5')
オイラー角のタイプを設定する
determine_calibration_poses を使用して取得したキャリブレーション位置姿勢を robot_pose.json ファイルに入力する必要があります。robot_pose.json ファイルではデフォルトのオイラー角のタイプは sxyz であり、単位は角度です。以下の手順を実行してオイラー角のタイプと型式を設定します:
-
robot_pose.json ファイルを開きます。
-
オイラー角のタイプを設定します:以下のコマンドで sxyz を使用するロボットのオイラー角のタイプに取り替えます。サンプルプログラムがサポートしているオイラー角のタイプについては、ロボットオイラー角のタイプをお読みください。
"EulerType":"sxyz"
-
オイラー角の単位を指定します:ラジアンを単位とするオイラー角を入力する場合、以下のコマンドに true を false に取り替えてください。
"FromDegree":true
-
robot_pose.json ファイルを保存します。
キャリブレーション位置姿勢を取得する
手順
アイ・ハンドキャリブレーションを実行するには、少なくとも 15 セットのキャリブレーション位置姿勢を取得する必要があります。以下のように取得します:
-
ツールバーのボタンをクリックするか、F5を押して実行します。read_char (WindowHandle, Char, ReCode) を実行する時に停止します。手動でコマンドを入力して続けて実行します。
カメラを接続できない場合に、そのカメラが Mech-Eye Viewer または GenICam 対応のソフトウェアに接続されているかを確認してください。 -
ティーチングペンダントを使用してロボットを適切な位置に移動します。
キャリブレーション位置姿勢の要件については、HALCON の の Calibration をお読みください。 -
Pを入力してカメラを撮影させます。
-
キャリブレーションボードが視野内にない、あるいは一部だけが視野内にある場合、ロボットを移動して再度撮影してください。
-
キャリブレーションボードが全部視野内に入れたら次のステップを実行します。
-
-
Tを入力し、カメラに特徴認識の結果がある画像を撮影させます。
-
キャリブレーションボードの円を認識できない場合、HALCON は画像を表示しません。ロボットを移動して再度させてください。
-
カメラがキャリブレーションボードの円を認識できた場合に、HALCON は以下のように特徴認識の結果がある画像を表示します。次のステップを実行します。
-
-
ティーチングペンダントに表示されているロボットの位置姿勢を robot_pose.json ファイルに入力します。位置姿勢の並進の単位を mm にしてください。回転の単位(オイラー角)の単位は robot_pose.json ファイルの設定と一致させてください。
位置姿勢をティーチングペンダントに保存します。アイ・ハンドキャリブレーションを実行するとき、ティーチングペンダントに保存された位置姿勢を使用してロボットを移動することができます。 -
ステップ 2~5 を繰り返して位置姿勢を収集します。
-
少なくとも 15 セットの位置姿勢を収集した後、Qを入力して終了します。
-
robot_pose.json ファイルのキャリブレーション位置姿勢の数を設定します:robot_pose.json ファイルを開き、以下の行で 15 を実際に収集した位置姿勢の数に取り替えます。
"pose_count":15
アイハンドキャリブレーション実行する
ロボットキャリブレーション位置姿勢を取得したあと、perform_hand_eye_calibration サンプルプログラムを実行してアイ・ハンドキャリブレーションを開始します。
カメラの取り付け方法を確認する
キャリブレーションを開始する前に、カメラの取り付け方法を確認してください。
デフォルトでは Eye in Hand となっています。Eye to Hand の場合に、以下の行で EyeInHand を EyeToHand に取り替えます。
set_framegrabber_param (AcqHandle, 'CalibrationType', 'EyeInHand')
座標系を切り替える
サンプルプログラムには、カメラから出力される点群の座標系を切り替えるコマンドがあります。このコマンドを実行することでロボット座標系における点群を出力することが可能です。
デフォルトでは座標系を切り替えません。ロボット座標系に切り替えたい場合、captureTranformedPointCloud 関数で以下のコマンドの false を true に取り替えてください。
set_framegrabber_param (AcqHandle,'Scan3dCoordinateTransformEnable',false)
手順
以下の手順を実行します:
-
ツールバーのボタンをクリックするか、F5を押して実行します。stop の行では停止します。
-
ロボットを robot_pose.json ファイルにあるキャリブレーション位置姿勢に移動します。
robot_pose ファイルの順序に沿ってロボットを移動します。そうしないと外部パラメータを計算できないことがあります。 -
ツールバーのボタンをクリックするか、F5を押して実行し、カメラで画像を撮影します。
-
画像を収集したあと、制御変数の CollectResult の値を確認します。
-
SUCCESS の場合、次のステップを実行します。
-
エラーメッセージが表示される場合、エラーコードに基づいてトラブルシューティングを行って再度キャリブレーション位置姿勢を取得します。
-
-
Move the robot to the next calibration pose というメッセージが表示されると、ステップ 2~3 を繰り返します。
ロボットが robot_pose.json ファイルにある位置姿勢に全部到達したあとサンプルプログラムを実行した場合、外部パラメータを自動的に計算します。 -
制御変数の 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 |
/ |
|
キャリブレーションパラメータについて
ここではアイ・ハンドキャリブレーションのために使用するパラメータについて説明します。
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 セットの位置姿勢を入力してください |