方案部署
本节将介绍如何进行小型钣金件方案部署,总体流程如下图所示。
视觉系统硬件搭建
视觉系统硬件搭建是将硬件设备(相机和工控机)集成到实际工作环境中,以支持视觉系统的正常运行。
在该阶段,你需要完成视觉系统硬件的安装与连接。详细信息请参考视觉系统硬件搭建。
机器人通信配置
机器人通信配置前,需先获取方案。请单击此处查看方案获取方法。
-
打开Mech-Vision软件。
-
在Mech-Vision欢迎页中单击从案例库新建按钮,打开案例库。
-
进入案例库中的典型案例分类,单击右上角的 图标以获取更多资源,并在弹出的窗口中单击确定按钮。
-
获取案例资源后,选择无序工件拣选分类下的小型钣金件,在下方填写方案名称和路径,最后单击创建按钮,并在弹出的窗口中单击确定按钮下载小型钣金件方案。
下载完成后,在Mech-Vision中将自动打开该方案。
在配置视觉工程前,需要完成梅卡曼德视觉系统与机器人侧(机器人、PLC 或上位机)的通信对接。
小型钣金件方案使用标准接口通信,具体操作方法请参考标准接口通信配置。
手眼标定
手眼标定是指建立相机坐标系与机器人坐标系对应关系的过程,将视觉系统确定的物体位姿转换为机器人坐标系下的位姿,从而引导机器人精准完成抓取任务。
请参考机器人手眼标定操作指南完成手眼标定。
每次安装相机后,或标定后相机与机器人的相对位置发生变化时,都需要重新进行手眼标定。 |
视觉工程配置
完成通信配置和手眼标定后,即可使用Mech-Vision进行视觉工程配置。
视觉工程配置的流程如下图所示。
连接相机并采集图像
-
连接相机。
打开Mech-Eye Viewer,找到待连接的相机,单击连接按钮。
-
调节相机参数。
为确保相机采集到的2D图像清晰,点云无缺失,需调节相机参数。参数调节方法请参考PRO S相机参数参考指南。
-
采集图像。
相机连接成功且设置参数组后,即可开始采集工件图像。单击界面上方的 按钮,进行单次图像采集,此时即可查看采集到的工件2D图像和点云,确保2D图像清晰,点云无缺失且边缘清晰。合格的工件2D图像和点云分别如下图中左图、右图所示。
-
在Mech-Vision中连接相机。
单击从相机获取图像步骤,在界面右下角步骤参数中关闭虚拟模式,然后单击选择相机按钮。
在弹出的窗口中单击某相机编号右侧的 图标,该图标变为 后,代表相机连接成功。相机连接成功后,单击右侧的参数组下拉框选择标定的参数组,如下图所示。
以上设置完成后即已连接真实相机,无需调节其他参数。单击从相机获取图像步骤右侧的 图标运行该步骤,如无报错即表示相机连接成功,并可正确采集图像。
3D工件识别
小型钣金件方案使用3D工件识别步骤识别工件。单击3D工件识别步骤界面的配置向导按钮,打开3D工件识别工具进行相关配置。总体配置流程如下图所示。
识别工件
点云预处理完成后,需从工件库中制作工件的点云模板,然后在3D工件识别工具中设置匹配相关参数,用于匹配点云模板。
-
制作工件模板。
-
制作点云模板并添加抓取点。单击打开工件库按钮,打开工件库,通过导入STL文件生成工件点云模板,并手动配置抓取点。
-
-
-
开启识别工件右侧的高级模式开关。
-
匹配模式:开启自动设置匹配模式开关。开启后,该步骤将自动调节粗匹配设置和精匹配设置参数。
-
粗匹配设置:为减少匹配耗时,需将粗匹配运行方式设置为自定义,将期望的模板点云点数设置为300。
-
置信度设置:将置信度策略设置为自动,将置信度阈值设置为0.5,用于去除错误的匹配结果。
-
输出-最大结果输出个数:在满足路径规划需求的前提下,尽量减少输出个数,减少匹配耗时。本方案中将最大输出结果个数设置为20。
-
去除重叠物体位姿、去除压叠物体位姿:为了去除重叠、压叠的识别结果,打开启用去重叠功能和启用去压叠功能开关,并将各自的阈值设置为30%和20%。
-
上述参数设置完成后,单击运行步骤按钮,匹配效果如下图所示。
定位料筐
由于料筐形状近似为矩形,可直接使用案例库教学示例中3D定位分组下的标准料筐定位步骤组合对料筐进行定位,无需制作点云模板。
-
字符串列表:即料筐在Mech-Viz中的名称,用于更新料筐位置。
-
移动距离:将料筐位姿从料筐上表面向下移动至料筐中心,此方案中应将移动距离设置为-57.5mm。
移动距离值 = -1 × 1/2 料筐高度 -
运行该步骤组合,定位料筐并将料筐位姿发送到Mech-Viz,并更新料筐位置。
调整位姿
获取工件位姿后,需使用调整位姿V2步骤对位姿进行调整。单击调整位姿V2步骤界面的配置向导按钮,打开位姿调整工具进行位姿调整相关配置。总体配置流程如下图所示。
路径规划
完成工件识别后,即可使用Mech-Viz进行路径规划,然后编写机器人程序用于抓取工件。
路径规划的配置流程如下图所示。
配置场景物体
配置场景物体的目的是还原真实现场场景,以此来辅助用户规划机器人运动路径。具体操作方法请参考配置场景物体。
在确保抓取可行性的基础上,应在严格还原真实作业环境的前提下配置场景物体。本方案中场景物体配置情况如下图所示:
配置末端工具
配置末端工具的目的是在三维仿真空间中显示末端工具的模型,并用于碰撞检测。具体操作方法请参考配置末端工具。
|
调整工作流程
工作流程指的是在Mech-Viz中以流程图形式搭建的机器人运动控制程序。场景物体和末端工具配置完成后,即可根据实际需求调整工程的工作流程。抓取工件时的逻辑处理流程图如下图所示。
使用标准接口通信时,工程的具体工作流程如下图所示。
其中,工作流程中起始和结束的两个定点移动步骤为示教点,不需要对外发送。其他移动步骤会对外发送路径点,每个筐内智能路径步骤对应两个路径点,合计共发送5个路径点。
仿真与测试
单击工具栏中的仿真按钮,即可对搭建完成的Mech-Viz工程进行仿真,以测试视觉系统是否已成功搭建。
将工件随机摆放在料筐内,然后单击Mech-Viz工具栏的仿真按钮模拟抓取工件。每次抓取成功后需重新布置工件,循环仿真抓取10次。若10次仿真抓取均能顺利进行,即可判定视觉系统可正常工作。
若仿真过程中出现异常,请参考方案部署常见问题解决问题。
机器人抓放
机器人程序编写
若仿真效果满足预期,即可编写FANUC机器人抓放程序。
FANUC机器人样例程序MM_S10_Viz_Subtask可以基本满足本典型案例所需要的功能。你可以在样例程序基础上进行修改。关于MM_S10_Viz_Subtask程序的解释详细,请参考样例程序解读。
修改说明
本样例由两个程序组成,其中子任务负责触发Mech-Viz工程运行并获取规划路径;主任务负责根据规划路径移动机器人,且在机器人离开抓取区域时触发子任务运行,从而提前规划下一轮路径,以缩短节拍。基于样例程序,请参考如下步骤修改程序文件:
-
子任务
-
添加转存规划路径指令,将所有返回的路径点转存到本地变量中。
Mech-Viz返回的规划路径包含五个路径点:入筐点、抓取接近点、抓取点、抓取离开点、出筐点。样例程序只转存了三个路径点,因此需要添加转存规划路径指令。 修改前 修改后(示例) 22: CALL MM_GET_JPS(1,60,70,80) ; 23: CALL MM_GET_JPS(2,61,71,81) ; 24: CALL MM_GET_JPS(3,62,72,82) ;
22: CALL MM_GET_JPS(1,60,70,80) ; 23: CALL MM_GET_JPS(2,61,71,81) ; 24: CALL MM_GET_JPS(3,62,72,82) ; 25: CALL MM_GET_JPS(4,63,73,83) ; 26: CALL MM_GET_JPS(5,64,74,84) ;
-
-
主任务
-
设置工具坐标系。确认机器人示教器上的TCP与Mech-Viz软件中的TCP数据一致。将当前所选的工具坐标系号码设置为实际使用的夹爪所在的坐标系。
修改前 修改后(示例) 11: !set current tool NO. to 1 ; 12: UTOOL_NUM=1 ;
11: !set current tool NO. to 3 ; 12: UTOOL_NUM=3 ;
请将数字替换实际使用工具的编号,此处“3”仅作示例。 -
指定工控机IP地址和端口号。将CALL MM_INIT_SKT指令中的IP地址和端口号修改为工控机实际IP地址和端口号,确保与视觉系统中的设置一致。
修改前 修改后(示例) 16: CALL MM_INIT_SKT('8','127.0.0.1',50000,5) ;
16: CALL MM_INIT_SKT('8','127.1.1.2',50000,6) ;
-
配置入筐点、抓取接近点和抓取点的位置寄存器编号。
修改前 修改后 32: !move to approach waypoint ; 33: !of picking ; 34:J PR[60] 50% FINE ; 35: !move to picking waypoint ; 36:J PR[61] 10% FINE ; ... 40: !move to departure waypoint ; 41: !of picking ; 42:J PR[62] 50% FINE ;
32: !move to approach waypoint ; 33: !of picking ; 34:J PR[60] 50% FINE ; 35:J PR[61] 50% FINE ; 36: !move to picking waypoint ; 37:J PR[62] 10% FINE ; ... 42: !move to departure waypoint ; 43: !of picking ; 44:J PR[63] 50% FINE ; 45:J PR[64] 50% FINE ;
在修改后的样例程序中,PR[60]为入筐点,PR[61]为抓取接近点,PR[62]为抓取点,PR[63]为抓取离开点,PR[64]为出筐点。 -
设置DO端口执行抓取的信号,以闭合夹具抓取工件。注意,DO指令应根据现场实际使用的DO端口号设置。
修改前 修改后(示例) 37: !add object grasping logic here, ; 38: !such as "DO[1]=ON" ; 39: PAUSE ;
38: !add object grasping logic here, ; 39: !such as "DO[1]=ON" ; 40: PAUSE ; 41: DO[1]=ON ;
-
设置DO端口执行放置的信号,以放置工件。注意,DO指令应根据现场实际使用的DO端口号设置。
修改前 修改后(示例) 53: !add object releasing logic here, ; 54: !such as "DO[1]=OFF" ; 55: PAUSE ;
56: !add object releasing logic here, ; 57: !such as "DO[0]=OFF" ; 58: PAUSE ; 59: DO[0]=OFF ;
-
参考:修改后的样例程序
-
子任务
1: !-------------------------------- ;
2: !FUNCTION: run Mech-Viz project ;
3: !and get planned path in subtask ;
4: !(run together with ;
5: !MM_S10_Viz_Subtask) ;
6: !Mech-Mind, 2023-12-25 ;
7: !-------------------------------- ;
8: ;
9: F[11]=(ON) ;
10: !trigger Mech-Viz project ;
11: CALL MM_START_VIZ(2,10) ;
12: !get planned path, 1st argument ;
13: !(1) means getting pose in JPs ;
14: CALL MM_GET_VIZ(1,51,52,53) ;
15: !check whether planned path has ;
16: !been got from Mech-Viz ;
17: !successfully ;
18: IF (R[53]=2100) THEN ;
19: !save waypoints of the planned ;
20: !path to local variables one ;
21: !by one ;
22: CALL MM_GET_JPS(1,60,70,80) ;
23: CALL MM_GET_JPS(2,61,71,81) ;
24: CALL MM_GET_JPS(3,62,72,82) ;
25: CALL MM_GET_JPS(4,63,73,83) ;
26: CALL MM_GET_JPS(5,64,74,84) ;
27: ENDIF ;
28: F[11]=(OFF) ;
-
主任务
1: !-------------------------------- ;
2: !FUNCTION: run Mech-Viz project ;
3: !and get planned path in subtask ;
4: !(run together with ;
5: !MM_S10_Sub) ;
6: !Mech-Mind, 2023-12-25 ;
7: !-------------------------------- ;
8: ;
9: !set current uframe NO. to 0 ;
10: UFRAME_NUM=0 ;
11: !set current tool NO. to 3 ;
12: UTOOL_NUM=3 ;
13: !initialize communication ;
14: !parameters(initialization is ;
15: !required only once) ;
16: CALL MM_INIT_SKT('8','127.1.1.2',50000,6) ;
17: !move to robot home position ;
18:J P[1] 100% FINE ;
19: RUN MM_S10_SUB ;
20: LBL[1:LOOP] ;
21: !move to wait position for ;
22: !picking ;
23:L P[2] 1000mm/sec FINE ;
24: !wait until subtask program ;
25: !finished ;
26: WAIT (F[11]=OFF) ;
27: !check whether planned path has ;
28: !been got from Mech-Viz ;
29: !successfully ;
30: IF R[53]<>2100,JMP LBL[99] ;
31: !follow the planned path to pick ;
32: !move to approach waypoint ;
33: !of picking ;
34:J PR[60] 50% FINE ;
35:J PR[61] 50% FINE ;
36: !move to picking waypoint ;
37:J PR[62] 10% FINE ;
38: !add object grasping logic here, ;
39: !such as "DO[1]=ON" ;
40: PAUSE ;
41: DO[1]=ON ;
42: !move to departure waypoint ;
43: !of picking ;
44:J PR[63] 50% FINE ;
45:J PR[64] 50% FINE ;
46: !move to intermediate waypoint ;
47: !of placing, and trigger Mech-Viz ;
48: !project and get planned path in ;
49: !advance ;
50:J P[3] 50% CNT100 DB 10.0mm,CALL MM_S10_SUB ;
51: !move to approach waypoint ;
52: !of placing ;
53:L P[4] 1000mm/sec FINE Tool_Offset,PR[2] ;
54: !move to placing waypoint ;
55:L P[4] 300mm/sec FINE ;
56: !add object releasing logic here, ;
57: !such as "DO[0]=OFF" ;
58: PAUSE ;
59: DO[0]=OFF ;
60: !move to departure waypoint ;
61: !of placing ;
62:L P[4] 1000mm/sec FINE Tool_Offset,PR[2] ;
63: !move back to robot home position ;
64:J P[1] 100% FINE ;
65: JMP LBL[1] ;
66: END ;
67: ;
68: LBL[99:vision error] ;
69: !add error handling logic here ;
70: !according to different ;
71: !error codes ;
72: !e.g.: status=2038 means no ;
73: !point cloud in ROI ;
74: PAUSE ;
抓取测试
为保证实际生产的稳定运行,需要运行修改后的样例程序,引导机器人测试抓取工件。具体方法请参考测试标准接口通信的操作。
进行抓取测试前,请先示教如下点位。
名称 | 变量 | 解析 |
---|---|---|
Home点 |
P[1] |
示教的初始位。初始位应远离待抓取物体及周边设备,且不遮挡相机视野。 |
拍照点 |
P[2] |
示教的相机拍照位。拍照位指相机采集图像时机器人所在的位置。在此位置,机器人手臂应不遮挡相机视野。 |
放置的过渡点 |
P[3] |
过渡点用于保证机器人平滑移动,同时避免一些不必要的碰撞。 |
放置点 |
P[4] |
放置工件的目标点。 |
完成示教后,将工件摆放在下表所列场景中,依次使用机器人测试低速抓取。
抓取测试分为以下三个阶段: