サンプルプログラム

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

事前準備

  1. ロード手順 を参照してロボットのコントローラにロードし、Mech-Centerとの通信を確立します。

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

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

  4. Mech-VisionのプロジェクトリストはMech-Centerの「設定」で同期されます。またプロジェクトの順序も調整することができます。

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

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

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

簡単な把持・配置のサンプルプログラムは、Mech-Centerのインストールパス XXXX/Mech-Center-xxx/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;
  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方向オフセットを定義

    • 把持位置に近づけます

      MoveJ 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;
  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方向にオフセットされます。