把持と配置を実行

現在ご覧いただいているのは未リリースのバージョンです(V2.1.0)。異なるバージョンを参照する場合は、画面右上のボタンから切り替えが可能です。

■ ご利用中のバージョンが分からない場合はお気軽にサポート窓口までご連絡ください。

本ガイドでは、まずこのソリューションで実現される把持・配置フローを理解し、その後、把持と配置フローの設定方法について説明します。

把持と配置フロー

このソリューションでは、下図のようなフローで把持・配置を実行します。

picking workflow

通信ソリューション

上記のフローでは、「ロボットがカメラをトリガーして撮影し、計画された経路を取得する」には、ロボットとビジョンシステムが標準インターフェース通信方式を使用する必要があります。また、標準インターフェースとビジョンシステムの連携方法は Mech-Vizを使用して計画された経路を取得 となります。

この連携方法を使用する場合、Mech-VisionプロジェクトとMech-Vizプロジェクトの設定、ロボットプログラムの作成を完了させる必要があります。把持と配置フローを設定 を参照して、Mech-Vizプロジェクトの設定とロボットプログラムの作成を完了してください。

把持と配置フローを設定

把持と配置フローを実現するには、以下の設定を順に完了する必要があります。

picking workflow config

Mech-Vizプロジェクトの設定とシミュレーション

Mech-Vizプロジェクトはロボットに以下の機能を提供しています。

  • 経路計画: ロボットの把持経路を計画します。計画された経路には配置経路は含まれません。そのため、配置経路はロボットプログラムに追加する必要があります。

  • 衝突検出:Mech-Vizは経路計画中に衝突検出を行い、ロボットに衝突のない把持経路を提供します。

  • 実行のシミュレーション:Mech-Vizはロボットの把持フローを可視化してシミュレーションし、デバッグを容易にします。

Mech-Vizプロジェクトの設定は、下図のような手順で行われます。

viz project config workflow

Mech-Visionの「単載デパレタイズ」ソリューションには、Mech-Vizプロジェクト「Viz-Single-Case Depalletizing」も含まれています。以下の設定を行う前に、Mech-Vizを起動し、メニューバーで ファイル  開く を選択し、ローカルの 「単載デパレタイズ」ソリューションの 「Viz-Single-Case Depalletizing」フォルダを選択します。

open viz project

シーンの物体を設定

シーンの物体を設定する目的は、実際の作業環境を再現することで、ロボットの動作経路を計画できるようにすることです。具体的な操作方法については、シーン物体を設定 をご参照ください。

実行可能な把持動作を確保した上で、実際の作業環境をより厳密に再現する必要があります。このソリューションでは、シーン物体は以下のように設定されます。

config scene objects

ロボットハンドを設定

ロボットハンドを設定する目的は、ロボットハンドのモデルを仮想空間に表示し、衝突検出に利用できるようにするためです。具体的な操作方法については、ロボットハンドを設定 をご参照ください。

ワークとロボットハンドとの関連付け

ロボットハンドの設定が完了した後、ワークライブラリでワークと把持に使用するロボットハンドを関連付ける必要があります。これにより、設定したロボットハンドがワークの把持に使用できるようになります。このソリューションでは、把持するワークは段ボール箱であり、ワークモデルのマッチングは不要です。そのため、ワークライブラリでデフォルトのワークを使用するだけで十分です。

  1. プロジェクトリソースツリーの 対象物 で、設定ボタンしてワークライブラリを開きます。

  2. ワークの設定フローを選択してください 画面で、マッチングなしで認識 を選択します。すると、デフォルトのワークが自動的に作成され、デフォルトの把持位置姿勢が追加されます。

  3. 把持位置姿勢を設定 手順では、把持位置姿勢の設定 の下の Mech-Vizまたは「経路計画」ステップのロボットハンドをすべて有効にする にチェックを入れます。

衝突モデルの簡略化

ロボットハンドモデルを作成する際、衝突モデルの作成時間を短縮するため、凸包作成時にモデルを完全に再現する必要はありません。実際の状況に応じて、一部のディテールを省略することが可能です。

モデル簡略化の考え方:ハンドとロボット接続部分のネジ穴やその他の詳細な特徴は削除できます。吸盤の元のモデルが直方体であるため、この部分は簡略化する必要はありません。

下図は、簡略化されたモデルの例を示しています。

simplify tool model

ワークフローを構築

「単載デパレタイズ」ソリューションに組み込まれているMech-Vizプロジェクト「Viz-Single-Case Depalletizing」では、ワークフローがすでに設定されています。ワークフロー内の各ステップの説明は以下の通りです。

ステップ 説明 用途
define home

画像撮影位置を設定します。画像撮影位置とは、カメラが画像を撮影したときにロボットがいる位置を指します。この位置では、ロボットアームがカメラ視野を遮らないようにする必要があります。
ロボットを手動で画像撮影位置に移動させ、その時点でのロボットの位置姿勢をステップに記録します。

