MM_S21_Vis_As_Uframe

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

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

プログラム概要

機能

ロボットがMech-Visionプロジェクトを実行してビジョン結果を取得し、ビジョン結果をワーク座標系として用いて、把持および配置動作のフローを実行します。

ファイルパス

Mech-VisionとMech-Vizソフトウェアのインストールディレクトリにある Communication Component/Robot_Interface/ABB/sample/MM_S21_Vis_As_Uframe

RobotWare6システムを使用する場合、ファイルの拡張子は .mod です。RobotWare7システムを使用する場合、ファイルの拡張子を .mod から .modx に変更する必要があります。

必要なプロジェクト

Mech-Visionプロジェクト

使用前提

  1. 標準インターフェース通信設定が完了したこと。

  2. 自動キャリブレーションが完了したこと。

このサンプルプログラムは参考用です。ユーザーは実際の状況に応じて、このプログラムを基に変更を加える必要があります。このプログラムをそのまま使用しないでください。

プログラム説明

以下はMM_S21_Vis_As_Uframeサンプルプログラムのコードと関連する説明です。

MM_S1_Vis_Basicサンプルと比較して、このサンプルではビジョン結果をユーザー座標系(ワーク座標系など)として使用し、把持を行います。そのため、MM_S1_Vis_Basicサンプルと同じ部分のコードについては、以下で再度説明することはありません(詳細は MM_S1_Vis_Basicサンプルの説明 をご参照ください)。
MODULE MM_S21_Vis_As_Uframe
    !----------------------------------------------------------
    ! FUNCTION: trigger Mech-Vision project and get vision result
    ! Mech-Mind, 2026-1-28
    !----------------------------------------------------------
    !define local num variables
    LOCAL VAR num pose_num:=0;
    LOCAL VAR num status:=0;
    LOCAL VAR num label:=0;
    LOCAL VAR num toolid:=0;
    !define local joint&pose variables
    LOCAL CONST jointtarget home:=[[0,0,0,0,90,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
    LOCAL CONST jointtarget snap_jps:=[[0,0,0,0,90,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
    LOCAL PERS robtarget camera_capture:=[[380.58,24.66,583.22],[0.00392748,-0.815898,0.578164,-0.00464691],[0,0,-2,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
    LOCAL PERS robtarget pick_waypoint:=[[502.38,26.91,592.51],[0.00179326,-0.458155,0.888868,-0.0019068],[0,-1,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
    LOCAL PERS robtarget pickpoint:=[[0,0,0],[1,0,0,0],[0,-1,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
    LOCAL PERS robtarget Wobjpoint:=[[0,0,0],[1,0,0,0],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
    LOCAL PERS robtarget drop_waypoint:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
    LOCAL PERS robtarget drop:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
    !define LOCAL tooldata variables
    LOCAL PERS tooldata gripper1:=[TRUE,[[0,0,0],[1,0,0,0]],[0.001,[0,0,0.001],[1,0,0,0],0,0,0]];
    !define LOCAL wobjdata variables
    TASK PERS wobjdata MM_Wobj:=[FALSE,TRUE,"",[[0,0,0],[1,0,0,0]],[[639.64,-59.7632,41.2964],[0.0326084,-0.429607,0.901024,0.0503118]]];

    PROC Sample_21()
        !set the acceleration parameters
        AccSet 50,50;
        !set the velocity parameters
        VelSet 50,1000;
        !move to robot home position
        MoveAbsJ home\NoEOffs,v3000,fine,gripper1\WObj:=MM_Wobj;
        !initialize communication parameters (initialization is required only once)
        MM_Init_Socket "127.0.0.1", 50000, 300;
        !move to image-capturing position
        MoveL camera_capture,v1000,fine,gripper1;
        !open socket connection
        MM_Open_Socket status;
        IF status=3099 THEN
            TPWrite "MM: Communication Error";
            STOP;
        ENDIF
        !trigger NO.1 Mech-Vision project
        MM_Start_Vis 1,0,2,snap_jps,status;
        IF status<>1102 THEN
            !add error handling logic here according to different error codes
            TPWrite "MM: Status Error";
            STOP;
        ENDIF
        !get vision result from NO.1 Mech-Vision project
        stop;
        MM_Get_VisData 1,pose_num,status;
        !check whether vision result has been got from Mech-Vision successfully
        IF status<>1100 THEN
            !add error handling logic here according to different error codes
            !e.g.: status=1003 means no point cloud in ROI
            !e.g.: status=1002 means no vision result
            Stop;
        ENDIF
        !close socket connection
        MM_Close_Socket;
        !save first vision point data to local variables
        MM_Get_Pose 1,Wobjpoint,label,toolid;
        !Convert the visual points to the workpiece coordinates
        MM_Wobj.oframe.trans:=Wobjpoint.trans;
        MM_Wobj.oframe.rot:=Wobjpoint.rot;
        !move to intermediate waypoint of picking
        MoveJ pick_waypoint,v1000,z50,gripper1;
        !move to approach waypoint of picking
        MoveL RelTool(pickpoint,0,0,-100), v1000, fine, gripper1\WObj:=MM_Wobj;
        !move to picking waypoint
        MoveL pickpoint, v300, fine, gripper1\WObj:=MM_Wobj;
        !add object grasping logic here, such as "setdo DO_1, 1;"
        Stop;
        !move to departure waypoint of picking
        MoveL RelTool(pickpoint,0,0,-100), v1000, fine, gripper1\WObj:=MM_Wobj;
        !move to intermediate waypoint of placing
        MoveJ drop_waypoint,v1000,z50,gripper1;
        !move to approach waypoint of placing
        MoveL RelTool(drop,0,0,-100),v1000,fine,gripper1;
        !move to placing waypoint
        MoveL drop,v300,fine,gripper1;
        !add object releasing logic here, such as "setdo DO_1, 0;"
        Stop;
        !move to departure waypoint of placing
        MoveL RelTool(drop,0,0,-100),v1000,fine,gripper1;
        !move back to robot home position
        MoveAbsJ home\NoEOffs,v3000,fine,gripper1;
    ENDPROC
ENDMODULE

上記のサンプルプログラムの処理流れは、下図の通りです。

sample21

下表は追加されたコードとその説明です。コマンド名のリンクをクリックすることで、その詳細を確認できます。

処理流れ コートと説明

変数を定義

    LOCAL PERS robtarget pickpoint:=[[0,0,0],[1,0,0,0],[0,-1,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
    LOCAL PERS robtarget Wobjpoint:=[[0,0,0],[1,0,0,0],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];

Wobjpoint は、Mech-Visionから取得したビジョンポイントを格納するために使用します。pickpoint 変数は、ワーク座標系における把持位置姿勢を格納するために使用します。

ビジョンポイントのツール位置姿勢を保存し、ワーク座標系 MM_Wobj に代入

        !save first vision point data to local variables
        MM_Get_Pose 1,Wobjpoint,label,toolid;
        !Convert the visual points to the workpiece coordinates
        MM_Wobj.oframe.trans:=Wobjpoint.trans;
        MM_Wobj.oframe.rot:=Wobjpoint.rot;

まず、MM_Get_Pose コマンドを使用してビジョン結果を変数 Wobjpoint に格納します。次に、Wobjpoint の位置量と回転量を、それぞれワーク座標系 MM_Wobj の原点位置と原点姿勢に代入します。これらのコマンドにより、ワーク座標系を動的に更新できます。

把持と配置を実行

        !move to intermediate waypoint of picking
        MoveJ pick_waypoint,v1000,z50,gripper1;
        !move to approach waypoint of picking
        MoveL RelTool(pickpoint,0,0,-100), v1000, fine, gripper1\WObj:=MM_Wobj;
        !move to picking waypoint
        MoveL pickpoint, v300, fine, gripper1\WObj:=MM_Wobj;
        !add object grasping logic here, such as "setdo DO_1, 1;"
        Stop;
        !move to departure waypoint of picking
        MoveL RelTool(pickpoint,0,0,-100), v1000, fine, gripper1\WObj:=MM_Wobj;
        !move to intermediate waypoint of placing
        MoveJ drop_waypoint,v1000,z50,gripper1;
        !move to approach waypoint of placing
        MoveL RelTool(drop,0,0,-100),v1000,fine,gripper1;
        !move to placing waypoint
        MoveL drop,v300,fine,gripper1;
        !add object releasing logic here, such as "setdo DO_1, 0;"
        Stop;
        !move to departure waypoint of placing
        MoveL RelTool(drop,0,0,-100),v1000,fine,gripper1;
        !move back to robot home position
        MoveAbsJ home\NoEOffs,v3000,fine,gripper1;
初回実行時は、「ロボットを把持接近点へ移動」する前に、ワーク座標系で把持点をティーチングする必要があります。
  • MoveL RelTool(pickpoint,0,0,-100), v1000, fine, gripper1\WObj:=MM_Wobj;:ワーク座標系 MM_Wobj を基準として、ロボットを把持接近点へ移動します。

  • MoveL pickpoint, v300, fine, gripper1\WObj:=MM_Wobj;:ワーク座標系 MM_Wobj を基準として、ロボットを把持点へ移動します。

  • MoveL RelTool(pickpoint,0,0,-100), v1000, fine, gripper1\WObj:=MM_Wobj;:ワーク座標系 MM_Wobj を基準として、ロボットを把持の離れる点へ移動します。

この情報は役に立ちましたか?

ご意見・ご要望がございましたら、以下よりお寄せください:

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

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