您好!欢迎光临工博士商城

爱普生机器人品牌服务商

产品:57    
联系我们
联系方式
  • 联系人:庾经理
  • 电话:18616561800
  • 邮件:ywk@gongboshi.com
  • 手机:18616561800
站内搜索
 
新闻分类
首页 > 爱普生机器人资料 > 关于爱普生(EPSON)机械视觉引导教程详解!!【干货分享】
爱普生机器人资料
关于爱普生(EPSON)机械视觉引导教程详解!!【干货分享】
发布时间:2020-03-16        浏览次数:2871        返回列表

1、 建立 TCPIP通信,从视觉系统获取可使用的像素坐标字符串,一般机器人控制器作为客户端  client   ,而视觉系统作为  server 。

涉及指令【 OpenNet     WaitNet     LineInput     Print #     Parsestr     Val】

Function TCPIP

      OpenNet #201 As Client WaitNet #201

      LineInput #201 Parsestr                   ..

FEND

2、 确定相机的安装位置,此处以相机安装在  #4 joint    为例子,此时吸嘴也不在原来的 Tool0  中心,所以此时需要确立新的两个坐标系,必要的是确 立吸嘴的工具坐标系  Tool1 ,在机器人控制中的工具坐标系向导进行示教保存,这是前期必要的准备工作。

3、 有了以上步骤作为辅助后,根据   Epson 视觉标定的需求,具体见  VxClib  函数,需要 9 个机器人坐标系下的点,总而言之就是,在新建的    Tool1  下示教9  个点,且获取这九个点下的像素坐标,这样的就可以生成具体的视觉标定caa 文件了

涉及指令【 VxClib      LoadPoints       SavePoints     VxCalSav       VxCalInfo 】

4、 利用上面生成的标定  caa 文件就可以进行之后的操作了,  标定文件是之后坐标转换的基准,也就是说,像素坐标对应的机器人坐标均由此产生。

涉及指令【 VxCalLoad     VxTrans     XY    CX    CY    CZ    CU    CV    CW 】

5、基于以上步骤,要注意实际运行时工具的选用,以免造成工具坐标系的不匹配而位置错误

6、关机触发拍照,使用视觉系统触发,这样的话配合内部存储 IO  指令MemOn.MemO指ff 令即可形成循环的逻辑判断,知道相机的进程,以及对拍照失败等情况做出反应

7、其他需要注意的地方是程序的容错性,不能中途进行不下去就一直等待或者没有别的相应操作,全局变量和局部变量的使用 该项目中相机固定在机器人的   4#轴上,为移动相机 , 利用相机拍照识别托盘中的工件放在一固定的模具内,每次放置为角度位置确保一致
 
Global String pixel_string$;
Global String rec_string$(10);
Global Real data_x, data_y, data_u;
Integer camara_id;
Function main
     Call intialization
     Call TCPIP
     Call creat_calib_data
     Call point_trans
     Call working
Fend

初始化

Function intialization
     If Motor = Off Then
     Motor On
     EndIf
     SpeedS 500; AccelS 1000, 1000 Home; Reset;
     Power High; Speed 60; Accel 60, 60
     SpeedS 500; AccelS 1000, 1000
Fend
 
'[  点位的对应关系 , 计算出来的是否足够准确  ]

' 创建标定数据 caa0.caa,  准备好标定需要的像素坐标  , 机械坐标各 9 个点,[  参考点的使用与否 ]

Function creat_calib_data
     Integer i, j, k;
     Real info(10);
     LoadPoints "robot1.pts"
     Pallet 1, robot_cal1, robot_cal3, robot_cal7, robot_cal9, 3, 3
     ' 生成 9 个机器人坐标点 P20-P28,4.6  换顺序
     For i = 1 To 9
     P(i + 19) = Pallet(1, i)
     Next i
     P13 = Pallet(1, 6)
     P15 = Pallet(1, 4)
     SavePoints "robot1.pts"
     ' 基于刚才生成的   9  个机器人坐标点  , 拍照  9  次, 获取对应点的像素坐标
     P10-P18
  For j = 20 To 28
     Go P(j)
     On light1, 0.4; On camara1, 0.2 '            执行拍照
     Call parsestr_str                            ' 拍完照后进行解析
     P(j - 10) = XY(data_x, data_y, 0, data_u)
     Print "P(j-10)", P(j - 10)
     Next j
     SavePoints "robot1.pts"
     ' 开始生成标定数据
     'vxcalib 0[1-15       标定数据 ID 号],5[   安装方式 :mobile on joint#4],P[ 指定的像素坐标 xy only],P[ 指定的机器人坐标 ],P[  参考点, 也不一定要 ] 
     VxCalib 0, 5, P(10:18), P(20:28), P9
     If (VxCalInfo(0, 1) = True) Then
     For k = 0 To 7
          info(k) = VxCalInfo(0, k + 2)
