Robotstudio软件:ABB机器人机器视觉位姿引导虚拟仿真

本文已经首发在个人微信公众号:工业机器人仿真与编程(微信号:IndRobSim),欢迎关注!

概述

近几年来机器视觉技术在工业生产中得到了广泛的应用,在工业机器人应用领域中,机器视觉被广泛应用于工件的特征检测,以及机器人的位姿引导。市面上大部分的机器人厂商也都在机器人控制器中开放了视觉集成接口,以便于机器人能够直接与智能相机进行数据交互。除了现实的机器视觉应用以外,在机器人仿真过程中也需要对机器视觉进行仿真。本期,就来为大家介绍一下,Robotstudio软件中使用机器视觉实现机器人位姿引导的操作方法。

机器人与视觉系统创建

在上一期创建的工件位置随机生成仿真环境中,添加一台IRB2600机器人,机器人工具与相机分别使用Robotstudio软件设备库中自带的焊枪AW_Gun_PSF_25、Integrated Vision camera Cam00X。同时使用“建模”菜单中的“圆锥体”建模工具创建一个圆锥体,并修改圆锥体透明度,作为相机光源。

将焊枪安装到机器人上,相机、相机光源分别放置到合适位置处,并创建机器人控制系统,机器人与视觉系统创建完成后,如下图所示。

机器人工件坐标系添加

对于机器人位置与姿态的视觉引导,大多数品牌的机器人都是基于工件坐标系实现的,ABB机器人也不例外,因此这里也需要添加一个工件坐标系。

“基本”菜单栏下,“其他”命令按钮的下拉菜单中,点击“创建工件坐标”,在弹出的创建工件坐标中,用户坐标框架下使用“取点创建框架”中的“三点”法,在工作台面中心点位置处,创建一个工件坐标系,坐标轴方向与大地坐标系保持一致。

工件坐标系创建完成后,使用“同步”功能将在仿真环境中创建的工件坐标系以及工具坐标系同步到机器人控制器中,同步时二者所属的模块均选择“Module1”。

机器人位置与姿态变量声明

在Robotstudio软件的“RAPID”菜单栏下,打开机器人程序模块Module1,然后在程序代码编辑窗口中声明机器人在X、Y轴上的位置偏移变量PosXY以及在Z轴上的旋转变量OrientRz,如下图所示。

完整变量声明代码如下。

    PERS pos PosXY:=[0,0,0];!声明机器人在X、Y轴上的位置偏移变量
    PERS orient OrientRz:=[0,0,0,0];!声明机器人在Z轴上的旋转变量

机器人视觉引导Smart组件创建

在上一期创建的工件位置随机生成仿真环境中的Smart组件中,添加2个RapidVariable子对象组件,其中一个用于向机器人发送视觉检测到的工件位置偏移数据、另一个用于向机器人发送视觉检测到的工件姿态偏移数据。

对两个RapidVariable子对象组件进行属性配置,以实现将视觉检测到的工件偏移数据分别发送到在机器人程序中声明的数据变量PosXY、OrientRz中。

对于相机的控制,这里使用2个LogicGate子对象组件、1个Show子对象组件、1个Hide子对象组件。

使用Show与Hide子对象组件对相机光源进行显示/隐藏操作,实现相机光源的闪烁仿真效果,二者属性参数配置如下。

用2个LogicGate子对象组件作为延时继电器,控制相机光源实现时间间隔为1s的闪烁,二者属性参数配置如下。

在Smart组件中删除之前创建的定时器子对象组件,添加1个脉冲信号输出子对象组件LogicSplit。然后再分别创建1个数字量输入信号di1与1个数字量输出信号do1,用来作为视觉引导Smart组件的控制与反馈信号。

对修改后的视觉引导Smart组件属性传递关系与信号控制逻辑分别进行设置,设置完成后,如下图所示。

机器人示教编程

在机器人控制器中分别创建1个数字量输入信号di1与1个数字量输出信号do1,可以是物理信号,也可以是虚拟信号,用于与Smart组件中的控制、反馈信号进行连接。

在Robotstudio软件的仿真环境中对机器人进行示教编程,机器人运行轨迹如下图所示,示教编程过程中除了Target10点以外,其他工作点全部使用创建的工件坐标系Workobject_1,工具全部使用焊枪工具。

将在仿真环境中示教完成的机器人程序同步到机器人控制器中,然后在“RAPID”菜单栏中将其打开,完整的程序代码如下图所示。

