Example Program 16: MM_S16_Viz_GetDirection

Program Introduction

Description

After the robot obtains the planned path and finishes picking, the robot adopts different placement strategies according to the orientation of the workobject group.

File path

You can navigate to the installation directory of Mech-Vision and Mech-Viz and find the file by using the Communication Component/Robot_Interface/FANUC/sample/MM_S16_Viz_GetDirection path.

Project

Mech-Vision project and Mech-Viz project (the tool is a depalletizing vacuum gripper)

Prerequisites

This example program is provided for reference only. Before using the program, please modify the program according to the actual scenario.

Program Description

This part describes the MM_S16_Viz_GetDirection example program.

Compared with the MM_S15_Viz_GetDoList example program, this example program contains only the following modification (the code of this modification is bolded). As such, only the modification is described in the following part. For information about the parts of MM_S16_Viz_GetDirection that are consistent with those of MM_S15_Viz_GetDoList, see Example Program 15: MM_S15_Viz_GetDoList.
   1:  !-------------------------------- ;
   2:  !FUNCTION: trigger Mech-Viz ;
   3:  !project, then get planned path ;
   4:  !and get box direction using ;
   5:  !command 210 ;
   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 1 ;
  12:  UTOOL_NUM=1 ;
  13:  !move to robot home position ;
  14:J P[1] 100% FINE    ;
  15:  !initialize communication ;
  16:  !parameters(initialization is ;
  17:  !required only once) ;
  18:  CALL MM_INIT_SKT('8','127.0.0.1',50000,5) ;
  19:  !move to image-capturing position ;
  20:L P[2] 1000mm/sec FINE    ;
  21:  !trigger Mech-Viz project ;
  22:  CALL MM_START_VIZ(2,10) ;
  23:  !get planned path ;
  24:  CALL MM_GET_PLNDT(0,3,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:  !get gripper control signal list ;
  30:  CALL MM_GET_DL(0,0) ;
  31:  !save waypoints of the planned ;
  32:  !path to local variables one ;
  33:  !by one ;
  34:  CALL MM_GET_PLJOP(1,3,60,61,62,63,64,70) ;
  35:  CALL MM_GET_PLJOP(2,3,61,91,92,93,94,100) ;
  36:  CALL MM_GET_PLJOP(3,3,62,121,122,123,124,130) ;
  37:  !get box direction status from ;
  38:  !planned results of 2nd point ;
  39:  R[10]=R[116]    ;
  40:  !follow the planned path to pick ;
  41:  !move to approach waypoint ;
  42:  !of picking ;
  43:J PR[60] 50% FINE    ;
  44:  !move to picking waypoint ;
  45:J PR[61] 10% FINE    ;
  46:  !add object grasping logic here ;
  47:  PAUSE ;
  48:  !set gripper control signal ;
  49:  CALL MM_SET_DL(0)    ;
  50:  !move to departure waypoint ;
  51:  !of picking ;
  52:J PR[62] 50% FINE    ;
  53:  !place the box according to its ;
  54:  !direction ;
  55:  IF R[10]=0,JMP LBL[1] ;
  56:  IF R[10]<>0,JMP LBL[2] ;
  57:   ;
  58:  LBL[1:place position 1] ;
  59:  !move to intermediate waypoint ;
  60:  !of placing ;
  61:J P[3] 50% CNT100    ;
  62:  !move to approach waypoint ;
  63:  !of placing ;
  64:L P[4] 1000mm/sec FINE Tool_Offset,PR[2]    ;
  65:  !move to placing waypoint ;
  66:L P[4] 300mm/sec FINE    ;
  67:  !add object releasing logic here, ;
  68:  !such as "DO[1]=OFF" ;
  69:  PAUSE ;
  70:  !move to departure waypoint ;
  71:  !of placing ;
  72:L P[4] 1000mm/sec FINE Tool_Offset,PR[2]    ;
  73:  JMP LBL[3] ;
  74:   ;
  75:  LBL[2:place position 2] ;
  76:  !move to intermediate waypoint ;
  77:  !of placing ;
  78:J P[5] 50% CNT100    ;
  79:  !move to approach waypoint ;
  80:  !of placing ;
  81:L P[6] 1000mm/sec FINE Tool_Offset,PR[2]    ;
  82:  !move to placing waypoint ;
  83:L P[6] 300mm/sec FINE    ;
  84:  !add object releasing logic here, ;
  85:  !such as "DO[1]=OFF" ;
  86:  PAUSE ;
  87:  !move to departure waypoint ;
  88:  !of placing ;
  89:L P[6] 1000mm/sec FINE Tool_Offset,PR[2]    ;
  90:  JMP LBL[3] ;
  91:   ;
  92:  LBL[3] ;
  93:  !move back to robot home position ;
  94:J P[1] 100% FINE    ;
  95:  END ;
  96:   ;
  97:  LBL[99:vision error] ;
  98:  !add error handling logic here ;
  99:  !according to different ;
 100:  !error codes ;
 101:  !e.g.: status=2038 means no ;
 102:  !point cloud in ROI ;
 103:  PAUSE ;

The workflow corresponding to the above example program code is shown in the figure below.

sample16

The table below describes the bolded code. You can click the hyperlink to the command name to view its detailed description.

Feature Code and description

Obtain the orientation of workobject group

  37:  !get box direction status from ;
  38:  !planned results of 2nd point ;
  39:  R[10]=R[116]    ;
In the Mech-Viz project, Vision Move data refers to data of the Vision Move Step, including the labels of picked workobjects, number of picked workobjects, number of workobjects to be picked this time, edge or corner ID of the vacuum gripper, TCP offset, orientation of the workobject group, orientation of the workobject, and dimensions of the workobject group.

The robot obtains the Vision Move data of waypoints by running the MM_GET_PLNDT command, and then saves the Vision Move data of waypoints that is stored in the robot memory to specified registers by running the MM_GET_PLJOP command. In the example, the Vision Move data for the picking waypoint (PR[61]) is stored in registers starting from R[100]. R[116] indicates the relative position between the workobject group and the length of the vacuum gripper. The value is 0 or 1, where 0 stands for parallel and 1 for vertical.

The above code assigns the value of R[116] to R[10]. In this case, R[10] will indicate the orientation of the workobject group.

Adopt a placement strategy based on the orientation of the workobject group

  55:  IF R[10]=0,JMP LBL[1] ;
  56:  IF R[10]<>0,JMP LBL[2] ;
  57:   ;
  58:  LBL[1:place position 1] ;
  59:  !move to intermediate waypoint ;
  60:  !of placing ;
  61:J P[3] 50% CNT100    ;
  62:  !move to approach waypoint ;
  63:  !of placing ;
  64:L P[4] 1000mm/sec FINE Tool_Offset,PR[2]    ;
  65:  !move to placing waypoint ;
  66:L P[4] 300mm/sec FINE    ;
  67:  !add object releasing logic here, ;
  68:  !such as "DO[1]=OFF" ;
  69:  PAUSE ;
  70:  !move to departure waypoint ;
  71:  !of placing ;
  72:L P[4] 1000mm/sec FINE Tool_Offset,PR[2]    ;
  73:  JMP LBL[3] ;
  74:   ;
  75:  LBL[2:place position 2] ;
  76:  !move to intermediate waypoint ;
  77:  !of placing ;
  78:J P[5] 50% CNT100    ;
  79:  !move to approach waypoint ;
  80:  !of placing ;
  81:L P[6] 1000mm/sec FINE Tool_Offset,PR[2]    ;
  82:  !move to placing waypoint ;
  83:L P[6] 300mm/sec FINE    ;
  84:  !add object releasing logic here, ;
  85:  !such as "DO[1]=OFF" ;
  86:  PAUSE ;
  87:  !move to departure waypoint ;
  88:  !of placing ;
  89:L P[6] 1000mm/sec FINE Tool_Offset,PR[2]    ;
  90:  JMP LBL[3] ;
  91:   ;
  92:  LBL[3] ;
  93:  !move back to robot home position ;
  94:J P[1] 100% FINE    ;

The above code indicates that if the workobject group is parallel to the long side of the vacuum gripper (i.e., R[10] is set to 0), the workobject group will be placed at P[4]; otherwise, the workobject group will be placed at P[6].

We Value Your Privacy

We use cookies to provide you with the best possible experience on our website. By continuing to use the site, you acknowledge that you agree to the use of cookies. If you decline, a single cookie will be used to ensure you're not tracked or remembered when you visit this website.