实现抓放
在本教程中,你将学习编写机器人程序,搭建一个简单的机器人抓放流程。
在该教程中,机器人程序要实现的功能为:
-
每运行一次程序,触发Mech-Vision工程运行一次。
-
每次Mech-Vision工程运行可以返回一个视觉点(TCP位姿)。
-
机器人根据返回的视觉结果和编写的抓放路径完成一个工件的抓取和放置。
通信说明
本节简单介绍了安川机器人与梅卡曼德视觉系统之间通信的基本原理。
安川机器人与梅卡曼德视觉系统基于TCP Socket协议(数据格式为ASCII字符串)进行标准接口通信,其中机器人为TCP客户端,视觉系统为TCP服务器。机器人与视觉系统的通信流程如下图所示。
编程说明
本节介绍了编写安川机器人抓放应用程序需要了解的基础知识。
编写机器人抓放应用程序的目的是实现机器人与视觉系统之间的标准接口通信,以及机器人在视觉引导下进行抓放作业。该应用程序包含了TCP连接建立/断开、数据传输、机器人运动、DO控制等一系列功能。在编写抓放应用程序时,你需要用到两类指令:安川机器人指令和标准接口指令。
安川机器人指令
安川机器人指令指安川INFORM机器人语言支持的指令,包含了输入/输出指令、控制指令、演算指令、移动指令、移位指令和附加指令等。安川机器人常用指令说明章节简单介绍编写抓放应用程序所需使用的指令。
标准接口指令
标准接口指令指安川机器人标准接口支持的指令,用于跟视觉系统进行标准接口通信,包含了TCP Socket通信、数据交换等功能相关的指令。关于安川机器人支持的标准接口指令,请参见安川机器人标准接口指令说明。
安川机器人支持的标准接口指令封装在烧录到机器人的前台程序(Job)中。在将前台程序烧录到机器人后,你可以通过使用安川机器人指令CALL
来调用前台程序实现对标准接口指令的调用,例如:CALL JOB:MM_OPEN_SOCKET
。
如何编写抓放应用程序?
编写抓放应用程序最简单的方式是基于已有的样例程序进行修改和调试。
为了方便快速编写配合梅卡曼德视觉系统使用的抓放应用程序,梅卡曼德提供了三个抓放样例程序。本教程将基于第一个样例程序进行修改和调试。该样例可以实现简单的抓放,每次从视觉系统(仅Mech-Vision)获取一个视觉点,然后进行抓取和放置。
该样例程序代码如下所示:
NOP
'*****************************
'FUNCTION:simple pick and place
'with Mech-Vision
'mechmind, 2022-5-27
'*****************************
'clear I50 to I69
CLEAR I050 20
'Initialize p variables
SUB P070 P070
SUB P071 P071
'set 200mm to Z
SETE P070 (3) 200000
'move to the home position
MOVJ VJ=80.00
'move to the camera position
MOVJ VJ=80.00 PL=0
'set ip address of IPC
CALL JOB:MM_INIT_SOCKET ("192.168.170.22;50000;1")
TIMER T=0.20
CALL JOB:MM_OPEN_SOCKET
'set vision recipe
CALL JOB:MM_SET_MODEL ("1;1")
TIMER T=0.20
'Run vision project
CALL JOB:MM_START_VIS ("1;0;2")
TIMER T=1.00
'get result from Vis
CALL JOB:MM_GET_VISDATA ("1;50;51;52")
TIMER T=0.20
PAUSE IF I052<>1100
'set the first pos to P071;
'set labels to I61;
'set speed to I62;
CALL JOB:MM_GET_POSE ("1;71;61;62")
SFTON P070
MOVJ P071 VJ=50.00
SFTOF
MOVL P071 V=80.0 PL=0
'enable gripper
DOUT OT#(1) ON
SFTON P070
MOVJ P071 VJ=50.00
SFTOF
MOVJ VJ=80.00
'drop point
MOVJ VJ=80.00 PL=0
'release gripper
DOUT OT#(1) OFF
CALL JOB:MM_CLOSE_SOCKET
END
上述样例程序搭建的机器人抓放流程如下图所示。
下表说明机器人抓放流程中每一步骤以及修改要求。
步骤 | 代码 | 说明 | ||
---|---|---|---|---|
初始化变量 |
NOP 'clear I50 to I69 CLEAR I050 20 'Initialize p variables SUB P070 P070 SUB P071 P071 'set 200mm to Z SETE P070 (3) 200000 |
该步骤将程序使用的整数型变量和位置型变量初始化。通常不需要修改相应代码块。 |
||
移动到初始位 |
'move to the home position MOVJ VJ=80.00 |
该步骤将机器人TCP移动到示教的初始位。初始位是机器人运动的起始点,同时初始位是一个安全位置,机器人在这一点时应远离待抓取物体及周边设备,且不遮挡相机视野。 在该步骤,需要示教初始位。 |
||
移动到相机拍照点 |
'move to the camera position MOVJ VJ=80.00 PL=0 |
该步骤将机器人TCP移动到示教的相机拍照点。拍照点指相机采集图像时机器人所在的位置。在此位置,机器人手臂应不遮挡相机视野。 在该步骤,需要示教拍照点。 |
||
建立通信 |
'set ip address of IPC CALL JOB:MM_INIT_SOCKET ("192.168.170.22;50000;1") TIMER T=0.20 CALL JOB:MM_OPEN_SOCKET |
该步骤初始化通信参数,然后建立与视觉系统的TCP Socket通信。 在该步骤,需要修改“初始化通信”指令(MM_INIT_SOCKET)参数(工控机IP地址和端口)。 |
||
触发Mech-Vision工程进行视觉识别 |
'set vision recipe CALL JOB:MM_SET_MODEL ("1;1") 'Run vision project CALL JOB:MM_START_VIS ("1;0;2") |
该步骤先切换Mech-Vision参数配方(在多种工件场景下需要),然后触发Mech-Vision工程运行从而识别处工件的抓取位姿。在该教程中,仅涉及一种工件,因此不需要切换参数配方。 在该步骤,需要注释“切换Mech-Vision配方”指令(MM_SET_MODEL),修改“启动Mech-Vision工程”指令参数。 |
||
获取视觉点 |
'get result from Vis CALL JOB:MM_GET_VISDATA ("1;50;51;52") TIMER T=0.20 PAUSE IF I052<>1100 'set the first pos to P071; 'set labels to I61; 'set speed to I62; CALL JOB:MM_GET_POSE ("1;71;61;62") |
该步骤将从Mech-Vision获取视觉点,并将视觉点位姿、位姿相应的标签和速度值保存到变量中。 在本教程中,机器人每次从Mech-Vision获取一个视觉点。您可直接使用样例中代码片段,不需修改。 |
||
移动到抓取接近点 |
SFTON P070 MOVJ P071 VJ=50.00 SFTOF |
该步骤将机器人TCP移动到抓取接近点,防止机器人在直接从拍照点移动到抓取点过程中与场景物体(例如料筐)发生碰撞。 样例程序默认将机器人TCP移动到抓取点(P071)上方200毫米处(抓取接近点)。如果抓取接近点与抓取点之间距离过短,可以修改变量P070的Z轴值。 'set 200mm to Z SETE P070 (3) 200000 |
||
移动到抓取点 |
MOVL P071 V=80.0 PL=0 |
该步骤将机器人TCP移动到抓取点(P071)。 样例默认将机器人TCP以直线运动方式从抓取接近点移动到抓取点。可直接使用样例中代码片段,不需修改。 |
||
设置DO执行抓取 |
'enable gripper DOUT OT#(1) ON |
该步骤将夹爪撑开以抓取工件。 该教程使用夹爪在通用输出信号2接通后会撑开。因此,该步骤需要将通用输出信号修改为2。在实际应用中,通用输出信号的编号需要根据实际情况修改。 |
||
移动到抓取离开点 |
SFTON P070 MOVJ P071 VJ=50.00 SFTOF |
该步骤将机器人TCP移动到抓取离开点,防止机器人在抓取工件后与场景物体(例如料筐)发生碰撞。 样例程序默认将机器人TCP移动到抓取点(P071)上方200毫米处(抓取离开点)。如果抓取离开点与抓取点之间距离过短,可以修改变量P070的Z轴值。 'set 200mm to Z SETE P070 (3) 200000
|
||
移动到过渡点 |
MOVJ VJ=80.00 PL=0 |
该步骤将机器人TCP移动到示教的过渡点,以避免机器人与场景物体碰撞。 在该步骤,需要示教过渡点。可以根据需要添加更多的过渡点。 |
||
移动到放置点 |
'drop point MOVJ VJ=80.00 PL=0 |
该步骤将机器人TCP移动到示教的放置点。 在该步骤,需要示教放置点。 |
||
设置DO执行放置 |
'enable gripper DOUT OT#(1) OFF |
该步骤将夹爪松开以放置工件。 该教程使用的夹爪在通用输出信号1接通后会松开,以放置工件。因此,该步骤需要将通用输出信号1的状态修改为ON。在实际应用中,通用输出信号的编号和状态需要根据实际情况修改。 |
||
结束通信 |
CALL JOB:MM_CLOSE_SOCKET END |
该步骤将结束TCP Socket通信。该行代码不需修改。 |
关于样例程序更多信息,请参见样例程序详细解读。 |
修改与调试样例程序
本样例程序使用的机器人位姿为TCP位姿。在修改和调试样例程序前,请将工具编号切换为抓取夹具的编号(例如01),并完成该工具的TCP设置。 |
打开样例程序
要修改与调试机器人抓放样例程序,需要先打开样例程序:
-
在在线模式的下,从主菜单选择
,进入已安装程序列表界面。 -
选中mm_sample程序并按
选择
键打开。
样例程序开头的代码片段用于初始化变量,通常不需要进行修改。 |
移动到初始位
该步骤将机器人TCP移动到示教的初始位。在此处,需要为机器人示教初始位。
该步骤将需要修改下面的代码片段。
'move to the home position MOVJ VJ=80.00
执行如下操作为机器人示教初始位:
-
在示教器上旋转模式钥匙到
TEACH
进入示教模式。 -
手动控制机器人移动到程序的初始位。
-
按示教器上的 ▼ 键以选中“MOVJ VJ=80.00”行,按下
修改
键,然后按回车
键确认将初始点的位姿修改为机器人当前TCP位姿。“VJ=80.00”表示关节速度为80%。该参数可以保持不变。
移动到拍照点
该步骤将机器人TCP移动到示教的相机拍照点。在此处,需要为机器人示教相机拍照点。
该步骤将需要修改下面的代码片段。
'move to the camera position MOVJ VJ=80.00 PL=0
执行如下操作为机器人示教相机拍照点:
-
在示教模式下,手动控制机器人移动到拍照点。
-
按示教器上的 ▼ 键以选中“MOVJ VJ=80.00 PL=0”行,按下
修改
键,然后按回车
键确认将拍照点修改为机器人当前TCP位姿。“VJ=80.00”表示关节速度为80%;“PL=0”表示位置等级为0。这两个参数可以保持不变。位置等级用于设置机器人在示教位置时于示教位置的接近程度,取值范围为0~8,值越小位置越靠近。
建立通信
该步骤将与视觉系统建立TCP连接。在该步骤,需要修改“初始化通信”指令(MM_INIT_SOCKET)参数(工控机IP地址和端口)。
需要修改的代码片段如下。
'set ip address of IPC CALL JOB:MM_INIT_SOCKET ("192.168.170.22;50000;1") TIMER T=0.20 CALL JOB:MM_OPEN_SOCKET
执行如下操作修改“初始化通信”指令的参数:
-
在示教模式下,按示教器上的 ▼ 键以选中“CALL JOB:MM_INIT_SOCKET ("192.168.170.22;50000;1")”行,按下
选择
键。 -
使用示教器屏幕上的软键盘将“192.168.170.22”和“50000”分别修改为工控机的IP地址和端口,然后按屏幕上的
确认
键确认修改。
触发Mech-Vision工程进行视觉识别
该步骤将触发Mech-Vision工程进行视觉识别,输出视觉结果。
在该步骤,需要修改“运行Mech-Vision工程”指令的参数。因本教程只涉及一种工件,所以此处还需要注释“切换Mech-Vision配方”指令。
需要修改的代码片段如下。
CALL JOB:MM_SET_MODEL ("1;1") 'Run vision project CALL JOB:MM_START_VIS ("1;0;2")
执行如下操作注释“切换Mech-Vision配方”指令并修改“运行Mech-Vision工程”指令的参数:
-
在示教模式下,按示教器上的 ▼ 键以选中“CALL JOB:MM_SET_MODEL ("1;1")”行,点击编辑标签页,然后选择注释按钮并按下示教器上的
选择
键。在工程中包含多种工件时,需要使用参数配方,此时需要将第二个参数修改为当前工件对应的参数配方编号。 -
按示教器上的 ▼ 键以选中“CALL JOB:MM_START_VIS ("1;0;2")”行,按下
选择
键。 -
使用示教器屏幕上的软键盘修改“MM_START_VIS”指令的参数(例如1;1;0),然后按屏幕上的
确认
键确认修改。-
1:表示Mech-Vision工程编号。因为该教程中使用的工程的编号为1,所以不需修改。
-
0:在本例程中,因为每次只从Mech-Vision获取一个视觉点,因此该值需改为1。
-
2:本例程中,不需要将机器人的位姿发送给Mech-Vision,因此,需要该值需要修改为0。
-
获取视觉点
该步骤将从Mech-Vision获取视觉结果,并判断是否获取结果成功。如果获取成功,将视觉点的位姿存入位置型变量P071,将该位姿对应的标签数据存入整数型变量I061,将该位姿对应的移动速度存入整数型变量I062。
该步骤对应的代码片段可以直接使用,不需修改。
'get result from Vis CALL JOB:MM_GET_VISDATA ("1;50;51;52") PAUSE IF I052<>1100 'set the first pos to P071; 'set labels to I61; 'set speed to I62; CALL JOB:MM_GET_POSE ("1;71;61;62")
移动到抓取接近点
该步骤将机器人TCP移动到抓取接近点。
|
该步骤对应的代码片段可以直接使用,通常不需修改。在本例程中Z轴偏移量为200毫米,可根据需要修改。
'set 200mm to Z SETE P070 (3) 200000 ... SFTON P070 MOVJ P071 VJ=50.00 SFTOF
设置DO执行抓取
该教程使用的末端工具为撑开式夹爪,通过输出信号来控制夹爪。接通输出信号2将撑开夹爪,接通输出信号1将松开夹爪。 |
该步骤将通过接通输出信号2来撑开夹爪,实现工件抓取。因此需要将输出信号的编号修改为2。
该步骤需要修改的代码片段如下。
'enable gripper DOUT OT#(1) ON
执行如下操作将输出信号的编号修改为2:
-
在示教模式下,按示教器上的 ▼ 键以选中“DOUT OT#(1) ON”行,按下
选择
键。 -
将输出信号“1”修改为2,然后按屏幕上的
确认
键确认修改。
移动到抓取离开点
该步骤将机器人TCP以直线运动方式从抓取点移动到抓取离开点。
|
该步骤对应的代码片段可以直接使用,通常不需修改。
'set 200mm to Z SETE P070 (3) 200000 ... SFTON P070 MOVJ P071 VJ=50.00 SFTOF
移动到过渡点
该步骤将机器人TCP移动到示教的过渡点。
为了避免机器人与场景发生碰撞,通在抓取离开点和放置点之间添加过渡点。本例程中仅使用一个过渡点,在实际应用场景中,可以添加更多路径点以优化放置路径。 |
该步骤将需要修改下面的代码片段。
MOVJ VJ=80.00
执行如下操作为机器人示教过渡点:
-
在示教模式下,手动控制机器人移动到合适的过渡点。
-
按示教器上的 ▼ 键以选中“MOVJ VJ=80.00”行,按下
修改
键,然后按回车
键确认将过渡点修改为机器人当前TCP位姿。
移动到放置点
该步骤将机器人TCP移动到示教的放置点。
该步骤将需要修改下面的代码片段。
'drop point MOVJ VJ=80.00 PL=0
执行如下操作为机器人示教放置点:
-
在示教模式下,手动控制机器人移动到合适的放置点。
-
按示教器上的 ▼ 键以选中“MOVJ VJ=80.00 PL=0”行,按下
修改
键,然后按回车
键确认将放置点修改为机器人当前位姿。
测试运行
-
在示教器上旋转模式钥匙到
PLAY
进入再现模式。 -
按下示教器
伺服准备
键后,然后按蓝色运行按钮。机器人将自动执行机器人抓放程序,完成一个工件的抓取和放置。
请密切关注机器人移动轨迹,紧急情况及时按下急停键。 |
至此,你已完成一个简单的机器人抓放应用。
参考信息
安川机器人常用指令说明
关于安川机器人指令更详细介绍,请参阅机器人随机自带的《YRC1000/YRC1000micro/DX200 INFORM说明书》。
指令 | 说明 | 语法 | 示例 |
---|---|---|---|
NOP |
程序起始指令,不执行任何操作。 |
NOP |
|
' |
指定注释。 |
' 注释字符串 |
|
END |
程序结束。 |
END |
|
CLEAR |
按数据2指定的数量将数据1指定序号以后的变量内容清除为0。 |
CLEAR <数据1> <数据2> |
将变量I50至I69(共20个)清除为0。 |
SUB |
从数据1中减去数据2,将结果保存至数据1。 |
SUB <数据1> <数据2> |
将位置型变量P070减去P070变量,将结果存入P070变量。 |
SETE |
将数据2设定到数据1的位置型变量的元素。 |
SETE <数据1> <数据2> |
将变量P070的Z坐标值增加偏移量200000(单位为微米,相当于200毫米)。 |
MOVJ |
通过关节插补移动到示教位置(关节运动方式)。在不限制机器人移动到目的地时的轨迹的区间内使用。 |
MOVJ 机器人示教位置文件号 VJ=关节速度(%) |
机器人关节运动到示教的点位。 |
MOVL |
通过直线插补移动到示教位置(直线运动方式)。按直线轨迹移动到示教后的程序点。 |
MOVL 机器人示教位置文件号 V=TCP速度(mm/秒) PL=位置等级(0~8) |
机器人直线运动到P071指定的点位。 |
CALL |
调用指定的程序。 |
CALL JOB:调用程序名 |
调用标准接口指令“MM_OPEN_SOCKET”建立TCP连接。 |
TIMER |
停止指定的时间。 |
TIMER T=时间(秒) |
TIMER T=0.20 机器人停止0.2秒。 |
PAUSE |
暂停程序的执行。 |
PAUSE IF |
如果I052变量值不等于1100,则暂停程序执行。 |
IF |
在动作中判断各种条件。添加在进行处理的其他命令之后使用。 |
IF <对象1> 运算符(=、<>等) <对象1> |
如果I052变量值不等于1100,则暂停程序执行。 |
SFTON |
开始平行移动动作。平行移动量为坐标系中的X、Y、Z增量值,设定在位置型变量中。 |
SFTON 位置型变量序号 |
SETE P070 (3) 200000 ... SFTON P070 MOVJ P071 VJ=50.00 SFTOF 机器人以关节运动方式移动到抓取点(P071)上方200毫米处(抓取接近点) |
SFTOF |
结束平行移动动作。通常与SFTON指令成对使用。 |
SFTOF |
|
DOUT |
通用输出信号的接通、断开。 |
DOUT OT#(输出号) ON/OFF |
接通通用输出信号的1号。
断开通用输出信号的1号。 |
样例程序详细解读
-
NOP
含义:程序起始指令,标识程序开始。
-
'clear I50 to I69 CLEAR I050 20
含义:将整数型变量I50至I69的值清零。在本教程中,I50至I69变量主要用于存储状态、数量和标签值。
-
'Initialize p variables SUB P070 P070 SUB P071 P071
含义:将位置型变量P070和P071的值重置为0。在本教程中,变量P071用于保存抓取位姿。P070变量的Z轴值存放抓取接近点和抓取离开点相对于抓取点在Z轴上的偏移量。
-
'set 200mm to Z SETE P070 (3) 200000
含义:将抓取接近点和抓取离开点相对于抓取点在Z轴上的偏移量保存为P070变量的Z轴值,单位为微米。在本教程中,默认的偏移量为200000微米,即200毫米。
-
'move to the home position MOVJ VJ=80.00
含义:将机器人TCP移动到示教的初始位。“VJ=80.00”表示关节速度为80%。此处,需要示教初始位。
-
'move to the camera position MOVJ VJ=80.00 PL=0
含义:将机器人TCP移动到示教的相机拍照点。“VJ=80.00”表示关节速度为80%;“PL=0”表示位置等级为0。位置等级用于设置机器人在示教位置时于示教位置的接近程度,取值范围为0~8,值越小位置越靠近。
-
'set ip address of IPC CALL JOB:MM_INIT_SOCKET ("192.168.170.22;50000;1")
含义:初始化通信参数(工控机的IP地址和端口)。
-
TIMER T=0.20
含义:设置机器人停止0.2秒。
-
CALL JOB:MM_OPEN_SOCKET
含义:建立TCP Socket通信连接。
-
'set vision recipe CALL JOB:MM_SET_MODEL ("1;1")
含义:切换工程的参数配方。在工程中包含多种工件时,需要使用参数配方。
-
'Run vision project CALL JOB:MM_START_VIS ("1;0;2")
含义:触发Mech-Vision工程进行视觉识别。需要正确设置“MM_START_VIS”指令的参数。
-
'get result from Vis CALL JOB:MM_GET_VISDATA ("1;50;51;52")
含义:获取视觉点,并将视觉点是否发完的状态、返回的位姿数量以及指令状态码分别保存到变量I050~I052。
-
PAUSE IF I052<>1100
含义:如果指令状态码(I052变量值)不等于1100(正常码),则暂停程序执行。
-
'set the first pos to P071; 'set labels to I61; 'set speed to I62; CALL JOB:MM_GET_POSE ("1;71;61;62")
含义:从获取的视觉结果中,将第一个位姿及其对应的标签和移动速度数据转存到变量P071、I061和I062,供后续调用。
-
SFTON P070 MOVJ P071 VJ=50.00 SFTOF
含义:使用平行移动指令将机器人TCP以关节运动方式从拍照点移动到抓取接近点。抓取接近点相对于抓取点的Z轴偏移量由变量P070的Z轴值决定。
-
MOVL P071 V=80.0 PL=0
含义:将机器人TCP以直线运动方式移动到抓取点(P071变量指定的点位)。TCP速度位80 mm/s,位置等级为0。
-
'enable gripper DOUT OT#(1) ON
含义:通过接通输出信号1来控制抓取器抓取工件。在现场应用中,可能需要根据实际情况修改输出信号的编号。
-
SFTON P070 MOVJ P071 VJ=50.00 SFTOF
含义:使用平行移动指令将机器人TCP以直线运动方式从抓取点移动到抓取离开点。抓取离开点相对于抓取点的Z轴偏移量由变量P070的Z轴值决定。
-
MOVJ VJ=80.00
含义:将机器人TCP移动到示教的过渡点,以避免机器人与场景发生碰撞。此处,需要示教过渡点。
-
'drop point MOVJ VJ=80.00 PL=0
含义:将机器人TCP移动到示教的过渡点,以避免机器人与场景发生碰撞。此处,需要示教过渡点。
-
'release gripper DOUT OT#(1) OFF
含义:通过关闭输出信号1来控制抓取器放置工件。在现场应用中,可能需要根据实际情况修改输出信号的编号以及状态。
-
CALL JOB:MM_CLOSE_SOCKET
含义:断开TCP Socket通信连接。
-
END
含义:程序结束。