样例程序3:MM_S3_Vis_Path

程序简介

功能说明

机器人触发Mech-Vision工程运行,然后获取规划路径,进而执行抓取和放置操作。

文件路径

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

所需工程

Mech-Vision工程

Mech-Vision工程需包含路径规划步骤,且输出步骤的端口类型参数需要设置为“预定义(机器人路径)”。

使用前提

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

  2. 已完成自动标定

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

程序解读

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

NOP
'--------------------------------
'FUNCTION: trigger Mech-Vision
'project and get planned path
'Mech-Mind, 2023-12-25
'--------------------------------
'clear I50 to I69
CLEAR I050 20
'initialize p variables
SUB P071 P071
SUB P072 P072
SUB P073 P073
'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 planned path from NO.1
'Mech-Vision project; 2nd
'argument (1) means getting pose
'in JPs
CALL JOB:MM_GET_VISPATH ARGF"1;1;51;52;53"
'check whether planned path has
'been got from Mech-Vision
'successfully
IFTHENEXP I053<>1103
	'add error handling logic here
	'according to different error
	'codes
	'e.g.: status=1003 means no
	'point cloud in ROI
	'e.g.: status=1002 means no
	'vision results
	 PAUSE
ENDIF
'close socket connection
CALL JOB:MM_CLOSE_SOCKET
'save waypoints of the planned
'path to local variables one
'by one
CALL JOB:MM_GET_JPS ARGF"1;71;61;62"
CALL JOB:MM_GET_JPS ARGF"2;72;63;64"
CALL JOB:MM_GET_JPS ARGF"3;73;65;66"
'follow the planned path to pick
'move to approach waypoint of
'picking
MOVJ P071 VJ=50.00 PL=0
'move to picking waypoint
MOVJ P072 VJ=10.00 PL=0
'add object grasping logic here,
'such as DOUT OT#(1) ON
PAUSE
'move to departure waypoint of
'picking
MOVJ P073 VJ=50.00 PL=0
'move to intermediate waypoint of
'placing
MOVJ C00002 VJ=50.00
'move to approach waypoint of
'placing
MOVL C00003 V=166.6 PL=0
'move to placing waypoint
MOVL C00004 V=50.0 PL=0
'add object releasing logic here,
'such as DOUT OT#(1) OFF
PAUSE
'move to departure waypoint of
'placing
MOVL C00005 V=166.6 PL=0
'move back to robot home position
MOVJ C00006 VJ=50.00
END

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

sample3

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

流程 代码及说明

初始化变量

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

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

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

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

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

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

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

因此,上述三条指令表示将位置型变量P071、P072和P073设为0。

移动到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 planned path from NO.1
'Mech-Vision project; 2nd
'argument (1) means getting pose
'in JPs
CALL JOB:MM_GET_VISPATH ARGF"1;1;51;52;53"
  • MM_GET_VISPATH:获取Mech-Vision规划路径的指令。

  • 第一个1:指定Mech-Vision工程编号。

  • 第二个1:指定获取路径点的位姿形式为关节角。

  • 51:编号为51的I变量,该变量保存视觉系统返回的路径点个数。

  • 52:编号为52的I变量,该变量保存视觉移动路径点(抓取点)在路径中的位置编号。

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

因此,整条指令表示机器人获取Mech-Vision工程1返回的规划路径。

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

  • <>:不相等。

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

关闭通信

'close socket connection
CALL JOB:MM_CLOSE_SOCKET

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

转存规划路径

'save waypoints of the planned
'path to local variables one
'by one
CALL JOB:MM_GET_JPS ARGF"1;71;61;62"
CALL JOB:MM_GET_JPS ARGF"2;72;63;64"
CALL JOB:MM_GET_JPS ARGF"3;73;65;66"
  • MM_GET_JPS:转存规划路径的指令。

  • 1:将转存第一个路径点。

  • 71:编号为71的P变量,该变量将保存第一个路径点的关节角。

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

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

因此,“CALL JOB:MM_GET_JPS ARGF"1;71;61;62"”整条指令表示将第一个路径点的关节角、标签和末端工具编号分别转存至指定变量。

本样例假设Mech-Vision规划的路径包含三个路径点,其中第一个路径点为抓取接近点(P071),第二个路径点为抓取点(P072),第三个路径点为抓取离开点(P073)。用户需结合实际Mech-Vision工程转存规划路径。

移动到抓取接近点

'follow the planned path to pick
'move to approach waypoint of
'picking
MOVJ P071 VJ=50.00 PL=0

机器人移动到抓取接近点(即P071所表示的位置)。

移动到抓取点

'move to picking waypoint
MOVJ P072 VJ=10.00 PL=0

机器人移动到抓取点(即P072所表示的位置)。

设置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
MOVJ P073 VJ=50.00 PL=0

机器人移动到抓取离开点(即P073所表示的位置)。

移动到中间过渡点

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

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

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

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

移动到放置接近点

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

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

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

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

移动到放置点

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

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

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

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

设置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 C00005 V=166.6 PL=0

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

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

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

移动到Home点

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

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

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

我们重视您的隐私

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