Next k

     Print "Calibration_0 result:"
     Print "X Avg Error [mm]:", info(0)
     Print "X Max error [mm]:", info(1)
     Print "X mm per pixel [mm]:", info(2)
     Print "X tilt [deg]:", info(3)
     Print "Y Avg error [mm]:", info(4)
     Print "Y Max error [mm]:", info(5)
     Print "Y mm per pixel [mm]:", info(6)
     Print "Y tilt [deg]", info(7)
Else
     Print "calibration failed!"
EndIf
     VxCalSave "ccd0.caa"
Fend

' 创建 TCP/IP 通信, 解析发送来的像素坐标字符串
Function TCPIP

     pixel_string$ = "12000,2212.00,2121212,0.9999";

     OpenNet #201 As Client

     Print "waiting for connect"

     WaitNet #201

     Print #201, "test"; Print "test"

     Print "connection success"

  Line Input #201, pixel_string$
     Print "Receive info: ", pixel_string$
     ParseStr pixel_string$, rec_string$(), ","
     data_x = Val(rec_string$(0))
     data_y = Val(rec_string$(1))
     data_u = Val(rec_string$(2))
Fend

Function parsestr_str
     Line Input #201, pixel_string$
     Print "receive info :", pixel_string$
     ParseStr pixel_string$, rec_string$(), ","
     data_x = Val(rec_string$(0))
     data_y = Val(rec_string$(1))
     data_u = Val(rec_string$(2))
Fend

Function vision_crl(camara_id As Integer)
     OpenNet #202 As Client;
     WaitNet #202;
     If camara_id = 0 Then
     On light1, 0.4; Print #202, "C1";;
EndIf

If camara_id = 1 Then
    On light2, 0.4; Print #202, "C2";
EndIf

     Line Input #202, pixel_string$
     Print "receive info :", pixel_string$
     ParseStr pixel_string$, rec_string$(), ","
     data_x = Val(rec_string$(0))
     data_y = Val(rec_string$(1))
     data_u = Val(rec_string$(2))

Fend
' 坐标转换 , 根据标定数据,将像素坐标转换为机器人坐标

Function point_trans
     ' 只是用转化后的 XY值, 高度 Z 值进行人为指定 , 角度 U值进行偏移处理
     VxCalLoad "caa0.caa";
     P30 = XY(data_x, data_y, 0, 0)
     Tool 2;
     P31 = VxTrans(0, P30)
     P31 = XY(CX(P31), CY(P31), -50, data_u) '          吸料点坐标
     P32 = XY(CX(P31), CY(P31), 0, data_u) '         吸料上方点坐标
     '
     P33 = XY(CX(P31), CY(P31), -50, data_u) '          模具放料点坐标
     P34 = XY(CX(P31), CY(P31), 0, data_u) '  模具上方点坐标
     SavePoints "robot1.pts"
Fend

' 工艺流程程序
Function working
     Integer l;
     Pallet 2, robot_cal1, robot_cal3, robot_cal7, robot_cal7, 3, 3;
     For l = 1 To 9
     Go Pallet(2, 1); On light1, 0.4; On camara1, 0.2; '                    前往指定点拍照
     Call parsestr_str(0);
     Call point_trans;
     Call parsestr_str(1);
     Call point_trans;
     Go P31; On vocaum; Go P32;      ' 校正姿态取料
     Go P33 ! D20; On light1, 0.4; On camara1, 0.2 !;
     Off vocaum; Go P34; '     前往固定模具处放料
  Next l
Fend

' 拍照的时候仍然要注意的是要检测模具处究竟有没有物料,模具上放置点的圆心位置也是通过

' 拍照发送过来的 , 这样的话每次来说要移动的仅仅是工具中心的位置,  把整体当

做工具中心。

' 那么基于规律,发过来的角度用于放置工件时的计算,因为不同角度过来的姿态都是根据 0 度调整而来的控制拍照的方法, *好是一直执行的 , 但是要有衔接 , 这样就涉及内存 IO 的同步,也就是标志位置把拍照选择分支写在前面,字符串处理写在后面



了解更多信息可点击咨询:爱普生机器人服务商



 

联系热线:18616561800 联系人:庾经理 联系地址:上海市宝山区富联一路98弄6号

技术和报价服务:星期一至星期六8:00-22:00 爱普生机器人品牌服务商

返回
顶部