샘플 프로그램2:MM_S2_Vis_Basic

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

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

프로그램 소개

기능 설명

로봇이 Mech-Viz 프로젝트 실행을 트리거하고 경로 계획 결과를 획득하여 피킹 및 배치 작업을 수행합니다.

파일 경로

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

필요한 프로젝트

Mech-Vision와 Mech-Viz 프로젝트

사용 전제 조건

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

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

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

프로그램 설명

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

   1:  !-------------------------------- ;
   2:  !FUNCTION: trigger Mech-Viz ;
   3:  !project and get planned path ;
   4:  !Mech-Mind, 2023-12-25 ;
   5:  !-------------------------------- ;
   6:   ;
   7:  !set current uframe NO. to 0 ;
   8:  UFRAME_NUM=0 ;
   9:  !set current tool NO. to 1 ;
  10:  UTOOL_NUM=1 ;
  11:  !move to robot home position ;
  12:J P[1] 100% FINE    ;
  13:  !initialize communication ;
  14:  !parameters(initialization is ;
  15:  !required only once) ;
  16:  CALL MM_INIT_SKT('8','127.0.0.1',50000,5) ;
  17:  !move to image-capturing position ;
  18:L P[2] 1000mm/sec FINE    ;
  19:  !trigger Mech-Viz project ;
  20:  CALL MM_START_VIZ(2,10) ;
  21:  !get planned path, 1st argument ;
  22:  !(1) means getting pose in JPs ;
  23:  CALL MM_GET_VIZ(1,51,52,53) ;
  24:  !check whether planned path has ;
  25:  !been got from Mech-Viz ;
  26:  !successfully ;
  27:  IF R[53]<>2100,JMP LBL[99] ;
  28:  !save waypoints of the planned ;
  29:  !path to local variables one ;
  30:  !by one ;
  31:  CALL MM_GET_JPS(1,60,70,80) ;
  32:  CALL MM_GET_JPS(2,61,71,81) ;
  33:  CALL MM_GET_JPS(3,62,72,82) ;
  34:  !follow the planned path to pick ;
  35:  !move to approach waypoint ;
  36:  !of picking ;
  37:J PR[60] 50% FINE    ;
  38:  !move to picking waypoint ;
  39:J PR[61] 10% FINE    ;
  40:  !add object grasping logic here, ;
  41:  !such as "DO[1]=ON" ;
  42:  PAUSE ;
  43:  !move to departure waypoint ;
  44:  !of picking ;
  45:J PR[62] 50% FINE    ;
  46:  !move to intermediate waypoint ;
  47:  !of placing ;
  48:J P[3] 50% CNT100    ;
  49:  !move to approach waypoint ;
  50:  !of placing ;
  51:L P[4] 1000mm/sec FINE Tool_Offset,PR[2]    ;
  52:  !move to placing waypoint ;
  53:L P[4] 300mm/sec FINE    ;
  54:  !add object releasing logic here, ;
  55:  !such as "DO[1]=OFF" ;
  56:  PAUSE ;
  57:  !move to departure waypoint ;
  58:  !of placing ;
  59:L P[4] 1000mm/sec FINE Tool_Offset,PR[2]    ;
  60:  !move back to robot home position ;
  61:J P[1] 100% FINE    ;
  62:  END ;
  63:   ;
  64:  LBL[99:vision error] ;
  65:  !add error handling logic here ;
  66:  !according to different ;
  67:  !error codes ;
  68:  !e.g.: status=2038 means no ;
  69:  !point cloud in ROI ;
  70:  PAUSE ;

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

sample2

아래 표는 위 프로그램에 대한 설명입니다. 명령어 이름의 링크를 클릭하면 해당 명령의 상세 설명을 확인할 수 있습니다.

워크플로 코드와 설명

좌표계 설정

   7:  !set current uframe NO. to 0 ;
   8:  UFRAME_NUM=0 ;
   9:  !set current tool NO. to 1 ;
  10:  UTOOL_NUM=1 ;
  • UFRAME_NUM=0: 선택한 사용자 좌표계 번호를 0으로 설정합니다.(세계 좌표계)

  • UFRAME_NUM=1: 선택한 툴 좌표계 번호를 1으로 설정합니다.(사용자는 1번 툴 좌표계를 미리 설정해야 합니다)

위의 두 명령어는 현재 선택한 툴 좌표계와 사용자 좌표계를 설정한다는 것입니다.

Home포인트로 이동하기

  11:  !move to robot home position ;
  12:J P[1] 100% FINE    ;
  • J: 로봇의 관절 각도 이동 명령어로, 로봇이 곡선 경로를 따라 지정된 위치로 이동함을 의미합니다.

  • P[1]: 로봇이 이동할 목표 위치를 지정하며, 이는 티칭된 Home포인트를 의미합니다. Home포인트는 일반적으로 안전한 위치를 의미하며, 로봇이 작업물 및 주변 장비와 충분한 거리를 유지해야 합니다.

  • 100%: 상대적 최대 이동 속도의 백분율입니다.

  • FINE: 로봇이 목표 위치에 도달할 때 잠시 정지한 후, 다음 목표 위치로 이동합니다.

