1. CS 机器人搭配视觉工作流程
CS 机器人搭配 2D 视觉,常用于偏移取料。常见流程:来料位置不固定,视觉在固定高位 对产品拍照,算出产品位置后把数据发给机器人,机器人走到对应取料位夹取产品后再去放料。
如果没有视觉,也可以用电脑网口调试助手和电脑虚拟机搭配测试,模拟视觉,用网口助 手发对应偏移数据给到机器人运动。
2. 运行前准备
2.1 检查网络是否连通
插好网线,将机器人 IP 和视觉 IP 设置成同网段(前三位相同,后一位不同),然后在视觉电 脑终端 ping 机器人 IP,看是否能 ping 通,确认网络有连通。
2.2 示教机器人的工具 TCP 和用户坐标系
确认机器人的工具 TCP,可以用四点法把 TCP 点做到吸盘/夹爪中点,也可以不做,默认 在法兰中心,在做旋转中心标定时用这个工具 TCP。
确认机器人的坐标系,可以利用基座坐标系,也可以先新建用户坐标系,然后标定时使用 对应的用户坐标系
2.3 9 点标定方向+3 点标定旋转 TCP 点
本案例采用 9 点标定视觉方向与机器人 X/Y 方向一致,每次移动 5mm。采用 3 点标定视觉 旋转中心与机器人工具 TCP 相同。流程如图1:
图1 标定流程
机器人程序如图 2(程序名:biaoding.task)。机器人每到达一个点会停下来并弹窗提示,待操作员才视觉上记录后,然后在示教器上点击继续,机器人自动走下一个点。
图2 标定程序
3. 机器人程序运行
3.1 机器人动作流程
机器人搭配视觉的动作流程如下图 3:
图3 机器人搭配视觉动作流程
3.2 机器人收相对坐标
机器人收到视觉发送过来的坐标是相对值,也就是相对取料基准位的偏移,机器人在取料 基准位上加上视觉发过来的偏移量(dx,dy,rz),到达纠偏后的取料位。程序如下图 4。
图4 视觉相对偏移 任务
网口通讯脚本程序 socket_tcpip.script 如下图 5:
ip="192.168.1.100"
port=3000
ret=socket_open(ip,port)#向服务器发起通讯
while(ret==False):
ret=socket_open(ip,port)#当未通讯上时,每隔 1s 发起通讯
sleep(1)
textmsg(ret)
textmsg("conncet successful")#打印通讯成功
图5 socket_tcpip.script
接收视觉坐标脚本程序 receive.script 如下图 6。视觉发过来的数据按照:”OK,1,2,3#” 格式,第 1 位数代表标志符,拍照成功发送”OK”,拍照失败发送”NG”;第 2,3,4 位数分别是 X,Y,RZ 方向的偏移,数据用”,”隔开,末尾用”#”作为结束符。
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
图6 receive.script
3.3 机器人收绝对坐标
机器人收到视觉发送过来的坐标是绝对值,也就是机器人的目标点坐标,机器人直接走收 到的坐标,到达纠偏后的取料位。程序如下图 7。
图7 视觉绝对坐标 任务
机器人接收数据脚本如下图 8。格式定义如图 6 脚本程序。
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,弹窗提示
end
图8 receive2.script