샘플 프로그램1:MM_S1_Vis_Basic

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

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

프로그램 소개

기능 설명

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

파일 경로

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

RobotWare6 시스템에서는 파일의 접미사는 .mod입니다. RobotWare7 시스템에서는 사용자는 .mod.modx로 소정합니다.

필요한 프로젝트

Mech-Vision 프로젝트

사용 전제 조건

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

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

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

프로그램 설명

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

MODULE MM_S1_Vis_Basic
!--------------------------------------------------------------
! FUNCTION: trigger Mech-Vision project and get vision result
! Mech-Mind, 2023-12-25
!-------------------------------------------------------------
!define local num variables
LOCAL VAR num pose_num:=0;
LOCAL VAR num status:=0;
LOCAL VAR num label:=0;
LOCAL VAR num toolid:=0;
!define local joint&pose variables
LOCAL CONST jointtarget home:=[[0,0,0,0,90,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL CONST jointtarget snap_jps:=[[0,0,0,0,90,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS robtarget camera_capture:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS robtarget pick_waypoint:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS robtarget pickpoint:=[[500,100,300],[0.00226227,-0.99991,-0.00439596,0.0124994],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS robtarget drop_waypoint:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS robtarget drop:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
!define local tooldata variables
LOCAL PERS tooldata gripper1:=[TRUE,[[0,0,0],[1,0,0,0]],[0.001,[0,0,0.001],[1,0,0,0],0,0,0]];

PROC Sample_1()
    !set the acceleration parameters
    AccSet 50, 50;
    !set the velocity parameters
    VelSet 50, 1000;
    !move to robot home position
    MoveAbsJ home\NoEOffs,v3000,fine,gripper1;
    !initialize communication parameters (initialization is required only once)
    MM_Init_Socket "127.0.0.1",50000,300;
    !move to image-capturing position
    MoveL camera_capture,v1000,fine,gripper1;
    !open socket connection
    MM_Open_Socket;
    !trigger NO.1 Mech-Vision project
    MM_Start_Vis 1,0,2,snap_jps;
    !get vision result from NO.1 Mech-Vision project
    MM_Get_VisData 1,pose_num,status;
    !check whether vision result has been got from Mech-Vision successfully
    IF status<>1100 THEN
        !add error handling logic here according to different error codess
        !e.g.: status=1003 means no point cloud in ROI
        !e.g.: status=1002 means no vision result
        Stop;
    ENDIF
    !close socket connection
    MM_Close_Socket;
    !save first vision point data to local variables
    MM_Get_Pose 1,pickpoint,label,toolid;
    !move to intermediate waypoint of picking
    MoveJ pick_waypoint,v1000,z50,gripper1;
    !move to approach waypoint of picking
    MoveL RelTool(pickpoint,0,0,-100),v1000,fine,gripper1;
    !move to picking waypoint
    MoveL pickpoint,v300,fine,gripper1;
    !add object grasping logic here, such as "setdo DO_1, 1;"
    Stop;
    !move to departure waypoint of picking
    MoveL RelTool(pickpoint,0,0,-100),v1000,fine,gripper1;
    !move to intermediate waypoint of placing
    MoveJ drop_waypoint,v1000,z50,gripper1;
    !move to approach waypoint of placing
    MoveL RelTool(drop,0,0,-100),v1000,fine,gripper1;
    !move to placing waypoint
    MoveL drop,v300,fine,gripper1;
    !add object releasing logic here, such as "setdo DO_1, 0;"
    Stop;
    !move to departure waypoint of placing
    MoveL RelTool(drop,0,0,-100),v1000,fine,gripper1;
    !move back to robot home position
    MoveAbsJ home\NoEOffs,v3000,fine,gripper1;
ENDPROC
ENDMODULE

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

sample1

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

워크플로 코드와 설명

변수를 정의하기

!define local num variables
LOCAL VAR num pose_num:=0;
LOCAL VAR num status:=0;
LOCAL VAR num label:=0;
LOCAL VAR num toolid:=0;
!define local joint&pose variables
LOCAL CONST jointtarget home:=[[0,0,0,0,90,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL CONST jointtarget snap_jps:=[[0,0,0,0,90,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS robtarget camera_capture:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS robtarget pick_waypoint:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS robtarget pickpoint:=[[500,100,300],[0.00226227,-0.99991,-0.00439596,0.0124994],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS robtarget drop_waypoint:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS robtarget drop:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
!define local tooldata variables
LOCAL PERS tooldata gripper1:=[TRUE,[[0,0,0],[1,0,0,0]],[0.001,[0,0,0.001],[1,0,0,0],0,0,0]];

국부 변수를 정의합니다. 위 국부 변수들은 분 프로그램 내에서만 유효합니다.

사용자는 티칭을 통해 Home 포인트(Home 변수), Mech-Vision 프로젝트에 전송된 포즈(snap_jps 변수), 이미지 캡처 위치(camera_capture 변수), 피킹 웨이포인트(pick_waypoint 변수), 배치 웨이포인트(drop_waypoint 변수), 배치 웨이포인트(drop 변수)를 미리 설정해야 하며 툴 데이터(gripper1 변수)를 설정합니다.

자세한 설명은 캘리브레이션 매뉴얼 중의 티치 펜던트를 통해 "캘리브레이션 시작점을 설정하기" 내용을 참조하세요.

가속도와 속도를 설정하기

!set the acceleration parameters
AccSet 50, 50;
!set the velocity parameters
VelSet 50, 1000;
  • AccSet 50, 50: 가속도를 정상 값의 50%로 제한하고 가속률을 정상 값의 50%로 제한합니다.

  • VelSet 50, 1000: 속도를 프로그래밍 속도의 50% 로 설정하고, 최대 TCP 속도를 1000mm/s 로 설정합니다.

Home포인트로 이동하기

!move to robot home position
MoveAbsJ home\NoEOffs,v3000,fine,gripper1;
  • MoveAbsJ: ABB 로봇의 절대 위치 이동 명령어로, 로봇의 각 관절 축이 지정된 위치로 개별적으로 이동함을 의미합니다.

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

  • \NoEOffs: 이동이 외부 축의 영향을 받지 않음을 의미합니다.

  • v3000: 로봇의 속도는 3000mm/s입니다.

  • fine: 지정된 위치로 정확하게 이동합니다.

  • gripper1: 로봇이 이동 시 사용하는 말단장치 번호입니다.

따라서 전체 명령어는 로봇이 정확하게 설정된 Home 포인트로 이동하며 외부 축의 영향을 받지 않습니다.(속도: 3000mm/s)

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

!initialize communication parameters (initialization is required only once)
MM_Init_Socket "127.0.0.1",50000,300;

로봇이 MM_Init_Socket명령어를 통해 통신 대상(IPC)의 IP 주소(127.0.0.1), 포트 번호(50000), 타임아웃 대기시간(300초)을 지정합니다.

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

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

!move to image-capturing position
MoveL camera_capture,v1000,fine,gripper1;
  • MoveL: ABB로봇의 직선 이동 명령어로, 로봇이 직선 경로를 따라 지정된 위치로 이동함을 의미합니다.

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

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

통신 구축하기

!open socket connection
MM_Open_Socket;

로봇은 MM_Open_Socket명령어를 통해 비전 시스템과 TCP 프로토콜 통신 연결을 설정합니다.

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

!trigger NO.1 Mech-Vision project
MM_Start_Vis 1,0,2,snap_jps;
  • MM_Start_Vis:Mech-Vision 프로젝트 실행을 트리거하는 명령어.

  • 1:Mech-Vision 프로젝트 번호.

  • 0: 이 Mech-Vision 프로젝트는 모든 비전 포인토를 반환할 것으로 예상됩니다.

  • 2: 로봇의 현재 플랜지 포즈를 Mech-Vision으로 전송합니다.

  • snap_jps: 사용자가 정의한 관절 각도 데이터로, 본 샘플에서는 해당 관절 각도 데이터가 실제로 사용되지 않지만 반드시 설정해야 합니다.

따라서, 이 명령어는 로봇이 비전 시스템에 실행 번호 1인 Mech-Vision 프로젝트를 트리거하여 Mech-Vision 프로젝트가 모든 비전 포인트를 반환할 것으로 예상하는 것을 나타냅니다.

비전 결과 획득하기

!get vision result from NO.1 Mech-Vision project
MM_Get_VisData 1,pose_num,status;
  • MM_Get_VisData: 비전 결과를 획득하는 명령어.

  • 1:Mech-Vision 프로젝트 번호.

  • pose_num: 이 변수는 획득한 비전 포인트의 개수를 저장하는 것입니다.

  • status: 이 변수는 명령어 실행 상태 코드를 저장하는 것입니다.

따라서, 이 명령어는 로봇이 Mech-Vision 프로젝트 1이 반환한 비전 결과를 획득하는 명령어입니다.

반환된 비전 결과는 로봇의 메모리에 저장되므로, 사용자는 직접적으로 비전 결과를 얻을 수 없으며, 이후 "비전 결과 저장"을 통해서만 접근할 수 있습니다.
!check whether vision result has been got from Mech-Vision successfully
IF status<>1100 THEN
    !add error handling logic here according to different error codess
    !e.g.: status=1003 means no point cloud in ROI
    !e.g.: status=1002 means no vision result
    Stop;
ENDIF

상태 코드 status가 1100일 경우 로봇이 모든 비전 결과를 성공적으로 획득합니다. 그렇지 않으면 비전 시스템이 오류사 발생합니다. 사용자는 구체적인 비정상 상태 코드에 따라 적절한 처리를 수행할 수 있습니다.

통신을 종료하기

!close socket connection
MM_Close_Socket;

로봇은 MM_Close_Socket 명령어를 통해 비전 시스템과 TCP 프로토콜 통신 연결을 끊깁니다.

비전 결과를 저장하기

!save first vision point data to local variables
MM_Get_Pose 1,pickpoint,label,toolid;
  • MM_Get_Pose:비전 결과를 저장하는 명령어.

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

  • pickpoint: 이 변수는 첫 번째 비전 포인트의 말단장치 포즈, 즉 피킹 웨이포인트의 말단장치 포즈를 저장하는 것입니다.

  • label: 이 변수는 첫 번째 비전 포인트의 레이블을 저장하는 것입니다.

  • toolid: 이 변수는 첫 번째 비전 포인트의 말단장치 번호를 저장하는 것입니다.

따라서, 이 명령어는 첫 번째 비전 포인트의 TCP 포즈, 라벨 및 말단 장치 번호를 각각 지정된 변수로 전송하는 명령어입니다.

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

!move to intermediate waypoint of picking
MoveJ pick_waypoint,v1000,z50,gripper1;
  • MoveJ: ABB로봇의 관절 각도 이동 명령어로, 로봇이 곡선 경로를 따라 지정된 위치로 이동함을 의미합니다.

  • pick_waypoint: 로봇이 이동할 목표 위치를 지정하며, 이는 중간 웨이포인트를 의미합니다.

  • z50: 회전 반경는 50mm입니다.

따라서 이 전체 명령어는 로봇이 관절 각도 이동 방식을 사용하여 이미지 캡처 포인트와 피킹 접근 웨이포인트 사이의 특정 중간 웨이포인트로 이동합니다. 속도는 1000mm/s이고 회전 반경는 50mm입니다.

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

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

!move to approach waypoint of picking
MoveL RelTool(pickpoint,0,0,-100),v1000,fine,gripper1;
  • MoveL: ABB로봇의 직선 이동 명령어로, 로봇이 직선 이동함을 의미합니다.

  • RelTool(pickpoint,0,0,-100): 로봇이 이동할 목표 위치를 지정합니다. 여기서 RelTool 은 툴 좌표계 기준으로 이동함을 의미합니다. pickpoint(픽 포인트)는 툴 좌표계의 기준점이며, "0,0,-100" 은 pickpoint를 기준으로 Z축 음의 방향으로 100mm 이동하는 것을 나타냅니다. 즉, 로봇이 피킹 웨이포인트 위쪽 100mm 위치로 이동하여 피킹 접근 웨이포인트에 도달합니다.

따라서, 이 명령어는 로봇이 피킹 웨이포인트 위로 100mm 직선 이동하는 것을 나타냅니다. 속도는 1000mm/s입니다.

피킹 접근 포인트 추가는 로봇이 이동 중에 시나리오 물체(예: 빈)와 충돌하는 것을 방지할 수 있습니다. 사용자는 실제 시나리오에 따라 여기의 Z축 음의 방향 오프셋 값을 조정하여 접근 과정에서 충돌이 발생하지 않도록 설정할 수 있습니다.

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

!move to picking waypoint
MoveL pickpoint,v300,fine,gripper1;

로봇은 직선 이동 방식으로 피킹 접근 포인트에서 피킹 포인트로 이동합니다.

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

!add object grasping logic here, such as "setdo DO_1, 1;"
Stop;

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

Stop는 프로그램 실행이 일시정지하는 의미입니다. 사용자가 DO 명령어를 설정하는 문장을 추가한 경우, 여기에서 Stop 문장을 삭제할 수 있습니다.

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

!move to departure waypoint of picking
MoveL RelTool(pickpoint,0,0,-100),v1000,fine,gripper1;

로봇이 피킹 웨이포인트 위로 100mm 이동합니다. 즉 피킹 시 출발(departure) 웨이포인트로 이동합니다.

피킹 출발 웨이포인트를 추가는 로봇이 이동 중에 시나리오 물체(예: 빈)와 충돌하는 것을 방지할 수 있습니다. 사용자는 실제 시나리오에 따라 여기의 Z축 음의 방향 오프셋 값을 조정하여 출발 과정에서 충돌이 발생하지 않도록 설정할 수 있습니다.

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

!move to intermediate waypoint of placing
MoveJ drop_waypoint,v1000,z50,gripper1;

로봇이 피킹 시 출발 웨이포인트와 배치의 접근 웨이포인트 사이의 특정 중간점으로 이동하합니다.

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

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

!move to approach waypoint of placing
MoveL RelTool(drop,0,0,-100),v1000,fine,gripper1;

로봇이 배치 웨이포인트 위로 100mm 이동합니다. 즉 배치 접근 웨이포인트로 이동합니다.

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

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

!move to placing waypoint
MoveL drop,v300,fine,gripper1;

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

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

!add object releasing logic here, such as "setdo DO_1, 0;"
Stop;

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

Stop는 프로그램 실행이 일시정지하는 의미입니다. 사용자가 DO 명령어를 설정하는 문장을 추가한 경우, 여기에서 Stop 문장을 삭제할 수 있습니다.

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

!move to departure waypoint of placing
MoveL RelTool(drop,0,0,-100),v1000,fine,gripper1;

로봇이 배치 웨이포인트 위로 100mm 이동합니다. 즉 배치 출발 웨이포인트로 이동합니다.

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

Home 포인트로 이동하기

!move back to robot home position
MoveAbsJ home\NoEOffs,v3000,fine,gripper1;

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

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

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

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

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