따라서, 이 명령어는 로봇이 관절 각도 이동 방식을 사용하여 티칭된 Home포인트로 이동하는 명령어입니다.

사용자는 티칭을 통해 Home 포인트 (P[1])를 미리 설정해야 합니다. 자세한 설명은 캘리브레이션 매뉴얼 중의 티치 펜던트를 통해 캘리브레이션 시작점을 설정하기 내용을 참조하세요.

통신 파라미터를 초기화하기

  13:  !initialize communication ;
  14:  !parameters(initialization is ;
  15:  !required only once) ;
  16:  CALL MM_INIT_SKT('8','127.0.0.1',50000,5) ;
  • MM_INIT_SKT:통신을 초기화하는 명령어.

  • '8': 로봇의 포트 번호.

  • '127.0.0.1': IPC의 IP 주소.

  • 50000: IPC의 포트 번호.

  • 5: 통신 타임아웃 대기시간은 5분입니다.

따라서 전체 명령어는 로봇이 MM_INIT_SKT 명령어를 통해 통신 대상(IPC)의 IP 주소, 포트 번호, 타임아웃 대기시간을 지정함으로써 비전 시스템 간의 연결을 설정합니다.

사용자는 실제 상황에 맞게 이 부분의 IPC IP 주소와 포트 번호를 수정하여, 비전 시스템에서 설정한 파라미터와 일치하도록 해야 합니다.

카메라 이미지 캡처 위치로 이동하기

  17:  !move to image-capturing position ;
  18:L P[2] 1000mm/sec FINE    ;
  • L: 로봇의 직선 이동 명령어로, 로봇이 직선 경로를 따라 지정된 위치로 이동함을 의미합니다.

  • P[2]: 로봇이 이동할 목표 위치를 지정하며, 이는 티칭된 카메라 사진 캡처 위치를 의미합니다. 사진 캡처 포인트는 카메라가 이미지를 획득할 때 로봇의 위치를 ​​의미합니다. 이 위치에서는 로봇 팔이 카메라 시야를 가리지 않아야 합니다.

따라서 전체 명령어는 로봇이 직선 운동으로 설정된 이미지 캡처 포인트로 이동합니다(속도: 1000mm/sec).

티칭을 통해 카메라 사진 캡처 위치(P[2])를 미리 설정해야 합니다. 자세한 설명은 캘리브레이션 매뉴얼 중의 티치 펜던트를 통해 캘리브레이션 시작점을 설정하기 내용을 참조하세요.

Mech-Viz 프로젝트 실행을 트리거하기

  19:  !trigger Mech-Viz project ;
  20:  CALL MM_START_VIZ(2,10) ;
  • MM_START_VIZ:Mech-Viz 프로젝트 실행을 트리거하는 명령어.

  • 2: PR[10] 위치 레지스터로 표시된 관절 각도 데이터를 Mech-Viz 프로젝트에 전송합니다.

  • 10: 번호가 10인 위치 레지스터로 PR[10]입니다. 이 레지스터는 사용자가 자체 정의 관절 각도 데이터를 저장하는 데 사용됩니다.(티칭을 통해 미리 설정해야 합니다). 피킹 경로를 계획할 때, Mech-Viz 프로젝트 중의 시뮬레이션된 로봇은 해당 관절 각도에서 시작하여 첫 번째 웨이포인트로 이동합니다.

따라서, 이 명령어는 로봇이 비전 시스템을 트리거하여 Mech-Viz 프로젝트를 실행한 후, Mech-Vision가 출력한 비전 결과를 기반으로 Mech-Viz는 로봇의 피킹 경로를 계획한다는 것을 나타냅니다.

계획 경로를 획득하기

  21:  !get planned path, 1st argument ;
  22:  !(1) means getting pose in JPs ;
  23:  CALL MM_GET_VIZ(1,51,52,53) ;
  • MM_GET_VIZ: Mech-Viz가 계획한 경로를 획득하는 명령어.

  • 1: 획득한 웨이포인트의 포즈 유형을 관절 각도(JPs)로 지정합니다.

  • 51: 번호가 51인 데이터 레지스터 R[51]입니다. 이 레지스터는 비전 시스템이 반환한 웨이포인트의 개수를 저장할 데 사용됩니다.

  • 52: 번호가 52인 데이터 레지스터 R[52]입니다. 이 레지스터는 비전 이동 웨이포인트(피킹 웨이포인트)의 경로 내 위치 번호를 저장합니다.

  • 53: 번호가 53인 데이터 레지스터 R[53]입니다. 이 레지스터는 명령어 실행의 상태 코드를 저장하는 것입니다.

