サンプルプログラム

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

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

簡単な把持・配置のサンプルプログラムは、Mech-Centerのインストールパス XXXX/Mech-Center-xxx/Robot_Interface/KAWASAKI/sample フォルダに格納されています。

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

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
.PROGRAM vision_sample_1()
;**********************************************************
;* FUNCTION:simple pick and place with Mech-Vision
;* mechmind, 2022-5-1
;**********************************************************
  accuracy 1 always
  speed 30 always
  TOOL gripper ;set TCP
  Home ;move robot home position
  lmove camera_capture ;move to camera capture position
  break
  pos_num = 0
  ;Set ip address of IPC
  call mm_init_skt(127,0,0,1,50000,60)
  twait 0.1
  ;Set vision recipe
  ;call mm_switch_model(1,1)
  ;Run vision project
  call mm_start_vis(1,1,2)
  twait 1
  call mm_get_visdata(1,pos_num,ret2)
  if ret2 <> 1100
      halt
  end
  call mm_get_pose(1,&pick[1],label[l],speed[1])
  LAPPRO pick[1],100
  LMOVE pick[1]
  break
  ;Add object grasping logic here.
  ldepart 100
  lmove waypoint[1]
  lappro drop[1],100
  lmove drop[1]
  ;Add object releasing logic here.
  ldepart 100
  HOME
.END

プログラムロジック

  • 第8行目:ツールの中心点TCPを設定します。TCPは位置姿勢変量fripperによって定義されます。ティーチングペンダントでTCPを設定する方法については、 ロボットのTCPを設定 をご参照ください。

  • 第9行目:ロボットを初期位置に移動します。ティーチングペンダントで初期位置を設定する方法については、 初期位置を設定 をご参照ください。

  • 第10行目:ロボットが直線運動でカメラの撮影位置に移動します。撮影位置の位置姿勢は位置姿勢変量camera_captureによって定義されます。ティーチングペンダントで位置姿勢の変量を設定する方法は、 ティーチング位置姿勢データを設定 をご参照ください。

  • 第14行目:mm_init_sktを呼び出して通信の初期化設定を行います。詳細については、 通信の初期化 をご参照ください。

  • 第16~17行目:Mech-Visionプロジェクトレシピを設定する必要がある場合は、ここでmm_switch_modelを呼び出してプロジェクトレシピを設定できます。詳細については Mech-Visionパラメータレシピの切り替え をご参照ください。

  • 第19行目:mm_start_visを呼び出し、Mech-Visionプロジェクトを実行させます。詳細については、 Mech-Visionをトリガー をご参照ください。

  • 第20行目:1秒待機します。Eye-In-Handモードでは、撮像が完了するまでロボットが完全に停止している必要があるため待機時間の設定が必要です。Eye To Handモードでは、mm_start_visとmm_get_visdataの間に移動(MoveLまたはMoveJ)がある場合、待機時間の設定は必要ありません。

  • 第21行目:mm_get_visdataを呼び出し、Mech-Visionの認識結果を取得します。pos_numは受信した位置姿勢の数を保存するために使用され、ret2は本コマンドを実行するステータスコードを保存するために使用されます。詳細については、 Mech-Visionの結果を取得 をご参照ください。

  • 第22~24行目:返されたステータスコードを確認します(1100は正常実行を表すステータスコード)。エラーコードが返された場合、プログラムは一時停止します。

  • 第25行目:mm_get_poseを呼び出し、最初のビジョン結果を取得します。&pick[1]で最初のの位置姿勢データを保存するために使用され、label[l]は最初の位置姿勢データに対応するラベルデータを保存するために使用され、speed[1]は最初の位置姿勢データに対応する移動速度を保存するために使用されます。詳細については、 位置姿勢を取得 をご参照ください。

  • 第26行目:ロボットが直線運動で把持位置上部100㎜のところまで移動した後、接近する際に衝突がないように、オフセットを修正する必要があります。

  • 第27行目:ロボットが直線運動で把持位置まで移動させます。

  • 第29行目:ワークを把持するために、ここでハンドの制御ロジックを追加する必要があります。

  • 第30行目:把持位置からツールZ軸方向の上に沿って100㎜移動し、離れる際に衝突がないように、オフセットを修正する必要があります。

  • 第31行目:ロボットが把持位置から配置位置まで移動する際に衝突を起こさないように、一つ、もしくは複数の経路中間点を追加することができます。経路中間点は位置姿勢変量のwaypoint[1]によって定義されます。ティーチングペンダントで位置姿勢変量を設定する方法については、 ティーチング位置姿勢データを設定 をご参照ください。

  • 第32行目:ロボットが直線運動で把持位置上部100㎜のところまで移動した後、接近する際に衝突が起こさないよう、オフセットを修正する必要があります。

  • 第33行目:ロボットが直線運動で固定された配置位置まで移動させます。

  • 第34行目:ワークを配置するために、ここでハンドの制御ロジックを追加する必要があります。

  • 第 35 行目:配置位置からツールZ軸方向の上に沿って100㎜移動し、離れる際に衝突がないよう、オフセットを修正する必要があります。

  • 第36行目:ロボットを初期位置に移動させます。

