샘플 프로그램9: MM_S9_Viz_RunInAdvance

현재 최신 버전 (2.1.2)에 대한 매뉴얼을 보고 계십니다. 다른 버전에 액세스하려면 페이지 오른쪽 상단 모서리에 있는 '버전 전환' 버튼을 클릭하세요.

■ 현재 사용하고 있는 제품의 버전이 확실하지 않은 경우에는 언제든지 당사 기술 지원팀에 문의하시기 바랍니다.

프로그램 소개

기능 설명

로봇이 물체를 피킹할 때 Mech-Viz 프로젝트를 트리거하고 메시지 분기를 통해 배치할 때 카메라 이미지 캡처를 트리거합니다. 이를 통해 다음 경로를 미리 계획하여 사이클 타임을 단축할 수 있습니다.

파일 경로

Mech-Vision 및 Mech-Viz의 설치 디렉토리로 이동하여 통신 구성 요소/Robot_Interface/YASKAWA/sample/MM_S9_Viz_RunInAdvance 경로를 사용하여 파일을 찾을 수 있습니다.

필요한 프로젝트

Mech-Vision와 Mech-Viz 프로젝트

Mech-Viz 프로젝트는 메시지 분기 설정이 미리 완료되야 합니다.

사용 전제 조건

  1. 표준 인터페이스 통신 구성이 완료됩니다.

  2. 자동 캘리브레이션이 완료됩니다.

이 샘플 프로그램은 참고용으로 제공됩니다. 사용자는 실제 상황에 맞춰 이 내용을 바탕으로 수정해야 하며, 해당 프로그램을 그대로 사용하지 않도록 하십시오.

프로그램 설명

다음에는 MM_S9_Viz_RunInAdvance 샘플 프로그램의 코드와 관련 설명입니다.

MM_S5_Viz_SetBranch 샘플과 비하면, 이 샘플은 다음 경로를 미리 계획할 수 있는 기능만 추가되었습니다.(이 기능의 코드가 굵게 표시됨). 따라서, 아래 부분에서는 다음 경로를 미리 계획하는 기능만 설명됩니다. (MM_S9_Viz_RunInAdvance의 MM_S5_Viz_SetBranch과 일치하는 부분에 대한 정보는 MM_S5_Viz_SetBranch 샘플 프로그램 설명을 참조하십시오).
NOP
'--------------------------------
'FUNCTION: trigger Mech-Viz
'project then set branch and get
'planned path, trigger Mech-Viz
'project and set branch in
'advance during pick&place
'process
'Mech-Mind, 2023-12-25
'--------------------------------
'clear I50 to I69
CLEAR I050 20
'initialize p variables
SUB P071 P071
SUB P072 P072
SUB P073 P073
'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 Mech-Viz project
CALL JOB:MM_START_VIZ ARGF"2;30"
'set branch exit port
CALL JOB:MM_SET_BRANCH ARGF"1;1"
*LOOP
'get planned path, 1st argument
'(1) means getting pose in JPs
CALL JOB:MM_GET_VIZDATA ARGF"1;51;52;53"
'check whether planned path has
'been got from Mech-Viz
'successfully
IFTHENEXP I053<>2100
	'add error handling logic here
	'according to different error
	'codes
	'e.g.: I053=2038 means no
	'point cloud in ROI
	 PAUSE