따라서, 이 명령어는 로봇이 Mech-Viz 프로젝트가 반환한 계회된 경로를 획득하는 명령어입니다.

반환된 계획 경로는 로봇의 메모리에 저장되며, 직접적으로 얻을 수 없습니다. 후속 작업인 "계획 경로를 저장하기"을 통해서만 접근할 수 있습니다.
  24:  !check whether planned path has ;
  25:  !been got from Mech-Viz ;
  26:  !successfully ;
  27:  IF R[53]<>2100,JMP LBL[99] ;
  • “IF A, JMP B”: 조건 A가 성립하면, 프로그램은 B 위치로 점프하여 실행됩니다.

  • <>: 같지 않음.

따라서, 위의 문장은 상태 코드 R[53]가 2100일 경우 로봇이 모든 계획 경로를 성공적으로 획득했다는 것을 의미하며, 그렇지 않으면 비전 시스템에 이상이 발생한 것이며, 프로그램은 LBL[99] 위치로 점프하여 실행합니다. 다음에는 LBL[99] 위치의 코드입니다.

  64:  LBL[99:vision error] ;
  65:  !add error handling logic here ;
  66:  !according to different ;
  67:  !error codes ;
  68:  !e.g.: status=2038 means no ;
  69:  !point cloud in ROI ;
  70:  PAUSE ;

사용자는 구체적인 비정상 상태 코드에 따라 적절한 처리를 수행할 수 있습니다. 이 샘플에서는 모든 비정상적인 상태 코드에 대해 같은 처리를 수행하며, 즉 PAUSE 명령어를 사용하여 프로그램 실행을 종료합니다.

계획 경로를 저장하기

  28:  !save waypoints of the planned ;
  29:  !path to local variables one ;
  30:  !by one ;
  31:  CALL MM_GET_JPS(1,60,70,80) ;
  32:  CALL MM_GET_JPS(2,61,71,81) ;
  33:  CALL MM_GET_JPS(3,62,72,82) ;
  • MM_GET_JPS: 계획된 경로를 저장하는 명령어.

  • 1: 첫 번째 웨이포인트가 저장됩니다.

  • 60: 번호가 60인 위치 레지스터 PR[60]입니다. 이 레지스터는 첫 번째 웨이포인트에 해당하는 관절 각도를 저장하는 것입니다.

  • 70: 번호가 70인 데이터 레지스터 R[70]입니다. 이 레지스터는 첫 번째 웨이포인트에 해당하는 레이블을 저장하는 것입니다.

  • 80: 번호가 80인 데이터 레지스터 R[80]입니다. 이 레지스터는 첫 번째 웨이포인트에 해당하는 말단장치 번호를 저장하는 것입니다.

따라서, "CALL MM_GET_JPS(1,60,70,80)"는 첫 번째 웨이포인트의 관절 각도, 레이블 및 말단장치 번호를 지정된 레지스터에 저장하는 명령어입니다.

이 샘플에서는 Mech-Viz가 계획한 경로가 세 개의 웨이포인트로 구성됩니다: 첫 번째는 피킹 접근 웨이포인트(PR[60]), 두 번째는 피킹 웨이포인트(PR[61]), 세 번째는 피킹 출발 웨이포인트(PR[62])입니다. 사용자는 실제 Mech-Viz 프로젝트를 고려하여 계획된 경로를 저장해야 합니다.

피킹 접근 웨이포인트로 이동하기

  34:  !follow the planned path to pick ;
  35:  !move to approach waypoint ;
  36:  !of picking ;
  37:J PR[60] 50% FINE    ;

로봇이 피킹 접근 웨이포인트(PR[60]의 위치)로 이동합니다.

픽 포인트로 이동하기

  38:  !move to picking waypoint ;
  39:J PR[61] 10% FINE    ;

로봇이 피킹 웨이포인트(PR[61]의 위치)로 이동합니다.

“DO 설정”을 통해 피킹을 수행하기

  40:  !add object grasping logic here, ;
  41:  !such as "DO[1]=ON" ;
  42:  PAUSE ;

로봇이 피킹 웨이포인트로 이동한 후, DO 명령어(예: "DO[1]=ON")를 설정하여 말단 장치를 제어하고 피킹를 수행합니다. 사용자는 실제 상황에 맞게 DO 설정 작업을 추가해야 합니다.

PAUSE는 프로그램의 실행을 종료하는 것을 나타냅니다. 사용자가 DO 명령어를 설정하는 문장을 추가한 경우, 여기에서 PAUSE 문장을 삭제할 수 있습니다.

피킹 출발 웨이포인트로 이동하기

  43:  !move to departure waypoint ;
  44:  !of picking ;
  45:J PR[62] 50% FINE    ;

