实现抓放
在本教程中,你将先了解本案例实现的抓取和放置流程、然后了解如何完成抓取和放置流程配置。
通信方案说明
在上述流程中,“机器人触发相机拍照并获取规划路径”需要机器人与视觉系统使用标准接口通信方式,并且标准接口与视觉系统的配合方式为“使用Mech-Vision获取规划路径”。
使用该配合方式时,你需要配置好Mech-Vision工程(含“路径规划”步骤),并编写机器人程序。请参考“抓取放置流程配置”完成Mech-Vision工程的配置和机器人程序的编写。
抓取和放置流程配置
要实现抓取和放置逻辑流程,需要依次完成如下配置:
配置Mech-Vision工程的路径规划步骤和仿真
路径规划步骤可以为机器人提供如下功能:
-
路径规划:规划机器人的抓取路径。注意规划的路径不包含放置的路径。放置路径需在机器人程序中添加。
-
碰撞检测:路径规划步骤在路径规划时进行碰撞检测,为机器人提供无碰撞的抓取路径。
-
仿真运行:路径规划步骤可以可视化仿真机器人的抓取流程,方便进行调试。
路径规划步骤默认已经开启机器人、场景物体与末端工具之间的碰撞检测。在此步骤不需要额外配置碰撞检测参数。 |
配置Mech-Vision工程的路径规划步骤的流程如下图所示。
在工程编辑区单击步骤上的配置向导按钮,打开路径规划配置工具。
配置场景物体
配置场景物体的目的是还原真实现场场景,以此来辅助用户规划机器人运动路径。具体操作方法请参考配置场景物体。
在确保抓取动作可行性的基础上,应对实际作业环境进行更为严格的还原,本方案中场景物体设置情况如下。
配置末端工具
配置末端工具的目的是在三维仿真空间中能够显示末端工具的模型,并用于碰撞检测。具体操作方法请参考配置末端工具。
关联工件与末端工具
在配置完末端工具后,需要在工件库中将工件与用于抓取的末端工具关联,这样配置的末端工具才可以用于抓取工具。
当使用示教法设置抓取点时,默认所有配置的末端工具可以用于抓取。因此,在本案例中,你不需要做任何操作。
碰撞模型简化
在制作末端工具模型时,为了减少制作末端工具碰撞模型所需的操作时间,不必在创建凸包时完全复原模型,可以根据模型的实际情况有选择地忽略一些细节。
简化思路:对于夹指部分应当力求精细,确保其形态能高度还原实物,以保证检测碰撞的准确性,对于距离夹指部分较远的机械结构,则可以采取简化处理的方式,采用外包围的长方体来替代复杂的结构设计,提高效率。
模型简化示例如下图。
配置机器人参数和编写机器人程序
KUKA标准接口样例程序MM_S3_Vis_Path可以基本满足本案例所需要的功能。你可以在样例程序基础上进行修改。关于样例程序MM_S3_Vis_Path的详细解释,请参考样例程序解读。
基于样例程序,请在机器人端完成如下操作:
-
设置工具坐标系。确认机器人端的工具坐标系TCP与Mech-Vision软件“路径规划”步骤中的TCP数据一致。将当前所选的工具坐标系号码设置为实际使用的夹爪所在的坐标系。
修改前 修改后 BAS(#TOOL,1)
BAS(#TOOL,#)
请将“#”替换实际使用工具的编号。 -
示教Home点(初始位)。
将机器人移动到示教的初始位。初始位应远离待抓取物体及周边设备,且不遮挡相机视野。完成后,记录此时的机器人位姿到变量HOME。
-
增加夹具打开指令。
$OUT[131] = True $OUT[132] = False
-
指定工控机IP地址。在将机器人标准接口程序烧录到库卡机器人时,XML_Kuka_MMIND.xml配置文件也一同进行了烧录。你也可以在烧录前将配置文件中的IP地址和端口修改后工控机IP地址和端口。如果尚未修改,你可以打开MM_Init_Socket指令对应的XML_Kuka_MMIND.xml文件,并将其中的IP地址和端口更新为工控机IP地址和端口。
-
示教机器人拍照位。
将机器人移动到示教的相机拍照位。拍照位指相机采集图像时机器人所在的位置。在此位置,机器人手臂应不遮挡相机视野。完成后,记录此时的机器人位姿到变量camera_capture。
-
设置DO端口信号,以闭合夹具抓取工件。注意,DO指令应根据现场实际使用的DO端口号设置。
修改前 修改后(示例) ;add object grasping logic here, such as "$OUT[1]=TRUE" halt
;add object grasping logic here, such as "$OUT[1]=TRUE" halt $OUT[131] = False $OUT[132] = True
-
示教放置过渡点和放置点。
将机器人移动到示教的过渡点及放置点,并分别记录机器人位姿到pick_point3和drop_app。
-
设置DO端口信号,以打开夹具放置工件。注意,DO指令应根据现场实际使用的DO端口号设置。
修改前 修改后 ;add object releasing logic here, such as "$OUT[1]=FALSE" halt
;add object releasing logic here, such as "$OUT[1]=FALSE" halt $OUT[131] = True $OUT[132] = False
单步运行测试机器人抓放效果
执行如下步骤测试机器人抓放效果:
-
转动示教上的连接管理器开关到横向,在弹出的模式选择对话框中,切换到T1运行方式,接着再将连接管理器的开关转回到初始位置,即可实现机器人运行方式的切换。
-
点击O,在弹窗中点击I,将驱动装置状态切换成I。如果驱动装置状态原本就为I,忽略此操作。
-
一直按住示教器背部白色使能键,按一次示教器正面绿色运行键,即可运行程序(R 变成绿色代表程序正在运行中)。
-
机器人将自动执行机器人抓放程序,完成一个工件的抓取和放置。
如果机器人可以成功抓取和放置工件,则说明机器人程序符合要求。
参考:修改后的样例程序
最终修改后的样例程序如下:
&ACCESS RVO
DEF MM_S3_Vis_Path ( )
;---------------------------------------------------
; FUNCTION: trigger Mech-Vision project and get
; planned path
; Mech-Mind, 2023-12-25
;---------------------------------------------------
;set current tool no. to 1
BAS(#TOOL,1)
;set current base no. to 0
BAS(#BASE,0)
Init:
;move to robot home position
PTP HOME Vel=100 % DEFAULT
$OUT[131] = True
$OUT[132] = False
;initialize communication parameters (initialization is required only once)
MM_Init_Socket("XML_Kuka_MMIND",873,871,60)
;move to image-capturing position
LIN camera_capture Vel=1 m/s CPDAT1 Tool[1] Base[0]
;trigger Mech-Vision project
MM_Start_Vis(1,0,2,init_jps)
;get planned path from NO.1 Mech-Vision project; 2nd argument (1) means getting pose in JPs
MM_Get_Vispath(1,1,pos_num,vis_pos_num,status)
;check whether planned path has been got from Mech-Vision successfully
IF status<> 1103 THEN
;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
halt
ENDIF
;save waypoints of the planned path to local variables one by one
MM_Get_Jps(1,Xpick_point1,label[1],toolid[1])
MM_Get_Jps(2,Xpick_point2,label[2],toolid[2])
MM_Get_Jps(3,Xpick_point3,label[3],toolid[3])
;follow the planned path to pick
;move to approach waypoint of picking
PTP pick_point1 Vel=50 % PDAT1 Tool[1] Base[0] ;
;move to picking waypoint
PTP pick_point2 Vel=10 % PDAT2 Tool[1] Base[0] ;
;add object grasping logic here, such as "$OUT[1]=TRUE"
halt
$OUT[131] = False
$OUT[132] = True
;move to departure waypoint of picking
PTP pick_point3 Vel=50 % PDAT3 Tool[1] Base[0];
;move to intermediate waypoint of placing
PTP drop_waypoint CONT Vel=100 % PDAT4 Tool[1] Base[0];
;move to approach waypoint of placing
LIN drop_app Vel=1 m/s CPDAT2 Tool[1] Base[0] ;
;move to placing waypoint
LIN drop Vel=0.3 m/s CPDAT3 Tool[1] Base[0] ;
;add object releasing logic here, such as "$OUT[1]=FALSE"
halt
$OUT[131] = True
$OUT[132] = False
;move to departure waypoint of placing
LIN drop_app Vel=1 m/s CPDAT2 Tool[1] Base[0] ;
;move back to robot home position
PTP HOME Vel=100 % DEFAULT;
GOTO Init
END
至此,你已完成了3D视觉引导机器人有序工件上料应用的部署。