样例程序1:MM_S1_Vis_Basic

您正在查看最新版本(V2.1.0)的文档。如果您想查阅其他版本的文档,可以点击页面右上角“切换版本”按钮进行切换。

■ 如果您不确定当前使用的产品是哪个版本,请随时联系梅卡曼德技术支持。

程序简介

功能说明

机器人触发Mech-Vision工程运行,然后获取视觉结果,进而执行抓取和放置操作。

文件路径

Mech-Vision和Mech-Viz软件安装目录下Communication Component/Robot_Interface/YASKAWA/sample/MM_S1_Vis_Basic

所需工程

Mech-Vision工程

使用前提

  1. 已完成标准接口通信配置

  2. 已完成自动标定

此样例程序仅是示例程序。用户需根据实际情况在此基础上进行修改,请勿直接使用该程序。

程序解读

以下为MM_S1_Vis_Basic样例程序的代码及相关解释说明。

NOP
'--------------------------------
'FUNCTION: trigger Mech-Vision
'project and get vision result
'Mech-Mind, 2023-12-25
'--------------------------------
'clear I50 to I69
CLEAR I050 20
'initialize p variables
SUB P070 P070
SUB P071 P071
'set 100mm to z of P070
SETE P070 (3) 100000
'move to robot home position
MOVJ C00000 VJ=50.00
'initialize communication
'parameters (initialization is
'required only once)
CALL JOB:MM_INIT_SOCKET ARGF"192.168.170.22;50000;1"
'move to image-capturing position
MOVJ C00001 VJ=50.00 PL=0
'open socket connection
CALL JOB:MM_OPEN_SOCKET
'trigger NO.1 Mech-Vision project
CALL JOB:MM_START_VIS ARGF"1;0;2;30"
'get vision result from NO.1
'Mech-Vision project
CALL JOB:MM_GET_VISDATA ARGF"1;51;52"
'check whether vision result has
'been got from Mech-Vision
'successfully
IFTHENEXP I052<>1100
	'add error handling logic here
	'according to different error
	'codes
	'e.g.: I052=1003 means no point
	'cloud in ROI
	'e.g.: I052=1002 means no
	'vision result
	 PAUSE
ENDIF
'close socket connection
CALL JOB:MM_CLOSE_SOCKET
'save first vision point data to
'local variables
CALL JOB:MM_GET_POSE ARGF"1;71;61;62"
'move to intermediate waypoint of
'picking
MOVJ C00002 VJ=50.00
'move to approach waypoint of
'picking
SFTON P070
MOVL P071 V=166.6 PL=0
SFTOF
'move to picking waypoint
MOVL P071 V=50.0 PL=0
'add object grasping logic here,
'such as DOUT OT#(1) ON
PAUSE
'move to departure waypoint of
'picking
SFTON P070
MOVL P071 V=166.6 PL=0
SFTOF
'move to intermediate waypoint of
'placing
MOVJ C00003 VJ=50.00
'move to approach waypoint of
'placing
MOVL C00004 V=166.6 PL=0
'move to placing waypoint
MOVL C00005 V=50.0 PL=0
'add object releasing logic here,
'such as DOUT OT#(1) OFF
PAUSE
'move to departure waypoint of
'placing
MOVL C00006 V=166.6 PL=0
'move back to robot home position
MOVJ C00007 VJ=50.00
END

上述样例程序代码对应的流程如下图所示。

sample1

下表为上述程序的逻辑解读。用户单击指令名称的超链接便可查看该指令的详细说明。

流程 代码及说明

初始化变量

'clear I50 to I69
CLEAR I050 20
  • CLEAR:清除数据的指令。

  • I050:指定从编号为50的整型变量(I变量)开始清除。

  • 20:指定要清除的变量个数为20。

因此,整条指令表示将整型变量I050至I069(共20个)清除为0。

'initialize p variables
SUB P070 P070
SUB P071 P071
  • SUB:减法指令。

  • 第一个P070:指定被减数为位置型变量(P变量)P070,同时将减法运算的结果保存至P070。

  • 第二个P070:指定减数为位置型变量P070。

因此,上述两条指令表示将位置型变量P070和P071设为0。

'set 100mm to z of P070
SETE P070 (3) 100000
  • SETE:设置变量数据的指令。

  • P070:指定要设置数据的变量为P070。

  • 3:指定设置变量的第三个参数(此处表示设置P070的Z轴数据)。

  • 100000:指定要设置的数据值。

因此,上述指令表示将P070的Z轴数据设置为100000(单位为微米,相当于100毫米)。

移动到Home点