로봇이 피킹 출발 웨이포인트(PR[62]의 위치)로 이동합니다.

중간 웨이포인트로 이동하기

  46:  !move to intermediate waypoint ;
  47:  !of placing ;
  48:J P[3] 50% CNT100    ;
  • P[3]: 로봇이 이동할 목표 위치를 지정하며, 이는 중간 웨이포인트를 의미합니다.

  • CNT: 로봇이 목표 위치에 접근하지만 그 위치에서 멈추지 않습니다. 대신 다음 위치로 계속 이동합니다. 그 뒤의 숫자는 로봇과 목표 위치 간의 가까운 정도를 나타냅니다. 숫자가 클수록 목표 위치에서 더 멀리 떨어져 있습니다.

따라서 이 전체 명령어는 로봇이 관절 각도 이동 방식을 사용하여 피킹 출발 웨이포인트와 배치 접근 웨이포인트 사이의 특정 중간점으로 이동합니다.

  • 중간 웨이포인트를 추가하면 로봇이 부드럽게 이동할 수 있으며, 불필요한 충돌을 방지할 수 있습니다. 사용자는 실제 상황에 맞게 여러 개의 중간 웨이포인트를 추가할 수 있습니다.

  • 사용자는 티칭을 통해 중간 웨이포인트(P[3])를 미리 설정해야 합니다. 자세한 설명은 캘리브레이션 매뉴얼 중의 티치 펜던트를 통해 캘리브레이션 시작점을 설정하기 내용을 참조하세요.

배치 시 접근 웨이포인트로 이동하기

  49:  !move to approach waypoint ;
  50:  !of placing ;
  51:L P[4] 1000mm/sec FINE Tool_Offset,PR[2]    ;
  • P[4]: 배치 웨이포인트. 티칭을 통해 배치 웨이포인트(P[4])를 미리 설정해야 합니다. 자세한 설명은 캘리브레이션 매뉴얼 중의 티치 펜던트를 통해 캘리브레이션 시작점을 설정하기 내용을 참조하세요.

  • "Tool_Offset, PR[2]": 로봇이 배치 웨이포인트(P[4])를 기준으로 지정된 PR[2] 레지스터 값을 따라 오프셋을 적용하여 이동합니다. 여기서는 PR[2]의 Z축 값만 설정하면 됩니다. 예를 들어, Z축 값을 -100으로 설정하고 다른 값은 0으로 설정하면, 이는 배치 웨이포인트 기준 Z축 음의 방향으로 100mm 위치(즉, 로봇이 배치 웨이포인트 위 100mm까지 이동하여 배치 접근 웨이포인트에 도달함)를 의미합니다.

배치 접근 웨이포인트를 추가하면 로봇이 이동 과정에 시나리오 물체(예: 빈)와 충돌하는 것을 방지할 수 있습니다. 사용자는 실제 시나리오에 따라 PR[2] 값을 조정하여 접근 과정에서 충돌이 발생하지 않도록 설정할 수 있습니다.

배치 웨이포인트로 이동하기

  52:  !move to placing waypoint ;
  53:L P[4] 300mm/sec FINE    ;

로봇이 배치 접근 웨이포인트에서 배치 포인트로 이동합니다.

“DO 설정”을 통해 배치를 수행하기

  54:  !add object releasing logic here, ;
  55:  !such as "DO[1]=OFF" ;
  56:  PAUSE ;

로봇이 배치 웨이포인트로 이동한 후, DO 명령어(예: "DO[1]=OFF")를 설정하여 말단 장치를 제어하고 배치를 수행합니다. 사용자는 실제 상황에 맞게 DO 설정 작업을 추가해야 합니다.

PAUSE는 프로그램의 실행을 종료하는 것을 나타냅니다. 사용자가 DO 명령어를 설정하는 문장을 추가한 경우, 여기에서 PAUSE 문장을 삭제할 수 있습니다.

배치 출발 웨이포인트로 이동하기

  57:  !move to departure waypoint ;
  58:  !of placing ;
  59:L P[4] 1000mm/sec FINE Tool_Offset,PR[2]    ;

로봇이 배치 웨이포인트 위로 어딘가에 이동합니다. 즉 배치 출발(departure) 웨이포인트로 이동합니다.

배치 출발 웨이포인트를 추가하면 로봇이 이동 과정에 시나리오 물체(예: 빈)와 충돌하는 것을 방지할 수 있습니다. 사용자는 실제 시나리오에 따라 PR[2] 값을 조정하여 출발 과정에서 충돌이 발생하지 않도록 설정할 수 있습니다.

Home포인트로 이동하기

  60:  !move back to robot home position ;
  61:J P[1] 100% FINE    ;

로봇이 배치 출발 웨이포인트에서 다시 Home포인트로 이동합니다.

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

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

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

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