RobotStudio教程:ABB机器人拆垛与码垛应用示教编程与虚拟仿真
目录
任务描述
机器人拆垛与码垛工作站创建
机器人拆垛与码垛工作流程分析
机器人位置偏移函数介绍
机器人拆垛与码垛应用示教编程
机器人拆垛与码垛虚拟仿真
任务描述
在RobotStudio软件中创建ABB机器人拆垛与码垛工作站,并示教机器人拆垛与码垛程序,实现机器人拆垛与码垛应用虚拟仿真。ABB机器人的型号规格、工具等外围设备根据实际需要自行选定。
拆垛垛块排序如下图所示,垛块长度为600mm,宽度为200mm,高度也为200mm。垛块共码放了3层,每一层码放8块。每一层的垛块横向摆放6块,竖向摆放2块,并且层与层之间垛块采用混合交叉方式码放。
码垛垛块排序与拆垛垛块排序方式基本一致,也是码放3层,每层横竖码放共8块,层与层之间也是采用混合交叉码放方式,只是码垛垛块的码放位置与拆垛垛块的码放位置为镜像对称码放,如下图所示。
机器人拆垛与码垛工作站创建
在RobotStudio软件中创建虚拟仿真项目,添加一台ABB机器人模型,机器人使用吸盘工具,可从外部导入设计好的三维模型。再添加两个托盘,并布局到合适位置,其中一个用于码放拆垛垛块,另一个用于码放码垛垛块。
按照任务描述要求,使用软件自带的模型创建功能创建码垛垛块。垛块创建好后,将垛块一层一层地码放到拆垛托盘上。在码垛托盘上也分别横竖码放两个垛块,作为机器人示教编程的位置参考。模型全部布局完成后,其效果如下图所示。
从布局创建ABB机器人虚拟系统,然后添加动态吸盘Smart组件,用来吸取与释放垛块。动态吸盘Smart组件的添加方法可参考之前发布过的文章《RobotStudio软件:机床上下料工作站机器人工具Smart组件添加》,这里不再过多介绍。
机器人拆垛与码垛工作流程分析
机器人码垛应用其实也是一种搬运应用,只是这种应用是机器人按照一定的规律重复点对点的运动路径的搬运应用。机器人拆垛应用可以看作是机器人码垛运动的逆运行。
一般情况下,机器人码垛的垛块规格、码垛的层数以及每一层垛块的码放个数、码放样式都是固定的,并且具备一定的数学运算关系,通过这个数学运算关系就能规划出机器人拆垛与码垛应用的运动路径。
如下图所示,是本例ABB机器人拆垛与码垛应用的工作原理示意图。机器人位于拆垛垛块与码垛垛块中间,也就是大地坐标系位置处,两边的垛块码放位置关于大地坐标系YZ轴所在平面镜像对称。工作时,机器人先由左侧的拆垛托盘上从右向左、从上向下依次吸取垛块;然后运动到右侧的码垛托盘处从右向左、从下向上依次释放垛块。
如果将码垛托盘上序号为1的垛块与序号为7的垛块分别作为机器人吸取垛块的示教点,以大地坐标系为参考,那么其余的垛块的示教点就可以看作是这两个垛块的示教点沿着大地坐标系X、Y、Z轴按照一定的距离的动态偏移。
机器人拆垛运动过程与码垛运动过程基本相同,只是示教点的偏移方向与码垛示教点的偏移方向在大地坐标系Y轴与Z轴方向上相反。
机器人位置偏移函数介绍
根据上述分析可知,在对机器人示教编程时,除了要用到机器人的常规运动指令外,还要用到另外一种运动功能,即机器人位置偏移函数。
市面上常见的工业机器人都具备这种位置偏移函数,当然,ABB机器人也不例外。“Offs”就是ABB机器人的位置偏移函数,它的功能是用于在已有的机器人位置的工件坐标系中添加一个偏移量。这里一定要注意,它是在机器人的工件坐标系中叠加的偏移量,其完整的函数语句格式如下图所示。
函数Offs中Point的数据类型为robtarget,其余三个偏移量的数据类型均为num。
机器人拆垛与码垛应用示教编程
在ABB机器人虚拟示教器中创建机器人拆垛与码垛例行程序,首先将机器人各个关节手动运行到合适位置,然后将当前姿态示教为机器人HOME点程序,示教点名称为pHome。
再将机器人分别手动运行到拆垛托盘上的1号、7号垛块处,以及码垛托盘上的1号、7号垛块处,并示教出这4个机器人姿态的点位程序,4个示教点分别命名为pLPick、pLPick90、pRPlace、pRPlace90。
在示教过程中,机器人TCP使用标定好的吸盘工具TCP,工件坐标系使用默认的工件坐标系(wobj0)。当然,工件坐标系也可以分别在拆垛托盘和码垛托盘上分别标定。这里要注意的是,一般情况下,在RobotStudio软件中ABB机器人默认工件坐标系(wobj0)通常与虚拟仿真环境中的大地坐标系重合。
机器人拆垛与码垛程序关键点示教完成后,根据上述工作流程分析即可编写出机器人工作逻辑判断程序以及垛块吸取与释放位置偏移程序,完整的程序代码如下图所示。
完整的ABB机器人拆垛与码垛程序代码如下所示。
MODULE Module1CONST robtarget pHome:=[[1405.50,0.00,1620.00],[2.35481E-8,-7.53893E-9,1,-1.77528E-16],[0,0,-1,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];CONST robtarget pLPick:=[[1600.00,-1100.00,740.00],[1.01751E-7,-1.31278E-7,1,-7.4175E-8],[-1,-1,-1,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];CONST robtarget pRPlace:=[[1600.00,1100.00,340.00],[9.86443E-9,-1.70914E-8,1,-1.23181E-8],[0,-1,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];CONST robtarget pLPick90:=[[1400.00,-700.00,740.00],[1.50459E-7,0.707107,0.707107,-6.22807E-8],[-1,-1,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];CONST robtarget pRPlace90:=[[1400.00,700.00,340.00],[8.97325E-9,0.707107,0.707107,4.92759E-9],[0,-1,1,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];PERS robtarget pLPickSafety:=[[800,-700,640],[1.50459E-7,0.707107,0.707107,-6.22807E-8],[-1,-1,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];PERS robtarget pRPlaceSafety:=[[800,700,1040],[8.97325E-9,0.707107,0.707107,4.92759E-9],[0,-1,1,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];CONST num L:=600;CONST num W:=200;CONST num H:=200;CONST num LHNum:=6;CONST num LVNum:=2;CONST num Layer:=3;PROC main()MoveJ pHome, v1500, fine, tVacuume;Reset doVacuume;FOR i FROM 1 TO (LHNum+LVNum)*Layer DO!First layer horizontalIF i<=LHNum THEN!PickpLPickSafety:=Offs(Offs(pLPick,-W*(i-1),0,-H*(Layer-3)),0,0,300);MoveJ pLPickSafety, v1500, z50, tVacuume;MoveL Offs(pLPick,-W*(i-1),0,-H*(Layer-3)), v1000, fine, tVacuume;Set doVacuume;WaitDI diVacuumeOK,1;MoveL pLPickSafety, v1000, fine, tVacuume;!PlacepRPlaceSafety:=Offs(Offs(pRPlace,-W*(i-1),0,H*(Layer-3)),0,0,300);MoveJ pRPlaceSafety, v1500, z50, tVacuume;MoveL Offs(pRPlace,-W*(i-1),0,H*(Layer-3)), v1000, fine, tVacuume;Reset doVacuume;WaitDI diVacuumeOK,0;MoveL pRPlaceSafety, v1000, fine, tVacuume;!First layer verticalELSEIF i>LHNum AND i<=(LHNum+LVNum) THEN!PickpLPickSafety:=Offs(Offs(pLPick90,-L*(i-LHNum-1),0,-H*(Layer-3)),0,0,300);MoveJ pLPickSafety, v1500, z50, tVacuume;MoveL Offs(pLPick90,-L*(i-LHNum-1),0,-H*(Layer-3)), v1000, fine, tVacuume;Set doVacuume;WaitDI diVacuumeOK,1;MoveL pLPickSafety, v1000, fine, tVacuume;!PlacepRPlaceSafety:=Offs(Offs(pRPlace90,-L*(i-LHNum-1),0,H*(Layer-3)),0,0,300);MoveJ pRPlaceSafety, v1500, z50, tVacuume;MoveL Offs(pRPlace90,-L*(i-LHNum-1),0,H*(Layer-3)), v1000, fine, tVacuume;Reset doVacuume;WaitDI diVacuumeOK,0;MoveL pRPlaceSafety, v1000, fine, tVacuume;!Second layer horizontalELSEIF i>LHNum+LVNum AND i<=2*(LHNum+LVNum)-LVNum THEN!PickpLPickSafety:=Offs(Offs(pLPick,-W*(i-LHNum-LVNum-1),W,-H*(Layer-2)),0,0,300);MoveJ pLPickSafety, v1500, z50, tVacuume;MoveL Offs(pLPick,-W*(i-LHNum-LVNum-1),W,-H*(Layer-2)), v1000, fine, tVacuume;Set doVacuume;WaitDI diVacuumeOK,1;MoveL pLPickSafety, v1000, fine, tVacuume;!PlacepRPlaceSafety:=Offs(Offs(pRPlace,-W*(i-LHNum-LVNum-1),-W,H*(Layer-2)),0,0,300);MoveJ pRPlaceSafety, v1500, z50, tVacuume;MoveL Offs(pRPlace,-W*(i-LHNum-LVNum-1),-W,H*(Layer-2)), v1000, fine, tVacuume;Reset doVacuume;WaitDI diVacuumeOK,0;MoveL pRPlaceSafety, v1000, fine, tVacuume;!Second layer verticalELSEIF i>2*(LHNum+LVNum)-LVNum AND i<=2*(LHNum+LVNum) THEN!PickpLPickSafety:=Offs(Offs(pLPick90,-L*(i-2*LHNum-LVNum-1),-L,-H*(Layer-2)),0,0,300);MoveJ pLPickSafety, v1500, z50, tVacuume;MoveL Offs(pLPick90,-L*(i-2*LHNum-LVNum-1),-L,-H*(Layer-2)), v1000, fine, tVacuume;Set doVacuume;WaitDI diVacuumeOK,1;MoveL pLPickSafety, v1000, fine, tVacuume;!PlacepRPlaceSafety:=Offs(Offs(pRPlace90,-L*(i-2*LHNum-LVNum-1),L,H*(Layer-2)),0,0,300);MoveJ pRPlaceSafety, v1500, z50, tVacuume;MoveL Offs(pRPlace90,-L*(i-2*LHNum-LVNum-1),L,H*(Layer-2)), v1000, fine, tVacuume;Reset doVacuume;WaitDI diVacuumeOK,0;MoveL pRPlaceSafety, v1000, fine, tVacuume;!Third layer horizontalELSEIF i>2*(LHNum+LVNum) AND i<=3*(LHNum+LVNum)-LVNum THEN!PickpLPickSafety:=Offs(Offs(pLPick,-W*(i-2*LHNum-2*LVNum-1),0,-H*(Layer-1)),0,0,300);MoveJ pLPickSafety, v1500, z50, tVacuume;MoveL Offs(pLPick,-W*(i-2*LHNum-2*LVNum-1),0,-H*(Layer-1)), v1000, fine, tVacuume;Set doVacuume;WaitDI diVacuumeOK,1;MoveL pLPickSafety, v1000, fine, tVacuume;!PlacepRPlaceSafety:=Offs(Offs(pRPlace,-W*(i-2*LHNum-2*LVNum-1),0,H*(Layer-1)),0,0,300);MoveJ pRPlaceSafety, v1500, z50, tVacuume;MoveL Offs(pRPlace,-W*(i-2*LHNum-2*LVNum-1),0,H*(Layer-1)), v1000, fine, tVacuume;Reset doVacuume;WaitDI diVacuumeOK,0;MoveL pRPlaceSafety, v1000, fine, tVacuume;!Third layer verticalELSE!PickpLPickSafety:=Offs(Offs(pLPick90,-L*(i-3*LHNum-2*LVNum-1),0,-H*(Layer-1)),0,0,300);MoveJ pLPickSafety, v1500, z50, tVacuume;MoveL Offs(pLPick90,-L*(i-3*LHNum-2*LVNum-1),0,-H*(Layer-1)), v1000, fine, tVacuume;Set doVacuume;WaitDI diVacuumeOK,1;MoveL pLPickSafety, v1000, fine, tVacuume;!PlacepRPlaceSafety:=Offs(Offs(pRPlace90,-L*(i-3*LHNum-2*LVNum-1),0,H*(Layer-1)),0,0,300);MoveJ pRPlaceSafety, v1500, z50, tVacuume;MoveL Offs(pRPlace90,-L*(i-3*LHNum-2*LVNum-1),0,H*(Layer-1)), v1000, fine, tVacuume;Reset doVacuume;WaitDI diVacuumeOK,0;MoveL pRPlaceSafety, v1000, fine, tVacuume;ENDIFENDFORMoveJ pHome, v1500, fine, tVacuume;ENDPROC
ENDMODULE
机器人拆垛与码垛虚拟仿真
在RobotStudio软件中对ABB机器人仿真运行,其中一段的仿真运行效果如下方动态图所示,可以看到机器人从拆垛托盘上吸取垛块,并按照一定的码放顺序将其码放到码垛托盘上。
The End
上一篇:ABB机器人:工件坐标系介绍以及标定操作与使用方法
RobotStudio教程:ABB机器人拆垛与码垛应用示教编程与虚拟仿真相关推荐
- 四轴码垛机器人配件_四轴码垛机器人的应用范围
随着机器人技术的发展,在制造业中出现了很多机器人的身影,四轴码垛机器人就是其中的一种,现在码垛机器人代替了人工在作业,那么大家知道四轴码垛机器人的应用范围是什么吗?小编整理了一些相关的资料,大家一起来 ...
- PDPS软件:机器人示教编程与工作站仿真运行
本文已经首发在个人微信公众号:工业机器人仿真与编程(微信号:IndRobSim),欢迎关注! 上一期为大家介绍了在Process Simulate虚拟仿真软件中机器人焊接操作工艺设置.焊接操作添加到路 ...
- 华数机器人码垛_码垛机器人操作界面与离线编程操作图解教程
4.0.1 编辑工件界面 码垛机器人操作的编辑工件界面如图 4.46 所示.对创建码垛机器人操所操作的工件,只需导入一个工件模型在创建操作时选择该模型创建,在编辑工件窗口中为默认该工件,可对工件进行布 ...
- 沛县机器人_沛县自动码垛机器人焊接机器手
沛县自动码垛机器人焊接机器手 其中,日系产品以约%的市场份额居首,其品牌包括松下.三菱电机.安川.三洋.富士等,其产品特点是技术和性能水平比较符合用户的需求,以良好的性价比和较高的可靠性获得了稳定且持 ...
- 尼奥机器人不能手机绑定_码垛机器人移动时的注意事项
原标题:码垛机器人移动时的注意事项 码垛机器人移动有很多注意事项.当我们遇到这些情况时,我们须一步一步地移动一些机器.今天小编主要给大家总结一下码垛机器人移动时的注意事项.我们这里说的堆垛机现在是码垛 ...
- UR5协作式机器人自动铣削和码垛加热元件
短篇案例: AQUAEL是全球水产业的先进企业,该公司在其规模颇大的波兰苏瓦乌基部署了UR5协作式机器人,这些机器人每天的工作任务是自动加工为水族馆设计的加热元件.协作式机器人缩短了生产时间,并让 ...
- ABB机器人搬运码垛/柴垛项目实战案例
传统的人工码垛只能应用在物料轻便.尺寸和形状变化大.吞吐量小的场合,已经远远不能满足工业的需求,机器人码垛应运而生,代替人们在危险.有毒.低温.高热等恶劣环境中工作,帮助人们完成繁重.单调.重复的劳动 ...
- fanuc机器人码垛编程实例_FANUC机器人码垛教程
原标题:FANUC机器人码垛教程 最近有好些朋友问FANUC机器人码垛如何编写,现在小编给你整理教程出来了,欢迎分享给更多的朋友学习,看完后记得在文末点个赞再走,小编花时间整理也不容易啊! 对FANU ...
- 发那科机器人没有码垛指令_FANUC机器人码垛教程
对FANUC机器人编程有了解过的朋友都知道FANUC机器人码垛有四种方式:B码垛.BX码垛.E码垛.EX码垛: 码垛堆积B,对应所有工件的姿势一定.堆上时的底面形状为直线.或者平行四边形的情形. 码垛 ...
最新文章
- Oracle事务的隔离
- 解决ubuntu中vi不能正常使用方向键与退格键的问题
- MySQL数据库权限管理
- lr中winsock协议的脚本(转载51testing)
- mysql5.5提示Deprecated: mysql_query(): The mysql extension is deprecated
- python哪个文字转语音好用_【python3】Python十行代码搞定文字转语音
- jQuery(一)—— jQuery 概述 / jQuery 选择器 / jQuery 样式操作 / jQuery 效果
- python后台架构Django教程——manage.py命令
- 继承与data member之单一继承
- 关于编程中的一些颜色代码
- skywalking源码分析第二十三篇一扩展篇:全链路压测
- 如何解救爆红的C盘?
- 内存颗粒与内存体质的关系
- Unity笔记-05
- The eighth day
- 红米note4 android8.0,红米Note 4首个安卓8.0刷机包放出,开发者:可日常使用
- 什么是安全性测试(security testing)?
- vue3实现发送验证码功能
- 计算机基本配置实验方案,实验4 计算机配置方案.doc
- 【神经网络】梯度消失与梯度爆炸问题