'move to robot home position
MOVJ C00000 VJ=50.00
  • MOVJ:关节角移动指令。

  • C00000:机器人示教位置标号。

    • 用户需提前示教C00000(Home点),具体示教方法可参考自动标定中“示教标定起始点”的操作。

    • 对C00000进行示教后,机器人轴示教位置会被无条件写入C00000。该示教位置不可编辑。

    • 在示教器界面上不显示此标号(C00000)。

  • VJ=50.00:指定关节速度。关节速度以与最高速度的比率来表示。

因此,整条指令表示机器人以关节角移动方式移动到示教的Home点。

初始化通信参数

'initialize communication
'parameters (initialization is
'required only once)
CALL JOB:MM_INIT_SOCKET ARGF"192.168.170.22;50000;1"
  • CALL:调用指定指令(或程序)。

  • JOB:指定调用的指令(或程序)。

  • MM_INIT_SOCKET:初始化通信的指令。

  • ARGF:在示教器界面中,ARGF会显示为英文括号。

  • 192.168.170.22:工控机的IP地址。

  • 50000:工控机的端口号。

  • 1:通信超时等待时间为1分钟。

机器人通过MM_INIT_SOCKET指令指定通信对象(工控机)的IP地址(192.168.170.22)、端口号(50000)以及超时等待时间(1分钟)。

用户需根据实际情况修改此处的工控机IP地址和端口号,确保与视觉系统设置的参数一致。

移动到拍照点

'move to image-capturing position
MOVJ C00001 VJ=50.00 PL=0
  • C00001:机器人示教位置标号。用户需提前示教C00001(拍照点),具体示教方法可参考自动标定中“示教标定起始点”的操作。

  • PL=0:指定位置等级为0。位置等级是指机器人通过示教位置时的接近度,取值范围为0~8,值越小,位置越靠近。

因此,整条指令表示机器人以关节角移动方式移动到示教的拍照点。

建立通信

'open socket connection
CALL JOB:MM_OPEN_SOCKET

机器人通过MM_OPEN_SOCKET指令与视觉系统之间建立TCP协议通信连接。

触发运行Mech-Vision工程

'trigger NO.1 Mech-Vision project
CALL JOB:MM_START_VIS ARGF"1;0;2;30"
  • MM_START_VIS:触发运行Mech-Vision工程的指令。

  • 1:Mech-Vision工程编号。

  • 0:期望Mech-Vision工程返回所有视觉点。

  • 2:将机器人的当前法兰位姿传入Mech-Vision工程。

  • 30:编号为30的P变量,该变量用于保存用户自定义的关节角数据,此样例中该关节角数据无实际用处。

因此,整条指令表示机器人触发视觉系统运行编号为1的Mech-Vision工程,且期望Mech-Vision工程返回所有视觉点。

获取视觉结果

'get vision result from NO.1
'Mech-Vision project
CALL JOB:MM_GET_VISDATA ARGF"1;51;52"
  • MM_GET_VISDATA:获取视觉结果的指令。

  • 1:Mech-Vision工程编号。

  • 51:编号为51的I变量,该变量保存获取的视觉点数量。

  • 52:编号为52的I变量,该变量保存指令执行的状态码。

因此,整条指令表示机器人获取Mech-Vision工程1返回的视觉结果。

由于返回的视觉结果保存在机器人内存中,此时用户无法直接获取到视觉结果,必须通过后续“转存视觉结果”才可访问。
'check whether vision result has
'been got from Mech-Vision
'successfully
IFTHENEXP I052<>1100
	'add error handling logic here
	'according to different error
	'codes
	'e.g.: I052=1003 means no point
	'cloud in ROI
	'e.g.: I052=1002 means no
	'vision result
	 PAUSE
ENDIF
  • IFTHENEXP A …​ ENDIF:当条件A成立,程序执行IFTHENEXP与ENDIF之间的代码。

  • <>:不相等。

因此,上述语句表示,当状态码I052为1100时,则机器人成功获取到所有视觉结果;否则视觉系统发生异常,程序执行IFTHENEXP与ENDIF之间的代码。用户可根据具体异常状态码做相应的处理。此样例中对所有异常状态码做了相同处理,即通过PAUSE指令暂停程序的执行。

关闭通信

'close socket connection
CALL JOB:MM_CLOSE_SOCKET

机器人通过MM_CLOSE_SOCKET指令断开与视觉系统之间的TCP协议通信连接。

转存视觉结果

'save first vision point data to
'local variables
CALL JOB:MM_GET_POSE ARGF"1;71;61;62"
  • MM_GET_POSE:转存视觉结果的指令。

  • 1:将转存第一个视觉点。

  • 71:编号为71的P变量,该变量将保存第一个视觉点的工具位姿,即抓取点的工具位姿。

  • 61:编号为61的I变量,该变量将保存第一个视觉点对应的标签。

  • 62:编号为62的I变量,该变量将保存第一个视觉点对应的末端工具编号。

