简介:1)什么是码垛? 有规律的移动机器人进行抓取及放置 2)ABB机器人维修-如何简便码垛程序 设置好工件坐标系,工具,对第一个码垛放置点进行示教,xyz方向的间距和个数可设 3)如何创建 创建m_pallet模块 建立两个 在init 程序里,设置xyz方向个数和各方向间距……
1)什么是码垛?
有规律的移动机器人进行抓取及放置
设置好工件坐标系,工具,对第一个码垛放置点进行示教,xyz方向的间距和个数可设
3)如何创建
创建m_pallet模块
建立两个
在init 程序里,设置xyz方向个数和各方向间距
在p_main程序里,创建机器人移动到pHome点,pPick位置(抓取位置),以及第一个放置点
通过三层for循环,进行码垛。实例程序为先x方向,再y方向,再z方向
其中偏移如下:
创建有规律的机器人旋转
1)如果有上图所示6个产品位置要吸取,如何最快速的创建点位?(纯示教?Naive,太体力活了。)
2)如下图,我们可以发现1号位置和0号位置姿态一样,1号相对于0号就是一个半径的偏移,2-6号位置相对于0号也都是一个半径的偏移,2-6号姿态均朝向圆心。由于图中为6个,即从2号开始,每个点姿态相对于1号旋转了60°
3)是不是可以只要示教0号点位置,同时已知半径(未知的话,自己量一下),就能自动算出其他6个点位置而不用示教了呢?答案当然是可以的!!!
4)由于涉及到坐标系偏移和旋转,所以要做好Tool和工件坐标系
5)创建工具gripper_dual,假设z方向100,工具的Z方向为工具延伸方向
6)如下图创建坐标系,圆心在中间,0号到1号方向为X,y如图。下图中的工件坐标系Z朝下(满足右手法则)。这样创建主要是为了计算方便。
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