Example Program 1: MM_S1_Vis_Basic

Program Introduction

Description

The robot triggers the Mech-Vision project to run, and then obtains the vision result for picking and placing the object.

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/YASKAWA/sample/MM_S1_Vis_Basic path.

Project

Mech-Vision project

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

NOP
'--------------------------------
'FUNCTION: trigger Mech-Vision
'project and get vision result
'Mech-Mind, 2023-12-25
'--------------------------------
'clear I50 to I69
CLEAR I050 20
'initialize p variables
SUB P070 P070
SUB P071 P071
'set 100mm to z of P070
SETE P070 (3) 100000
'move to robot home position
MOVJ C00000 VJ=50.00
'initialize communication
'parameters (initialization is
'required only once)
CALL JOB:MM_INIT_SOCKET ARGF"192.168.170.22;50000;1"
'move to image-capturing position
MOVJ C00001 VJ=50.00 PL=0
'open socket connection
CALL JOB:MM_OPEN_SOCKET
'trigger NO.1 Mech-Vision project
CALL JOB:MM_START_VIS ARGF"1;0;2;30"
'get vision result from NO.1
'Mech-Vision project
CALL JOB:MM_GET_VISDATA ARGF"1;51;52"
'check whether vision result has
'been got from Mech-Vision
'successfully
IFTHENEXP I052<>1100
	'add error handling logic here
	'according to different error
	'codes
	'e.g.: I052=1003 means no point
	'cloud in ROI
	'e.g.: I052=1002 means no
	'vision result
	 PAUSE
ENDIF
'close socket connection
CALL JOB:MM_CLOSE_SOCKET
'save first vision point data to
'local variables
CALL JOB:MM_GET_POSE ARGF"1;71;61;62"
'move to intermediate waypoint of
'picking
MOVJ C00002 VJ=50.00
'move to approach waypoint of
'picking
SFTON P070
MOVL P071 V=166.6 PL=0
SFTOF
'move to picking waypoint
MOVL P071 V=50.0 PL=0
'add object grasping logic here,
'such as DOUT OT#(1) ON
PAUSE
'move to departure waypoint of
'picking
SFTON P070
MOVL P071 V=166.6 PL=0
SFTOF
'move to intermediate waypoint of
'placing
MOVJ C00003 VJ=50.00
'move to approach waypoint of
'placing
MOVL C00004 V=166.6 PL=0
'move to placing waypoint
MOVL C00005 V=50.0 PL=0
'add object releasing logic here,
'such as DOUT OT#(1) OFF
PAUSE
'move to departure waypoint of
'placing
MOVL C00006 V=166.6 PL=0
'move back to robot home position
MOVJ C00007 VJ=50.00
END

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

sample1

The table below explains the above program. You can click the hyperlink to the command name to view its detailed description.

Feature Code and description

Initialize variables

'clear I50 to I69
CLEAR I050 20
  • CLEAR: The command to clear data.

  • I050: Specify to clear data of I variables starting from I variable 50.

  • 20: Specify to clear data of 20 variables.

The entire statement indicates to clear data of integer variables I050 to I069 (a total of 20 variables) by setting them to 0.

'initialize p variables
SUB P070 P070
SUB P071 P071
  • SUB: The subtraction command.

  • First P070: Specify the minuend as the P position variable P070 and store the result of the subtraction operation in P070.

  • Second P070: Specify the subtrahend as the position variable P070.

The above two statements indicate that the position variables P070 and P071 are set to 0.

'set 100mm to z of P070
SETE P070 (3) 100000
  • SETE: The command to set variable data.

  • P070: Specify that the variable for which you want to set data is P070.

  • 3: Specify to set the data of the third parameter of the position variable. In this case, set the data of the Z axis for P070.

  • 100000: The data you want to set as the variable value.

The above statement indicates to set the Z axis of P070 to 100,000 µm (equivalent to 100 mm).

Move to the home position

'move to robot home position
MOVJ C00000 VJ=50.00
  • MOVJ: The joint position-based motion command.

  • C00000: The ID of the position that is taught to the robot.

    • You should teach the home position (C00000) in advance. For detailed instructions, see Teach Calibration Start Point in the calibration document.

    • After C00000 is taught, the robot axis teaching positions will be unconditionally written into C00000. The position cannot be edited.

    • C00000 will not appear on the teach pendant interface.

  • VJ=50.00: The joint velocity. Joint velocity is represented as a proportion of the maximum velocity.

The entire statement indicates that the robot moves to the taught home position by using joint position movement.

Initialize communication parameters

