实现抓放

您正在查看最新版本(V2.1.0)的文档。如果您想查阅其他版本的文档,可以点击页面右上角“切换版本”按钮进行切换。

■ 如果您不确定当前使用的产品是哪个版本,请随时联系梅卡曼德技术支持。

在本教程中,你将先了解本案例实现的抓取和放置流程、然后了解如何完成抓取和放置流程配置。

视频教程:实现抓取

抓取和放置流程

本案例实现的抓取和放置逻辑流程如下图所示。

picking workflow

通信方案说明

在上述流程中,“机器人触发相机拍照并获取规划路径”需要机器人与视觉系统使用标准接口通信方式,并且标准接口与视觉系统的配合方式为“使用Mech-Vision获取规划路径”。

使用该配合方式时,你需要配置好Mech-Vision工程(含“路径规划”步骤),并编写机器人程序。请参考“抓取放置流程配置”完成Mech-Vision工程的配置和机器人程序的编写。

抓取和放置流程配置

要实现抓取和放置逻辑流程,需要依次完成如下配置:

picking workflow config

配置Mech-Vision工程的路径规划步骤和仿真

路径规划步骤可以为机器人提供如下功能:

  • 路径规划:规划机器人的抓取路径。注意规划的路径不包含放置的路径。放置路径需在机器人程序中添加。

  • 碰撞检测:路径规划步骤在路径规划时进行碰撞检测,为机器人提供无碰撞的抓取路径。

  • 仿真运行:路径规划步骤可以可视化仿真机器人的抓取流程,方便进行调试。

路径规划步骤默认已经开启机器人、场景物体与末端工具之间的碰撞检测。在此步骤不需要额外配置碰撞检测参数。

配置Mech-Vision工程的路径规划步骤的流程如下图所示。

viz project config workflow

在工程编辑区单击步骤上的配置向导按钮,打开路径规划配置工具。

open path planning tool

配置场景物体

配置场景物体的目的是还原真实现场场景,以此来辅助用户规划机器人运动路径。具体操作方法请参考配置场景物体

在确保抓取动作可行性的基础上,应对实际作业环境进行更为严格的还原,本方案中场景物体设置情况如下。

config scene objects

配置末端工具

配置末端工具的目的是在三维仿真空间中能够显示末端工具的模型,并用于碰撞检测。具体操作方法请参考配置末端工具

关联工件与末端工具

在配置完末端工具后,需要在工件库中将工件与用于抓取的末端工具关联,这样配置的末端工具才可以用于抓取工具。

当使用示教法设置抓取点时,默认所有配置的末端工具可以用于抓取。因此,在本案例中,你不需要做任何操作。

碰撞模型简化

在制作末端工具模型时,为了减少制作末端工具碰撞模型所需的操作时间,不必在创建凸包时完全复原模型,可以根据模型的实际情况有选择地忽略一些细节。

简化思路:对于夹指部分应当力求精细,确保其形态能高度还原实物,以保证检测碰撞的准确性,对于距离夹指部分较远的机械结构,则可以采取简化处理的方式,采用外包围的长方体来替代复杂的结构设计,提高效率。

模型简化示例如下图。

simplify tool model

搭建工作流程

“路径规划工具”已内置的工作流程。工作流程中每个步骤的说明如下。

步骤 说明 用途
define home

定义相机拍照位。相机拍照位指相机采集图像时机器人所在的位置。在此位置,机器人手臂应不遮挡相机视野。

手动移动机器人至相机拍照位,并将此时机器人位姿记录在步骤中。

仅用于仿真,不发送给机器人

picking approach point

规划抓取接近点。

发送给机器人

vision move

规划抓取点。

发送给机器人

picking departure point

规划抓取离开点。

发送给机器人

define immediate point

定义中间过渡点。

仅用于仿真,不发送给机器人

仿真运行

单击工具栏中的仿真按钮,即可对搭建完成的Mech-Vision工程进行仿真。

simulation

仿真测试目标

将工件随机摆放在托盘上,然后使用Mech-Vision软件“路径规划”步骤仿真抓取。每次抓取成功后需要重新布置工件,循环仿真测试3个抓取循环。若3次循环中的仿真抓取均能顺利进行,即可判定视觉工程搭建无异常。

simulation

配置机器人参数和编写机器人程序

KUKA标准接口样例程序MM_S3_Vis_Path可以基本满足本案例所需要的功能。你可以在样例程序基础上进行修改。关于样例程序MM_S3_Vis_Path的详细解释,请参考样例程序解读

基于样例程序,请在机器人端完成如下操作:

  1. 设置工具坐标系。确认机器人端的工具坐标系TCP与Mech-Vision软件“路径规划”步骤中的TCP数据一致。将当前所选的工具坐标系号码设置为实际使用的夹爪所在的坐标系。

    修改前 修改后
      BAS(#TOOL,1)
      BAS(#TOOL,#)
    请将“#”替换实际使用工具的编号。
  2. 示教Home点(初始位)。

    将机器人移动到示教的初始位。初始位应远离待抓取物体及周边设备,且不遮挡相机视野。完成后,记录此时的机器人位姿到变量HOME。

  3. 增加夹具打开指令。

      $OUT[131] = True
      $OUT[132] = False
  4. 指定工控机IP地址。在将机器人标准接口程序烧录到库卡机器人时,XML_Kuka_MMIND.xml配置文件也一同进行了烧录。你也可以在烧录前将配置文件中的IP地址和端口修改后工控机IP地址和端口。如果尚未修改,你可以打开MM_Init_Socket指令对应的XML_Kuka_MMIND.xml文件,并将其中的IP地址和端口更新为工控机IP地址和端口。

  5. 示教机器人拍照位。

    将机器人移动到示教的相机拍照位。拍照位指相机采集图像时机器人所在的位置。在此位置,机器人手臂应不遮挡相机视野。完成后,记录此时的机器人位姿到变量camera_capture。

  6. 设置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
  7. 示教放置过渡点和放置点。

    将机器人移动到示教的过渡点及放置点,并分别记录机器人位姿到pick_point3和drop_app。

  8. 设置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

单步运行测试机器人抓放效果

执行如下步骤测试机器人抓放效果:

  1. 转动示教上的连接管理器开关到横向,在弹出的模式选择对话框中,切换到T1运行方式,接着再将连接管理器的开关转回到初始位置,即可实现机器人运行方式的切换。

    switch mode
  2. 点击O,在弹窗中点击I,将驱动装置状态切换成I。如果驱动装置状态原本就为I,忽略此操作。

    set driver device
  3. 一直按住示教器背部白色使能键,按一次示教器正面绿色运行键,即可运行程序(R 变成绿色代表程序正在运行中)。

    enable robot
  4. 机器人将自动执行机器人抓放程序,完成一个工件的抓取和放置。

如果机器人可以成功抓取和放置工件,则说明机器人程序符合要求。

插入循环语句实现循环抓放

在测试机器人可以成功完成单次抓取和放置,可以在程序中插入循环语句(第12行、第61行),实现机器人循环抓放。

加入如下循环语句:

Init:
...
GOTO Init

参考:修改后的样例程序

最终修改后的样例程序如下:

&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视觉引导机器人有序工件上料应用的部署。

我们重视您的隐私

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