RobotStudio教程:ABB机器人拆垛与码垛应用示教编程与虚拟仿真

这篇具有很好参考价值的文章主要介绍了RobotStudio教程:ABB机器人拆垛与码垛应用示教编程与虚拟仿真。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

任务描述

机器人拆垛与码垛工作站创建

机器人拆垛与码垛工作流程分析

机器人位置偏移函数介绍

机器人拆垛与码垛应用示教编程

机器人拆垛与码垛虚拟仿真


任务描述

在RobotStudio软件中创建ABB机器人拆垛与码垛工作站,并示教机器人拆垛与码垛程序,实现机器人拆垛与码垛应用虚拟仿真。ABB机器人的型号规格、工具等外围设备根据实际需要自行选定。

拆垛垛块排序如下图所示,垛块长度为600mm,宽度为200mm,高度也为200mm。垛块共码放了3层,每一层码放8块。每一层的垛块横向摆放6块,竖向摆放2块,并且层与层之间垛块采用混合交叉方式码放。

RobotStudio教程:ABB机器人拆垛与码垛应用示教编程与虚拟仿真

码垛垛块排序与拆垛垛块排序方式基本一致,也是码放3层,每层横竖码放共8块,层与层之间也是采用混合交叉码放方式,只是码垛垛块的码放位置与拆垛垛块的码放位置为镜像对称码放,如下图所示。

RobotStudio教程:ABB机器人拆垛与码垛应用示教编程与虚拟仿真

机器人拆垛与码垛工作站创建

在RobotStudio软件中创建虚拟仿真项目,添加一台ABB机器人模型,机器人使用吸盘工具,可从外部导入设计好的三维模型。再添加两个托盘,并布局到合适位置,其中一个用于码放拆垛垛块,另一个用于码放码垛垛块。

按照任务描述要求,使用软件自带的模型创建功能创建码垛垛块。垛块创建好后,将垛块一层一层地码放到拆垛托盘上。在码垛托盘上也分别横竖码放两个垛块,作为机器人示教编程的位置参考。模型全部布局完成后,其效果如下图所示。

RobotStudio教程:ABB机器人拆垛与码垛应用示教编程与虚拟仿真

从布局创建ABB机器人虚拟系统,然后添加动态吸盘Smart组件,用来吸取与释放垛块。动态吸盘Smart组件的添加方法可参考之前发布过的文章《RobotStudio软件:机床上下料工作站机器人工具Smart组件添加》,这里不再过多介绍。

机器人拆垛与码垛工作流程分析

机器人码垛应用其实也是一种搬运应用,只是这种应用是机器人按照一定的规律重复点对点的运动路径的搬运应用。机器人拆垛应用可以看作是机器人码垛运动的逆运行。

一般情况下,机器人码垛的垛块规格、码垛的层数以及每一层垛块的码放个数、码放样式都是固定的,并且具备一定的数学运算关系,通过这个数学运算关系就能规划出机器人拆垛与码垛应用的运动路径。

如下图所示,是本例ABB机器人拆垛与码垛应用的工作原理示意图。机器人位于拆垛垛块与码垛垛块中间,也就是大地坐标系位置处,两边的垛块码放位置关于大地坐标系YZ轴所在平面镜像对称。工作时,机器人先由左侧的拆垛托盘上从右向左、从上向下依次吸取垛块;然后运动到右侧的码垛托盘处从右向左、从下向上依次释放垛块。

如果将码垛托盘上序号为1的垛块与序号为7的垛块分别作为机器人吸取垛块的示教点,以大地坐标系为参考,那么其余的垛块的示教点就可以看作是这两个垛块的示教点沿着大地坐标系X、Y、Z轴按照一定的距离的动态偏移。

机器人拆垛运动过程与码垛运动过程基本相同,只是示教点的偏移方向与码垛示教点的偏移方向在大地坐标系Y轴与Z轴方向上相反。

RobotStudio教程:ABB机器人拆垛与码垛应用示教编程与虚拟仿真

机器人位置偏移函数介绍

根据上述分析可知,在对机器人示教编程时,除了要用到机器人的常规运动指令外,还要用到另外一种运动功能,即机器人位置偏移函数。

