实现抓放
在本教程中,你将先了解本案例实现的抓取和放置流程、然后了解如何完成抓取和放置流程配置。
通信方案说明
在上述流程中,“机器人触发相机拍照并获取规划路径”需要机器人与视觉系统使用标准接口通信方式,并且标准接口与视觉系统的配合方式为“使用Mech-Viz获取规划路径”。
使用该配合方式时,你需要配置好Mech-Vision工程(已在“视觉工程配置”章节配置)和Mech-Viz工程,并编写机器人程序。请参考“抓取放置流程配置”完成Mech-Viz工程的配置和机器人程序的编写。
抓取和放置流程配置
要实现抓取和放置逻辑流程,需要依次完成如下配置:
配置Mech-Viz工程进行路径规划和仿真
在Mech-Viz创建工程可以为机器人提供如下功能:
-
路径规划:规划机器人的抓取路径。注意规划的路径不包含放置的路径。放置路径需在机器人程序中添加。
-
碰撞检测:Mech-Viz在路径规划时进行碰撞检测,为机器人提供无碰撞的抓取路径。
-
仿真运行:Mech-Viz可以可视化仿真机器人的抓取流程,方便进行调试。
配置Mech-Viz工程的流程如下图所示。
Mech-Vision案例库中的“无序工件上料”案例内置了Mech-Viz工程“Viz_Target_Objects_Picking”。在开始下方配置前,请打开Mech-Viz,在菜单栏选择
,选择本地“无序工件上料”方案中的“Viz_Target_Objects_Picking”文件夹。配置场景物体
配置场景物体的目的是还原真实现场场景,以此来辅助用户规划机器人运动路径。具体操作方法请参考配置场景物体。
注意添加的料筐场景物体的名称必须与Mech-Vision工程中标准料筐定位步骤组合的字符串列表参数值保持一致。 |
在确保抓取动作可行性的基础上,应对实际作业环境进行更为严格的还原,本方案中场景物体设置情况如下。
配置末端工具
配置末端工具的目的是在三维仿真空间中能够显示末端工具的模型,并用于碰撞检测。具体操作方法请参考配置末端工具。
关联工件与末端工具并设置抓取裕度
在配置完末端工具后,需要在工件库中将工件与用于抓取的末端工具关联,这样配置的末端工具才可以用于抓取工具。本案例抓取的工件为螺栓,抓取时夹具将夹取螺杆部位。在实际抓取中,允许夹具沿抓取点X方向发生平移。因此,可以在工件库中配置抓取裕度进一步提升抓取成功率。
-
在工程资源树的工件节点下双击已有的工件模型以打开工件库。
-
在设置抓取点选项卡中的抓取配置区域,勾选启用Mech-Viz中所有末端工具选项,实现末端工具与工件的绑定。
-
在参数配置区域,设置沿X轴的平移裕度。
碰撞模型简化
在制作末端工具模型时,为了减少制作末端工具碰撞模型所需的操作时间,不必在创建凸包时完全复原模型,可以根据模型的实际情况有选择地忽略一些细节。
简化思路:对于夹指部分应当力求精细,确保其形态能高度还原实物,以保证检测碰撞的准确性,对于距离夹指部分较远的机械结构,则可以采取简化处理的方式,采用外包围的长方体来替代复杂的结构设计,提高效率。
模型简化示例如下图。
搭建工作流程
“无序工件上料”案例内置的Mech-Viz工程“Viz_Target_Objects_Picking”已搭建了工作流程。工作流程中每个步骤的说明如下。
步骤 | 说明 | 用途 |
---|---|---|
定义Home点 |
该点仅用于仿真,不发送给机器人。 |
|
调用Mech-Vision视觉结果 |
/ |
|
检查是否有视觉结果 |
/ |
|
规划入筐点和抓取接近点 |
两个点作为规划路径的一部分发送给机器人。 |
|
规划抓取点 |
抓取点作为规划路径的一部分发送给机器人。 |
|
规划抓取离开点和出筐点 |
两个点作为规划路径的一部分发送给机器人。 |
|
定义中间过渡点 |
该点仅用于仿真,不发送给机器人。 |
配置碰撞检测参数
Mech-Viz能够通过碰撞检测功能来防止机器人在运动过程中发生不必要的碰撞。本应用需要开启点云碰撞检测与工件碰撞检测功能。具体操作请参考碰撞检测配置。
-
点云碰撞检测:主要检查夹具与点云的碰撞。机器人关节与点云的碰撞检测可根据实际需求开启,以缩短规划时间。
-
工件碰撞检测:主要检查被抓工件与场景物体的碰撞。被抓工件与其他工件或点云的碰撞可根据实际需求开启。
配置机器人参数和编写机器人程序
FANUC标准接口样例程序MM_S2_Viz_Basic可以基本满足本案例所需要的功能。你可以在样例程序基础上进行修改。关于样例程序MM_S2_Viz_Basic的详细解释,请参考样例程序解读。
基于样例程序,请在机器人端完成如下操作:
-
设置工具坐标系。确认机器人端的工具坐标系TCP与Mech-Viz软件中的TCP数据一致。将当前所选的工具坐标系号码设置为实际使用的夹爪所在的坐标系。
修改前 修改后 10: UTOOL_NUM=1 ;
10: UTOOL_NUM=#;
请将“#”替换实际使用工具的编号。 -
示教Home点(初始位)。
将机器人移动到示教的初始位。初始位应远离待抓取物体及周边设备,且不遮挡相机视野。完成后,记录此时的机器人位姿到变量P[1]。
-
指定工控机IP地址。将CALL MM_INIT_SKT指令中的IP地址修改为工控机实际IP地址。
修改前 修改后(示例) CALL MM_INIT_SKT('8','192.168.1.20',50000,1) ;
16: CALL MM_INIT_SKT('8','192.168.110.207',50000,5) ;
-
示教机器人拍照位。
将机器人移动到示教的相机拍照位。拍照位指相机采集图像时机器人所在的位置。在此位置,机器人手臂应不遮挡相机视野。完成后,记录此时的机器人位姿到变量P[2]。
-
添加转存规划路径指令,将所有返回的路径点转存到本地变量中。
Mech-Viz返回的规划路径包含五个路径点:入筐点、抓取接近点、抓取点、抓取离开点、出筐点。样例程序只转存了三个路径点,因此需要添加转存规划路径指令。 修改前 修改后 31: CALL MM_GET_JPS(1,60,70,80) ; 32: CALL MM_GET_JPS(2,61,71,81) ; 33: CALL MM_GET_JPS(3,62,72,82) ;
32: CALL MM_GET_JPS(1,60,70,80) ; 33: CALL MM_GET_JPS(2,61,71,81) ; 34: CALL MM_GET_JPS(3,62,72,82) ; 35: CALL MM_GET_JPS(4,63,73,83) ; 36: CALL MM_GET_JPS(5,64,74,84) ;
-
调整抓取接近点(含入筐点)和抓取点的位置寄存器编号。
PR[60]和PR[61]为入筐点和抓取接近点,PR[62]为抓取点。 修改前 修改后 35: !move to approach waypoint ; 36: !of picking ; 37:J PR[60] 50% FINE ; 38: !move to picking waypoint ; 39:J PR[61] 10% FINE ;
38: !move to approach waypoint ; 39: !of picking ; 40:J PR[60] 50% FINE ; 41:J PR[61] 50% FINE ; 42: !move to picking waypoint ; 43:J PR[62] 10% FINE ;
-
设置DO端口信号,以闭合夹具抓取工件。注意,DO指令应根据现场实际使用的DO端口号设置。
修改前 修改后(示例) 40: !add object grasping logic here, ; 41: !such as "DO[1]=ON" ; 42: PAUSE ;
44: !add object grasping logic here, ; 45: !such as "DO[1]=ON" ; 46: PAUSE ; 47: DO[1:OFF]=ON ;
-
调整抓取离开点(含出筐点)的位置寄存器编号。
PR[63]和PR[64]为抓取离开点和出筐点。 修改前 修改后 43: !move to departure waypoint ; 44: !of picking ; 45:J PR[62] 50% FINE
48: !move to departure waypoint ; 49: !of picking ; 50:J PR[63] 50% FINE ; 51:J PR[64] 50% FINE ;
-
示教放置过渡点和放置点。
将机器人移动到示教的过渡点及放置点,并分别记录机器人位姿到P[3]和P[4]。
-
设置DO端口信号,以松开夹具放置工件。注意,DO指令应根据现场实际使用的DO端口号设置。
修改前 修改后 54: !add object releasing logic here, ; 55: !such as "DO[1]=OFF" ; 56: PAUSE ;
60: !add object releasing logic here, ; 61: !such as "DO[1]=OFF" ; 62: PAUSE ; 63: DO[1:OFF]=OFF ;
单步运行测试机器人抓放效果
执行如下步骤测试机器人抓放效果:
-
将示教器上钥匙开关转至ON,将控制柜上旋钮旋转至T1。
-
按示教器背部的使能开关(任一均可)。
-
在示教器上,按住SHIFT,同时按下FWD,手动运行修改后的样例程序。
-
机器人将自动执行机器人抓放程序,完成一个工件的抓取和放置。
如果机器人可以成功抓取和放置工件,则说明机器人程序符合要求。
插入循环语句实现循环抓放
在测试机器人可以成功完成单次抓取和放置,可以在程序中插入循环语句,实现机器人循环抓放。
加入如下循环语句:
17: LBL[1] ; ... 69: JMP LBL[1] ;
参考:修改后的样例程序
最终修改后的样例程序如下:
1: !-------------------------------- ;
2: !FUNCTION: trigger Mech-Viz ;
3: !project and get planned path ;
4: !Mech-Mind, 2023-12-25 ;
5: !-------------------------------- ;
6: ;
7: !set current uframe NO. to 0 ;
8: UFRAME_NUM=0 ;
9: !set current tool NO. to 1 ;
10: UTOOL_NUM=1 ;
11: !move to robot home position ;
12:J P[1] 100% FINE ;
13: !initialize communication ;
14: !parameters(initialization is ;
15: !required only once) ;
16: CALL MM_INIT_SKT('8','192.168.110.207',50000,5) ;
17: LBL[1] ;
18: !move to image-capturing position ;
19:L P[2] 1000mm/sec FINE ;
20: !trigger Mech-Viz project ;
21: CALL MM_START_VIZ(2,10) ;
22: !get planned path, 1st argument ;
23: !(1) means getting pose in JPs ;
24: CALL MM_GET_VIZ(1,51,52,53) ;
25: !check whether planned path has ;
26: !been got from Mech-viz ;
27: !successfully ;
28: IF R[53]<>2100,JMP LBL[99] ;
29: !save waypoints of the planned ;
30: !path to local variables one ;
31: !by one ;
32: CALL MM_GET_JPS(1,60,70,80) ;
33: CALL MM_GET_JPS(2,61,71,81) ;
34: CALL MM_GET_JPS(3,62,72,82) ;
35: CALL MM_GET_JPS(4,63,73,83) ;
36: CALL MM_GET_JPS(5,64,74,84) ;
37: !follow the planned path to pick ;
38: !move to approach waypoint ;
39: !of picking ;
40:J PR[60] 50% FINE ;
41:J PR[61] 50% FINE ;
42: !move to picking waypoint ;
43:J PR[62] 10% FINE ;
44: !add object grasping logic here, ;
45: !such as "DO[1]=ON" ;
46: PAUSE ;
47: DO[1:OFF]=ON ;
48: !move to departure waypoint ;
49: !of picking ;
50:J PR[63] 50% FINE ;
51:J PR[64] 50% FINE ;
52: !move to intermediate waypoint ;
53: !of placing ;
54:J P[3] 50% CNT100 ;
55: !move to approach waypoint ;
56: !of placing ;
57:L P[4] 1000mm/sec FINE Tool_Offset,PR[2] ;
58: !move to placing waypoint ;
59:L P[4] 300mm/sec FINE ;
60: !add object releasing logic here, ;
61: !such as "DO[1]=OFF" ;
62: PAUSE ;
63: DO[1:OFF]=OFF ;
64: !move to departure waypoint ;
65: !of placing ;
66:L P[4] 1000mm/sec FINE Tool_Offset,PR[2] ;
67: !move back to robot home position ;
68:J P[1] 100% FINE ;
69: JMP LBL[1] ;
70: END ;
71: ;
72: LBL[99:vision error] ;
73: !add error handling logic here ;
74: !according to different ;
75: !error codes ;
76: !e.g.: status=2038 means no ;
77: !point cloud in ROI ;
78: PAUSE ;
至此,你已完成了3D视觉引导机器人无序件上料应用的部署。