ENDIF
'save waypoints of the planned
'path to local variables one
'by one
CALL JOB:MM_GET_JPS ARGF"1;71;61;62"
CALL JOB:MM_GET_JPS ARGF"2;72;63;64"
CALL JOB:MM_GET_JPS ARGF"3;73;65;66"
'follow the planned path to pick
'move to approach waypoint of
'picking
MOVJ P071 VJ=50.00 PL=0
'move to picking waypoint
MOVJ P072 VJ=10.00 PL=0
'add object grasping logic here,
'such as DOUT OT#(1) ON
PAUSE
'trigger Mech-Viz project but not
'to trigger camera capturing
CALL JOB:MM_START_VIZ ARGF"2;30"
'move to departure waypoint of
'picking
MOVJ P073 VJ=50.00 PL=0
'move to intermediate waypoint of
'placing
MOVJ C00002 VJ=50.00
'move to approach waypoint of
'placing
MOVL C00003 V=166.6 PL=0
'set branch exit port and trigger
'camera capturing when robot
'moves out of camera’s field
'of view
CALL JOB:MM_SET_BRANCH ARGF"1;1"
'move to placing waypoint
MOVL C00004 V=50.0 PL=0
'add object releasing logic here,
'such as DOUT OT#(1) OFF
PAUSE
'move to departure waypoint of
'placing
MOVL C00005 V=166.6 PL=0
'move back to robot home position
MOVJ C00006 VJ=50.00
JUMP *LOOP
*ENDLOOP
'close socket connection
CALL JOB:MM_CLOSE_SOCKET
END

위 샘플 프로그램 코드에 해당하는 워크플로는 아래 그림에 표시되어 있습니다.

sample9

아래는 다음 경로를 미리 계획하는 코드와 관련된 설명입니다.

워크플로 코드와 설명

루프(피킹→다음 경로 계획을 트리거하기→배치)를 통해 다음 경로를 미리 계획하기

*LOOP
...
JUMP *LOOP

위 코드는 프로그램이 “*LOOP”와 “JUMP *LOOP” 사이의 코드를 순환 실행함을 나타냅니다.

'get planned path, 1st argument
'(1) means getting pose in JPs
CALL JOB:MM_GET_VIZDATA ARGF"1;51;52;53"

위 코드는 로봇이 MM_GET_VIZDATA 명령어를 통해 Mech-Viz가 계획한 경로를 획득함을 나타냅니다.

'save waypoints of the planned
'path to local variables one
'by one
CALL JOB:MM_GET_JPS ARGF"1;71;61;62"
CALL JOB:MM_GET_JPS ARGF"2;72;63;64"
CALL JOB:MM_GET_JPS ARGF"3;73;65;66"

위 코드는 로봇이 MM_GET_JPS 명령어를 통해 계획된 경로를 지정된 변수에 저장함을 나타냅니다. 이 샘플에서는 P071, P072, P073이 각각 피킹 접근 웨이포인트, 피킹 웨이포인트, 피킹 출발 웨이포인트로 설정됩니다.

'follow the planned path to pick
'move to approach waypoint of
'picking
MOVJ P071 VJ=50.00 PL=0
'move to picking waypoint
MOVJ P072 VJ=10.00 PL=0
'add object grasping logic here,
'such as DOUT OT#(1) ON
PAUSE

위 코드는 로봇이 순차적으로 피킹 접근 웨이포인트와 피킹 웨이포인트로 이동한 후, DO 명령어(예: "DOUT OT#(1) ON")를 설정하여 말단 장치를 제어하여 피킹를 수행하는 것을 나타냅니다.

'trigger Mech-Viz project but not
'to trigger camera capturing
CALL JOB:MM_START_VIZ ARGF"2;30"
  • MM_START_VIZ:Mech-Viz 프로젝트 실행을 트리거하는 명령어.

  • 2: P030 변수로 표시된 관절 각도 데이터를 Mech-Viz 프로젝트에 전송합니다.

  • 30: 번호가 30인 P 변수입니다. 이 변수는 사용자가 자체 정의 관절 각도 데이터를 저장하는 데 사용됩니다.(티칭을 통해 미리 설정해야 합니다). 관절 각도 데이터는 다음 경로 계획의 시작점으로Mech-Viz 프로젝트에 전송됩니다. 따라서 로봇이 이미지 캡처 영역 외에 있을 경우, Mech-Viz 프로젝트를 미리 트리거하여 다음 경로를 계획할 수 있습니다.

위 코드는 로봇이 MM_START_VIZ명령어를 통해 Mech-Viz 프로젝트를 다시 트리거함을 나타냅니다. 이제 로봇은 이번 계획된 피킹 경로를 획득하고 피킹 웨이포인트로 이동했으므로 배치 완료를 기다릴 필요 없이 Mech-Viz 프로젝트 실행을 미리 트리거하여 다음 경로 계획을 할 수 있습니다.

Mech-Viz 프로젝트가 실행하게 되면, "메시지 분기" 스텝에서 MM_SET_BRANCH 명령어를 통해 해당 분기 아웃 포트가 설정될 때까지 대기합니다. 또한, "비전 인식" 스텝(카메라 이미지 캡처를 실행하기)이 "메시지 분기" 스텝의 분기에서 설정되었기 때문에, 이 시점에서는 카메라가 이미지 캡처를 수행하지 않습니다.
'move to departure waypoint of
'picking
MOVJ P073 VJ=50.00 PL=0
'move to intermediate waypoint of
'placing
MOVJ C00002 VJ=50.00
'move to approach waypoint of
'placing
MOVL C00003 V=166.6 PL=0

위 코드는 로봇이 순차적으로 피킹 출발 웨이포인트(P073), 중간 웨이포인트(C00002), 그리고 배치 접근 웨이포인트(C00003)으로 이동하는 것을 나타냅니다.

사용자는 티칭을 통해 C00002와 C00003를 미리 설정해야 합니다. 자세한 설명은 캘리브레이션 매뉴얼 중의 티치 펜던트를 통해 캘리브레이션 시작점을 설정하기 내용을 참조하세요.

'set branch exit port and trigger
'camera capturing when robot
'moves out of camera's field
'of view
CALL JOB:MM_SET_BRANCH ARGF"1;1"

위 코드는 로봇이 MM_SET_BRANCH 명령어를 통해 "메시지 분기" 스텝의 아웃 포트를 설정함을 나타냅니다. 이 아웃 포트 분기에서 "비전 인식" 스텝이 실행되며, Mech-Viz는 비전 인식 결과에 따라 다음 피킹 경로를 미리 계획합니다.

'move to placing waypoint
MOVL C00004 V=50.0 PL=0
'add object releasing logic here,
'such as DOUT OT#(1) OFF
PAUSE
'move to departure waypoint of
'placing
MOVL C00005 V=166.6 PL=0
'move back to robot home position
MOVJ C00006 VJ=50.00

위 코드는 로봇이 먼저 배치 웨이포인트(C00004)로 이동한 후, 배치 작업(예: "DOUT OT#(1) OFF")을 수행하고, 그 후 배치 출발 웨이포인트(C00005)과 Home 포인트(C00006)로 순차적으로 이동하는 것을 나타냅니다.

사용자는 티칭을 통해 C00004, C00005, C00006를 미리 설정해야 합니다. 자세한 설명은 캘리브레이션 매뉴얼 중의 티치 펜던트를 통해 캘리브레이션 시작점을 설정하기 내용을 참조하세요.

*ENDLOOP
'close socket connection
CALL JOB:MM_CLOSE_SOCKET

루프 코드 내에서 오류 처리 로직을 작성할 때, "JUMP *ENDLOOP" 명령어를 사용하여 통신이 종료되는 코드 섹션으로 이동할 수 있습니다.

이 페이지가 도움이 되었습니까?

다음 방법을 통해 피드백을 보내주실 수 있습니다:

저희는 귀하의 개인정보를 소중히 다룹니다.

당사 웹사이트는 최상의 사용자 경험을 제공하기 위해 쿠키를 사용하고 있습니다. "모두 수락"을 클릭하시면 쿠키 사용에 동의하시는 것이며, "모두 거부"를 클릭하시면 이 웹사이트 방문 시 귀하의 정보가 추적되거나 기억되지 않도록 단일 쿠키만 사용됩니다.