サンプルプログラム

本節ではMech-Centerで提供される標準インターフェースを用いた把持と配置のサンプルプログラムとその操作手順について紹介します。

事前準備

  1. ABB 標準インターフェースの通信設定 を参照して標準インターフェースの通信設定が行われます。

  2. キャリブレーションの操作手順 を参照し、コントローラにインストールされたキャリブレーションプログラムを実行するか、手動でロボットを移動させてキャリブレーションポイントを追加します。この手順によって外部パラメータのキャリブレーションが行われます。

  3. 必要なMech-Vision、Mech-Vizのプロジェクトを作成し、現在のプログラムを自動的に読み込む にチェックを入れます。

  4. TCP座標を正しく設定します。

  5. ロボットが予期しない動作する可能性があるので、初めは速度を低く設定してください。

サンプルプログラムの紹介

簡単な把持・配置のサンプルプログラムは、Mech-Mindソフトウェアシステムのインストールパス Mech-Center/Robot_Interface/ABB/sample フォルダに格納されています。

以下のサンプルプログラムを紹介します。

Mech-Visionから視覚結果を取得

PROC Vision_Sample_1()
    !**********************************************************
    ! FUNCTION:Eye to Hand simple pick and place with Mech-Vision
    ! mechmind, 2022-5-1
    !**********************************************************
    AccSet 100, 100;
    VelSet 100, 5000;
    MoveAbsJ Home\NoEOffs,v3000,fine,Gripp1TCP;!move robot home position
    MoveL camera_capture,v500,fine,Gripp1TCP;
    PoseNum:=0;
    !Set ip address of IPC
    MM_Init_Socket "127.0.0.1",50000,60;
    WaitTime 0.1;
    !Set vision recipe
    MM_Switch_Model 1,1;
    !Run vision project
    MM_Start_Vis 1,1,2,snap_jps;
    WaitTime 1;
    MM_Get_VisData 1,LastData,PoseNum,Status;
    IF Status<>1100 THEN
        Stop;
    ENDIF
    MM_Get_Pose 1,pickpoint,label,speed1;
    MoveL RelTool(pickpoint,0,0,-100),v1000,fine,Gripp1TCP;
    MoveL pickpoint,v300,fine,Gripp1TCP;
    Stop;
    !Add object grasping logic here.
    MoveL Offs(pickpoint,0,0,100), v1000, fine, Gripp1TCP;
    MoveL waypoint1,v1000,z50,Gripp1TCP;
    MoveL RelTool(drop,0,0,-100),v1000,fine,Gripp1TCP;
    MoveL drop,v300,fine,Gripp1TCP;
    Stop;
    !Add object releasing logic here.
    MoveL Offs(drop,0,0,100), v1000, fine, Gripp1TCP;
    MoveAbsJ Home\NoEOffs,v3000,fine,Gripp1TCP;
    RETURN ;
ENDPROC

プログラムロジック

  1. ロボットを初期位置に移動させます。

  2. ロボットを画像撮影姿勢に移動させます。

  3. MM_Init_Socketでソケット通信を初期化します。

  4. Mech-Visionのプロジェクトでパラメータレシピを使用する場合、使用するレシピはMM_Switch_Modelで設定することができます。

  5. MM_Start_VisでMech-Visionプロジェクトに実行をトリガーします。

  6. 1秒待機します。Eye-In-Handでは、撮影が完了するまでロボットが完全に停止している必要があるため、WAIT命令が必要です。Eye-To-Handでは、MM_Start_VisとMM_Get_VisDataの間に移動命令がある場合、このWAIT命令は必要ありません。

  7. Mech-Visionからの処理結果を取得します。

  8. 返されたMech-Visionのステータスコードを確認します。エラーコードが返された場合、プログラムは一時停止します。

  9. ロボットを把持位置に移動させ、把持を行います。

  10. ロボットを把持位置と配置位置間の経路に移動させます。

  11. 設定した配置位置にロボットを移動し、ワークを配置します。ロボットを初期位置に戻します。

