更多联系我们

广州子锐机器人技术有限公司

电话:400-878-2528
手机:15889988091
传真:020-32887675
地址:广州市番禺区东环街金山谷创意八街1号109


官方微信


添加微信帮助解决机器人故障

首页 > ABB机器人维修 >

ABB机器人维修-ABB机器人创建码垛程序

日期:2018-05-22 人气: 来源:www.zr-abb.com 作者:ABB机器人维修

简介:1)什么是码垛? 有规律的移动机器人进行抓取及放置 2)ABB机器人维修-如何简便码垛程序 设置好工件坐标系,工具,对第一个码垛放置点进行示教,xyz方向的间距和个数可设 3)如何创建 创建m_pallet模块 建立两个 在init 程序里,设置xyz方向个数和各方向间距……
  
  1)什么是码垛?
  有规律的移动机器人进行抓取及放置
  2)ABB机器人维修-如何简便码垛程序
  设置好工件坐标系,工具,对第一个码垛放置点进行示教,xyz方向的间距和个数可设
  3)如何创建
  创建m_pallet模块
        ABB机器人维修-ABB机器人创建码垛程序
  建立两个
        ABB机器人维修-ABB机器人创建码垛程序
  在init 程序里,设置xyz方向个数和各方向间距
        ABB机器人维修-ABB机器人创建码垛程序
  在p_main程序里,创建机器人移动到pHome点,pPick位置(抓取位置),以及第一个放置点
  通过三层for循环,进行码垛。实例程序为先x方向,再y方向,再z方向    
        ABB机器人维修-ABB机器人创建码垛程序
 
  其中偏移如下:
  创建有规律的机器人旋转
        ABB机器人维修-ABB机器人创建码垛程序
  1)如果有上图所示6个产品位置要吸取,如何最快速的创建点位?(纯示教?Naive,太体力活了。)
  2)如下图,我们可以发现1号位置和0号位置姿态一样,1号相对于0号就是一个半径的偏移,2-6号位置相对于0号也都是一个半径的偏移,2-6号姿态均朝向圆心。由于图中为6个,即从2号开始,每个点姿态相对于1号旋转了60°
        ABB机器人维修-ABB机器人创建码垛程序
  3)是不是可以只要示教0号点位置,同时已知半径(未知的话,自己量一下),就能自动算出其他6个点位置而不用示教了呢?答案当然是可以的!!!
  4)由于涉及到坐标系偏移和旋转,所以要做好Tool和工件坐标系
  5)创建工具gripper_dual,假设z方向100,工具的Z方向为工具延伸方向
         ABB机器人维修-ABB机器人创建码垛程序
  6)如下图创建坐标系,圆心在中间,0号到1号方向为X,y如图。下图中的工件坐标系Z朝下(满足右手法则)。这样创建主要是为了计算方便。
         ABB机器人维修-ABB机器人创建码垛程序
  7)在workwobject2坐标系,gripper_dual工具下,示教中间产品位置Target_center,此时工具的Z必须垂直于产品平面,即工具的Z朝下。(其实只是要用这个点的姿态和z,这个点的xy都是0,因为这个点在workobject2坐标系处于原点,即xy都是0)
  8)设置圆心到第一个产品的距离(即半径radius),这里举例
  9)我们假设第一个位置叫Target1,则在workobject2坐标系下
  Target1:=Target_center;!先让Target1位置和姿态都等于
  Target1.trans.x:=radius*cos(60*0);!重新计算位置的
  Target1.trans.y:=radius*sin(60*0);!重新计算位置的
  Target1:=RelTool(Target1,0,0,0Rz:=0*60);!得到计算后的位置x和y后,tcp绕着工具的Z旋转60°。
  10)通过上述例子,就得到了Target1位置,注意是在workobject2坐标系下。
  11)再配合test等流程,就可以比较简单的完成6个位置的计算和移动,如下
    PROC main()
    radius:=21.45;
    count1:=1;
    WHILEcount1<7 DO
    rHome;
    cal;
    routine1;
    count1:=count1+1;
    ENDWHILE
    ENDPROC 
    PROC routine1()
    MoveJoffs(Target_temp,0,0,-30),v500,z1,gripper_dualWObj:=Workobject_2;
    MoveLTarget_temp,v500,z1,gripper_dualWObj:=Workobject_2;
    WaitTime 1;
    MoveLoffs(Target_temp,0,0,-30),v500,z1,gripper_dualWObj:=Workobject_2;
    ENDPROC
    PROC cal()
    Target_temp:=Target_center;
    TEST count1
    CASE 1:
    Target_temp.trans.x:=radius*cos(60*(count1-1));
    Target_temp.trans.y:=radius*sin(60*(count1-1));
    Target_temp:=RelTool(Target_temp,0,0,0Rz:=(count1-1)*60);
    CASE 2:
    Target_temp.trans.x:=radius*cos(60*(count1-1));
    Target_temp.trans.y:=radius*sin(60*(count1-1));
    Target_temp:=RelTool(Target_temp,0,0,0Rz:=60);
    CASE 3:
    Target_temp.trans.x:=radius*cos(60*(count1-1));
    Target_temp.trans.y:=radius*sin(60*(count1-1));
    Target_temp:=RelTool(Target_temp,0,0,0Rz:=120);
    CASE 4:
    Target_temp.trans.x:=radius*cos(60*(count1-1));
    Target_temp.trans.y:=radius*sin(60*(count1-1));
    Target_temp:=RelTool(Target_temp,0,0,0Rz:=180);
    CASE 5:
    Target_temp.trans.x:=radius*cos(60*(count1-1));
    Target_temp.trans.y:=radius*sin(60*(count1-1));
    Target_temp:=RelTool(Target_temp,0,0,0Rz:=-120);
    CASE 6:
    Target_temp.trans.x:=radius*cos(60*(count1-1));
    Target_temp.trans.y:=radius*sin(60*(count1-1));
    Target_temp:=RelTool(Target_temp,0,0,0Rz:=-60);
    ENDTEST
    ENDPROC
    PROC rHome()
    MoveJpHome,v500,z1,gripper_dualWObj:=wobj0;
    ENDPROC

文章来源,工业机器人维修官网:www.zr-abb.com