【CSJP018】CSロボットと2Dビジョンカメラの適応(オフセットピッキング)



CS ロボットには 2D ビジョン カメラが装備されており、オフセット ピッキングによく使用されます。 共通プロセス:ワークの位置は固定されていない ビジョンカメラで製品を高い位置で撮影 ビジョン端末コンピュータでワークの位置を計算し、そのデータをロボットに送信 ロボットは対応する位置まで走行ワークの位置を掴んで製品を持ち上げ、指定された位置まで走って製品を置きます。


2D ビジョン カメラがない場合は、コンピュータ ネットワーク ポート デバッグ アシスタントとコンピュータ仮想マシンを使用して、ビジョン作業をテストおよびシミュレートすることもできます。 次に、ネットワーク ポート デバッグ アシスタントを使用して、対応するオフセット データをロボットに送信し、ロボットを移動させます。


1. 準備


1.1 ネットワークに接続し、通信が成功していることを確認し

ネットワークケーブルを接続し、ロボットのIPとビジョンのIPを同じネットワークセグメント(4桁のうち最初の3桁が同じで、最後の1桁が異なります)に設定してから、ビジョンコンピュータのターミナルを開いて、 ping コマンドを使用してロボットの IP をテストし、通信が成功したかどうかを確認します。正常に通信できることを確認します。


1.2 ロボットのツール TCPとユーザー座標系を選択し

ロボットのツール TCP を選択します。4 点法を使用して吸盤/爪の中点を TCP 点として設定することも、TCP を設定することもできません。ロボットのデフォルトの TCP はフランジの中心にあります。回転中心を校正する場合には、本ツールTCPをご使用ください。

ロボットの座標系を選択するには、ベース座標系を使用できます。また、ユーザー座標系を作成し、キャリブレーション中に対応するユーザー座標系を使用することもできます。

1.3 9 点校正方向 + 3 点校正回転 TCP ポイント

今回は、9 点キャリブレーションを使用して、視覚方向がロボットの X/Y 方向と一致するようにキャリブレーションし、毎回 5mm 移動します。 3点キャリブレーションビジョンを使用し、回転中心はロボットツールTCPと同じです。 このプロセスを図 1 に示します。

図 1

CS プログラムを図 2 に示します (プログラム名: biaoding.task)。 ロボットがポイントに到達するたびに停止し、ポップアップウィンドウが表示され、オペレータがビジョンターミナルコンピュータに記録した後、ティーチングペンダントの「続行」をクリックすると、ロボットは自動的に次のポイントに移動します。

図 2

缺图缺图缺图1,别着急,我会补上的


2. ロボットプログラムの実行

2.1 ロボットの動作プロセス

2D ビジョンカメラを搭載したロボットの動作プロセスは図 3 に示すとおりです。

図 3

缺图缺图缺图2,别着急,我会补上的


2.2 ロボットが相対座標データを受信する

ロボットは、ビジョンから送信された座標の相対値(つまり、ピッキング基準位置に対するオフセット)を受信した後、ビジョンから送信された(dx、dy、rz)オフセットをつかみ基準位置データに追加します。そして、ロボットはオフセット補正された掴み位置に到達します。 プログラムを以下の図 4 に示します。

ネットワーク ポート通信スクリプト プログラムソケット_tcpip.script は下記の通り:

ip="192.168.1.100" 
port=3000 
ret=socket_open(ip,port)#サーバーに通信を要請します
while(ret==False): 
 ret=socket_open(ip,port)#通信ができない場合は、1秒ごとに再度通信を要請します
 sleep(1) 
 textmsg(ret) 
textmsg("conncet successful")#通信がでました場合は、“接続成功”を印刷します

ビジョンが送信するデータ形式は「OK,1,2,3#」です。最初の数字は識別子を表します。写真の撮影が成功した場合は「OK」が送信され、写真の撮影が失敗した場合は「NG」が送信されます。 2桁目、3桁目、4桁目はそれぞれX、Y、RZ方向のオフセットで、それぞれ「,」で区切られ、終端文字「#」で終わります。 ビジョンカメラで計算された座標をロボットが受信するためのスクリプトプログラムreceive.scriptは以下のとおりです。

socket_send_string("Hello World")#サーバーに通信を要請します
textmsg("send data successful")#通信がでました場合は、”接続成功”を印刷します 
global recv 
global data 
recv=socket_read_string(suffix="#",timeout=0)#文字列形式データを受け取り、タイムアウトの時間を無制限設定しております
textmsg("receive data=",recv)#受け取れたデータを印刷する 
data=recv.split(",")#","で文字列を区切して変数“data”に代入します 
textmsg(data)#区切された文字列を印刷します 
if (data[0]=="OK"):#“OK”のような文字列を受け取った後オフセットデータに代入します 
 dx=to_num(data[1])#文字列を浮動小数に変換します 
 dy=to_num(data[2]) 
 rz=to_num(data[3]) 撮る
else: 
 popup(s="ワークが見えなくなっていないか確認してください",title="撮る結果 NG",blocking=True)#撮影結果がNGの場合はポップアップウィンドウが表示されます
end<br/>

2.3 ロボットが絶対座標位置を受け取る

ロボットがビジョンから受け取る座標は、ロボットの目標点の座標である絶対値であり、ロボットは受け取った座標に移動し、修正されたワーク把持位置に到達します。 プログラムを以下に示します:


データを受信するロボットのスクリプトを以下に示します。 フォーマット定義を図 “receive.script” のスクリプト プログラムに示します。

socket_send_string("Hello World")#サーバーに通信を要請します 
textmsg("send data successful")#通信がでました場合は、“接続成功”を印刷します 
#global recv 
#global data 
recv=socket_read_string(suffix="#",timeout=0)#文字列形式データを受け取り、タイムアウトの時間を無制限設定しております 
textmsg("receive data=",recv)#受け取れたデータを印刷する 
data=recv.split(",")#","で文字列を区切して変数“data”に代入します
if (data[0]=="OK"):#“OK”のような文字列を受け取った後オフセットデータに代入します 
 dx=to_num(data[1])#文字列を浮動小数に変換します 
 dy=to_num(data[2]) 
 dz=to_num(data[3]) 
 rx=to_num(data[4]) 
 ry=to_num(data[5]) 
 rz=to_num(data[6]) 
else: 
 popup(s="ワークが見えなくなっていないか確認してください",title="拍照 NG",blocking=True)#撮る結果 NG",blocking=True)#撮影結果がNGの場合はポップアップウィンドウが表示されますend
点击显示全文
赞同0
发表评论
分享

手机扫码分享
0
276
收藏
举报
收起
登录
  • 密码登录
  • 验证码登录
还没有账号,立即注册
还没有账号,立即注册
注册
已有账号,立即登录
选择发帖板块
上传文件
举报
请选择举报理由
举报
举报说明