カスタマイズ

  • TCP座標を定義

    Gripp1TCP: tooldataのGripp1TCPの値を変更することでTCPを調整できます。

  • 初期位置を定義

    MoveAbsJ Home:初期位置姿勢で初期位置の位置姿勢を定義しています。

  • 画像撮影姿勢を定義

    MoveL camera_capture:camera_captureで画像撮影位置を定義しています。

  • 行動経路を定義

    MoveL waypoint1:把持位置から配置位置までの経路を設定します。この経路はロボットが周辺環境と衝突しないように設定する必要があります。

  • 配置位置を定義

    MoveL drop:dropで配置位置を定義しています。

  • 把持、配置位置からのZ方向オフセットを定義

    • 把持位置に近づけます

      MoveL RelTool(pickpoint,0,0,-100)
      把持位置に接近する際に100mmだけZ方向にオフセットされます。
    • 把持位置から離れます

      MoveL Offs(pickpoint,0,0,100)
      把持位置に離れる際に100mmだけZ方向にオフセットされます。
    • 配置位置に近づけます

      MoveL RelTool(drop,0,0,-100)
      放置位置に接近する際に100mmだけZ方向にオフセットされます。
    • 配置位置から離れます

      MoveL Offs(drop,0,0,100)
      放置位置に離れる際に100mmだけZ方向にオフセットされます。
  • エンドエフェクタの制御ロジックを追加

    ワークを把持、配置する際の制御ロジックを追加することができます。制御ロジックを追加することで、把持、放置時のロジックを設定することができます。

Mech-Vizから行動計画を取得

PROC vision_sample_2()
    !**********************************************************
    ! FUNCTION:Eye to Hand simple pick and place with Mech-Viz
    ! mechmind, 2022-5-1
    !**********************************************************
    AccSet 100, 100;
    VelSet 100, 5000;
    MoveAbsJ Home\NoEOffs,v3000,fine,Gripp1TCP;!move robot home position
    MoveL camera_capture,v500,fine,Gripp1TCP;
    PoseNum:=0;
    !Set ip address of IPC
    MM_Init_Socket "127.0.0.1",50000,60;
    WaitTime 0.1;
    !Set vision recipe
    MM_Switch_Model 1,1;
    !Run Viz project
    MM_Start_Viz 1,snap_jps;
    WaitTime 0.1;
    !set branch exitport
    MM_Set_Branch 1,1;
    !get planned path
    MM_Get_VizData 2, LastData, PoseNum, VisPosNum, MM_Status;
    IF MM_Status <> 2100 THEN
        Stop;
    ENDIF
    FOR i FROM 1 TO PoseNum DO
        count:=i;
        MM_Get_Pose count,P{count},label1{count},speed{count};
    ENDFOR
    !follow the planned path to pick
    FOR j FROM 1 TO PoseNum DO
        count:=j;
        MoveL p{count},v1000,fine,Gripp1TCP;
        IF count=VisPosNum THEN
            Stop;
            !add object grasping logic here
        ENDIF
    ENDFOR
    !go to drop location
    MoveL RelTool(drop,0,0,-100),v1000,z50,Gripp1TCP;
    MoveL drop,v500,fine,Gripp1TCP;!drop point
    stop;
    !add object releasing logic here
    MoveL Offs(drop,0,0,100), v1000, fine, Gripp1TCP;
    MoveAbsJ Home\NoEOffs,v3000,fine,Gripp1TCP;
    RETURN ;
ENDPROC

プログラムロジック

Mech-Vizが出力した位置姿勢に従い、設定した配置位置にロボットを移動し、ワークを配置します。

  1. ロボットを初期位置に移動させます。

  2. ロボットを画像撮影姿勢に移動させます。

  3. MM_Init_Socketでソケット通信を初期化します。

  4. Mech-Visionのプロジェクトでパラメータレシピを使用する場合、使用するレシピはMM_Switch_Modelで設定することができます。

  5. Mech-Vizプロジェクトの実行をトリガーします。

  6. Mech-Vizから行動計画を取得します。

  7. 返されたステータスコードを確認します。エラーコードが返された場合、プログラムは一時停止します。

  8. ループ文で取得された位置姿勢を変数に保存します。

  9. 計画された経路に沿ってロボットを動かし、把持を実行します。

  10. ロボットを把持位置と配置位置間の経路に移動させます。

  11. 設定した配置位置にロボットを移動し、ワークを配置します。ロボットを初期位置に戻します。

カスタマイズ

  • TCP座標を定義

    Gripp1TCP: tooldataのGripp1TCPの値を変更することでTCPを調整できます。

  • 初期位置を定義

    MoveAbsJ Home:初期位置姿勢で初期位置の位置姿勢を定義しています。

  • 画像撮影姿勢を定義

    MoveL camera_capture:camera_captureで画像撮影位置を定義しています。

  • 行動経路を定義

    MoveL waypoint1:把持位置から配置位置までの経路を設定します。この経路はロボットが周辺環境と衝突しないように設定する必要があります。

  • 配置位置を定義

    MoveL drop:dropで配置位置を定義しています。

  • エンドエフェクタの制御ロジックを追加

    ワークを把持、配置する際の制御ロジックを追加することができます。制御ロジックを追加することで、把持、放置時のロジックを設定することができます。

  • 配置位置からのZ方向オフセットを定義

    • 配置位置に近づけます

      MoveL RelTool(drop,0,0,-100):放置位置に接近する際に100mmだけZ方向にオフセットされます。

    • 配置位置から離れます

      MoveL Offs(drop,0,0,100) :放置位置に離れる際に100mmだけZ方向にオフセットされます。

