ROKAE 샘플 프로그램 실행
이 부분에서는 간단한 인식과 이동을 완성하는 로봇 샘플 프로그램을 소개합니다.
샘플 프로그램 설명
로봇이 간단한 피킹과 배치의 샘플 프로그램은 MM_Project 폴더의 main.mod 파일에 있습니다.
Mech-Vision을 통해 비전 인식을 실행하여 비전 결과를 획득하기
// **********************************************************
// FUNCTION: Eye to Hand simple pick and place with Vision
// **********************************************************
LOCAL PROC Vision_Sample_1()
AccSet 100,100
MoveAbsJ home_point,v3000,fine,tool0 //move robot home position
MoveL camera_capture,v500,fine,tool0
Pos_Num = 0
// Set ip address of IPC
IP_Address = "192.168.2.222"
Server_Port = 50000
MM_Timeout = 60
MM_Init_Socket()
Wait 0.1
// Set vision recipe
Job = 1
Model_Number = 1
MM_Switch_Model()
// Run vision project
Job = 1
Pos_Num_Need = 0
SendPos_Type = 1
MM_Start_Vis()
Wait 1
Job = 1
MM_Get_VisData()
IF(MM_Status != 1100)
EXIT
ENDIF
Serial = 1
MM_Get_Pose()
robtarget _P = MM_P
MoveL RelTool(_P,0,0,-100,0,0,0),v1000,fine,tool01
MoveL MM_P,v300,fine,tool01
Pause
// Add object grasping logic here.
MoveL Offs(_P,0,0,100), v1000, fine, tool01
MoveL way_point1,v1000,z50,tool01
MoveL RelTool(drop,0,0,-100,0,0,0),v1000,fine,tool01
MoveL drop,v300,fine,tool01
Pause
// Add object releasing logic here.
MoveL Offs(drop,0,0,100), v1000, fine, tool01
MoveAbsJ home_point,v3000,fine,tool0
RETURN
ENDPROC
프로그램 논리 해석
-
6번째 줄 : 로봇을 Home 포인트로 이동합니다.
-
7 번째 줄: 카메라 사진 캡처 위치로 이동합니다.
-
11 번째 줄: IP_Address는 IPC의 IP 주소입니다.
-
12 번째 줄: Server_Port는 IPC의 포트 번호입니다.
-
13 번째 줄: MM_Timeout은 통신 시간 초과 대기 시간을 지정합니다.
-
14 번째 줄: MM_Init_Socket을 호출하여 통신에 대해 초기화 설정을 합니다.
-
18번째 줄: Job은 Mech-Vision 프로젝트 번호를 나타냅니다.
-
19 번째 줄: Model_Number는 Mech-Vision프로젝트의 레시피 템플릿 번호입니다.
-
20 번째 줄: Mech-Vision 프로젝트 레시피를 설정하려면 여기에서 MM_Switch_Model 호출해서 프로젝트 레시피를 설정할 수 있습니다.
-
24 번째 줄: Pos_Num_Need는 Mech-Vision으로부터 얻어야 할 시각 포인트의 목표 개수를 지정합니다. 값이 0인 경우 Mech-Vision 프로젝트가 처리 결과에서 인식된 모든 비전 포인트 수 가져옴을 의미합니다.
-
25번째 줄: SendPos_Type는 “로봇 현재 관절 각도 + 현재 플랜지 포즈”의 포맷으로 비전 시스템에 로봇 포즈를 전송합니다.
-
26 번째 줄: MM_Start_Vis를 호출하여 Mech-Vision 프로젝트 실행을 트리거합니다.
-
27 번째 줄: 1초동안 기다립니다. Eye To Hand 모드에서 MM_Start_Vis 와 MM_Get_VisData 사이에 이동 스텝(MoveL 혹은 MoveJ) 이 있으면 여기서 기다릴 필요가 없습니다. Eye-In-Hand 모드에서는 카메라가 사진 촬영을 마칠 때까지 움직이지 않고 1초 동안 기다려야 합니다.
-
29 번째 줄: Mech-Vision 프로젝트에서 계산한 포즈를 획득합니다.
-
30 번째 줄: 획득된 포즈의 상태 코드가 정상인지 판단하고, 상태 코드 반환이 비정상인 경우 사용자는 로봇을 정지하는 등의 조치를 취해야 합니다.
-
34 번째 줄: MM_Get_Pose 피킹 포즈 획득합니다. ROAKE 사용자 정의 함수는 형식 파라미터 전달을 지원하지 않으므로, 전역 변수 MM_P를 지정하여 MM_Get_Pose의 계산 결과를 저장합니다. 지역 변수 _P = MM_P를 사용하여 획득한 포즈 데이터를 사용자 정의의 위치 변수로 덤프합니다.
-
37 번째 줄: 피킹 웨이포인트로 이동합니다.
-
42 번째 줄: 피킹 포즈와 배치 포인트 사이의 안전 영역으로 이동합니다.
-
44 번째 줄: 배치 포인트로 이동합니다.
사용자 정의 부분
-
공구중심점(TCP)을 정의하기
tool01: 사용자는 티치 펜던트의 캘리브레이션 화면에서 tool01의 값을 수정하여 TCP를 조절할 수 있습니다.
-
“Home 포인트”(원점)를 정의하기
MoveAbsJ home_point, 사용자가 Home 포인트(원점)의 포즈를 home_point 포즈 변수에 기록해야 합니다.
-
티치 펜던트를 통해 사진 캡처 위치를 설정하기
MoveL camera_capture, 사용자가 사진 캡처 포인트의 포즈를 camera_capture 포즈 변수에 기록해야 합니다.
-
티치 펜더트를 통해 전이점을 설정하기
MoveL waypoint1, 사용자는 하나 또는 몇 개의 전이점을 추가하여 로봇이 피킹 포즈에서 배치 포인트로 충돌 없이 이동할 수 있습니다.
-
티치 펜던트를 통해 배치 포인트를 설정하기
MoveL drop, 사용자가 배치 포즈를 drop 변수에 기록해야 합니다.
-
그리퍼 동작을 정의하기
피킹 포즈 및 배치 포인트로 이동할 때 사용자는 그리퍼를 열고 닫기 위한 그리퍼 제어 로직을 추가해야 합니다.
-
피킹 전후, 배치 전후의 접근 거리를 정의하기
-
피킹 포즈 접근하기
MoveL RelTool(_P,0,0,-100,0,0,0),v1000,fine,tool01
피킹 포즈에서 툴 Z 축 음의 방향으로 100mm 이동합니다. 사용자는 접근 과정에서 충돌이 없도록 오프셋을 수정해야 합니다.
-
피킹 포즈 떠나기
MoveL Offs(_P,0,0,100), v1000, fine, tool01
피킹 포즈에서 물체 좌표 Z축 양의 방향으로 100mm 이동합니다. 사용자는 떠나는 과정에서 충돌이 없도록 오프셋을 수정해야 합니다.
-
배치 포인트 접근하기
MoveL RelTool(drop,0,0,-100,0,0,0),v1000,fine,tool01
배치 포인트에서 툴 Z축 음의 방향으로 100mm 이동합니다. 사용자는 떠나는 과정에서 충돌이 없도록 오프셋을 수정해야 합니다.
-
배치 포인트 떠나기
MoveL Offs(drop,0,0,100), v1000, fine, tool01
배치 포인트에서 물체 좌표 Z축 양의 방향으로 100mm 이동합니다. 사용자는 떠나는 과정에서 충돌이 없도록 으프셋을 수정해야 합니다.
-
Mech-Viz를 사용하여 경로를 계획하기
// **********************************************************
// FUNCTION: Eye to Hand simple pick and place with Viz
// **********************************************************
LOCAL PROC Vision_Sample_2()
AccSet 100, 100
MoveAbsJ home_point,v3000,fine,tool0 //move robot home position
MoveL camera_capture,v500,fine,tool0
Pos_Num = 0
// Set ip address of IPC
IP_Address = "192.168.2.222"
Server_Port = 50000
MM_Timeout = 60
MM_Init_Socket()
Wait 0.1
// Set vision recipe
Job = 1
Model_Number = 1
MM_Switch_Model()
// Run Viz project
SendPos_Type = 1
MM_Start_Viz()
Wait 0.1
// set branch exitport
Branch_Num = 1
Export_Num = 1
MM_Set_Branch()
// get planned path
Jps_Pos = 2
MM_Get_VizData()
IF(MM_Status != 2100)
EXIT
ENDIF
robtarget _P[20]
int _Label[20]
int _Speed[20]
Serial = 0
while(Serial < Pos_Num)
Serial += 1
MM_Get_Pose()
_P[Serial] = MM_P
_Label[Serial] = MM_Label
_Speed[Serial] = MM_Speed
endwhile
// follow the planned path to pick
int count = 0
while(count < Pos_Num)
count += 1
MoveL _P[count],v1000,fine,tool01
IF(count == VisPos_Num)
Pause
// add object grasping logic here
ENDIF
endwhile
// go to drop location
MoveL RelTool(drop,0,0,-100,0,0,0),v1000,z50,tool01
MoveL drop,v500,fine,tool01 // drop point
Pause
// add object releasing logic here
MoveL Offs(drop,0,0,100), v1000, fine, tool01
MoveAbsJ home_point,v3000,fine,tool0
RETURN
ENDPROC
프로그램 논리 해석
-
6번째 줄 : 로봇을 Home 포인트로 이동합니다.
-
7 번째 줄: 카메라 사진 캡처 위치로 이동합니다.
-
11 번째 줄: IP_Address는 IPC의 IP 주소입니다.
-
12 번째 줄: Server_Port는 IPC의 포트 번호입니다.
-
13 번째 줄: MM_Timeout은 통신 시간 초과 대기 시간을 지정합니다.
-
14 번째 줄: MM_Init_Socket을 호출하여 통신에 대해 초기화 설정을 합니다.
-
18번째 줄: Job은 Mech-Vision 프로젝트 번호를 나타냅니다.
-
19 번째 줄: Model_Number는 Mech-Vision프로젝트의 레시피 템플릿 번호입니다.
-
20 번째 줄: Mech-Vision 프로젝트 레시피를 설정하려면 여기에서 MM_Switch_Model 호출해서 프로젝트 레시피를 설정할 수 있습니다.
-
23 번째 줄: SendPos_Type는 "로봇의 현재 관절 각도+현재 플랜지"의 포맷을 Mech-Viz로 로봇 포즈를 전송합니다.
-
24번째 줄: Mech-Viz 프로젝트 실행을 트리거합니다.
-
28 번째 줄: Branch_Num은 분기 스텝 번호입니다.
-
29 번째 줄: Export_Num은 분기 스텝의 아웃 포트 번호입니다.
-
30번째 줄: Mech-Viz 프로젝트에서 분기를 설정해야 하는 경우 MM_Set_Branch() 를 호출하여 분기 스텝의 아웃 포트를 설정할 수 있습니다.
-
33 번째 줄: Jps_Pos는 웨이포인트가 로봇 TCP 포즈의 포맷으로 반환될 것임을 나타냅니다.
-
34 번째 줄: Mech-Viz 프로젝트에서 계획된 이동 경로를 획득합니다.
-
35 번째 줄: 상태 코드가 정상인지 판단하고, 상태 코드 반환이 비정상인 경우 사용자는 로봇을 정지하는 등의 조치를 취해야 합니다.
-
42~48 번째 줄: 루프를 통해 MM_Get_Pose를 반복 호출하여 포즈 데이터를 획득하고, 이를 _P[20], _Label[20], _Speed[20]의 해당 변수에 덤프합니다. ROAKE 사용자 정의 함수는 형식 파라미터 전달을 지원하지 않으므로, 전역 변수 MM_P, MM_Label 및 MM_Speed를 지정하여 MM_Get_Pose의 계산 결과를 저장합니다.
-
52~59 번째 줄: FOR 루프를 사용하여 Mech-Viz가 계획된 경로를 따라 로봇이 피킹 포즈로 이동합니다.
-
63 번째 줄: 배치 포인트로 이동하고 배치합니다.
사용자 정의 부분
-
공구중심점(TCP)을 정의하기
tool01: 사용자는 티치 펜던트의 캘리브레이션 화면에서 tool01의 값을 수정하여 TCP를 조절할 수 있습니다.
-
“Home 포인트”(원점)를 정의하기
MoveAbsJ home_point, 사용자가 Home 포인트(원점)의 포즈를 home_point 포즈 변수에 기록해야 합니다.
-
티치 펜던트를 통해 사진 캡처 위치를 설정하기
MoveL camera_capture, 사용자가 사진 캡처 포인트의 포즈를 camera_capture 포즈 변수에 기록해야 합니다.
-
티치 펜던트를 통해 배치 포인트를 설정하기
MoveL drop, 사용자가 배치 포즈를 drop 변수에 기록해야 합니다.
-
그리퍼 동작을 정의하기
피킹 포즈 및 배치 포인트로 이동할 때 사용자는 그리퍼를 열고 닫기 위한 그리퍼 제어 로직을 추가해야 합니다.
-
피킹/배치 전후의 접근 거리를 정의하기
-
배치 포인트 접근하기
MoveL RelTool(drop,0,0,-100,0,0,0),v1000,fine,tool01
배치 포인트에서 툴 Z축 음의 방향으로 100mm 이동합니다. 사용자는 떠나는 과정에서 충돌이 없도록 오프셋을 수정해야 합니다.
-
배치 포인트 떠나기
MoveL Offs(drop,0,0,100), v1000, fine, tool01
배치 포인트에서 물체 좌표 Z축 양의 방향으로 100mm 이동합니다. 사용자는 떠나는 과정에서 충돌이 없도록 으프셋을 수정해야 합니다.
-
Mech-Vision "경로 계획" 스텝을 사용하여 계획된 경로를 획득하기
// ****************************************************************************
// FUNCTION: Eye to Hand simple pick and place with Vision Path Planning Step
// ****************************************************************************
LOCAL PROC Vision_Sample_3()
AccSet 100, 100
MoveAbsJ home_point,v3000,fine,tool0 //move robot home position
MoveL camera_capture,v500,fine,tool0
Pos_Num = 0
// Set ip address of IPC
IP_Address = "192.168.2.222"
Server_Port = 50000
MM_Timeout = 60
MM_Init_Socket()
Wait 0.1
// Set vision recipe
Job = 1
Model_Number = 1
MM_Switch_Model()
// Run vision project
Job = 1
Pos_Num_Need = 0
SendPos_Type = 1
MM_Start_Vis()
Wait 1
// get planned path from {product-vis} Path Planning Step
Job = 1
Jps_Pos = 2
MM_Get_VisPath()
IF(MM_Status != 1103)
EXIT
ENDIF
robtarget _P[20]
int _Label[20]
int _Speed[20]
Serial = 0
while(Serial < Pos_Num)
Serial += 1
MM_Get_Pose()
_P[Serial] = MM_P
_Label[Serial] = MM_Label
_Speed[Serial] = MM_Speed
endwhile
// follow the planned path to pick
int count = 0
while(count < Pos_Num)
count += 1
MoveL _P[count],v1000,fine,tool01
IF(count == VisPos_Num)
Pause
// add object grasping logic here
ENDIF
endwhile
// go to drop location
MoveL RelTool(drop,0,0,-100,0,0,0),v1000,z50,tool01
MoveL drop,v500,fine,tool01 // drop point
Pause
// add object releasing logic here
MoveL Offs(drop,0,0,100), v1000, fine, tool01
MoveAbsJ home_point,v3000,fine,tool0
RETURN
ENDPROC
프로그램 논리 해석
-
6번째 줄 : 로봇을 Home 포인트로 이동합니다.
-
7 번째 줄: 카메라 사진 캡처 위치로 이동합니다.
-
11 번째 줄: IP_Address는 IPC의 IP 주소입니다.
-
12 번째 줄: Server_Port는 IPC의 포트 번호입니다.
-
13 번째 줄: MM_Timeout은 통신 시간 초과 대기 시간을 지정합니다.
-
14 번째 줄: MM_Init_Socket을 호출하여 통신에 대해 초기화 설정을 합니다.
-
18번째 줄: Job은 Mech-Vision 프로젝트 번호를 나타냅니다.
-
19 번째 줄: Model_Number는 Mech-Vision프로젝트의 레시피 템플릿 번호입니다.
-
20 번째 줄: Mech-Vision 프로젝트 레시피를 설정하려면 여기에서 MM_Switch_Model 호출해서 프로젝트 레시피를 설정할 수 있습니다.
-
24 번째 줄: Pos_Num_Need는 Mech-Vision으로부터 얻어야 할 시각 포인트의 목표 개수를 지정합니다. 값이 0인 경우 Mech-Vision 프로젝트가 처리 결과에서 인식된 모든 비전 포인트 수 가져옴을 의미합니다.
-
25번째 줄: SendPos_Type는 “로봇 현재 관절 각도 + 현재 플랜지 포즈”의 포맷으로 비전 시스템에 로봇 포즈를 전송합니다.
-
26 번째 줄: MM_Start_Vis를 호출하여 Mech-Vision 프로젝트 실행을 트리거합니다.
-
27 번째 줄: 1초동안 기다립니다. Eye To Hand 모드에서 MM_Start_Vis 와 MM_Get_VisData 사이에 이동 스텝(MoveL 혹은 MoveJ) 이 있으면 여기서 기다릴 필요가 없습니다. Eye-In-Hand 모드에서는 카메라가 사진 촬영을 마칠 때까지 움직이지 않고 1초 동안 기다려야 합니다.
-
31 번째 줄: Jps_Pos는 웨이포인트가 로봇 TCP 포즈의 포맷으로 반환될 것임을 나타냅니다.
-
32 번째 줄: MM_Get_VisPath는 Mech-Vision “경로 계획” 스텝에서 출력된 이동 경로를 획득합니다.
-
33 번째 줄: 획득된 경로의 상태 코드가 정상인지 판단하고, 상태 코드 반환이 비정상인 경우 로봇을 정지시켜야 하며 사용자는 조치를 취해야 합니다.
-
40~46 번째 줄: 루프를 통해 MM_Get_Pose를 반복 호출하여 포즈 데이터를 획득하고, 이를 _P[20], _Label[20], _Speed[20]의 해당 변수에 덤프합니다. ROAKE 사용자 정의 함수는 형식 파라미터 전달을 지원하지 않으므로, 전역 변수 MM_P, MM_Label 및 MM_Speed를 지정하여 MM_Get_Pose의 계산 결과를 저장합니다.
-
50~57 번째 줄: 루프를 사용하여 계획된 경로를 따라 로봇을 이동하여 비전 피킹을 완료합니다.
-
61 번째 줄: 고정된 배치 포인트로 이동합니다.
사용자 정의 부분
-
공구중심점(TCP)을 정의하기
tool01: 사용자는 티치 펜던트의 캘리브레이션 화면에서 tool01의 값을 수정하여 TCP를 조절할 수 있습니다.
-
“Home 포인트”(원점)를 정의하기
MoveAbsJ home_point, 사용자가 Home 포인트(원점)의 포즈를 home_point 포즈 변수에 기록해야 합니다.
-
티치 펜던트를 통해 사진 캡처 위치를 설정하기
MoveL camera_capture, 사용자가 사진 캡처 포인트의 포즈를 camera_capture 포즈 변수에 기록해야 합니다.
-
티치 펜던트를 통해 배치 포인트를 설정하기
MoveL drop, 사용자가 배치 포즈를 drop 변수에 기록해야 합니다.
-
그리퍼 동작을 정의하기
피킹 포즈 및 배치 포인트로 이동할 때 사용자는 그리퍼를 열고 닫기 위한 그리퍼 제어 로직을 추가해야 합니다.
-
피킹/배치 전후의 접근 거리를 정의하기
-
배치 포인트 접근하기
MoveL RelTool(drop,0,0,-100,0,0,0),v1000,fine,tool01
배치 포인트에서 툴 Z축 음의 방향으로 100mm 이동합니다. 사용자는 떠나는 과정에서 충돌이 없도록 오프셋을 수정해야 합니다.
-
배치 포인트 떠나기
MoveL Offs(drop,0,0,100), v1000, fine, tool01
배치 포인트에서 물체 좌표 Z축 양의 방향으로 100mm 이동합니다. 사용자는 떠나는 과정에서 충돌이 없도록 으프셋을 수정해야 합니다.
-
샘플 프로그램 실행
샘플 프로그램을 실행하기 전에 다음 전제 조건이 충족되어야 합니다.
-
ROKAE 표준 인터페이스 통신 구성 참조하여 작업을 완료했는지 확인하십시오.
-
ROKAE 캘리브레이션 프로세스 내용을 참조하여 핸드-아이 캘리브레이션 작업을 완료했는지 확인하십시오.
-
Mech-Vision 솔루션 및 프로젝트가 구축되었는지 확인하고 현재 솔루션 자동 로드하십시오.
-
"Mech-Viz 계획 경로" 샘플 실행하려면 Mech-Viz 프로젝트를 구축하고 Mech-Viz프로젝트 리소스 패널에서 마우스 오른쪽 버튼으로 클릭한 후 자동 로드로 설정을 체크합니다.
-
티치 펜더트에서 Home 포인트, 카메라 촬영 포인트, 로봇 TCP, 중간 웨이포인트의 포즈 데이터가 정의했는지 확인하십시오.
위 전제를 충족하는 경우 Run the Robot Program을 참조하여 프로그램을 실행하십시오.
아래 스텝을 실행할 때 해당 샘플 예시 따라 설명을 열립니다. 예를 들어, 첫 번째 샘플 예시 실행하려면 "// Vision_Sample_1()"선택하고 차례로 버튼을 클릭하십시오.