因此,整条指令表示将第一个视觉点的工具位姿、标签和末端工具编号分别转存至指定变量。

移动到中间过渡点

'move to intermediate waypoint of
'picking
MOVJ C00002 VJ=50.00

整条指令表示机器人以关节角移动方式移动至拍照点与抓取接近点之间的某个过渡点。

  • 添加过渡点可保证机器人平滑移动,同时避免一些不必要的碰撞。用户可根据实际场景添加多个过渡点。

  • 用户需提前示教C00002(中间过渡点),具体示教方法可参考自动标定中“示教标定起始点”的操作。

移动到抓取接近点

'move to approach waypoint of
'picking
SFTON P070
MOVL P071 V=166.6 PL=0
SFTOF
  • SFTON P070:按照指定的偏移量(P070,其Z轴数据为100毫米)开始平行移动动作。

  • MOVL P071 V=166.6 PL=0:指定平移动作,即机器人直线移动到相对于P071偏移P070的位置处,TCP速度为166.6mm/s,位置等级为0。

  • SFTOF:结束平行移动动作。

因此,整条指令表示机器人直线移动到抓取点(P071)上方100mm处。

增加抓取接近点可防止机器人在移动过程中与场景物体(例如料筐)发生碰撞。用户可根据实际场景修改Z轴方向的偏移量(即“SETE P070 (3) 100000”),保证接近过程无碰撞。

移动到抓取点

'move to picking waypoint
MOVL P071 V=50.0 PL=0

机器人以直线移动方式从抓取接近点移动到抓取点。

设置DO执行抓取

'add object grasping logic here,
'such as DOUT OT#(1) ON
PAUSE

机器人移动到抓取点后,通过设置DO指令(例如“DOUT OT#(1) ON”),控制末端工具进行抓取。用户需根据实际场景增加设置DO的操作。

PAUSE表示暂停程序的执行。用户如果已添加设置DO的语句,此处可以删除PAUSE语句。

移动到抓取离开点

'move to departure waypoint of
'picking
SFTON P070
MOVL P071 V=166.6 PL=0
SFTOF

机器人移动到抓取点上方的100mm处,即到达抓取离开点。

增加抓取离开点可防止机器人在移动过程中与场景物体(例如料筐)发生碰撞。用户可根据实际场景修改Z轴方向的偏移量(即“SETE P070 (3) 100000”),保证离开过程无碰撞。

移动到中间过渡点

'move to intermediate waypoint of
'placing
MOVJ C00003 VJ=50.00

机器人移动至抓取离开点与放置接近点之间的某个过渡点。

  • 添加过渡点可保证机器人平滑移动,同时避免一些不必要的碰撞。用户可根据实际场景添加多个过渡点。

  • 用户需提前示教C00003(中间过渡点),具体示教方法可参考自动标定中“示教标定起始点”的操作。

移动到放置接近点

'move to approach waypoint of
'placing
MOVL C00004 V=166.6 PL=0

机器人从中间过渡点移动到放置接近点。

  • 增加放置接近点可防止机器人在移动过程中与场景物体(例如料筐)发生碰撞。

  • 用户需提前示教C00004(放置接近点),具体示教方法可参考自动标定中“示教标定起始点”的操作。

移动到放置点

'move to placing waypoint
MOVL C00005 V=50.0 PL=0

机器人从放置接近点移动到放置点。

  • 放置点应与其他工作站、人员或设备保持安全距离,且不超出机器人的最大伸展范围。

  • 用户需提前示教C00005(放置点),具体示教方法可参考自动标定中“示教标定起始点”的操作。

设置DO执行放置

'add object releasing logic here,
'such as DOUT OT#(1) OFF
PAUSE

机器人移动到放置点后,通过设置DO指令(例如“DOUT OT#(1) OFF”),控制末端工具进行放置。用户需根据实际场景增加设置DO的操作。

PAUSE表示暂停程序的执行。用户如果已添加设置DO的语句,此处可以删除PAUSE语句。

移动到放置离开点

'move to departure waypoint of
'placing
MOVL C00006 V=166.6 PL=0

机器人从放置点移动到放置离开点。

  • 增加放置离开点可防止机器人在移动过程中与场景物体(例如料筐)发生碰撞。

  • 用户需提前示教C00006(放置离开点),具体示教方法可参考自动标定中“示教标定起始点”的操作。

移动到Home点

'move back to robot home position
MOVJ C00007 VJ=50.00

机器人从放置离开点重新移动到Home点。

用户需提前示教C00007(Home点),具体示教方法可参考自动标定中“示教标定起始点”的操作。

我们重视您的隐私

我们使用 cookie 为您在我们的网站上提供最佳体验。继续使用该网站即表示您同意使用 cookie。如果您拒绝,将使用一个单独的 cookie 来确保您在访问本网站时不会被跟踪或记住。