ABB 피킹 샘플 프로그램¶
여기에서는 간단한 식별과 움직임을 완성하는 로봇 샘플 프로그램을 소개합니다.
전제¶
ABB 인터페이스 프로그램 복제 를 참조해 로봇 프로그램의 복제를 완료하고 Mech-Center와 연결을 하였습니다.
ABB 캘리브레이션 프로세스 를 참조해 외부 파라미터 캘리브레이션을 완성하였습니다.
Mech-Vision 및 Mech-Viz 프로젝트가 구축되어 각각 소프트웨어에서 현재 프로젝트를 자동으로 로드하기 기능을 선택했습니다.
Mech-Center의 구성 설정에서 Mech-Vision에서 자동으로 로드된 프로젝트 리스트를 동기화하고 프로젝트 순서를 조정했습니다.
로봇의 TCP가 정의되었습니다.
디버깅 중 충돌을 피하기 위해 로봇의 속도를 낮춥니다.
Mech-Vision을 사용하여 비전 인식을 하고 결과를 획득하기¶
PROC Vision_Sample_1()
!**********************************************************
FUNCTION:Eye to Hand simple pick and place with Mech-Vision
! mechmind, 2022-5-1
!**********************************************************
AccSet 100, 100;
VelSet 100, 5000;
MoveAbsJ Home\NoEOffs,v3000,fine,Gripp1TCP;!move robot home position
MoveL camera_capture,v500,fine,Gripp1TCP;
PoseNum:=0;
!Set ip address of IPC
MM_Init_Socket "127.0.0.1",50000,60;
WaitTime 0.1;
!Set vision recipe
MM_Switch_Model 1,1;
!Run vision project
MM_Start_Vis 1,1,2;
WaitTime 1;
MM_Get_VisData 1,LastData,PoseNum,Status;
IF Status<>1100 THEN
Stop;
ENDIF
MM_Get_Pose 1,pickpoint,label,speed1;
MoveL RelTool(pickpoint,0,0,-100),v1000,fine,Gripp1TCP;
MoveL pickpoint,v300,fine,Gripp1TCP;
Stop;
!Add object grasping logic here.
MoveL Offs(pickpoint,0,0,100), v1000, fine, Gripp1TCP;
MoveL waypoint1,v1000,z50,Gripp1TCP;
MoveL RelTool(drop,0,0,-100),v1000,fine,Gripp1TCP;
MoveL drop,v300,fine,Gripp1TCP;
Stop;
!Add object releasing logic here.
MoveL Offs(drop,0,0,100), v1000, fine, Gripp1TCP;
MoveAbsJ Home\NoEOffs,v3000,fine,Gripp1TCP;
RETURN ;
ENDPROC
프로그램 논리 해석¶
로봇을 Home 포인트로 이동합니다.
카메라 사진 캡처 위치로 이동합니다.
MM_Init_Socket 을 호출하여 통신에 대해 초기화 설정을 합니다.
Mech-Vision 프로젝트 레시피를 설정하려면 여기에 MM_Switch_Model 을 추가하여 레시피를 설정할 수 있습니다.
MM_Start_Vis는 Mech-Vision 프로젝트가 실행되도록 합니다.
1초를 기다립니다. Eye To Hand 모드에서 MM_Start_Vis 와 MM_Get_VisData 사이에 이동 스텝(MoveL 또는 MoveJ)이 있으면 여기서 기다릴 필요가 없습니다. Eye In Hand 모드에서는 카메라가 사진 촬영을 마칠 때까지 움직이지 않고 1초 동안 기다려야 합니다.
Mech-Vision 프로젝트에서 계산된 포즈를 획득합니다.
획득된 포즈의 상태 코드가 정상인지 판단하고, 상태 코드 반환이 비정상인 경우 사용자는 로봇을 정지시키는 등의 조치를 취해야 합니다.
픽 포인트로 이동합니다.
픽 포인트와 배치 포인트 사이의 안전한 지역으로 이동합니다.
고정된 배치 포인트로 이동합니다.
사용자 정의 부분¶
TCP를 정의하기
Gripp1TCP: 사용자가 tooldata 중의 Gripp1TCP의 값을 수정함으로써 TCP를 조정할 수 있습니다.
티칭 머신을 통해 Home 포인트 설정하기
MoveAbsJ Home, 사용자는 Home 포즈에서 Home 포인트 포즈를 기록해야 합니다.
티칭 머신을 통해 사진 캡처 위치를 설정하기
MoveL camera_capture, 사용자는 camera_capture 포즈에서 사진 캡처 포즈를 기록해야 합니다.
티칭 머신을 통해 전이점을 설정하기
MoveL waypoint1, 로봇이 픽 포인트에서 배치 포인트로 이동할 때 충돌이 발생하지 않도록 하기 위해 하나 또는 여러 개의 전이점을 추가할 수 있습니다.
티칭 머신을 통해 배치 포인트를 설정하기
MoveL drop,사용자는 drop 포즈 변수에 배치 포인트의 포즈를 기록해야 합니다.
피킹 전후, 배치 전후의 접근 거리를 정의하기
픽 포인트로 접근하기
MoveJ RelTool(pickpoint,0,0,-100)픽 포인트는 툴 Z축의 부방향으로 100mm 이동합니다. 사용자는 접근 중에 충돌이 없도록 옵셋을 수정해야 합니다.픽 포인트를 떠나기
MoveL Offs(pickpoint,0,0,100)픽 포인트에서 물체 좌표계 Z축의 정방향을 따라 100mm 이동합니다. 그리퍼가 픽 포인트를 떠나는 과정에서 충돌이 없도록 옵셋을 수정해야 합니다.배치 포인트로 접근하기
MoveL RelTool(drop,0,0,-100)배치 포인트는 툴 Z축의 부방향을 따라 100mm 이동합니다. 사용자는 접근 프로세스 중에 충돌이 없도록 옵셋을 수정해야 합니다.배치 포인트를 떠나기
MoveL Offs(drop,0,0,100)배치 포인트에서 물체 좌표 Z축의 정방향을 따라 100mm 이동합니다. 떠나는 과정에서 충돌이 없도록 옵셋을 수정해야 합니다.그리퍼 동작을 정의하기
픽 포인트와 배치 포인트로 이동할 때 그리퍼를 켜고 끄는 그리퍼 제어 논리를 추가해야 합니다.
Mech-Viz를 사용하여 경로를 계획하기¶
PROC vision_sample_2()
!**********************************************************
! FUNCTION:Eye to Hand simple pick and place with Mech-Viz
! mechmind, 2022-5-1
!**********************************************************
AccSet 100, 100;
VelSet 100, 5000;
MoveAbsJ Home\NoEOffs,v3000,fine,Gripp1TCP;!move robot home position
MoveL camera_capture,v500,fine,Gripp1TCP;
PoseNum:=0;
!Set ip address of IPC
MM_Init_Socket "127.0.0.1",50000,60;
WaitTime 0.1;
!Set vision recipe
MM_Switch_Model 1,1;
!Run Viz project
MM_Start_Viz 1;
WaitTime 0.1;
!set branch exitport
MM_Set_Branch 1,1;
!get planned path
MM_Get_VizData 2, LastData, PoseNum, VisPosNum, MM_Status;
IF MM_Status<>2100 THEN
Stop;
ENDIF
FOR i FROM 1 TO PoseNum DO
count:=i;
MM_Get_Pose count,P{count},label1{count},speed{count};
ENDFOR
!follow the planned path to pick
FOR j FROM 1 TO PoseNum DO
count:=j;
MoveL p{count},v1000,fine,Gripp1TCP;
IF count=VisPosNum THEN
Stop;
!add object grasping logic here
ENDIF
ENDFOR
!go to drop location
MoveL RelTool(drop,0,0,-100),v1000,z50,Gripp1TCP;
MoveL drop,v500,fine,Gripp1TCP;!drop point
stop;
!add object releasing logic here
MoveL Offs(drop,0,0,100), v1000, fine, Gripp1TCP;
MoveAbsJ Home\NoEOffs,v3000,fine,Gripp1TCP;
RETURN ;
ENDPROC
프로그램 논리 해석¶
이 샘플은 Mech-Viz를 사용하여 비전 가이드로 피킹하고 고정된 배치 지점에 배치합니다.
로봇을 Home 포인트로 이동합니다.
카메라 사진 캡처 위치로 이동합니다.
MM_Init_Socket 을 호출하여 통신에 대해 초기화 설정을 합니다.
Mech-Vision 프로젝트 레시피를 설정하려면 여기에서 MM_Switch_Model을 호출하면 됩니다.
Mech-Viz 프로젝트를 실행하도록 트리거합니다.
Mech-Viz 프로젝트에서 계획한 이동 경로를 획득합니다.
상태 코드가 정상인지 확인하고 상태 코드 반환이 비정상인 경우 사용자는 로봇을 일시 중지하는 등의 조치를 취해야 합니다.
for 루프를 사용하여 획득한 포즈를 변수에 저장합니다.
for 루프를 사용하여 Mech-Viz가 계획한 경로를 따라 로봇을 이동하고 피킹을 완료하고 픽 포인트를 떠납니다.
픽 포인트와 배치 포인트 사이의 중간 영역으로 이동합니다.
배치 포인트로 이동하고 배치합니다.
사용자 정의 부분¶
TCP를 정의하기
Gripp1TCP: 사용자가 tooldata 중의 Gripp1TCP의 값을 수정함으로써 TCP를 조정할 수 있습니다.
티칭 머신을 통해 Home 포인트 설정하기
MoveAbsJ Home, 사용자는 Home 포즈에서 Home 포인트 포즈를 기록해야 합니다.
티칭 머신을 통해 사진 캡처 위치를 설정하기
MoveL camera_capture, 사용자는 camera_capture 포즈에서 사진 캡처 포즈를 기록해야 합니다.
티칭 머신을 통해 전이점을 설정하기
MoveL waypoint1, 로봇이 픽 포인트에서 배치 포인트로 이동할 때 충돌이 발생하지 않도록 하기 위해 하나 또는 여러 개의 전이점을 추가할 수 있습니다.
티칭 머신을 통해 배치 포인트를 설정하기
MoveL drop,사용자는 drop 포즈 변수에 배치 포인트의 포즈를 기록해야 합니다.
그리퍼 동작을 정의하기
픽 포인트와 배치 포인트로 이동할 때 그리퍼를 켜고 끄는 그리퍼 제어 논리를 추가해야 합니다.
배치 전후의 근접 거리를 정의하기
배치 포인트로 접근하기
MoveL RelTool(drop,0,0,-100) 툴 Z축의 부방향을 따라 배치 포인트를 100mm 이동합니다. 접근 중 충돌이 없도록 옵셋을 수정해야 합니다.
배치 포인트를 떠나기
MoveL Offs(drop,0,0,100) 물체 좌표계의 Z축 정방향을 따라 배치 포인트에서 100mm 이동합니다. 떠나는 과정에서 충돌이 없도록 옵셋을 수정해야 합니다.