サンプルプログラム
以下では、標準インターフェースを用いた把持と配置のサンプルプログラムとその操作手順について説明します。
事前準備
-
標準インターフェースの通信設定 を参照して標準インターフェースの通信設定が行われます。
-
キャリブレーションの操作手順 を参照し、コントローラにインストールされたキャリブレーションプログラムを実行するか、手動でロボットを移動させてキャリブレーションポイントを追加します。この手順によって外部パラメータのキャリブレーションが行われます。
-
必要なMech-Vision、Mech-Vizのプロジェクトを作成し、 プロジェクトの自動読み込み が設定されます。
-
TCP座標を正しく設定します。
-
ロボットが予期しない動作する可能性があるので、初めは速度を低く設定してください。
サンプルプログラムの紹介
簡単な把持・配置のサンプルプログラムは、Mech-VisionとMech-Vizソフトウェアのインストールディレクトリにある Mech-Center/Robot_Interface/ABB/sample
フォルダに格納されています。
Mech-Visionからビジョン結果を取得
PROC Sample_1()
!**********************************************************
! FUNCTION:Eye to Hand simple pick and place with Mech-Vision
! 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,300;
WaitTime 0.1;
MM_Open_Socket;
!Set vision recipe
MM_Switch_Model 1,1;
!Run vision project
MM_Start_Vis 1,0,2,snap_jps;
WaitTime 1;
MM_Get_VisData 1,PoseNum,Status;
IF Status<>1100 THEN
Stop;
ENDIF
MM_Get_Pose 1,pickpoint,label,speed;
MM_Close_Socket;
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
プログラムロジック
-
ロボットを初期位置に移動させます。
-
ロボットを画像撮影位置に移動させます。
-
MM_INIT_SKTでソケット通信を初期化します。
-
MM_Open_SocketでTCP接続を構築します。
-
Mech-Visionのプロジェクトでパラメータレシピを使用する場合、使用するレシピはMM_Switch_Modelで設定することができます。
-
MM_Start_VisでMech-Visionプロジェクトに実行をトリガーします。
-
1秒待機します。Eye-In-Handでは、撮影が完了するまでロボットが完全に停止している必要があるため、WAIT命令が必要です。Eye-To-Handでは、MM_Start_VisとMM_Get_VisDataの間に移動命令がある場合、このWAIT命令は必要ありません。
-
Mech-Visionからの処理結果を取得します。
-
返されたステータスコードを確認します。エラーコードが返された場合、プログラムは一時停止します。
-
取得したTCP位置姿勢データを指定した変数に保存します。
-
MM_Close_SocketでTCP接続を切断します。
-
ロボットを把持位置に移動させ、把持を行います。
-
ロボットを把持位置と配置位置間の経路に移動させます。
-
設定した配置位置にロボットを移動し、ワークを配置します。
カスタマイズ
-
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 Sample_2()
!**********************************************************
! FUNCTION:Eye to Hand simple pick and place with Mech-Viz
! 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,300;
WaitTime 0.1;
MM_Open_Socket;
!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, 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},label{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
MM_Close_Socket;
!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が出力した位置姿勢に従い、設定した配置位置にロボットを移動し、ワークを配置します。
-
ロボットを初期位置に移動させます。
-
ロボットを画像撮影位置に移動させます。
-
MM_INIT_SKTでソケット通信を初期化します。
-
MM_Open_SocketでTCP接続を構築します。
-
Mech-Visionのプロジェクトでパラメータレシピを使用する場合、使用するレシピはMM_Switch_Modelで設定することができます。
-
Mech-Vizプロジェクトの実行をトリガーします。
-
Mech-Vizから動作計画を取得します。
-
返されたステータスコードを確認します。エラーコードが返された場合、プログラムは一時停止します。
-
ループ文で取得された位置姿勢を変数に保存します。
-
ループ文でロボットをMech-Vizによって計画された経路に沿って移動させ、把持を完了させます。
-
MM_Close_SocketでTCP接続を切断します。
-
ロボットを把持位置と配置位置間の経路に移動させます。
-
設定した配置位置にロボットを移動し、ワークを配置します。ロボットを初期位置に戻します。
カスタマイズ
-
TCP座標を定義
Gripp1TCP:tooldataのGripp1TCPの値を変更することでTCPを調整できます。
-
初期位置を定義
MoveAbsJ Home:初期位置姿勢で初期位置の位置姿勢を定義しています。
-
画像撮影位置を定義
MoveL camera_capture:camera_captureで画像撮影位置を定義しています。
-
移動経路を定義
MoveL waypoint1:把持位置から配置位置までの経路を設定します。この経路はロボットが周辺環境と衝突しないように設定する必要があります。
-
配置位置を定義
MoveL drop:dropで配置位置を定義しています。
-
ロボットハンドの制御ロジックを追加
ワークを把持、配置する際、ロボットハンドの制御ロジックを追加します。
-
配置前と配置後の近接距離を定義
-
配置位置に近づけます
MoveL RelTool(drop,0,0,-100)
配置位置に接近する際に100mmだけZ方向にオフセットされます。 -
配置位置から離れます
MoveL Offs(drop,0,0,100)
配置位置に離れる際に100mmだけZ方向にオフセットされます。
-
Mech-Visionの「経路計画」ステップを使用して経路を取得
PROC Sample_3()
!**********************************************************
! FUNCTION:Eye to Hand simple pick and place with Mech-Vision Path Planning Step
! 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,300;
WaitTime 0.1;
MM_Open_Socket;
!Set vision recipe
MM_Switch_Model 1,1;
!Run vision project
MM_Start_Vis 1,0,2,snap_jps;
WaitTime 1;
!get planned path from Mech-Vision Path Planning Step
MM_Get_VisPath 1,2,PoseNum,VisPosNum,Status;
IF Status<>1103 THEN
Stop;
ENDIF
FOR i FROM 1 TO PoseNum DO
count:=i;
MM_Get_Pose count,P{count},label{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
MM_Close_Socket;
!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
プログラムロジック
-
ロボットを初期位置に移動させます。
-
ロボットを画像撮影位置に移動させます。
-
MM_INIT_SKTでソケット通信を初期化します。
-
MM_Open_SocketでTCP接続を構築します。
-
Mech-Visionのプロジェクトでパラメータレシピを使用する場合、MM_Switch_Modelで設定することができます。
-
MM_Start_VisでMech-Visionプロジェクトに実行をトリガーします。
-
MM_Get_VisPathでMech-Visionの「経路計画」ステップから出力された動作経路を取得します。
-
返された経路のステータスコードを確認します。エラーコードが返された場合、ロボットを停止させるなど、ユーザーが対処する必要があります。
-
ループ文で取得された経路点の位置姿勢を変数に保存します。
-
ループ文でロボットを計画された経路に沿って移動させ、把持を完了させます。
-
MM_Close_SocketでTCP接続を切断します。
-
ロボットを把持位置と配置位置間の経路に移動させます。
-
設定した配置位置にロボットを移動し、ワークを配置します。
カスタマイズ
-
TCP座標を定義
Gripp1TCP:tooldataのGripp1TCPの値を変更することでTCPを調整できます。
-
初期位置を定義
MoveAbsJ Home:初期位置姿勢で初期位置の位置姿勢を定義しています。
-
画像撮影位置を定義
MoveL camera_capture:camera_captureで画像撮影位置を定義しています。
-
移動経路を定義
MoveL waypoint1:把持位置から配置位置までの経路を設定します。この経路はロボットが周辺環境と衝突しないように設定する必要があります。
-
配置位置を定義
MoveL drop:dropで配置位置を定義しています。
-
ロボットハンドの制御ロジックを追加
ワークを把持、配置する際、ロボットハンドの制御ロジックを追加します。
-
配置前と配置後の近接距離を定義
-
配置位置に近づけます
MoveL RelTool(drop,0,0,-100)
配置位置に接近する際に100mmだけZ方向にオフセットされます。 -
配置位置から離れます
MoveL Offs(drop,0,0,100)
配置位置に離れる際に100mmだけZ方向にオフセットされます。
-