Example Program 7: MM_S7_Viz_SwitchTCP

You are currently viewing the documentation for the latest version (2.1.0). To access a different version, click the "Switch version" button located in the upper-right corner of the page.

■ If you are not sure which version of the product you are currently using, please feel free to contact Mech-Mind Technical Support.

Program Introduction

Description

The robot starts the Mech-Viz project, obtains the path planning result, and then changes the tool according to the tool ID of the picking waypoint to perform picking and placing.

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/KUKA/sample/MM_S7_Viz_SwitchTCP path.

Project

Mech-Vision and Mech-Viz projects

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_S7_Viz_SwitchTCP example program.

The only difference between the MM_S7_Viz_SwitchTCP example program and the MM_S2_Viz_Basic example program is that MM_S7_Viz_SwitchTCP can change the tool according to the tool ID(this code of this feature is bolded). As such, the features of the MM_S7_Viz_SwitchTCP program that are similar to those of MM_S2_Viz_Basic are not described in this part. For more information about these features, see Example Program 2: MM_S2_Viz_Basic.
DEF  MM_S7_Viz_SwitchTCP ( )
;---------------------------------------------------
; FUNCTION: trigger Mech-Viz project and get
; planned path, switch TCP according to the label
; Mech-Mind, 2023-12-25
;---------------------------------------------------
   ;set current tool no. to 1
   BAS(#TOOL,1)
   ;set current base no. to 0
   BAS(#BASE,0)
   ;move to robot home position
PTP HOME Vel=100 % DEFAULT
   ;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-Viz project
   MM_Start_Viz(2,init_jps)
   ;get planned path, 1st argument (1) means getting pose in JPs
   MM_Get_VizData(2,pos_num,vis_pos_num,status)
   ;check whether planned path has been got from Mech-Viz successfully
   IF status<> 2100 THEN
      ;add error handling logic here according to different error codes
      ;e.g.: status=2038 means no point cloud in ROI
      halt
   ENDIF
   ;save waypoints of the planned path to local variables one by one
   MM_Get_Pose(1,Xpick_point1,label[1],toolid[1])
   MM_Get_Pose(2,Xpick_point2,label[2],toolid[2])
   MM_Get_Pose(3,Xpick_point3,label[3],toolid[3])
   ;switch TCP according to the received toolid
   ;reset tool signals according to received toolid
   switch toolid[vis_pos_num]
      CASE 1
         TOOL_DATA[1]=tool_1
         ;reset tool signal
      CASE 2
         TOOL_DATA[1]=tool_2
         ;reset tool signal
      DEFAULT
         ;add handling logic here if the toolid is invalid
         ;reset tool signal
         halt
   endswitch
   ;follow the planned path to pick
   ;move to approach waypoint of picking
LIN pick_point1 Vel=1 m/s CPDAT7 Tool[1] Base[0]
   ;move to picking waypoint
LIN pick_point2 Vel=0.3 m/s CPDAT8 Tool[1] Base[0]
   ;add object grasping logic here, such as "$OUT[1]=TRUE"
   switch toolid[vis_pos_num]
      CASE 1
         halt
         ;open tool signal
      CASE 2
         halt
         ;open tool signal
      DEFAULT
         halt
   endswitch
   ;move to departure waypoint of picking
LIN pick_point3 Vel=1 m/s CPDAT9 Tool[1] Base[0]
   ;move to intermediate waypoint of placing
PTP drop_waypoint CONT Vel=100 % PDAT2 Tool[0] Base[0]
   ;move to approach waypoint of placing
LIN drop_app Vel=1 m/s CPDAT3 Tool[0] Base[0]
   ;move to placing waypoint
LIN drop Vel=0.3 m/s CPDAT4 Tool[0] Base[0]
   ;add object releasing logic here, such as "$OUT[1]=FALSE"
   switch toolid[vis_pos_num]
      CASE 1
         halt
         ;reset tool signal
      CASE 2
         halt
         ;reset tool signal
      DEFAULT
         halt
   endswitch
   ;move to departure waypoint of placing
LIN drop_app Vel=1 m/s CPDAT3 Tool[0] Base[0]
   ;move back to robot home position
PTP HOME Vel=100 % DEFAULT
END

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

sample7

The table below describes the bolded code.

Feature Code and description

Obtain the planned path

;get planned path, 1st argument (1) means getting pose in JPs
MM_Get_VizData(2,pos_num,vis_pos_num,status)
  • MM_Get_VizData: The command to obtain the path planned by Mech-Viz.

  • 2: The pose type of the obtained waypoint is set to TCP.

  • pose_num: The variable that stores the number of waypoints returned by the vision system.

  • vis_pose_num: The variable that stores the sequence number of the Vision Move waypoint (picking waypoint) in the path.

  • status: The variable that stores the command execution status code.

The entire statement indicates that the robot obtains the planned path from the Mech-Viz project.

The returned planned path is saved to the robot memory and cannot be directly obtained. To access the planned path, you must store the planned path in a subsequent step.

Store the planned path

;save waypoints of the planned path to local variables one by one
MM_Get_Pose(1,Xpick_point1,label[1],toolid[1])
MM_Get_Pose(2,Xpick_point2,label[2],toolid[2])
MM_Get_Pose(3,Xpick_point3,label[3],toolid[3])
  • MM_Get_Pose: The command to store the planned path.

  • 1: Store the first waypoint.

  • Xpick_point1: The variable that stores the TCP of the first waypoint.

  • label[1]: The variable that stores the label of the first waypoint.

  • toolid[1]: The variable that stores the tool ID corresponding to the first waypoint.

The entire statement “MM_Get_Pose(1,Xpick_point1,label[1],toolid[1])” stores the TCP, label, and tool ID of the first waypoint in the specified variables.

  • Please store the planned path based on the actual Mech-Viz project. In this example program, the path planned by Mech-Viz consists of three waypoints: the first waypoint is the approach waypoint of picking (Xpick_point1), the second is the picking waypoint (Xpick_point2), and the third is the departure waypoint of picking (Xpick_point3). In addition, vis_pose_num indicates the sequence number of the picking waypoint in the path. As such, toolid[vis_pos_num] is equivalent to toolid[2]. Either one of the two parameters can specify the tool ID used by the robot when the robot moves to the picking waypoint (Xpick_point2).

  • This sample will change the tool ID based on the toolid[vis_pos_num] value. As such, the Mech-Viz project used must include a Change Tool Step and the parameters of the Change Tool Step must be properly set.

    • The Change Tool Step must be connected to the Has results output port of the Check Vision Result Step.

    • The Operation Mode parameter of the Change Tool Step must be set to Auto-switch to appropriate tool.

Change the tool based on the tool ID

;switch TCP according to the received toolid
;reset tool signals according to received toolid
switch toolid[vis_pos_num]
   CASE 1
      TOOL_DATA[1]=tool_1
      ;reset tool signal
   CASE 2
      TOOL_DATA[1]=tool_2
      ;reset tool signal
   DEFAULT
      ;add handling logic here if the toolid is invalid
      ;reset tool signal
      halt
endswitch

toolid[vis_pos_num] indicates the tool ID of the picking waypoint. You can determine the tool to be used when the robot moves to the target pose (picking waypoint) based on the value of the toolid[vis_pos_num] variable, i.e., change the tool according to the tool ID. The description of the above code is shown below.

  • When the tool ID of the picking waypoint is 1, the robot will use the tool_1 tool reference frame.

  • When the tool ID of the picking waypoint is 2, the robot will use the tool_2 tool reference frame.

  • When the tool ID of the picking waypoint is set to another value, the robot will stop running. You can add other code according to the actual situation.

When the robot moves to the picking waypoint, you can enable the DO signals corresponding to the tool ID, as shown in the following code.

;add object grasping logic here, such as "$OUT[1]=TRUE"
switch toolid[vis_pos_num]
   CASE 1
      halt
      ;open tool signal
   CASE 2
      halt
      ;open tool signal
   DEFAULT
      halt
endswitch

When the robot moves to the placing waypoint, you can disable and reset the DO signals corresponding to the tool ID, as shown in the following code.

;add object releasing logic here, such as "$OUT[1]=FALSE"
switch toolid[vis_pos_num]
   CASE 1
      halt
      ;reset tool signal
   CASE 2
      halt
      ;reset tool signal
   DEFAULT
      halt
endswitch

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.