市面上常见的工业机器人都具备这种位置偏移函数,当然,ABB机器人也不例外。“Offs”就是ABB机器人的位置偏移函数,它的功能是用于在已有的机器人位置的工件坐标系中添加一个偏移量。这里一定要注意,它是在机器人的工件坐标系中叠加的偏移量,其完整的函数语句格式如下图所示。

RobotStudio教程:ABB机器人拆垛与码垛应用示教编程与虚拟仿真

函数Offs中Point的数据类型为robtarget,其余三个偏移量的数据类型均为num。

机器人拆垛与码垛应用示教编程

在ABB机器人虚拟示教器中创建机器人拆垛与码垛例行程序,首先将机器人各个关节手动运行到合适位置,然后将当前姿态示教为机器人HOME点程序,示教点名称为pHome。

再将机器人分别手动运行到拆垛托盘上的1号、7号垛块处,以及码垛托盘上的1号、7号垛块处,并示教出这4个机器人姿态的点位程序,4个示教点分别命名为pLPick、pLPick90、pRPlace、pRPlace90。

在示教过程中,机器人TCP使用标定好的吸盘工具TCP,工件坐标系使用默认的工件坐标系(wobj0)。当然,工件坐标系也可以分别在拆垛托盘和码垛托盘上分别标定。这里要注意的是,一般情况下,在RobotStudio软件中ABB机器人默认工件坐标系(wobj0)通常与虚拟仿真环境中的大地坐标系重合。

RobotStudio教程:ABB机器人拆垛与码垛应用示教编程与虚拟仿真

机器人拆垛与码垛程序关键点示教完成后,根据上述工作流程分析即可编写出机器人工作逻辑判断程序以及垛块吸取与释放位置偏移程序,完整的程序代码如下图所示。

RobotStudio教程:ABB机器人拆垛与码垛应用示教编程与虚拟仿真

完整的ABB机器人拆垛与码垛程序代码如下所示。

MODULE Module1
	CONST 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 horizontal
        	IF i<=LHNum THEN
                !Pick
                pLPickSafety:=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;
                !Place
                pRPlaceSafety:=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 vertical
            ELSEIF i>LHNum AND i<=(LHNum+LVNum) THEN
                !Pick
                pLPickSafety:=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;
                !Place
                pRPlaceSafety:=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 horizontal
            ELSEIF i>LHNum+LVNum AND i<=2*(LHNum+LVNum)-LVNum THEN
                !Pick
                pLPickSafety:=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;
                !Place
                pRPlaceSafety:=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 vertical
            ELSEIF i>2*(LHNum+LVNum)-LVNum AND i<=2*(LHNum+LVNum) THEN
                !Pick
                pLPickSafety:=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;
                !Place
                pRPlaceSafety:=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 horizontal
            ELSEIF i>2*(LHNum+LVNum) AND i<=3*(LHNum+LVNum)-LVNum THEN
                !Pick
                pLPickSafety:=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;
                !Place
                pRPlaceSafety:=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 vertical
            ELSE
                !Pick
                pLPickSafety:=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;
                !Place
                pRPlaceSafety:=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;
        	ENDIF
        ENDFOR
        MoveJ pHome, v1500, fine, tVacuume;
    ENDPROC
ENDMODULE

机器人拆垛与码垛虚拟仿真

在RobotStudio软件中对ABB机器人仿真运行,其中一段的仿真运行效果如下方动态图所示,可以看到机器人从拆垛托盘上吸取垛块,并按照一定的码放顺序将其码放到码垛托盘上。

RobotStudio教程:ABB机器人拆垛与码垛应用示教编程与虚拟仿真

 The End


上一篇:ABB机器人:工件坐标系介绍以及标定操作与使用方法文章来源地址https://www.toymoban.com/news/detail-415150.html