'initialize communication
'parameters (initialization is
'required only once)
CALL JOB:MM_INIT_SOCKET ARGF"192.168.170.22;50000;1"
  • CALL: Call a specific command or program.

  • JOB: Specify the command or program to call.

  • MM_INIT_SOCKET: The command to initialize the communication.

  • ARGF: On the teach pendant interface, ARGF is displayed as a pair of English brackets.

  • 192.168.170.22: The IP address of the IPC.

  • 50000: The port number of the IPC.

  • 1: Specify the communication timeout period as 1 minute.

The robot sends the MM_INIT_SOCKET command to set the IP address, port number, and timeout period of the communication object (the IPC) to 192.168.170.22, 50000, and 1 minute.

Please modify the IP address and port number of the IPC according to the actual situation. The IP address and port number must be consistent with those set in the vision system.

Move to the image-capturing position

'move to image-capturing position
MOVJ C00001 VJ=50.00 PL=0
  • C00001: The ID of the position that is taught to the robot. You should teach the image-capturing position (C00001) in advance. For detailed instructions, see Teach Calibration Start Point in the calibration document.

  • PL=0: Set the position level to 0. Position level refers to the robot’s proximity to the taught position, with a range from 0 to 8. A smaller value indicates that the robot is closer to the position.

The entire statement indicates that the robot moves to the taught image-capturing position by using joint position movement.

Establish the communication

'open socket connection
CALL JOB:MM_OPEN_SOCKET

The TCP communication between the robot and the vision system is established by using the MM_OPEN_SOCKET command.

Trigger the Mech-Vision project to run

'trigger NO.1 Mech-Vision project
CALL JOB:MM_START_VIS ARGF"1;0;2;30"
  • MM_START_VIS: The command to trigger the Mech-Vision project to run.

  • 1: The Mech-Vision project ID.

  • 0: The Mech-Vision project is expected to return all vision points.

  • 2: Specify that the robot flange pose must be input to the Mech-Vision project.

  • 30: The P variable that has an ID of 30. The variable stores the custom joint position data. In this example program, the joint position data is of no practical use.

The entire statement indicates that the robot triggers the vision system to run the Mech-Vision project with an ID of 1 and expects the Mech-Vision project to return all vision points.

Obtain the vision result

'get vision result from NO.1
'Mech-Vision project
CALL JOB:MM_GET_VISDATA ARGF"1;51;52"
  • MM_GET_VISDATA: The command to obtain the vision result.

  • 1: The Mech-Vision project ID.

  • 51: The I variable that has an ID of 51. The variable stores the number of obtained vision points.

  • 52: The I variable that has an ID of 52. The variable stores the command execution status code.

The entire statement indicates that the robot obtains the vision result from the Mech-Vision project with an ID of 1.

The returned vision result is saved to the robot memory and cannot be directly obtained. To access the vision result, you must store the vision result in a subsequent step.
'check whether vision result has
'been got from Mech-Vision
'successfully
IFTHENEXP I052<>1100
	'add error handling logic here
	'according to different error
	'codes
	'e.g.: I052=1003 means no point
	'cloud in ROI
	'e.g.: I052=1002 means no
	'vision result
	 PAUSE
ENDIF
  • IFTHENEXP A …​ ENDIF: When condition A is met, the program executes the code between IFTHENEXP and ENDIF.

  • <>: Not equal.

The above statement indicates that when the status code in I052 is 1100, the robot has successfully obtained all vision result; otherwise, an exception has occurred in the vision system and the program executes the code between IFTHENEXP and ENDIF. You can perform the corresponding operation based on the specific error code. In this example program, all error codes are handled in the same way, by pausing the program execution using the PAUSE command.

Close the communication

'close socket connection
CALL JOB:MM_CLOSE_SOCKET

The TCP communication between the robot and the vision system is closed by using the MM_CLOSE_SOCKET command.

Store the vision result

'save first vision point data to
'local variables
CALL JOB:MM_GET_POSE ARGF"1;71;61;62"
  • MM_GET_POSE: The command to store the vision result.

  • 1: The first vision point is stored.

  • 71: The P variable that has an ID of 71. The variable stores the TCP of the first vision point, which is the TCP of the picking waypoint.

  • 61: The P variable that has an ID of 61. The variable that stores the label corresponding to the first vision point.

  • 62: The I variable that has an ID of 62. The variable that stores the tool ID corresponding to the first vision point.

The entire statement stores the TCP, label, and tool ID of the first vision point in the specified variables.

Move to the intermediate waypoint

'move to intermediate waypoint of
'picking
MOVJ C00002 VJ=50.00

