Kawasaki (가와사키) 피킹 샘플 프로그램
이 부분에서는 픽앤 플레이스를 수행하는 로봇 샘플 프로그램을 소개합니다.
샘플 프로그램 설명
픽앤 플레이스를 완성하는 로봇 샘플 프로그램은 Mech-Vision과 Mech-Viz 소프트웨어의 설치 디렉터리의`통신 구성 요소/Robot_Interface/KAWASAKI/sample` 폴더에 있습니다.
사용 방식에 따라 다음과 같이 세 가지로 나뉩니다.
Mech-Vision를 사용하여 비전 인식을 실행해 결과를 획득하기
.PROGRAM vision_sample_1()
;**********************************************************
;* FUNCTION:simple pick and place with Mech-Vision
;* 2022-5-1
;**********************************************************
accuracy 1 always
speed 30 always
TOOL gripper ;set TCP
Home ;move robot home position
JMOVE camera_capture ;move to camera capture position
break
pos_num = 0
;Set ip address of IPC
call mm_init_skt(127,0,0,1,50000)
twait 0.1
;Set vision recipe
;call mm_switch_model(1,1)
;Run vision project
call mm_start_vis(1,1,2,#start_vis) ;(x,x,3,#start_vis) used for ETH pathplan initial position
twait 1
call mm_get_visdata(1,pos_num,ret2)
if ret2 <> 1100
halt
end
call mm_get_pose(1,&pick[1],label[1],speed[1])
LAPPRO pick[1],100
LMOVE pick[1]
break
;Add object grasping logic here.
ldepart 100
lmove waypoint[1]
lappro drop[1],100
lmove drop[1]
;Add object releasing logic here.
ldepart 100
HOME
.END
프로그램 논리 해석
-
8번째 줄: 툴의 센터 포인트 TCP를 정의하기. TCP는 포즈 변수 gripper에 의해 정의됩니다. 티치 펜던트를 사용하여 TCP를 정의하는 방법은 Set the Robot TCP를 참조하십시오.
-
9번째 줄: 로봇이 Home 포인트로 이동합니다. Home 포인트를 정의하는 방법은 Set the HOME Position 내용을 참조하십시오.
-
10번째 줄: 로봇이 이미지 캡처 위치에 직선 운동으로 이동합니다. 이미지 캡처 포즈는 포즈 변수 camera_capture에 의해 정의됩니다. 티치 펜던트를 사용하여 TCP를 정의하는 방법은 Teach Pose Data to the Robot를 참조하십시오.
-
14번째 줄: mm_init_skt를 호출하여 통신을 초기화합니다. 자세한 내용은 Initialize Communication 참조하십시오.
-
16~17번째 줄: Mech-Vision parameter recipes 를 설정하려면 여기에서 mm_switch_model를 추가하여 설정할 수 있습니다. 자세한 내용은 Switch Mech-Vision Recipe 참조하십시오.
-
19번째 줄: mm_start_vis로 Mech-Vision 프로젝트를 트리거 합니다. 자세한 내용은 Start Mech-Vision Project를 참조하십시오.
-
20번째 줄: 이미지 캡처 후 웨이팅 시간을 이 예에서는 1초로 설정합니다. Eye To Hand 모드에서는 mm_start_vis 와 mm_get_visdata 사이에 이동 스텝(MoveL 혹은 MoveJ) 이 있으면 웨이팅 시간을 설정할 필요가 없으며, Eye-In-Hand 모드에서는 카메라가 사진 촬영을 마칠 때까지 정지 상태를 유지해야 하기에 웨이팅 시간을 설정하여야 합니다.
-
21번째 줄: mm_get_visdata를 사용하여 Mech-Vision 식별 결과를 얻습니다. pos_num은 수신된 포즈의 개수를 저장하고, ret2는 수신된 상태 코드를 저장합니다. 자세한 내용은 Get Vision Target(s)을 참고하십시오.
-
22~24번째 줄: 인식 결과를 획득하는 상태 코드가 정상인지 판단하고(1100이 정상적인 상태 코드), 상태 코드가 비정상인 경우 로봇 프로그램이 중지되거나 정지됩니다.
-
26번째 줄: 로봇이 피킹 포즈 위 100mm 위치에 직선운동으로 이동합니다. 이 과정에서 충돌이 발생하지 않도록 사용자는 옵셋을 수정해야 합니다.
-
27번째 줄: 로봇이 피킹 포즈 위치에 직선운동으로 이동합니다.
-
29번째 줄: 사용자는 물체를 피킹하기 위해 그리퍼 제어 논리를 추가해야 합니다.
-
30번째 줄: 피킹 포즈에서 툴 Z축 방향을 따라 위로 100mm 이동하므로 사용자는 떠나는 과정에서 충돌이 없도록 옵셋을 수정해야 합니다.
-
32번째 줄: 로봇이 배치 포인트 위 100mm로 이동하려면 사용자는 접근 중에 충돌이 없도록 옵셋을 수정해야 합니다.
-
33번째 줄: 로봇이 고정된 배치 포인트 위치에 직선운동으로 이동합니다.
-
34번째 줄: 사용자는 물체를 배치하기 위해 여기서 그리퍼 제어 논리를 추가해야 합니다.
-
35번째 줄: 배치 지점에서 툴 Z축 방향을 따라 위로 100mm 이동하므로 사용자는 떠나는 과정에서 충돌이 없도록 옵셋을 수정해야 합니다.
-
36번째 줄: 로봇을 Home 포인트로 이동합니다.
Mech-Viz를 사용하여 경로를 계획하기
.PROGRAM vision_sample_2()
;**********************************************************
;* FUNCTION:simple pick and place with Mech-Viz
;* 2022-5-1
;**********************************************************
accuracy 1 always
speed 30 always
TOOL gripper ;set TCP
Home ;move robot home position
JMOVE camera_capture ;move to camera_capture position
break
pos_num = 0
;Set ip address of IPC
call mm_init_skt(127,0,0,1,50000)
twait 0.1
;Set vision recipe
;call mm_switch_model(1,1)
;Run Viz project
call mm_start_viz(1,#start_viz) ;(2,#start_viz) used for ETH viz initial position
twait 0.1
;set branch exitport
;call mm_set_branch(1,1)
;get planned path
call mm_get_vizdata(2,pos_num,vispos_num,ret1)
if ret1 <> 2100
halt
end
for count=1 to pos_num
call mm_get_pose(count,&movepoint[count],label[count],speed[count])
end
;follow the planned path to pick
for count =1 to pos_num
speed speed[count]
LMOVE movepoint[count]
if count == vispos_num then
;add object grasping logic here
end
end
;go to drop location
ldepart 100
lmove waypoint[1]
lappro drop[1],100
lmove drop[1] ;drop point
;add object releasing logic here
ldepart 100
HOME
.END
프로그램 논리 해석
-
8번째 줄: 툴의 센터 포인트 TCP를 정의하기. TCP는 포즈 변수 gripper에 의해 정의됩니다. 티치 펜던트를 사용하여 TCP를 정의하는 방법은 Set the Robot TCP를 참조하십시오.
-
9번째 줄: 로봇이 Home 포인트로 이동합니다. Home 포인트를 정의하는 방법은 Set the HOME Position 내용을 참조하십시오.
-
10번째 줄: 로봇이 이미지 캡처 위치에 직선 운동으로 이동합니다. 이미지 캡처 포즈는 포즈 변수 camera_capture에 의해 정의됩니다. 티치 펜던트를 사용하여 TCP를 정의하는 방법은 Teach Pose Data to the Robot를 참조하십시오.
-
14번째 줄: mm_init_skt를 호출하여 통신을 초기화합니다. 자세한 내용은 Initialize Communication 참조하십시오.
-
16~17번째 줄: Mech-Vision parameter recipes 를 설정하려면 여기에서 mm_switch_model를 추가하여 설정할 수 있습니다. 자세한 내용은 Switch Mech-Vision Recipe 참조하십시오.
-
19번째 줄: mm_start_vis로 Mech-Viz 프로젝트를 트리거 합니다. 자세한 내용은 Start Mech-Viz Project를 참조하십시오.
-
21~22번째 줄: Mech-Viz 프로젝트에서 분기를 설정해야 하는 경우 mm_set_branch를 호출하여 분기 스텝의 아웃 포트를 설정할 수 있습니다. 자세한 내용은 Select Mech-Viz Branch를 참조하십시오.
-
24번째 줄: mm_get_vizdata를 호출하여 Mech-Viz 프로젝트에서 계획한 피킹 경로를 가져오고, pos_num은 수신된 포즈 수를 저장하는 데 사용하고, vispos_num은 첫 번째 비전 이동 경로의 위치 번호를 저장하는 데 사용하며, ret1은 이 명령어를 실행하는 상태 코드를 저장하는 데 사용됩니다. 자세한 내용은 Get Planned Path from Mech-Viz 참조하십시오.
-
25~27번째 줄: 경로를 획득하는 상태 코드가 정상인지 판단하고(2100이 정상적인 상태 코드), 상태 코드가 비정상인 경우 로봇 프로그램이 중지되거나 정지됩니다.
-
28~30번째 줄: FOR loop를 사용하여 획득한 포즈를 변수에 저장합니다. mm_get_pose를 사용하여 비전 결과와 이동 경로에서 포인트의 포즈 데이터를 획득합니다. 자세한 내용은 Store an Obtained TCP Pose를 참조하십시오.
-
32~38번째 줄: 루프를 사용하여 Mech-Viz가 계획한 경로를 따라 로봇을 피킹 포즈로 이동합니다. 사용자는 36번째 줄에 그리퍼 제어 논리를 추가하여 물체를 잡도록 해야 합니다.
-
40번째 줄: 피킹 포즈에서 툴 Z축 방향을 따라 위로 100mm 이동하므로 사용자는 떠나는 과정에서 충돌이 없도록 옵셋을 수정해야 합니다.
-
42번째 줄: 로봇이 배치 포인트 위 100mm로 이동하려면 사용자는 접근 중에 충돌이 없도록 옵셋을 수정해야 합니다.
-
43번째 줄: 로봇이 고정된 배치 포인트 위치에 직선운동으로 이동합니다.
-
44번째 줄: 사용자는 물체를 배치하기 위해 여기서 그리퍼 제어 논리를 추가해야 합니다.
-
45번째 줄: 배치 지점에서 툴 Z축 방향을 따라 위로 100mm 이동하므로 사용자는 떠나는 과정에서 충돌이 없도록 옵셋을 수정해야 합니다.
-
46번째 줄: 로봇을 Home 포인트로 이동합니다.
Mech-Vision "경로 계획" 스텝을 사용하여 경로를 획득하기
.PROGRAM vision_sample_3()
;**********************************************************
;* FUNCTION:simple pick and place with Mech-Vision path planning
;* 2023-2-1
;**********************************************************
accuracy 1 always
speed 30 always
TOOL gripper ;set TCP
Home ;move robot home position
JMOVE camera_capture ;move to camera_capture position
break
pos_num = 0
;Set ip address of IPC
call mm_init_skt(127,0,0,1,50000)
twait 0.1
;Set vision recipe
;call mm_switch_model(1,1)
;Run Viz project
call mm_start_vis(1,0,1,#start_vis)
twait 0.1
;get planned path
call mm_get_vispath(1,2,pos_num,vispos_num,ret1)
if ret1 <> 1103
halt
end
for count=1 to pos_num
call mm_get_pose(count,&movepoint[count],label[count],speed[count])
end
;follow the planned path to pick
for count =1 to pos_num
speed speed[count]
LMOVE movepoint[count]
if count == vispos_num then
;add object grasping logic here
end
end
;go to drop location
ldepart 100
lmove waypoint[1]
lappro drop[1],100
lmove drop[1] ;drop point
;add object releasing logic here
ldepart 100
HOME
.END
프로그램 논리 해석
-
8번째 줄: 툴의 센터 포인트 TCP를 정의하기. TCP는 포즈 변수 gripper에 의해 정의됩니다. 티치 펜던트를 사용하여 TCP를 정의하는 방법은 Set the Robot TCP를 참조하십시오.
-
9번째 줄: 로봇이 Home 포인트로 이동합니다. Home 포인트를 정의하는 방법은 Set the HOME Position 내용을 참조하십시오.
-
10번째 줄: 로봇이 관절 운동으로 이미지 캡처 위치에 이동합니다. 이미지 캡처 포즈는 포즈 변수 camera_capture에 의해 정의됩니다. 티치 펜던트를 사용하여 TCP를 정의하는 방법은 Teach Pose Data to the Robot를 참조하십시오.
-
14번째 줄: mm_init_skt를 호출하여 통신을 초기화합니다. 자세한 내용은 Initialize Communication 참조하십시오.
-
16~17번째 줄: Mech-Vision parameter recipes 를 설정하려면 여기에서 mm_switch_model를 추가하여 설정할 수 있습니다. 자세한 내용은 Switch Mech-Vision Recipe 참조하십시오.
-
19번째 줄: mm_start_vis로 Mech-Vision 프로젝트를 트리거 합니다. 자세한 내용은 Start Mech-Vision Project를 참조하십시오.
-
20번째 줄: 이미지 캡처 후 웨이팅 시간을 이 예에서는 1초로 설정합니다. Eye To Hand 모드에서는 mm_start_vis 와 mm_get_visdata 사이에 이동 스텝(MoveL 혹은 MoveJ) 이 있으면 웨이팅 시간을 설정할 필요가 없으며, Eye-In-Hand 모드에서는 카메라가 사진 촬영을 마칠 때까지 정지 상태를 유지해야 하기에 웨이팅 시간을 설정하여야 합니다.
-
22번째 줄: mm_get_vispath를 호출하여 Mech-Vision “경로 계획” 스텝의 결과를 획득합니다. 자세한 내용은 Get Result of Step “Path Planning” in Mech-Vision을 확인하십시오.
-
23~25번째 줄: 경로 계획 결과를 획득하는 상태 코드가 정상인지 판단하고(1103이 정상적인 상태 코드), 상태 코드가 비정상인 경우 로봇 프로그램이 중지되거나 정지됩니다.
-
26~28번째 줄: FOR loop를 사용하여 획득한 웨이포인트를 지정된 변수에 저장합니다. 자세한 내용은 Store an Obtained TCP Pose을 참조하세요.
-
30~36번째 줄: FOR loop를 사용하여 계획된 경로를 따라 로봇이 피킹 포즈로 이동합니다. 사용자는 물체를 잡기 위해 그리퍼 제어 논리를 추가해야 합니다.
-
38번째 줄: 피킹 포즈에서 툴 Z축 방향을 따라 위로 100mm 이동하므로 사용자는 떠나는 과정에서 충돌이 없도록 옵셋을 수정해야 합니다.
-
40번째 줄: 로봇이 배치 포인트 위 100mm로 이동하려면 사용자는 접근 중에 충돌이 없도록 옵셋을 수정해야 합니다.
-
41번째 줄: 로봇이 고정된 배치 포인트 위치에 직선운동으로 이동합니다.
-
42번째 줄: 사용자는 물체를 배치하기 위해 여기서 그리퍼 제어 논리를 추가해야 합니다.
-
43번째 줄: 배치 포인트에서 툴 Z축 방향을 따라 위로 100mm 이동하므로 사용자는 떠나는 과정에서 충돌이 없도록 옵셋을 수정해야 합니다.
-
44번째 줄: 로봇을 Home 포인트로 이동합니다.