Mech-Visionの「経路計画」ステップを使用して経路を取得

PROC Vision_Sample_3()
    !**********************************************************
    ! FUNCTION:Eye to Hand simple pick and place with Mech-Vision Path Planning Step
    ! mechmind, 2023-1-10
    !**********************************************************
    AccSet 100, 100;
    VelSet 100, 5000;
    MoveAbsJ Home\NoEOffs,v3000,fine,Gripp1TCP;!move robot home position
    MoveL camera_capture,v500,fine,Gripp1TCP;
    PoseNum:=0;
    !Set ip address of IPC
    MM_Init_Socket "127.0.0.1",50000,60;
    WaitTime 0.1;
    !Set vision recipe
    MM_Switch_Model 1,1;
    !Run vision project
    MM_Start_Vis 1,1,2,snap_jps;
    WaitTime 1;
    !get planned path from Mech-Vision Path Planning Step
    MM_Get_VisPath 1,2,LastData,PoseNum,VisPosNum,Status;
    IF Status<>1103 THEN
        Stop;
    ENDIF
    FOR i FROM 1 TO PoseNum DO
        count:=i;
        MM_Get_Pose count,P{count},label1{count},speed{count};
    ENDFOR
    !follow the planned path to pick
    FOR j FROM 1 TO PoseNum DO
        count:=j;
        MoveL p{count},v1000,fine,Gripp1TCP;
        IF count=VisPosNum THEN
            Stop;
            !add object grasping logic here
        ENDIF
    ENDFOR
    !go to drop location
    MoveL RelTool(drop,0,0,-100),v1000,z50,Gripp1TCP;
    MoveL drop,v500,fine,Gripp1TCP;!drop point
    stop;
    !add object releasing logic here
    MoveL Offs(drop,0,0,100), v1000, fine, Gripp1TCP;
    MoveAbsJ Home\NoEOffs,v3000,fine,Gripp1TCP;
    RETURN ;
ENDPROC

プログラムロジック

  1. ロボットを初期位置に移動させます。

  2. ロボットを画像撮影姿勢に移動させます。

  3. MM_Init_Socketでソケット通信を初期化します。

  4. Mech-Visionのプロジェクトでパラメータレシピを使用する場合、MM_Switch_Modelで設定することができます。

  5. MM_Start_VisでMech-Visionプロジェクトに実行をトリガーします。

  6. MM_Get_VisPathでMech-Visionの「経路計画」ステップから出力された動作経路を取得します。

  7. 返された経路のステータスコードを確認します。エラーコードが返された場合、ロボットを停止させるなど、ユーザーが対処する必要があります。

  8. ループ文で取得された経路点の位置姿勢を変数に保存します。

  9. ループ文で計画された経路に沿ってロボットを動作し、把持を完了させ、ビジョン領域から離れさせます。

  10. ロボットを把持位置と配置位置間の経路に移動させます。

  11. 設定した配置位置にロボットを移動し、ワークを配置します。ロボットを初期位置に戻します。

カスタマイズ

  • TCP座標を定義

    Gripp1TCP: tooldataのGripp1TCPの値を変更することでTCPを調整できます。

  • 初期位置を定義

    MoveAbsJ Home:初期位置姿勢で初期位置の位置姿勢を定義しています。

  • 画像撮影姿勢を定義

    MoveL camera_capture:camera_captureで画像撮影位置を定義しています。

  • 行動経路を定義

    MoveL waypoint1:把持位置から配置位置までの経路を設定します。この経路はロボットが周辺環境と衝突しないように設定する必要があります。

  • 配置位置を定義

    MoveL drop:dropで配置位置を定義しています。

  • エンドエフェクタの制御ロジックを追加

    ワークを把持、配置する際の制御ロジックを追加することができます。制御ロジックを追加することで、把持、放置時のロジックを設定することができます。

  • 配置位置からのZ方向オフセットを定義

    • 配置位置に近づけます

      MoveL RelTool(drop,0,0,-100):放置位置に接近する際に100mmだけZ方向にオフセットされます。

    • 配置位置から離れます

      MoveL Offs(drop,0,0,100) :放置位置に離れる際に100mmだけZ方向にオフセットされます。