The entire statement moves the robot in joint positions to a certain intermediate waypoint between the image-capturing position and the approach waypoint of picking.

  • Adding intermediate waypoints can ensure smooth robot motion and avoid unnecessary collisions. You can add multiple intermediate waypoints according to the actual situation.

  • You need to teach the intermediate waypoint (C00002) in advance. For information about how to teach the waypoint, see Teach Calibration Start Point in the calibration document.

Move to the approach waypoint of picking

'move to approach waypoint of
'picking
SFTON P070
MOVL P071 V=166.6 PL=0
SFTOF
  • SFTON P070: Start translational movement based on the specified offset (P070, with Z-axis data of 100 mm).

  • MOVL P071 V=166.6 PL=0: Specify a translational movement where the robot moves to a position offset from P071 by P070, with a TCP velocity of 166.6 mm/s and a position level of 0.

  • SFTOF: End the translational movement.

The entire statement indicates that the robot moves linearly to 100 mm above the picking waypoint (P071).

Adding approach waypoints of picking can prevent the robot from colliding with objects (such as bins) in the scene when moving. You can adjust the Z-axis offset (such as “SETE P070 (3) 100000”) based on the actual scene to ensure that the approach process is collision-free.

Move to the picking waypoint

'move to picking waypoint
MOVL P071 V=50.0 PL=0

The robot moves from the approach waypoint of picking to the picking waypoint in linear motion.

Set DO commands to perform picking

'add object grasping logic here,
'such as DOUT OT#(1) ON
PAUSE

After the robot moves to the picking waypoint, you can set a DO command (such as “DOUT OT#(1) ON”) to control the robot to use the tool to perform picking. Please set DO commands based on the actual situation.

PAUSE indicates to pause the program execution. If you have added a statement to set a DO command, you can delete the PAUSE statement here.

Move to the departure waypoint of picking

'move to departure waypoint of
'picking
SFTON P070
MOVL P071 V=166.6 PL=0
SFTOF

The robot moves to 100 mm above the picking waypoint and reaches the departure waypoint of picking.

Adding departure waypoints of picking can prevent the robot from colliding with objects (such as bins) in the scene when moving. You can adjust the Z-axis offset (such as “SETE P070 (3) 100000”) based on the actual scene to ensure that the departure process is collision-free.

Move to the intermediate waypoint

'move to intermediate waypoint of
'placing
MOVJ C00003 VJ=50.00

The robot moves to a intermediate waypoint between the departure waypoint of picking and the approach waypoint of placing.

  • Adding intermediate waypoints can ensure smooth robot motion and avoid unnecessary collisions. You can add multiple intermediate waypoints according to the actual situation.

  • You need to teach the intermediate waypoint (C00003) in advance. For information about how to teach the waypoint, see Teach Calibration Start Point in the calibration document.

Move the robot to the approach waypoint of placing

'move to approach waypoint of
'placing
MOVL C00004 V=166.6 PL=0

The robot moves from the intermediate waypoint to the approach waypoint of placing.

  • Adding approach waypoints of placing can prevent the robot from colliding with objects (such as bins) in the scene when moving.

  • You need to teach the approach waypoint of placing (C00004) in advance. For information about how to teach the waypoint, see Teach Calibration Start Point in the calibration document.

Move to the placing waypoint

'move to placing waypoint
MOVL C00005 V=50.0 PL=0

The robot moves from the approach waypoint of placing to the placing waypoint.

  • The placing waypoint should be located at a safe distance from other stations, personnel, and equipment, and should not exceed the robot’s maximum reach.

  • You need to teach the placing waypoint (C00005) in advance. For information about how to teach the waypoint, see Teach Calibration Start Point in the calibration document.

Set DO commands to perform placing

'add object releasing logic here,
'such as DOUT OT#(1) OFF
PAUSE

After the robot moves to the placing waypoint, you can set a DO command (such as “DOUT OT#(1) OFF”) to control the robot to use the tool to perform placing. Please set DO commands based on the actual situation.

PAUSE indicates to pause the program execution. If you have added a statement to set a DO command, you can delete the PAUSE statement here.

Move the robot to the departure waypoint of placing

'move to departure waypoint of
'placing
MOVL C00006 V=166.6 PL=0

The robot moves from the placing waypoint to the departure waypoint of placing.

  • Adding departure waypoints of placing can prevent the robot from colliding with objects (such as bins) in the scene when moving.

  • You need to teach the departure waypoint of placing (C00006) in advance. For information about how to teach the waypoint, see Teach Calibration Start Point in the calibration document.

Move to the home position

'move back to robot home position
MOVJ C00007 VJ=50.00

The robot moves from the departure waypoint of placing to the home waypoint again.

You should teach the home position (C00007) in advance. For detailed instructions, see Teach Calibration Start Point in the calibration document.

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.