到了这里,关于RobotStudio教程:ABB机器人拆垛与码垛应用示教编程与虚拟仿真的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 通过Robotstudio修改机器人程序的具体方法和步骤

    基本步骤可参考以下内容: 用网线连接机器人和电脑,机器人一侧要插入LAN2口; 机器人和电脑的IP地址要在同一个网段内; 请求写入权限; 修改程序—编译—应用; 加载修改后的程序到机器人; 保存Robotstudio程序到电脑端; 只能修改程序,不能控制机器人的具体运动 具体

    2024年02月12日
    浏览(39)
  • ABB机器人注解

    🔥一个人走得远了,就会忘记自己为了什么而出发,希望你可以不忘初心,不要随波逐流,一直走下去🎶 🦋 欢迎关注🖱点赞👍收藏🌟留言🐾 ✅ 如果觉得博主的文章还不错的话,希望小伙伴们三连支持一下哦 写注释是一个良好的习惯,这个也是看似笨拙,其实可以长久

    2024年02月09日
    浏览(34)
  • RobotStudio的基本布局方法,模型加载,工件坐标系的创建,手动操作机器人示教,以及模拟仿真机器人运动轨迹。

    1、在文件功能选项卡中,选择【空工作站】,单击【创建】,创建一个新的工作站。 2、在【基本】功能选项卡中,打开【ABB模型库】,选择【IRB2600】。 3、设定好数值,然后单击【确认】。 4、在【基本】功能选项里,打开【导入模型库】—【设备】,选择【myTool】。 5、右

    2023年04月08日
    浏览(145)
  • ABB PM864A 机器人模块

    ABB  PM864A 机器人模块   ABB  PM864A 机器人模块       详情介绍: ABB PM864A 机器人模块是一款高性能、高可靠性、模块化设计、多种接口支持、安全性强、易于操作、长寿命和低维护成本以及工业级可靠的机器人控制系统模块。其特点包括: 高性能与高可靠性:该模块具备高

    2024年02月02日
    浏览(36)
  • 【ABB】ABB机器人\RAPID中FOR重复执行判断指令

    1、FOR指令结构定义 (1)FOR指令结构 FOR  ID  FROM  EXP  TO  EXP  STEP  EXP  DO SMT ENDFOR ID:循环判断变量 **个EXP:变量起始值,**次运行变量等于这个值; 第二个EXP:变量终止值,或者叫*末尾值; 第三个EXP:变量的步长,每运行一次FOR里面语句变量值自加这个步长值,在默认情

    2024年02月09日
    浏览(68)
  • ABB机器人开发基础之建立多任务

        Rapid语言工作原理与PLC和上位机不同,Rapid是以指针的方式运行。当机器人某一任务程序执行第N行时,对于该任务中非N行的语句指令即使满足动作条件,也不会响应执行,而是等运行指针指向该行时才会读入此刻的相关条件,然后再执行相关指令。     怎么做ABB机器人心

    2024年02月16日
    浏览(53)
  • ABB、FANUC机器人点位加速度用法

    机器人在点位与点位之间的运动,会存在速度上的变化,加速度指令的添加可以减小机器人在运动中,由高速到低速间惯性的带来的影响,修正机器人的路径误差,让机器人的运动更加顺滑。 ABB机器人加速度指令为ACCSET指令 ACCSET指令中的第一个参数是设置加速度,第二个参

    2024年04月16日
    浏览(47)
  • ABB机器人控制柜面板接口功能介绍

    如下图所示,可以看到ABB机器人控制柜上有很多接口,下面和大家一一介绍各个接口的功能, X1:主机的电源接口,如下图所示, X2:服务口(黄色图标),用于和电脑进行通信,例如通过RobotStudio进行离线程序的上传下载等 X3:示教器的接口(绿色图标),对应的线号为A

    2024年02月11日
    浏览(92)
  • ABB眼中AI推动机器人创新的三大方向

    文 | BFT机器人  ABB的历史是一部充满革新与进步的史诗,它的机器人篇章始于1974年,那一年它向世界推出了被誉为“ 全球首个商用全电动机器人 ”的IRB 6。时隔半个世纪,ABB的机器人产品线已变得无比强大和多元,囊括了先进的 工业机械臂 、 协同工作的机械臂 以及 自主移

    2024年03月14日
    浏览(55)
  • ABB机器人安全板硬件功能介绍+接线方法示例

    ABB机器人有以下几种硬件停止功能,这些均属于EN 13849-1中描述的安全类别3,该安全类别是双通道发起的停止,如果发生单通道故障(例如接线不良),则会发生安全链报警。 ES1,ES2紧急停止; AS1,AS2自动模式停止(一般连接安全门、光幕等); GS1,GS2常规停止; SS1,SS2上级停止

    2023年04月23日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包