ETH_1つのカメラ_到達できない移動経路点がある
|
Mech-Visionプロジェクトをインポート
Pythonスクリプトをソリューションにコピー
ドリフト自動補正ソリューションのコアアルゴリズム部分はPythonスクリプトで実装されており、主に「ドリフト補正モデルの生成」、「位置姿勢のドリフト補正」、「フォルダ内の位置姿勢データの読み込み」機能が含まれています。
Mech-Visionサンプルプロジェクトに保存されているPythonスクリプトの resource/python_script
フォルダ全体を、現在の生産ソリューションにコピーする必要があります(同じディレクトリ構造で保存することを推奨します)。
Pythonスクリプトとファイルの読み書きを行うため、ファイル名変更を行わないようにご注意ください。 |
キャリブレーションボール関連のプロジェクトをワーク認識ソリューションにコピー
Mech-Visionのサンプルソリューションから「Vis_CaptureCalibrationSphere」と「Vis_ComputeDriftCorrectionModel」の2つのプロジェクトを現在の生産ソリューションにコピーします。
-
Vis_CaptureCalibrationSphere:キャリブレーションボールの位置姿勢を取得するプロジェクト。
-
Vis_ComputeDriftCorrectionModel:キャリブレーションボール情報に基づいてドリフト補正モデルを生成するプロジェクト。
プロジェクトのパラメータを調整
プロジェクト1:Vis_CaptureCalibrationSphere
-
必須の調整項目
-
カメラから画像を取得 ステップで、「カメラを選択」と「コンフィグパラメータグループ」を調整し、現在のカメラに正常に接続します。
-
点群前処理(Point Cloud Preprocessing) ステップの組合せをダブルクリックしてその中身に入ります。3D ROI内の点群を抽出 ステップで、3D ROIの位置とサイズを調整し、すべてのキャリブレーションボールの移動経路点が3D ROI内に収まるようにします。
-
-
オプションの調整項目
-
キャリブレーションボールのサイズがサンプルプロジェクトと異なる場合
-
「ステップの組合せ(Locate Calibration Sphere)」をダブルクリックしてその中身に入ります。
-
3D位置姿勢高精度推定 ステップで「モデル選択」パラメータを調整します。
-
続いて 「ステップの組合せ(Locate Calibration Sphere with 3D Matching)」 をダブルクリックしてその中身に入ります。「3D位置姿勢低精度推定/3D位置姿勢高精度推定」ステップで「モデル選択」パラメータを調整します。サンプルプロジェクトでは「直径100mm」、「直径60mm」、「直径25.4mm」のキャリブレーションボールモデルが提供されています。それ以外のキャリブレーションボールを使用する場合は、Mech-Mindテクニカルサポートにお問い合わせください。
-
-
「ステップの組合せ(Extract Spherical Cap Cloud)」の中身に入り、円柱以内の点群を抽出 ステップで「最大Z値」と「外円半径」の2つのパラメータを調整します。
-
最大Z値:キャリブレーションボールの直径に設定します。
-
外円半径:キャリブレーションボールの直径の5分の4に設定します。
-
-
-
パラメータレシピの調整
-
説明:このプロジェクトには設定済みのパラメータレシピが含まれています。各経路点におけるキャリブレーションボールの位置姿勢を保存する際のファイル名の接頭辞を切り替えるために使用されます。ファイル名の接頭辞には、現在取得しているキャリブレーションボールの経路点に対応する層番号と層内番号が含まれています。このソリューションでは、N * 9の経路点を設定し、Nは層数を示します。例えば、「spherePose_3_9」は、3層目の9番目に位置するキャリブレーションボールの経路点を意味します。
-
このプロジェクトには、5層のキャリブレーションボール経路点のパラメータレシピが事前に設定されています。キャリブレーションボールの経路点が5層以下である場合、レシピの変更は必要ありません。5層以上の場合は、ルールに従ってレシピを追加するだけで対応可能です。
-
-
プロジェクト2:Vis_ComputeDriftCorrectionModel
-
必須の調整項目:特に調整不要です。
-
オプションの調整項目
-
「Vis_CaptureCalibrationSphere」プロジェクト名や、その中のキャリブレーションボールの位置姿勢を保存するフォルダ名を変更した場合
-
「Vis_ComputeDriftCorrectionModel」プロジェクトの「ラベルリストをクイック作成(Folder Path of Baseline Sphere Pose)」および「ラベルリストをクイック作成(Folder Path of Sphere Pose After Drift)」の2つのステップで、「文字列のリスト」パラメータを対応して変更します。このステップは、キャリブレーションボールの位置姿勢ファイルパスを設定し、パラメータの初期値は「../../Vis_CaptureCalibrationSphere/spherePose_**」です。
-
-
Pythonスクリプトが推奨パス
resource/python_script
に保存されていない場合-
「Pythonを使用して結果を計算(Read the Pose from the Pose Files in the Folder1/2)」の2つのステップで、「スクリプトファイルのパス」パラメータを対応して変更します。
-
「Pythonを使用して結果を計算(Compute Drift Correction Model)」ステップで、「スクリプトファイルのパス」パラメータも対応して変更します。
-
-
ワーク認識プロジェクトに「ドリフト補正」ステップの組合せを追加
「Vis_LocateWorkpiece」プロジェクトから「ステップの組合せ(Correct Drift)」をワーク認識プロジェクトにコピーします。このステップの組合せは通常、3Dマッチング処理後のワークの幾何学的中心の位置姿勢に対して補正を行います。以下の点に注意してください。
|
-
オプションの調整項目
-
「Vis_ComputeDriftCorrectionModel」プロジェクトで保存されている補正モデルのパスを変更した場合:「ステップの組合せ(Correct Drift)」をダブルクリックしてその中身に入り、「ファイルから位置姿勢を読み取る(Read Drift Correction Model)」ステップの「位置姿勢のファイルパス」パラメータを対応して変更します。
-
Pythonスクリプトが推奨パス
resource/python_script
に保存されていない場合:「ステップの組合せ(Correct Drift)」をダブルクリックしてその中身に入り、「Pythonを使用して結果を計算(Correct Drift by Python)」ステップの「スクリプトファイルのパス」パラメータを対応して変更します。
-
ロボットプログラムを作成
ロボットプログラムの処理フロー
「キャリブレーションボールの取得」と「ドリフト補正モデルの生成」のためのプログラムを下記のようなフローで作成します。このプログラムを定期的(毎日または毎週、推奨は毎日生産開始前)実行して、ドリフト補正モデルをリアルタイムで更新できるようにします。
-
ロボットがキャリブレーションボール(または他のマーカー)を動かし、事前に計画された経路点に順番に移動します。このソリューションでは、層ごとに9つの経路点があり、層数はNです。そのため、合計ではN * 9個の経路点があります。
-
キャリブレーションボールを各経路点に移動させた後、「Vis_CaptureCalibrationSphere」プロジェクト内のパラメータレシピを切り替えます。
切り替えられた「パラメータレシピ番号」と、事前に計画された「キャリブレーションボールの移動経路点」が一対一に対応しています。この対応関係は で確認できます。 -
パラメータレシピを切り替えた後、「Vis_CaptureCalibrationSphere」プロジェクトを実行し、キャリブレーションボールを認識し、その位置姿勢を保存します。
-
切り替えられた「パラメータレシピ番号」と位置姿勢を保存するための「ファイル名の接頭辞」が一対一に対応しています。この対応関係は
で確認できます。ファイル名の接頭辞の形式は「***_m_n」で、mは層番号、nは層内番号を表します。 -
「ファイル名の接頭辞」と「実際のキャリブレーションボールの移動経路点」の対応要件:接頭辞内で「m」が同じレシピについては、対応するキャリブレーションボールの経路点が同一層にあることを保証する必要があります。例えば、「spherePose_1_1」と「spherePose_1_2」は同一層に対応させ、一方が「中層」、もう一方が「高層」や「低層」に対応することはできません。
-
-
各ャリブレーションボールの移動経路点に対して、上記の1~3の操作を実行します。すべての経路点への移動が完了すると、「Vis_CaptureCalibrationSphere」プロジェクトの「spherePose_drift」フォルダには、各経路点におけるキャリブレーションボールの位置姿勢ファイルが生成されます。
-
例えば、合計で3 × 9の経路点がある場合、「Vis_CaptureCalibrationSphere」プロジェクトの「spherePose_drift」フォルダには 27個 のjsonファイルが生成されます(spherePose_1_1.json、…、spherePose_1_9.json、spherePose_2_1.json、…、spherePose_2_9.json、spherePose_3_1.json、…、spherePose_3_9.json)。
-
キャリブレーションボールの位置姿勢取得が完了した後、その移動経路点がもう調整されない場合、キャリブレーションボール取得で生成されたすべてのjsonファイルを「sphereCoordinatePose_drift」フォルダからコピーし、「sphereCoordinatePose_baseline」フォルダに貼り付けます。これにより、後のドリフトが発生した際の「比較」基準情報として使用されます。
-
コピー前に「sphereCoordinatePose_baseline」フォルダを空にしてください。
-
このコピー操作は初回の導入時に一度だけ行えばよく、その後は再操作の必要はありません。導入後は通常、「sphereCoordinatePose_baseline」フォルダ内のファイルを変更しません。
-
-
上記の操作が完了した後、「Vis_ComputeDriftCorrectionModel」プロジェクトを実行します。このプロジェクトは、「Vis_CaptureCalibrationSphere」プロジェクト内の「spherePose_baseline」と「spherePose_drift」のキャリブレーションボールの位置姿勢に基づいて、新しいドリフト補正モデル(drift_correction_model_00000.json)を求めます。
ロボットサンプルプログラム
以下のコードは参考用であり、使用するロボットに応じてプログラムを作成する必要があります。 |
.PROGRAM calibpoint()
;****キャリブレーションボールの移動経路点(実データに変更してください)*****
TOTAL_POINT = 27 ;
POINT P[1] = TRANS(100,200,300,0,90,0)
POINT P[2] = TRANS(100,200,300,0,90,0)
POINT P[3] = TRANS(100,200,300,0,90,0)
POINT P[4] = TRANS(100,200,300,0,90,0)
POINT P[5] = TRANS(100,200,300,0,90,0)
POINT P[6] = TRANS(100,200,300,0,90,0)
POINT P[7] = TRANS(100,200,300,0,90,0)
POINT P[8] = TRANS(100,200,300,0,90,0)
POINT P[9] = TRANS(100,200,300,0,90,0)
POINT P[10] = TRANS(100,200,300,0,90,0)
POINT P[11] = TRANS(100,200,300,0,90,0)
POINT P[12] = TRANS(100,200,300,0,90,0)
POINT P[13] = TRANS(100,200,300,0,90,0)
POINT P[14] = TRANS(100,200,300,0,90,0)
POINT P[15] = TRANS(100,200,300,0,90,0)
POINT P[16] = TRANS(100,200,300,0,90,0)
POINT P[17] = TRANS(100,200,300,0,90,0)
POINT P[18] = TRANS(100,200,300,0,90,0)
POINT P[19] = TRANS(100,200,300,0,90,0)
POINT P[20] = TRANS(100,200,300,0,90,0)
POINT P[21] = TRANS(100,200,300,0,90,0)
POINT P[22] = TRANS(100,200,300,0,90,0)
POINT P[23] = TRANS(100,200,300,0,90,0)
POINT P[24] = TRANS(100,200,300,0,90,0)
POINT P[25] = TRANS(100,200,300,0,90,0)
POINT P[26] = TRANS(100,200,300,0,90,0)
POINT P[27] = TRANS(100,200,300,0,90,0)
;*****ロボットの移動開始*****
ACCURACY 1 ALWAYS
SPEED 100 MM/S ALWAYS
JMOVE STAND_BY ;安全位置に移動、ユーザーによるティーチングが必要
FOR I = 1 TO TOTAL_POINT
PRINT "MOVE TO POINT NO. ", I
LMOVE P[I] ;キャリブレーションボールの撮影経路点へ移動
BREAK
TWAIT 3
CALL MM_SWITCH_MODEL(1,I) ;キャリブレーションボール取得プロジェクトのレシピの切替え(Vis_CaptureCalibrationSphereプロジェクト番号が1であると仮定)
TWAIT 1
CALL MM_START_VIS(1,0,1,.#start_vis) ;キャリブレーションボール取得プロジェクトの実行をトリガー
TWAIT 3
END
CALL MM_START_VIS(2,0,1,.#start_vis) ;ドリフト補正モデル生成プロジェクトの実行をトリガー(Vis_ComputeDriftCorrectionModelプロジェクト番号が2であると仮定)
JMOVE STAND_BY
.END