Mech-Vizで動作経路を計画

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
.PROGRAM vision_sample_2()
;**********************************************************
;* FUNCTION:simple pick and place with Mech-Viz
;* mechmind, 2022-5-1
;**********************************************************
  accuracy 1 always
  speed 30 always
  TOOL gripper ;set TCP
  Home ;move robot home position
  LMOVE camera_capture ;move to camera_capture position
  break
  pos_num = 0
  ;Set ip address of IPC
  call mm_init_skt(127,0,0,1,50000,60)
  twait 0.1
  ;Set vision recipe
  ;call mm_switch_model(1,1)
  ;Run Viz project
  call mm_start_viz(1)
  twait 0.1
  ;set branch exitport
  ;call mm_set_branch(1,1)
  ;get planned path
  call mm_get_vizdata(2,pos_num,vispos_num,ret1)
  if ret1 <> 2100
      halt
  end
  for count=1 to pos_num
    call mm_get_pose(count,&movepoint[count],label[count],speed[count])
  end
  ;follow the planned path to pick
  for count =1 to pos_num
    speed speed[count]
    LMOVE movepoint[count]
    if count == vispos_num then
        ;add object grasping logic here
    end
  end
  ;go to drop location
  ldepart 100
  lmove waypoint[1]
  lappro drop[1],100
  lmove drop[1] ;drop point
  ;add object releasing logic here
  ldepart 100
  HOME
.END

プログラムロジック

  • 第8行目:ツールの中心点TCPを設定します。TCPは位置姿勢変量fripperによって定義されます。ティーチングペンダントでTCPを設定する方法については、 ロボットのTCPを設定 をご参照ください。

  • 第9行目:ロボットを初期位置に移動します。ティーチングペンダントで初期位置を設定する方法については、 初期位置を設定 をご参照ください。

  • 第10行目:ロボットが直線運動でカメラの撮影位置に移動します。撮影位置の位置姿勢は位置姿勢変量camera_captureによって定義されます。ティーチングペンダントで位置姿勢の変量を設定する方法は、 ティーチング位置姿勢データを設定 をご参照ください。

  • 第14行目:mm_init_sktを呼び出して通信の初期化設定を行います。詳細については、 通信の初期化 をご参照ください。

  • 第16~17行目:Mech-Visionプロジェクトレシピを設定する必要がある場合は、ここでmm_switch_modelを呼び出してプロジェクトレシピを設定できます。詳細については Mech-Visionパラメータレシピの切り替え をご参照ください。

  • 第19行目:mm_start_vizを呼び出し、Mech-Vizプロジェクトを実行させます。詳細については、 Mech-Vizをトリガー をご参照ください。

  • 第21~22行目:Mech-Vizプロジェクトでブランチを設定する必要がある場合、ここでmm_set_branchを呼び出してブランチタスクの出口を設定します。詳細については、 Mech-Vizのブランチを選択 をご参照ください。

  • 第24行目:mm_get_vizdataを呼び出し、Mech-Vizプロジェクトで計画した把持経路を取得します。pos_numは受信した位置姿勢の数を保存するために使用され、vispos_numは最初の「視覚処理による移動」が経路での位置番号を保存するために使用され、ret1は本コマンドを実行するステータスコードを保存するために使用されます。詳細については、 移動計画を取得 をご参照ください。

  • 第25~27行目:返されたステータスコードを確認します(2100は正常実行のステータスコード)。エラーコードが返された場合、プログラムは一時停止します。

  • 第28~30行目:ループで取得した位置姿勢を変数に保存します。mm_get_poseを呼び出し、ビジョン結果と移動経路内点の位置姿勢データを取得します。詳細については、 位置姿勢を取得 をご参照ください。

  • 第32~38行目:ループでロボットをMech-Vizで計画された経路を把持位置まで移動させます。ワークを把持するために、36行目にハンドの制御ロジックを追加する必要があります。

  • 第40行目:把持位置からツールのZ軸方向の上に沿って100㎜移動します。離れる際に衝突が起こさないよう、オフセットを修正する必要があります。

  • 第41行目:ロボットが把持位置から配置位置まで移動する際に衝突を起こさないように、一つもしくは複数の経路中間点を追加することができます。経路中間点は位置姿勢変量のwaypoint[1]によって定義されます。ティーチングペンダントで位置姿勢変量を設定する方法については、 ティーチング位置姿勢データを設定 をご参照ください。

  • 第42行目:ロボットを配置位置上部100㎜まで移動させ、接近する際に衝突が起こさないように、オフセットを修正する必要があります。

  • 第43行目:ロボットを直線運動で固定された配置位置に移動させます。

  • 第44行目:ワークを配置するために、ここでハンドの制御ロジックを追加する必要があります。

  • 第45行目:配置位置からZ軸方向の上に沿って100mm移動し、離れる際に衝突が起こさないように、オフセットを修正する必要があります。

  • 第46行目:ロボットを初期位置に移動させます。

サンプルプログラムを実行

サンプルプログラムを実行する前に、次の前提条件を満たす必要があります。

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

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

  3. Mech-Visionプロジェクトを構築し、 プロジェクトの自動読み込み にチェックを入れます。

  4. Mech-Vizプロジェクトを構築し、ツールバーの icon_robot にチェックを入れます。

  5. Mech-Centerの「設定」でMech-Visionで自動的に読み込まれたプロジェクトリストを同期し、プロジェクトの順番を調整して 保存 をクリックします。

    ../../../../_images/prerequisite_1.png
  6. Mech-Centerの「設定」で 実行をシミュレート のチェックを外し、 保存 をクリックします。

    ../../../../_images/prerequisite_2.png
  7. ロボットを初期位置、写真撮影点、ロボットTCP、経路点に移動させ、ティーチペンダントでそれらの位置でのロボットの位置姿勢が対応する変数に記録されます。

上記の前提条件を満たしたら、 こちら を参照してプログラムを実行します。