方案部署
本节将介绍如何进行圆形钢坯件方案部署,总体流程如下图所示。
视觉系统硬件搭建
视觉系统硬件搭建是将硬件设备(相机和工控机)集成到实际工作环境中,以支持视觉系统的正常运行。
在该阶段,你需要完成视觉系统硬件的安装与连接。详细信息请参考视觉系统硬件搭建。
机器人通信配置
机器人通信配置前,需先获取方案。请单击此处查看方案获取方法。
-
打开Mech-Vision软件。
-
在Mech-Vision欢迎页中单击从案例库新建按钮,打开案例库。
-
进入案例库中的典型案例分类,单击右上角的 图标以获取更多资源,并在弹出的窗口中单击确定按钮。
-
获取案例资源后,选择无序工件拣选分类下的圆形钢坯件,在下方填写方案名称和路径,最后单击创建按钮,并在弹出的窗口中单击确定按钮下载圆形钢坯件方案。
下载完成后,在Mech-Vision中将自动打开该方案。
在配置视觉工程前,需要完成梅卡曼德视觉系统与机器人侧(机器人、PLC 或上位机)的通信对接。
圆形钢坯件方案使用标准接口通信,具体操作方法请参考标准接口通信配置。
手眼标定
手眼标定是指建立相机坐标系与机器人坐标系对应关系的过程,将视觉系统确定的物体位姿转换为机器人坐标系下的位姿,从而引导机器人精准完成抓取任务。
请参考机器人手眼标定操作指南完成手眼标定。
每次安装相机后,或标定后相机与机器人的相对位置发生变化时,都需要重新进行手眼标定。 |
视觉工程配置
完成通信配置和手眼标定后,即可使用Mech-Vision进行视觉工程配置。
视觉工程配置的流程如下图所示。
连接相机并采集图像
-
连接相机。
打开Mech-Eye Viewer,找到待连接的相机,单击连接按钮。
-
调节相机参数。
为确保相机采集到的2D图像清晰,点云无缺失,需调节相机参数。参数调节方法请参考LSR L相机参数参考指南。
-
采集图像。
相机连接成功且设置参数组后,即可开始采集工件图像。单击界面上方的 按钮,进行单次图像采集,此时即可查看采集到的工件2D图像和点云,确保2D图像清晰,点云无缺失且边缘清晰。合格的工件2D图像和点云分别如下图中左图、右图所示。
-
在Mech-Vision中连接相机。
单击从相机获取图像步骤,在界面右下角步骤参数中关闭虚拟模式,然后单击选择相机按钮。
在弹出的窗口中单击某相机编号右侧的 图标,该图标变为 后,代表相机连接成功。相机连接成功后,单击右侧的参数组下拉框选择标定的参数组,如下图所示。
以上设置完成后即已连接真实相机,无需调节其他参数。单击从相机获取图像步骤右侧的 图标运行该步骤,如无报错即表示相机连接成功,并可正确采集图像。
3D工件识别(识别工件)
该方案使用3D工件识别步骤识别工件。单击3D工件识别步骤界面的配置向导按钮,打开3D工件识别工具进行相关配置。总体配置流程如下图所示。
识别工件
点云预处理完成后,需从工件库中制作工件的点云模板,然后在3D工件识别工具中设置匹配相关参数,用于匹配点云模板。
-
制作工件模板。
单击打开工件库按钮,打开工件库,通过导入STL文件生成工件点云模板,并手动配置抓取点。
-
-
开启识别工件右侧的高级模式开关。
-
匹配模式:开启自动设置匹配模式开关。开启后,该步骤将自动调节粗匹配设置和精匹配设置参数。
-
额外精匹配:开启使用额外精匹配开关,对匹配结果进行第二次面模板精匹配,提高Z向抓取精度。
-
置信度设置:将置信度策略设置为手动,将联合评分策略设置为考虑面和边缘,并将面匹配置信度阈值设置为较高值,如0.8,用于去除错误的匹配结果。
-
输出-最大结果输出个数:在满足路径规划需求的前提下,尽量减少输出个数,减少匹配耗时。本方案中将最大输出结果个数设置为15。
-
去除重叠物体位姿、去除压叠物体位姿:为了去除重叠、压叠的识别结果,打开启用去重叠功能和启用去压叠功能开关,并将各自的阈值设置为30%和20%。
-
上述参数设置完成后,单击运行步骤按钮,匹配效果如下图所示。
3D工件识别(识别料筐)
该方案使用3D工件识别步骤识别料筐。单击3D工件识别步骤界面的配置向导按钮,打开3D工件识别工具进行相关配置。总体配置流程如下图所示。
识别工件
点云预处理完成后,需从工件库中制作料筐的点云模板,然后在3D工件识别工具中设置匹配相关参数,用于匹配点云模板。
-
制作工件模板。
制作点云模板并添加抓取点。单击打开工件库按钮,打开工件库,通过相机采集点云生成点云模板,并手动配置抓取点。
-
设置识别相关参数。
-
匹配模式:开启自动设置匹配模式开关。
-
置信度设置:将置信度阈值设置为0.7,用于去除错误的匹配结果。
-
输出-最大结果输出个数:因目标物体是料筐,需将最大输出结果个数设置为1。
-
上述参数设置完成后,单击运行步骤按钮,匹配效果如下图所示。
调整位姿(工件位姿)
获取工件位姿后,需使用调整位姿V2步骤对位姿进行调整。单击调整位姿V2步骤界面的配置向导按钮,打开位姿调整工具进行位姿调整相关配置。总体配置流程如下图所示。
调整位姿(料筐位姿)
获取料筐位姿后,需使用调整位姿V2步骤对位姿进行调整。单击调整位姿V2步骤界面的配置向导按钮,打开位姿调整工具进行位姿调整相关配置。总体配置流程如下图所示。
-
选择位姿处理策略。
因目标物体是盛放工件的深料筐,应勾选料筐选项。
-
位姿转换。
为了输出料筐在机器人坐标系下的位姿,需勾选将位姿转换至机器人坐标系,将料筐位姿从相机坐标系转换至机器人坐标系。
-
在机器人基坐标系下,沿Z轴正方向移动料筐位姿,手动将移动距离调整为-285mm,以将料筐位姿从料筐上表面向下移动至料筐中心,后续用于在Mech-Viz更新料筐碰撞模型的位置。
移动距离值 = -1 × 1/2 料筐高度。 -
角度过滤。
为了减少后续路径规划耗时,需根据位姿Z轴和参考方向之间的夹角过滤明显不可抓取的工件。本教程中,需把最大角度差设置为90°。
-
通用设置。
将设置新增端口数量设置为1,该步骤将新增输入和输出端口各一个,连接3D工件识别步骤输出的工件名称,并将其输出到输出步骤。
路径规划
完成工件识别后,即可使用Mech-Viz进行路径规划,然后编写机器人程序用于抓取工件。
路径规划的配置流程如下图所示。
配置场景物体
配置场景物体的目的是还原真实现场场景,以此来辅助用户规划机器人运动路径。具体操作方法请参考配置场景物体。
在确保抓取可行性的基础上,应在严格还原真实作业环境的前提下配置场景物体。本方案中场景物体配置情况如下图所示:
配置末端工具
配置末端工具的目的是在三维仿真空间中显示末端工具的模型,并用于碰撞检测。具体操作方法请参考配置末端工具。
|
调整工作流程
工作流程指的是在Mech-Viz中以流程图形式搭建的机器人运动控制程序。场景物体和末端工具配置完成后,即可根据实际需求调整工程的工作流程。抓取工件时的逻辑处理流程图如下图所示。
机器人正常抓取示例如下图所示:
机器人异常抓取方式(从工件两端吸取)如下图所示:
使用标准接口通信时,工程的具体工作流程如下图所示。
仿真与测试
单击工具栏中的仿真按钮,即可对搭建完成的Mech-Viz工程进行仿真,以测试视觉系统是否已成功搭建。
将工件随机摆放在料筐内,然后单击Mech-Viz工具栏的仿真按钮模拟抓取工件。每次抓取成功后需重新布置工件,循环仿真抓取10次。若10次仿真抓取均能顺利进行,即可判定视觉系统可正常工作。
若仿真过程中出现异常,请参考方案部署常见问题解决问题。
机器人抓放
机器人程序编写
若仿真效果满足预期,即可编写Kawasaki机器人抓放程序。
Kawasaki机器人样例程序Kawasaki机器人抓取样例程序可以基本满足本典型案例所需要的功能。你可以在样例程序基础上进行修改。关于Kawasaki机器人抓取样例程序的解释详细,请参考样例程序解读。
修改说明
基于样例程序,请参考如下步骤修改程序文件:
-
定义工具中心点。
修改前 修改后(示例) TOOL gripper ;set TCP
point tcp1 = trans(0,37.517,390.13,-15,0,0) TOOL tcp1 ;set TCP
-
设置DO端口添加夹具控制逻辑,将夹具状态初始化。
修改前 修改后(示例) /
signal 10,-9;set do off
-
指定工控机IP地址和端口号。将MM_Init_Socket指令中的IP地址和端口号修改为工控机实际IP地址和端口号,确保与视觉系统中的设置一致。
修改前 修改后(示例) ;Set ip address of IPC call mm_init_skt(127,0,0,1,50000)
;Set ip address of IPC call mm_init_skt(128,1,1,2,60000)
-
触发Mech-Viz工程运行,先切换分支3重置码垛记录,再切换分支1开始视觉识别,并根据获取Mech-Viz工程规划的抓取路径的状态码确定是否需要切换分支2进行视觉识别。
修改前 修改后 ;Run Viz project call mm_start_viz(1,#start_viz) ;(2,#start_viz) used for ETH viz initial position twait 0.1 ;set branch exitport ;call mm_set_branch(1,1) ;get planned path call mm_get_vizdata(2,pos_num,vispos_num,ret1)
;Init Palletizing CALL mm_start_viz(2,#start_viz);(2,#start_viz) used for ETH viz initial position TWAIT 0.1 call mm_set_branch(7,3);init Palletizing TWAIT 0.1 CALL mm_start_viz(2,#start_viz);(2,#start_viz) used for ETH viz initial position TWAIT 0.1 call mm_set_branch(7,1) 10 flag =1 CALL mm_get_vizdata(1,pos_num,vispos_num,ret1) IF ret1<>2100 THEN CALL mm_start_viz(2,#start_viz);(2,#start_viz) used for ETH viz initial position TWAIT 0.1 call mm_set_branch(7,2) flag =2 CALL mm_get_vizdata(1,pos_num,vispos_num,ret1)
-
在获得状态码 2100(表示成功获得Mech-Viz规划的路径)后,将机器人移动到示教的拍照点。
修改前 修改后(示例) /
JMOVE #camera_capture;move to camera_capture position
-
使机器人沿规划的路径移动到抓取点,并设置DO端口添加执行抓取的信号,以闭合夹具抓取工件。
修改前 修改后(示例) ;follow the planned path to pick for count =1 to pos_num speed speed[count] LMOVE movepoint[count] if count == vispos_num then ;add object grasping logic here
;follow the planned path to pick JMOVE #movepoint[1] JMOVE #movepoint[2] JMOVE #movepoint[3] JMOVE #movepoint[4] LMOVE #movepoint[5] BREAK signal 9,-10;set do on TWAIT 0.2 LMOVE #movepoint[6] LMOVE #movepoint[7]
-
根据flag结果确定下一步操作,flag=2时,执行丢件操作,否则进行正常放置流程。
修改前 修改后 /
IF flag ==2 then break signal 10,-9;set do off twait 0.2 JMOVE #movepoint[8] JMOVE #movepoint[9] TWAIT 2 ELSE JMOVE #movepoint[8] end CALL mm_start_viz(2,#start_viz);(2,#start_viz) used for ETH viz initial position TWAIT 0.1 call mm_set_branch(7,1) ;go to drop location if flag ==1 then JMOVE #movepoint[9] JMOVE #movepoint[10] break signal 10,-9 twait 0.2 JMOVE #movepoint[11] end
-
设置DO端口执行放置的信号,以放置工件。注意,DO指令应根据现场实际使用的DO端口号设置。
修改前 修改后(示例) ;add object releasing logic here
signal 10,-9;set do on
-
插入循环语句实现循环抓放。
修改前 修改后(示例) /
JMOVE #camera_capture;move to camera_capture position GOTO 10
参考:修改后的样例程序
.PROGRAM vision_sample_2()
;----------------------------------------------------------
;* FUNCTION:simple pick and place with Mech-Viz
;* mechmind
;----------------------------------------------------------
accuracy 1 always
speed 30 always
point tcp1 = trans(0,37.517,390.13,-15,0,0)
TOOL tcp1 ;set TCP
signal 10,-9;set do off
Home ;move robot home position
JMOVE camera_capture ;move to camera_capture position
break
pos_num = 0
;Set ip address of IPC
call mm_init_skt(128,1,1,2,60000)
twait 0.1
;Set vision recipe
;call mm_switch_model(1,1)
;Init Palletizing
CALL mm_start_viz(2,#start_viz);(2,#start_viz) used for ETH viz initial position
TWAIT 0.1
call mm_set_branch(7,3);init Palletizing
TWAIT 0.1
CALL mm_start_viz(2,#start_viz);(2,#start_viz) used for ETH viz initial position
TWAIT 0.1
call mm_set_branch(7,1)
10 flag =1
CALL mm_get_vizdata(1,pos_num,vispos_num,ret1)
IF ret1<>2100 THEN
CALL mm_start_viz(2,#start_viz);(2,#start_viz) used for ETH viz initial position
TWAIT 0.1
call mm_set_branch(7,2)
flag =2
CALL mm_get_vizdata(1,pos_num,vispos_num,ret1)
if ret1 <> 2100
JMOVE #camera_capture;move to camera_capture position
end
for count=1 to pos_num
call mm_get_pose(count,&movepoint[count],label[count],speed[count])
end
;follow the planned path to pick
JMOVE #movepoint[1]
JMOVE #movepoint[2]
JMOVE #movepoint[3]
JMOVE #movepoint[4]
LMOVE #movepoint[5]
BREAK
signal 9,-10;set do on
TWAIT 0.2
LMOVE #movepoint[6]
LMOVE #movepoint[7]
IF flag ==2 then
break
signal 10,-9;set do off
twait 0.2
JMOVE #movepoint[8]
JMOVE #movepoint[9]
TWAIT 2
ELSE
JMOVE #movepoint[8]
end
CALL mm_start_viz(2,#start_viz);(2,#start_viz) used for ETH viz initial position
TWAIT 0.1
call mm_set_branch(7,1)
;go to drop location
if flag ==1 then
JMOVE #movepoint[9]
JMOVE #movepoint[10]
break
twait 0.2
JMOVE #movepoint[11]
end
signal 10,-9;set do on
JMOVE #camera_capture;move to camera_capture position
GOTO 10
END
抓取测试
为保证实际生产的稳定运行,需要运行修改后的样例程序,引导机器人测试抓取工件。具体方法请参考测试标准接口通信的操作。
进行抓取测试前,请先示教如下点位。
名称 | 变量 | 解析 |
---|---|---|
工具中心点 |
TCP |
由位姿变量gripper定义,请使用示教器示教。 |
Home点 |
home |
示教的初始位。初始位应远离待抓取物体及周边设备,且不遮挡相机视野。 |
拍照点 |
camera_capture |
示教的相机拍照位。拍照位指相机采集图像时机器人所在的位置。在此位置,机器人手臂应不遮挡相机视野。 |
放置的过渡点 |
movepoint[8] |
过渡点用于保证机器人平滑移动,同时避免一些不必要的碰撞。 |
放置点 |
movepoint[11] |
放置工件的目标点。 |
完成示教后,将工件摆放在下表所列场景中,依次使用机器人测试低速抓取。
抓取测试分为以下三个阶段: