샘플 프로그램9: MM_S9_Viz_RunInAdvance
프로그램 소개
기능 설명 |
로봇이 물체를 피킹할 때 Mech-Viz프로젝트를 트리거하고 메시지 분기를 통해 배치할 때 카메라 이미지 캡처를 트리거합니다. 이를 통해 다음 경로를 미리 계획하여 사이클 타임을 단축할 수 있습니다. |
||
파일 경로 |
Mech-Vision 및 Mech-Viz의 설치 디렉터리로 이동하여 |
||
필요한 프로젝트 |
Mech-Vision와 Mech-Viz 프로젝트
|
||
사용 전제 조건 |
|
| 이 샘플 프로그램은 참고용으로 제공됩니다. 사용자는 실제 상황에 맞춰 이 내용을 바탕으로 수정해야 하며, 해당 프로그램을 그대로 사용하지 않도록 하십시오. |
프로그램 설명
다음에는 MM_S9_Viz_RunInAdvance 샘플 프로그램의 코드와 관련 설명입니다.
| MM_S5_Viz_SetBranch 샘플과 비하면, 이 샘플은 다음 경로를 미리 계획할 수 있는 기능만 추가되었습니다.(이 기능의 코드가 굵게 표시됨). 따라서, 아래 부분에서는 다음 경로를 미리 계획하는 기능만 설명됩니다. (MM_S5_Viz_SetBranch과 일치하는 부분에 대한 정보는 MM_S5_Viz_SetBranch 샘플 프로그램 설명을 참조하십시오). |
DEF MM_S9_Viz_RunInAdvance ( )
;---------------------------------------------------
; 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
;---------------------------------------------------
;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,status)
IF status <> 2103 THEN
;add error handling logic here according to different error codes
MM_LOG("Status ERROR")
HALT
ENDIF
;set branch exit port
MM_Set_Branch(1,1,status)
IF status <> 2105 THEN
;add error handling logic here according to different error codes
MM_LOG("Status ERROR")
HALT
ENDIF
LOOP
;get planned path, 1st argument (1) means getting pose in JPs
MM_Get_VizData(1,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_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
;trigger Mech-Viz project but not to trigger camera capturing
MM_Start_Viz(2,init_jps,status)
IF status <> 2103 THEN
;add error handling logic here according to different error codes
MM_LOG("Status ERROR")
HALT
ENDIF
;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 % PDAT2 Tool[1] Base[0]
;move to approach waypoint of placing
LIN drop_app Vel=1 m/s CPDAT3 Tool[1] Base[0]
;set branch exit port and trigger camera capturing when robot moves out of camera’s field of view
MM_Set_Branch(1,1,status)
IF status <> 2105 THEN
;add error handling logic here according to different error codes
MM_LOG("Status ERROR")
HALT
ENDIF
;move to placing waypoint
LIN drop Vel=0.3 m/s CPDAT4 Tool[1] Base[0]
;add object releasing logic here, such as "$OUT[1]=FALSE"
halt
;move to departure waypoint of placing
LIN drop_app Vel=1 m/s CPDAT3 Tool[1] Base[0]
;move back to robot home position
PTP HOME Vel=100 % DEFAULT
ENDLOOP
END
위 샘플 프로그램 코드에 해당하는 워크플로는 아래 그림에 표시되어 있습니다.
아래는 다음 경로를 미리 계획하는 코드와 관련된 설명입니다.
| 워크플로 | 코드와 설명 | ||
|---|---|---|---|
루프(피킹→다음 경로 계획을 트리거하기→배치)를 통해 다음 경로를 미리 계획하기 |
위 코드는 프로그램이 LOOP와 ENDLOOP 사이의 코드를 순환 실행함을 나타냅니다.
위 코드는 로봇이 MM_Get_VizData 명령어를 통해 Mech-Viz가 계획한 경로를 획득함을 나타냅니다.
위 코드는 로봇이 MM_Get_Jps 명령어를 통해 계획된 경로를 지정된 변수에 저장함을 나타냅니다. 이 샘플은 Xpick_point1, Xpick_point2, Xpick_point3 각각 피킹 접근 웨이포인트, 피킹 웨이포인트, 피킹 출발 웨이포인트로 가정합니다.
위 코드는 로봇이 순차적으로 피킹 접근 웨이포인트와 피킹 웨이포인트로 이동한 후, DO 명령어(예: "$OUT[1]=TRUE")를 설정하여 말단 장치를 제어하여 피킹를 수행하는 것을 나타냅니다.
위 코드는 로봇이 MM_Start_Viz명령어를 통해 Mech-Viz 프로젝트를 다시 트리거함을 나타냅니다. 이제 로봇은 이번 계획된 피킹 경로를 획득하고 피킹 웨이포인트로 이동했으므로 배치 완료를 기다릴 필요 없이 Mech-Viz 프로젝트 실행을 미리 트리거하여 다음 경로 계획을 할 수 있습니다.
위 코드는 로봇이 순서대로 피킹 출발 웨이포인트(pick_point3), 중간 웨이포인트(drop_waypoint), 배치 접근 웨이포인트(drop_app)로 이동합니다.
위 코드는 로봇이 MM_Set_Branch 명령어를 통해 "메시지 분기" 스텝의 아웃 포트를 설정함을 나타냅니다. 이 아웃 포트 분기에서 "비전 인식" 스텝이 실행되며, Mech-Viz는 비전 인식 결과에 따라 다음 피킹 경로를 미리 계획합니다.
위 코드는 로봇이 먼저 배치 웨이포인트(drop)로 이동한 후, 배치 작업(예: $OUT[1]=FALSE)을 수행하고, 그 후 배치 출발 웨이포인트(drop_app)과 Home 포인트로 순차적으로 이동하는 것을 나타냅니다.
따라서 위 문장은 상태 코드 status가 2105이면 로봇이 “메시지 분기” 스텝의 출구를 성공적으로 설정한 것을 의미합니다. 그렇지 않으면 비전 시스템에 이상이 발생한 것이며, 프로그램은 IF와 ENDIF 사이의 코드를 실행합니다. 사용자는 구체적인 비정상 상태 코드에 따라 적절한 처리를 수행할 수 있습니다. 이 샘플에서는 모든 비정상적인 상태 코드에 대해 같은 처리를 수행하며, 즉 halt 명령어를 사용하여 프로그램 실행을 일시 중단합니다. |