完整的程序代码如下所示。

MODULE Module1
	PERS tooldata AW_Gun:=[TRUE,[[119.5,0,352],[0.890213743,0,0.455543074,0]],[1,[0,0,100],[1,0,0,0],0,0,0]];
	TASK PERS wobjdata Workobject_1:=[FALSE,TRUE,"",[[935,0,830],[1,0,0,0]],[[-40.5511,-0.650765,0],[0.970459,0,0,0.241266]]];
    PERS pos PosXY:=[0,0,0];!声明机器人在X、Y轴上的位置偏移变量
    PERS orient OrientRz:=[0,0,0,0];!声明机器人在Z轴上的旋转变量
    CONST robtarget Target_10:=[[689.999962519,0,1034.999958384],[0.050592966,0,0.998719356,0],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
    CONST robtarget Target_20:=[[-50.000031446,0,69.999996546],[0.050592981,0,0.998719355,0],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
    CONST robtarget Target_30:=[[-50.000039757,-49.999997088,9.999981609],[0.050593041,-0.000000002,0.998719352,0],[-1,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
    CONST robtarget Target_40:=[[49.999986089,-49.999997513,9.999975834],[0.050593071,-0.000000005,0.998719351,-0.000000003],[-1,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
    CONST robtarget Target_50:=[[49.99998634,49.999993971,9.999986546],[0.050593101,-0.000000004,0.998719349,-0.000000008],[0,-1,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
    CONST robtarget Target_60:=[[-50.000051431,49.999995421,9.999995587],[0.050593133,-0.000000004,0.998719347,-0.000000011],[0,-1,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
    
    PROC main()
        MoveJ Target_10,v500,fine,AW_Gun\WObj:=wobj0;!机器人Home点
        WaitTime 1;!等待1s
        PulseDO\PLength:=0.2,do1;!向机器视觉引导Smart组件发送200ms的控制脉冲信号,启动视觉检测功能
        WaitDI di1,1;!等待视觉检测完成反馈信号
        WaitTime 2;!等待2s
        Workobject_1.oframe.trans:=PosXY;!更新工件坐标系Workobject_1的位置数据
        Workobject_1.oframe.rot:=OrientRz;!更新工件坐标系Workobject_1的姿态数据
        MoveJ Target_20,v500,fine,AW_Gun\WObj:=Workobject_1;!机器人工作点程序
        MoveL Target_30,v500,fine,AW_Gun\WObj:=Workobject_1;
        MoveL Target_40,v500,fine,AW_Gun\WObj:=Workobject_1;
        MoveL Target_50,v500,fine,AW_Gun\WObj:=Workobject_1;
        MoveL Target_60,v500,fine,AW_Gun\WObj:=Workobject_1;
        MoveJ Target_20,v500,fine,AW_Gun\WObj:=Workobject_1;
        WaitTime 0.5;!等待0.5s
        MoveJ Target_10,v500,fine,AW_Gun\WObj:=wobj0;
    ENDPROC
ENDMODULE

机器人视觉引导工作站仿真运行

在“工作站逻辑”中,将视觉引导Smart组件的控制、反馈信号与机器人控制器的数字量输出信号、数字量输入信号互相连接。

在“仿真设定”中,同时勾选“视觉引导”smart组件、机器人控制器,并将机器人“运行模式”设置为“连续”。

对视觉引导机器人仿真工作站进行仿真运行,可以看到工件在工作台面上随机改变位姿,相机对工件拍照检测后,机器人按照引导数据移动到工件位置,对工件进行加工操作,仿真效果如下图所示。

The End


上一篇:Robotstudio软件:基于Random组件的工件位置随机生成

RoKiSim是一个免费的多平台的教育软件工具,用于三维仿真的六轴机器人的开发控制与机器人实验室。用户可以慢跑虚拟机器人装置中任一其关节空间或笛卡尔空间 (相对于所述工具坐标,基坐标,或世界坐标),显示不同的参考帧(根据两个Denavit-Hartenberg和改性Denavit-Hartenberg约定),和可视化的所有可能的配置, 机器人的逆运动学端部执行器的一个给定的姿势。方向可以在任何几种常见的(如使用的FANUC机器人,库卡机器人,),以及在单四元数(通过使用ABB机器人)来表示。 该RoKiSim软件包中有几种流行的工业机器人模型(ABB IRB 120,ABB IRB 140,ABB IRB 1600/1.45,ABB IRB 4400,ABB IRB 6640-130,CRS A465,FANUC , FANUC M- 710iC/50,FANUC M-710iC/50S 库卡KR 5希克斯R650,库卡KR 150 R3100,库卡KR 270 R2700,库卡KR 500,库卡KR 1000 TITAN, 莫托曼MH5F,莫托曼UP50N, PUMA 560,圣锓BLI TX40,和圣锓BLI TX200,),以及与7端部执行器的工具。这是比较容易添加新的机器人模型,而且相当容易加入(以ASCII STL格式)新的末端效应器 的工具。该软件包还配备了三种类型机器人奇异的(手腕,肘部和肩部)的一些机器人模型的模拟。仿真包含了*。卡扩展,包含六个关节变量的数值序列,并与* RKS扩展另 一个ASCI文件,指定机器人及其工具的ASCII文件。 机器人仿真软件还附带了导入对象的几何形状和放置在机器人环境的能力。一个对象必须以ASCII STL文件或SLP文件中定义(同为STL格式,但允许不同的颜色各方面)。 一组由一个机器人,一个末端执行器的工具,对象和它们的姿势相对于机器人的基本框架,仿真文件,以及语言和欧拉角公约的选择,可以保存为一个站。这种站的一个 例子是设置有包。 仿真软件操作应用: 1,选择你喜欢的机器人模型,可以选择菜单语言。机器人对象模拟路径,可以将它们保存为默认~~选择的选项在文件菜单中的“另存为默认站” 。 更改视图方向 旋转:按住鼠标左键的同时拖动鼠标。 拖动:按Ctrl +同时拖动鼠标鼠标左键。 缩放:按下Shift +鼠标左键的同时拖动鼠标或使用鼠标滚轮按钮。 玩模拟: 要加载模拟,按Ctrl + D 然后,使用模拟面板在RoKiSim窗口的底部(此面板的可见性可以通过按F4键切换)或以下快捷键: ↓:启动一个已经被加载了模拟。 ↑:停止模拟,并且让机器人到其家乡的配置。 →:停止模拟和前进了一步。 ←:停止模拟及垫款一步后退。 以屏幕捕获 RoKiSim不提供拍摄屏幕捕获工具。你可以最大限度地提高您的RoKiSim窗口,去掉不必要的面板(F2为机器人的控制面板,F3为对象面板,和F4的模拟面板), 按Alt + PrtScn您可以将图像粘贴在您最喜爱的图形程序(如GIMP),或直接到文字处理程序(例如,Microsoft Word或PowerPoint中)。在Windows 7中, 您也可以使用截图工具应用程序以一个窗口,一个矩形区域,或自由格式区域的截图。 改变背景颜色 要改变背景颜色从蓝色变成白色,反之亦然,按Shift + B。 改变基准帧的大小
要创建一个Smart组件虚拟相机,你需要使用Unity引擎中的几个组件和技术,包括: 1. Unity的Camera组件:这是在场景中呈现3D场景的主要组件。你可以使用此组件来设置相机置,视角和投影等。 2. RenderTexture:这是Unity中的一个纹理类型,用于在场景中捕捉相机的图像并将其保存为纹理。使用RenderTexture,你可以捕获相机的视图并将其应用于其他游戏对象。 3. Shader:这是Unity中的一种编程语言,用于创建自定义材料来渲染游戏对象。使用着色器,你可以创建高级效果,例如模糊,深度感知阴影等。 下面是一些步骤,可以帮助你创建一个虚拟相机组件: 1. 首先,在Unity中创建一个新场景,并将一个相机对象添加到场景中。你可以使用相机对象的transform属性来调整相机的置,角度和视角。 2. 然后,创建一个RenderTexture对象,并将其分配给相机的targetTexture属性。这将使相机捕获其视图并将其保存为纹理。 3. 接下来,创建一个新的材料,并将其分配给需要使用虚拟相机的游戏对象。在材料中,选择RenderTexture作为主纹理,并使用自定义着色器来渲染纹理。 4. 最后,在着色器中编写代码来处理RenderTexture的输出。你可以使用着色器来实现不同的效果,如模糊,深度感知阴影等。 完成这些步骤后,你就可以使用Smart组件虚拟相机在Unity中创建各种高级效果和视觉效果。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IndRobSim

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值