把持と配置を実行
本ガイドでは、まずこのソリューションで実現される把持・配置フローを理解し、その後、把持と配置フローの設定方法について説明します。
通信ソリューション
上記のフローでは、「ロボットがカメラをトリガーして撮影し、計画された経路を取得する」には、ロボットとビジョンシステムが標準インターフェース通信方式を使用する必要があります。また、標準インターフェースとビジョンシステムの連携方法は Mech-Vizを使用して計画された経路を取得 となります。
この連携方法を使用する場合、Mech-VisionプロジェクトとMech-Vizプロジェクトの設定、ロボットプログラムの作成を完了させる必要があります。把持と配置フローを設定 を参照して、Mech-Vizプロジェクトの設定とロボットプログラムの作成を完了してください。
把持と配置フローを設定
把持と配置フローを実現するには、以下の設定を順に完了する必要があります。
Mech-Vizプロジェクトの設定とシミュレーション
Mech-Vizプロジェクトはロボットに以下の機能を提供しています。
-
経路計画: ロボットの把持経路を計画します。計画された経路には配置経路は含まれません。そのため、配置経路はロボットプログラムに追加する必要があります。
-
衝突検出:Mech-Vizは経路計画中に衝突検出を行い、ロボットに衝突のない把持経路を提供します。
-
実行のシミュレーション:Mech-Vizはロボットの把持フローを可視化してシミュレーションし、デバッグを容易にします。
Mech-Vizプロジェクトの設定は、下図のような手順で行われます。
Mech-Visionの「単載デパレタイズ」ソリューションには、Mech-Vizプロジェクト「Viz-Single-Case Depalletizing」も含まれています。以下の設定を行う前に、Mech-Vizを起動し、メニューバーで
を選択し、ローカルの 「単載デパレタイズ」ソリューションの 「Viz-Single-Case Depalletizing」フォルダを選択します。シーンの物体を設定
シーンの物体を設定する目的は、実際の作業環境を再現することで、ロボットの動作経路を計画できるようにすることです。具体的な操作方法については、シーン物体を設定 をご参照ください。
実行可能な把持動作を確保した上で、実際の作業環境をより厳密に再現する必要があります。このソリューションでは、シーン物体は以下のように設定されます。
ロボットハンドを設定
ロボットハンドを設定する目的は、ロボットハンドのモデルを仮想空間に表示し、衝突検出に利用できるようにするためです。具体的な操作方法については、ロボットハンドを設定 をご参照ください。
ワークとロボットハンドとの関連付け
ロボットハンドの設定が完了した後、ワークライブラリでワークと把持に使用するロボットハンドを関連付ける必要があります。これにより、設定したロボットハンドがワークの把持に使用できるようになります。このソリューションでは、把持するワークは段ボール箱であり、ワークモデルのマッチングは不要です。そのため、ワークライブラリでデフォルトのワークを使用するだけで十分です。
-
プロジェクトリソースツリーの 対象物 で、設定ボタンしてワークライブラリを開きます。
-
ワークの設定フローを選択してください 画面で、マッチングなしで認識 を選択します。すると、デフォルトのワークが自動的に作成され、デフォルトの把持位置姿勢が追加されます。
-
把持位置姿勢を設定 手順では、把持位置姿勢の設定 の下の Mech-Vizまたは「経路計画」ステップのロボットハンドをすべて有効にする にチェックを入れます。
衝突モデルの簡略化
ロボットハンドモデルを作成する際、衝突モデルの作成時間を短縮するため、凸包作成時にモデルを完全に再現する必要はありません。実際の状況に応じて、一部のディテールを省略することが可能です。
モデル簡略化の考え方:ハンドとロボット接続部分のネジ穴やその他の詳細な特徴は削除できます。吸盤の元のモデルが直方体であるため、この部分は簡略化する必要はありません。
下図は、簡略化されたモデルの例を示しています。
ワークフローを構築
「単載デパレタイズ」ソリューションに組み込まれているMech-Vizプロジェクト「Viz-Single-Case Depalletizing」では、ワークフローがすでに設定されています。ワークフロー内の各ステップの説明は以下の通りです。
ステップ | 説明 | 用途 |
---|---|---|
画像撮影位置を設定します。画像撮影位置とは、カメラが画像を撮影したときにロボットがいる位置を指します。この位置では、ロボットアームがカメラ視野を遮らないようにする必要があります。
|
シミュレーションにのみ使用され、ロボットには送信されません。 |
|
メッセージによって異なる分岐を実行 |
ロボットプログラムがコマンドを送信して撮影を開始するのを待機します。 |
|
Mech-Visionのビジョン結果を呼び出します。 |
/ |
|
ビジョン結果があるかどうかを確認します。 |
/ |
|
アプローチ点を計画 |
ロボットに送信されます。 |
|
把持点を計画 |
ロボットに送信されます。 |
|
離れる点を計画 |
ロボットに送信されます。 |
|
中間点を設定 |
シミュレーションにのみ使用され、ロボットには送信されません。 |
衝突検出パラメータを設定
Mech-Vizは衝突検出機能を使用して、ロボットが動作中に衝突を避けることができます。このソリューションでは、点群衝突検出 機能を有効にする必要があります。詳細については、衝突検出設定 をご参照ください。
-
このソリューションでは、点群衝突検出 機能を有効にし、「衝突検出に使用する点群の形式」は「点群の立方体」となります。点群衝突検出 は主にロボットハンドと点群との衝突を検出します。ロボット関節と点群との衝突を検出するかどうかは、実際のニーズに応じて選択できます。
-
対象物衝突検出は、把持するワークとシーン内の物体との衝突を検出します。段ボール箱のデパレタイジングシーンでは、通常この機能は有効にする必要はありません。
-
よくある問題と解決法:問題1 を有効にし、実際の状況に応じて Z方向点群除去範囲拡張 と XY方向点群除去範囲拡張 パラメータを設定します。XY方向点群除去範囲拡張 のパラメータ値を適切に設定してください。大きすぎると、把持時に吸盤が隣の段ボール箱に当たる可能性があります。
ロボットパラメータの設定とロボットプログラムの作成
ABBロボットの標準インターフェースサンプルプログラム MM_S9_Viz_RunInAdvance は、このソリューションで必要な機能を基本的に満たします。このサンプルプログラムを基にして変更を加えることができます。MM_S9_Viz_RunInAdvanceサンプルプログラムの詳細な説明については、サンプルプログラム解説 をご参照ください。
サンプルプログラムに基づき、ロボット側で以下の操作を行います。
-
ティーチング法で初期位置(Home位置)を設定します。
ロボットを設定された初期位置に移動させます。初期位置は、把持するワークや周辺機器から離れ、カメラの視野を遮らないようにする必要があります。完了後、この時点のロボットの位置姿勢を変数 home に記録します。
-
IPCのIPアドレスとポート番号を指定します。MM_INIT_SKT コマンドのIPアドレスとポート番号を、IPCの実際のIPアドレスとポート番号に変更します。
変更前 変更後(例) MM_Init_Socket "127.0.0.1",50000,300;
MM_Init_Socket "192.168.10.111",50000,300;
-
ティーチング法で画像撮影時のロボットの位置姿勢を設定します。
ロボットを設定された画像撮影位置に移動させます。画像撮影位置とは、カメラが画像を撮影したときにロボットがいる位置を指します。この位置では、ロボットアームがカメラ視野を遮らないようにする必要があります。完了後、この時点のロボットの位置姿勢を変数 camera_capture に記録します。
-
段ボール箱を吸着するためのDOポート信号を設定します。DOコマンドは、現場で実際に使用されているDOポート番号に従って設定する必要があります。
変更前 変更後(例) !add object grasping logic here, such as "setdo DO_1, 1;" Stop;
!add object grasping logic here, such as "setdo DO_1, 1;" setDo do0, 1; !Stop;
-
ティーチング法を使用して配置の中間点と配置点を設定します。
ロボットを設定された中間点および配置点に移動させ、ロボットの位置姿勢をそれぞれ drop_waypoint と drop に記録します。
-
段ボール箱の吸着を解除するためのDOポート信号を設定します。DOコマンドは、現場で実際に使用されているDOポート番号に従って設定する必要があります。
変更前 変更後(例) !add object releasing logic here, such as "setdo DO_1, 0;" Stop;
!add object releasing logic here, such as "setdo DO_1, 0;" setDo do0, 0; setDo do4, 1; Stop;
ロボットの把持・配置動作をテスト
ロボットの把持と配置の動作を確認するためには、以下の手順に従って実行します。
-
ティーチペンダントで
をクリックします。 -
MM_S9_Viz_RunInAdvanceが選択されていることを確認し、OK をクリックします。
-
パワーオンのボタンを適度に手で押し、ティーチペンダントにステータスバーがパワーオン状態表示されるまで保持します。
-
ティーチペンダントパネルの 実行 をクリックします。
ロボットが正常に段ボール箱を把持し、配置することができれば、プログラムが正しく設定されていることが確認されます。
参考:変更後のサンプルプログラム
最終的に変更されたサンプルプログラムは以下の通りです。
PROC Sample_9()
!set the acceleration parameters
AccSet 50, 50;
!set the velocity parameters
VelSet 50, 1000;
!move to robot home position
MoveAbsJ home\NoEOffs,v500,fine,gripper1;
!initialize communication parameters (initialization is required only once)
MM_Init_Socket "192.168.10.111",50000,300;
!move to image-capturing position
MoveL camera_capture,v1000,fine,gripper1;
!open socket connection
MM_Open_Socket;
!trigger Mech-Viz project
MM_Start_Viz 2,snap_jps;
!set branch exit port
MM_Set_Branch 1,1;
LOOP:
!get planned path, 1st argument (1) means getting pose in JPs
MM_Get_VizData 1, pose_num, vis_pose_num, status;
!check whether planned path has been got from Mech-Viz successfully
IF status <> 2100 THEN
!add error handling logic here according to different error codes
!e.g.: status=2038 means no point cloud in ROI
Stop;
ENDIF
!save waypoints of the planned path to local variables one by one
MM_Get_JPS 1,jps{1},label{1},speed{1};
MM_Get_JPS 2,jps{2},label{2},speed{2};
MM_Get_JPS 3,jps{3},label{3},speed{3};
!follow the planned path to pick
!move to approach waypoint of picking
MoveAbsJ jps{1},v500,fine,gripper1;
!move to picking waypoint
MoveAbsJ jps{2},v300,fine,gripper1;
!add object grasping logic here, such as "setdo DO_1, 1;"
setDo do0, 1;
!Stop;
!trigger Mech-Viz project but not to trigger camera capturing
MM_Start_Viz 2,snap_jps;
!move to departure waypoint of picking
MoveAbsJ jps{3},v500,fine,gripper1;
!move to intermediate waypoint of placing
MoveJ drop_waypoint,v500,z50,gripper1;
!move to approach waypoint of placing
MoveL RelTool(drop,0,0,-100),v500,fine,gripper1;
!set branch exit port and trigger camera capturing when robot moves out of camera’s field of view
MM_Set_Branch 1,1;
!move to placing waypoint
MoveL drop,v300,fine,gripper1;
!add object releasing logic here, such as "setdo DO_1, 0;"
!Stop;
setDo do0, 0;
setDo do4, 1;
!move to departure waypoint of placing
MoveL RelTool(drop,0,0,-100),v500,fine,gripper1;
setDo do4, 0;
!move back to robot home position
MoveAbsJ home\NoEOffs,v500,fine,gripper1;
GOTO LOOP;
END_LOOP:
!close socket connection
MM_Close_Socket;
ENDPROC
ENDMODULE
これで、3Dビジョンシステムによる単載デパレタイズのアプリケーションの導入が完了しました。