ETH_1つのカメラ_全ての移動経路点が到達可能_目標点群がカメラの視野内で半分以上を占める

使用するソリューションの名前は ETH_SingleCamera_AllReachable_OccupiesGreaterThanHalfView です。

vision drift solution

Mech-Visionプロジェクトをインポート

Pythonスクリプトをソリューションにコピー

ドリフト自動補正ソリューションのコアアルゴリズム部分はPythonスクリプトで実装されており、主に「ドリフト補正モデルの生成」、「位置姿勢のドリフト補正」、「フォルダ内の位置姿勢データの読み込み」機能が含まれています。

Mech-Visionサンプルプロジェクトに保存されているPythonスクリプトの resource/python_script フォルダ全体を、現在の生産ソリューションにコピーする必要があります(同じディレクトリ構造で保存することを推奨します)。

Pythonスクリプトとファイルの読み書きを行うため、ファイル名変更を行わないようにご注意ください。

Mech-Visionのサンプルソリューションから「Vis_CaptureCalibrationSphere」「Vis_ComputeDriftCorrectionModel」の2つのプロジェクトを現在の生産ソリューションにコピーします。

project name
  • Vis_CaptureCalibrationSphere:キャリブレーションボールの位置姿勢を取得するプロジェクト。

  • Vis_ComputeDriftCorrectionModel:キャリブレーションボール情報に基づいてドリフト補正モデルを生成するプロジェクト。

プロジェクトのパラメータを調整

プロジェクト1:Vis_CaptureCalibrationSphere

project1
  • 必須の調整項目

    • 「カメラから画像を取得」ステップで、「カメラを選択」「コンフィグパラメータグループ」を調整し、現在のカメラに正常に接続します。

      project parameter adjust1
    • 「点群前処理(Cloud Preprocessing)」ステップの組合せをダブルクリックしてその中身に入ります。「3D ROI内の点群を抽出」ステップで、3D ROIの位置とサイズを調整し、すべてのキャリブレーションボールの移動経路点が3D ROI内に収まるようにします。

      project parameter adjust2
    • 経路点が設定されて変更しない場合、キャリブレーションボールの位置姿勢情報が保存される「spherePose_drift」フォルダ内のすべてのjsonファイルを、「spherePose_baseline」フォルダにコピーします。

      事前に「spherePose_baseline」フォルダを空にする必要があります。
  • オプションの調整項目

    • キャリブレーションボールのサイズがサンプルプロジェクトと異なる場合

      • 「ステップの組合せ(Locate Calibration Sphere)」をダブルクリックしてその中身に入ります。

        • 「3D位置姿勢高精度推定」ステップで「モデル選択」パラメータを調整します。

        • 続いて 「ステップの組合せ(Locate Calibration Sphere with 3D Matching)」 をダブルクリックしてその中身に入ります。「3D位置姿勢低精度推定/3D位置姿勢高精度推定」ステップで「モデル選択」パラメータを調整します。サンプルプロジェクトでは「直径100mm」、「直径60mm」、「直径25.4mm」のキャリブレーションボールモデルが提供されています。それ以外のキャリブレーションボールを使用する場合は、テクニカルサポートにお問い合わせください。

          project parameter adjust3
      • 「ステップの組合せ(Extract Spherical Cap Cloud)」の中身に入り、「円柱以内の点群を抽出」ステップで「最大Z値」と「外円半径」の2つのパラメータを調整します。

        • 最大Z値:キャリブレーションボールの直径に設定します。

        • 外円半径:キャリブレーションボールの直径の5分の4に設定します。

          project parameter adjust4
    • パラメータレシピの調整

      • 説明:このプロジェクトには設定済みのパラメータレシピが含まれています。各経路点におけるキャリブレーションボールの位置姿勢を保存する際のファイル名の接頭辞を切り替えるために使用されます。ファイル名の接頭辞には、現在取得しているキャリブレーションボールの経路点に対応する層番号と層内番号が含まれています。このソリューションでは、N * 9の経路点を設定し、Nは層数を示します。例えば、「spherePose_3_9」は、3層目の9番目に位置するキャリブレーションボールの経路点を意味します。

      • このプロジェクトには、5層のキャリブレーションボール経路点のパラメータレシピが事前に設定されています。キャリブレーションボールの経路点が5層以下である場合、レシピの変更は必要ありません。5層以上の場合は、ルールに従ってレシピを追加するだけで対応可能です。

プロジェクト2:Vis_ComputeDriftCorrectionModel