シミュレーションにのみ使用され、ロボットには送信されません。

set branch

メッセージによって異なる分岐を実行

ロボットプログラムがコマンドを送信して撮影を開始するのを待機します。

visual recognition

Mech-Visionのビジョン結果を呼び出します。

/

check vision result

ビジョン結果があるかどうかを確認します。

/

relative move 1

アプローチ点を計画

ロボットに送信されます。

vision move

把持点を計画

ロボットに送信されます。

relative move 2

離れる点を計画

ロボットに送信されます。

define immediate point

中間点を設定

シミュレーションにのみ使用され、ロボットには送信されません。

吸盤オフセット戦略を設定

「ビジョン処理による移動」ステップでは、現場の実際の状況に応じて吸盤オフセット戦略を設定できます。

sucker offset setting

衝突検出パラメータを設定

Mech-Vizは衝突検出機能を使用して、ロボットが動作中に衝突を避けることができます。このソリューションでは、点群衝突検出 機能を有効にする必要があります。詳細については、衝突検出設定 をご参照ください。

  • このソリューションでは、点群衝突検出 機能を有効にし、「衝突検出に使用する点群の形式」は「点群の立方体」となります。点群衝突検出 は主にロボットハンドと点群との衝突を検出します。ロボット関節と点群との衝突を検出するかどうかは、実際のニーズに応じて選択できます。

  • 対象物衝突検出は、把持するワークとシーン内の物体との衝突を検出します。段ボール箱のデパレタイジングシーンでは、通常この機能は有効にする必要はありません。

  • よくある問題と解決法問題1 を有効にし、実際の状況に応じて Z方向点群除去範囲拡張XY方向点群除去範囲拡張 パラメータを設定します。XY方向点群除去範囲拡張 のパラメータ値を適切に設定してください。大きすぎると、把持時に吸盤が隣の段ボール箱に当たる可能性があります。

collision detection

実行のシミュレーション

ツールバーの シミュレート をクリックすると、作成したMech-Vizプロジェクトがシミュレーションで実行されます。

simulation

シミュレーションテストの目標

段ボール箱をパレットに配置し、その後Mech-Vizソフトウェアで把持のシミュレーションを行います。毎回把持に成功した後、シミュレーションで成功した段ボール箱をカメラ視野外に移動させ、段ボール箱の1層分のシミュレーションテストを繰り返します。すべての段ボールが正常に把持される場合、ビジョンプロジェクトの構築に問題がないと判断できます。

simulation

ロボットパラメータの設定とロボットプログラムの作成

ABBロボットの標準インターフェースサンプルプログラム MM_S9_Viz_RunInAdvance は、このソリューションで必要な機能を基本的に満たします。このサンプルプログラムを基にして変更を加えることができます。MM_S9_Viz_RunInAdvanceサンプルプログラムの詳細な説明については、サンプルプログラム解説 をご参照ください。

サンプルプログラムに基づき、ロボット側で以下の操作を行います。

  1. ティーチング法で初期位置(Home位置)を設定します。

    ロボットを設定された初期位置に移動させます。初期位置は、把持するワークや周辺機器から離れ、カメラの視野を遮らないようにする必要があります。完了後、この時点のロボットの位置姿勢を変数 home に記録します。

  2. 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;
  3. ティーチング法で画像撮影時のロボットの位置姿勢を設定します。

    ロボットを設定された画像撮影位置に移動させます。画像撮影位置とは、カメラが画像を撮影したときにロボットがいる位置を指します。この位置では、ロボットアームがカメラ視野を遮らないようにする必要があります。完了後、この時点のロボットの位置姿勢を変数 camera_capture に記録します。

  4. 段ボール箱を吸着するための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;
  5. ティーチング法を使用して配置の中間点と配置点を設定します。

    ロボットを設定された中間点および配置点に移動させ、ロボットの位置姿勢をそれぞれ drop_waypoint と drop に記録します。

  6. 段ボール箱の吸着を解除するための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;

ロボットの把持・配置動作をテスト

ロボットの把持と配置の動作を確認するためには、以下の手順に従って実行します。

  1. ティーチペンダントで デバッグ  PPをルーチンへ をクリックします。

  2. MM_S9_Viz_RunInAdvanceが選択されていることを確認し、OK をクリックします。

  3. パワーオンのボタンを適度に手で押し、ティーチペンダントにステータスバーがパワーオン状態表示されるまで保持します。

  4. ティーチペンダントパネルの 実行 をクリックします。

ロボットが正常に段ボール箱を把持し、配置することができれば、プログラムが正しく設定されていることが確認されます。

参考:変更後のサンプルプログラム

最終的に変更されたサンプルプログラムは以下の通りです。

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ビジョンシステムによる単載デパレタイズのアプリケーションの導入が完了しました。

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

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