샘플 프로그램2:MM_S2_Vis_Basic
프로그램 소개
기능 설명 |
로봇이 Mech-Viz 프로젝트 실행을 트리거하고 경로 계획 결과를 획득하여 피킹 및 배치 작업을 수행합니다. |
||
파일 경로 |
Mech-Vision 및 Mech-Viz의 설치 디렉토리로 이동하여
|
||
필요한 프로젝트 |
Mech-Vision와 Mech-Viz 프로젝트 |
||
사용 전제 조건 |
|
이 샘플 프로그램은 참고용으로 제공됩니다. 사용자는 실제 상황에 맞춰 이 내용을 바탕으로 수정해야 하며, 해당 프로그램을 그대로 사용하지 않도록 하십시오. |
프로그램 설명
다음에는 MM_S2_Vis_Basic 샘플 프로그램의 코드와 관련 설명입니다.
MODULE MM_S2_Viz_Basic
!----------------------------------------------------------
! FUNCTION: trigger Mech-Viz project and get planned path
! Mech-Mind, 2023-12-25
!----------------------------------------------------------
!define local num variables
LOCAL VAR num pose_num:=0;
LOCAL VAR num status:=0;
LOCAL VAR num toolid{5}:=[0,0,0,0,0];
LOCAL VAR num vis_pose_num:=0;
LOCAL VAR num count:=0;
LOCAL VAR num label{5}:=[0,0,0,0,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 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]];
LOCAL PERS jointtarget jps{5}:=
[
[[0,0,0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
[[0,0,0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
[[0,0,0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
[[0,0,0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
[[0,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_2()
!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 Mech-Viz project
MM_Start_Viz 2,snap_jps;
!get planned path, 1st argument (1) means getting pose in JPs
MM_Get_VizData 1, pose_num, vis_pose_num, status;
!check whether planned path has been got from Mech-Viz successfully
IF status <> 2100 THEN
!add error handling logic here according to different error codes
!e.g.: status=2038 means no point cloud in ROI
Stop;
ENDIF
!close socket connection
MM_Close_Socket;
!save waypoints of the planned path to local variables one by one
MM_Get_Jps 1,jps{1},label{1},toolid{1};
MM_Get_JPS 2,jps{2},label{2},toolid{2};
MM_Get_JPS 3,jps{3},label{3},toolid{3};
!follow the planned path to pick
!move to approach waypoint of picking
MoveAbsJ jps{1},v1000,fine,gripper1;
!move to picking waypoint
MoveAbsJ jps{2},v300,fine,gripper1;
!add object grasping logic here, such as "setdo DO_1, 1;"
Stop;
!move to departure waypoint of picking
MoveAbsJ jps{3},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
위 샘플 프로그램 코드에 해당하는 워크플로는 아래 그림에 표시되어 있습니다.

아래 표는 위 프로그램에 대한 설명입니다. 명령어 이름의 링크를 클릭하면 해당 명령의 상세 설명을 확인할 수 있습니다.
워크플로 | 코드와 설명 | ||
---|---|---|---|
변수를 정의하기 |
국부 변수를 정의합니다. 위 국부 변수들은 분 프로그램 내에서만 유효합니다. 사용자는 티칭을 통해 Home 포인트(Home 변수), Mech-Viz 프로젝트에 전송된 포즈(snap_jps 변수), 이미지 캡처 위치(camera_capture 변수), 배치 웨이포인트(drop_waypoint 변수), 배치 웨이포인트(drop 변수)를 미리 설정해야 하며 툴 데이터(gripper1 변수)를 설정합니다.
|
||
가속도와 속도를 설정하기 |
|
||
Home포인트로 이동하기 |
따라서 전체 명령어는 로봇이 정확하게 설정된 Home 포인트로 이동하며 외부 축의 영향을 받지 않습니다.(속도: 3000mm/s) |
||
통신 파라미터를 초기화하기 |
로봇이 MM_Init_Socket명령어를 통해 통신 대상(IPC)의 IP 주소(127.0.0.1), 포트 번호(50000), 타임아웃 대기시간(300초)을 지정합니다.
|
||
카메라 이미지 캡처 위치로 이동하기 |
따라서 전체 명령어는 로봇이 직선 운동으로 정확하게 설정된 이미지 캡처 포인트로 이동합니다(속도: 1000mm/s). |
||
통신 구축 |
로봇은 MM_Open_Socket명령어를 통해 비전 시스템과 TCP 프로토콜 통신 연결을 설정합니다. |
||
Mech-Viz 프로젝트 실행을 트리거하기 |
따라서, 이 명령어는 로봇이 비전 시스템을 트리거하여 Mech-Viz 프로젝트를 실행한 후, Mech-Vision가 출력한 비전 결과를 기반으로 Mech-Viz는 로봇의 피킹 경로를 계획한다는 것을 나타냅니다. |
||
계획 경로를 획득하기 |
따라서, 이 명령어는 로봇이 Mech-Viz 프로젝트가 반환한 계회된 경로를 획득하는 명령어입니다.
상태 코드 status가 2100일 경우 로봇이 계획 경로를 성공적으로 획득합니다. 그렇지 않으면 비전 시스템이 오류사 발생합니다. 사용자는 구체적인 비정상 상태 코드에 따라 적절한 처리를 수행할 수 있습니다. |
||
통신을 종료하기 |
로봇은 MM_Close_Socket 명령어를 통해 비전 시스템과 TCP 프로토콜 통신 연결을 끊깁니다. |
||
계획 경로를 저장하기 |
따라서, “MM_Get_JPS 1,jps{1},label{1},toolid{1};”는 첫 번째 웨이포인트의 관절 각도, 레이블 및 말단장치 번호를 지정된 변수에 저장하는 명령어입니다.
|
||
피킹 접근(approach) 웨이포인트로 이동하기 |
로봇이 피킹 접근 웨이포인트(jps{1}의 위치)로 이동합니다. |
||
피킹 웨이포인트로 이동하기 |
로봇이 피킹 웨이포인트(jps{2}의 위치)로 이동합니다. |
||
“DO 설정”을 통해 피킹을 수행하기 |
로봇이 피킹 웨이포인트로 이동한 후, DO 명령어(예: “setdo DO_1, 1;”)를 설정하여 말단 장치를 제어하고 피킹를 수행합니다. 사용자는 실제 상황에 맞게 DO 설정 작업을 추가해야 합니다.
|
||
피킹 시 출발(departure) 웨이포인트로 이동하기 |
로봇이 피킹 출발 웨이포인트(jps{3}의 위치)로 이동합니다. |
||
중간 웨이포인트로 이동하기 |
따라서 이 전체 명령어는 로봇이 관절 각도 이동 방식을 사용하여 피킹 출발 웨이포인트와 배치 접근 웨이포인트 사이의 특정 중간 웨이포인트로 이동합니다. 속도는 1000mm/s이고 회전 반경는 50mm입니다.
|
||
배치 접근 웨이포인트로 이동하기 |
따라서 전체 명령어는 로봇이 배치 웨이포인트 위로 100mm 이동한다는 것입니다. 즉 배치 접근 웨이포인트로 이동합니다.
|
||
배치 웨이포인트로 이동하기 |
로봇이 배치 접근 웨이포인트에서 배치 웨이포인트로 이동합니다. |
||
“DO 설정”을 통해 배치를 수행하기 |
로봇이 배치 웨이포인트로 이동한 후, DO 명령어(예: “setdo DO_1, 0;”)를 설정하여 말단 장치를 제어하고 배치를 수행합니다. 사용자는 실제 상황에 맞게 DO 설정 작업을 추가해야 합니다.
|
||
배치 출발 웨이포인트로 이동하기 |
로봇이 배치 웨이포인트 위로 100mm 이동합니다. 즉 배치 출발 웨이포인트로 이동합니다.
|
||
Home포인트로 이동하기 |
로봇이 배치 출발 웨이포인트에서 다시 Home 인트로 이동합니다. |