project2
  • 必須の調整項目:特に調整不要です。

  • オプションの調整項目

    • 「Vis_CaptureCalibrationSphere」プロジェクト名や、その中のキャリブレーションボールの位置姿勢を保存するフォルダ名を変更した場合

      • 「Vis_ComputeDriftCorrectionModel」の「ラベルリストをクイック作成(Folder Path of Baseline Sphere Pose)」および「ラベルリストをクイック作成(Folder Path of Sphere Pose After Drift)」の2つのステップで、「文字列のリスト」パラメータを対応して変更します。このステップは、キャリブレーションボールの位置姿勢ファイルパスを設定するもので、初期値は「../../Vis_CaptureCalibrationSphere/spherePose_*」です。

        eth greater than1
    • Pythonスクリプトが推奨パス resource/python_script に保存されていない場合

      • 「Pythonを使用して結果を計算(Read the Pose from the Pose Files in the Folder1/2)」の2つのステップで、「スクリプトファイルのパス」パラメータを対応して変更します。

        eth greater than2
      • 「Pythonを使用して結果を計算(Compute Drift Correction Model)」ステップで、「スクリプトファイルのパス」パラメータも対応して変更します。

        eth greater than3

ワーク認識プロジェクトに「ドリフト補正」ステップの組合せを追加

  • Mech-Visionサンプルプロジェクト内の Vis_LocateWorkpiece プロジェクトから「ステップの組合せ(Correct Drift)」を現在のワーク認識プロジェクトにコピーします。このステップの組合せは通常、3Dマッチング処理後のワークの幾何学的中心の位置姿勢に対して補正を行います。以下の点に注意してください。

  • 補正する位置姿勢は、ワークを位置決めする際の特徴点群の 幾何中心点(またはそれに近い点)である必要があります。特徴点群の幾何学的中心点と空間的に大きく離れている場合(特にZ方向で50mm以上のずれがある場合)、3Dマッチングモデル内の把持点を幾何学的中心点に調整し、ドリフト補正後に必要な把持点にマッピングする必要があります。

  • 補正する位置姿勢は カメラ座標系 である必要があり、補正後にロボット座標系に変換します。

eth greater than4
  • オプションの調整項目

    • 「Vis_ComputeDriftCorrectionModel」プロジェクトで保存されている補正モデルのパスを変更した場合:「ステップの組合せ(Correct Drift)」をダブルクリックしてその中身に入り、「ファイルから位置姿勢を読み取る(Read Drift Correction Model)」ステップの「位置姿勢のファイルパス」パラメータを対応して変更します。

    eth greater than5
    • Pythonスクリプトが推奨パス resource/python_script に保存されていない場合:「ステップの組合せ(Correct Drift)」をダブルクリックしてその中身に入り、「Pythonを使用して結果を計算(Correct Drift by Python)」ステップの「スクリプトファイルのパス」パラメータを対応して変更します。

      eth greater than6

新規プロジェクトを現在のソリューションに登録

  • 各新規プロジェクトの名前を右クリックし、現在のプロジェクトをビジョンサービスとして登録を選択します。

    register vision project
  • ソリューション名を右クリックし、ソリューションを自動的に読み込むのチェックを外し、その後再度チェックを入れます。

    auto load solution

ロボットプログラムを作成

ロボットプログラムの処理フロー

「キャリブレーションボールの取得」と「ドリフト補正モデルの生成」のためのプログラムを下記のようなフローで作成します。このプログラムを定期的(毎日または毎週、推奨は毎日生産開始前)実行して、ドリフト補正モデルをリアルタイムで更新することを目的としています。

  1. ロボットがキャリブレーションボール(または他のマーカー)を動かし、事前に計画された経路点に順番に移動します。このソリューションでは、層ごとに9つの経路点があり、層数はNです。そのため、全体ではN * 9個の経路点があります。

  2. キャリブレーションボールを各経路点に移動させた後、「Vis_CaptureCalibrationSphere」プロジェクト内のパラメータレシピを切り替えます。

    切り替えられた「パラメータレシピ番号」と、事前に計画された「キャリブレーションボールの移動経路点」が一対一に対応しています。この対応関係は プロジェクトアシスタント  パラメータレシピ  パラメータレシピエディタ で確認できます。
  3. パラメータレシピを切り替えた後、「Vis_CaptureCalibrationSphere」プロジェクトを実行し、キャリブレーションボールを認識し、その位置姿勢を保存します。

    • 切り替えられた「パラメータレシピ番号」と位置姿勢を保存する際の「ファイル名の接頭辞」が一対一に対応しています。この対応関係は プロジェクトアシスタント  パラメータレシピ  パラメータレシピエディタ で確認できます。

      ファイル名の接頭辞の形式は「**_m_n」で、mは層番号、nは層内の番号を表します。
    eth greater than7
    • 「ファイル名の接頭辞」と「実際のキャリブレーションボールの移動経路点」の対応関係の要件:接頭辞の`m`が同じレシピは、必ず同じ実際層のキャリブレーションボールの移動経路点に対応する必要があります。例えば、「spherePose_1_1」と「spherePose_1_2」は、同じ層内の異なる経路点を表しており、実際に同じ層の点に対応しなければなりません。つまり、1つが「中層」に対応し、もう1つが「高層」や「低層」に対応することはできません。

  4. 各ャリブレーションボールの移動経路点に対して、上記の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」フォルダ内のファイルは永久に変わることはありません。

  5. 上記の操作が完了した後、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

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

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