샘플 프로그램16: MM_S16_Viz_GetDirection

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

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

프로그램 소개

기능 설명

로봇은 계획 경로를 획득하여 피킹 작업을 완료한 후, 작업물 조합의 방향에 따라 다양한 배치 전략을 선택할 수 있습니다.

파일 경로

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

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

필요한 프로젝트

Mech-Vision와 Mech-Viz 프로젝트(말단장치 유형은 디팔레타이징 진공 그리퍼입니다)

사용 전제 조건

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

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

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

프로그램 설명

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

MM_S15_Viz_GetDoList 샘플과 비하면, 이 샘플은 아래와 같이 굵게 표시된 코드 부분만 수정되었습니다. 따라서, MM_S16_Viz_GetDirection의 MM_S15_Viz_GetDoList과 일치하는 부분은 다시 설명하지 않습니다. (일치하는 부분에 대한 정보는 MM_S15_Viz_GetDoList 샘플 프로그램 설명을 참조하십시오).
MODULE MM_S16_Viz_GetDirection
!----------------------------------------------------------
! FUNCTION: trigger Mech-Viz project, then get planned path
! and get box direction using command 210
! Mech-Mind, 2023-12-25
!----------------------------------------------------------
!define local num variables
LOCAL VAR num pose_num:=0;
LOCAL VAR num status:=0;
LOCAL VAR num vis_pose_num:=0;
LOCAL VAR num count:=0;
LOCAL VAR num box_direction:=0;
LOCAL VAR num movetype{5}:=[0,0,0,0,0];
LOCAL VAR num toolnum{5}:=[0,0,0,0,0];
LOCAL VAR num speed{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 VAR robtarget pickpoint:=[[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 VAR robtarget drop_waypoint_1:=[[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 VAR robtarget drop_1:=[[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 VAR robtarget drop_waypoint_2:=[[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 VAR robtarget drop_2:=[[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}:=
[
    [[1.1835,39.2938,-17.0883,0.1382,67.7901,176.701],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[1.2008,45.8522,-13.6729,0.1512,57.8163,176.689],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[1.1835,39.2938,-17.0883,0.1382,67.7901,176.701],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[36.2634,-36.6956,48.5019,-1.0197,78.1304,356.473],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[0,0,0,0,90,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_16()
    !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
    MM_Get_PlanData 0, 3, 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
    !get gripper control signal list
    MM_Get_Dolist 0,0;
    !close socket connection
    MM_Close_Socket;
    !save waypoints of the planned path to local variables one by one
    FOR i FROM 1 TO pose_num DO
        count:=i;
        MM_Get_PlanJps count,3,JPS{count},movetype{count},toolnum{count},speed{count};
    ENDFOR
    !follow the planned path to pick
    FOR j FROM 1 TO pose_num DO
        count:=j;
        MoveAbsJ jps{count},v1000,fine,gripper1;
        !set gripper control signal when current waypoint is picking waypoint
        IF count=vis_pose_num THEN
            !add object grasping logic here
            Stop;
            !set gripper control signal
            !MM_Set_DoList 0, 1, go16_1;
            !MM_Set_DoList 0, 2, go16_2;
            !MM_Set_DoList 0, 3, go16_3;
            !MM_Set_DoList 0, 4, go16_4;
        ENDIF
    ENDFOR
    !get box direction status from planned results
    box_direction:=MM_Plan_Results{17};
    !place the box according to its direction
    IF box_direction=0 THEN
        !move to intermediate waypoint of placing
        MoveJ drop_waypoint_1,v1000,z50,gripper1;
        !move to approach waypoint of placing
        MoveL RelTool(drop_1,0,0,-100),v1000,fine,gripper1;
        !move to placing waypoint
        MoveL drop_1,v300,fine,gripper1;
        !add object releasing logic here, such as "setdo DO_1, 0;"
        Stop;
        !move to departure waypoint of placing
        MoveL RelTool(drop_2,0,0,-100),v1000,fine,gripper1;
    ELSE
        !move to intermediate waypoint of placing
        MoveJ drop_waypoint_2,v1000,z50,gripper1;
        !move to approach waypoint of placing
        MoveL RelTool(drop_2,0,0,-100),v1000,fine,gripper1;
        !move to placing waypoint
        MoveL drop_2,v300,fine,gripper1;
        !add object releasing logic here, such as "setdo DO_1, 0;"
        Stop;
        !move to departure waypoint of placing
        MoveL RelTool(drop_2,0,0,-100),v1000,fine,gripper1;
    ENDIF
    !move back to robot home position
    MoveAbsJ home\NoEOffs,v3000,fine,gripper1;
ENDPROC
ENDMODULE

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

sample16

아래 표는 굵게 표시된 코드의 설명입니다. 명령어 이름의 링크를 클릭하면 해당 명령의 상세 설명을 확인할 수 있습니다.

워크플로 코드와 설명

작업물 조합의 방향을 획득하기

!get box direction status from planned results
box_direction:=MM_Plan_Results{17};
Mech-Viz 중에 비전 이동 계획 결과는 “비전 이동” 스텝을 통해 계획된 데이터를 가리킵니다. 피킹된 작업물의 레이블, 피킹된 작업물 총수, 이번에 피킹된 작업물의 수, 진공 그리퍼의 엣지/코너 ID, TCP 옵셋량, 작업물 조합의 방향, 단일 작업물의 방향, 작업물 조합의 치수 등 정보가 포함됩니다.

로봇은 MM_Get_PlanData명령어를 실행하여 웨이포인트의 비전 이동 계획 결과를 얻고, 그 후 MM_Get_PlanJps 명령어를 실행하여 로봇 메모리에 저장된 웨이포인트의 비전 이동 계획 결과를 MM_Plan_Results 전역 배열에 저장합니다.

MM_Plan_Results 전역 배열에서 MM_Plan_Results{17}은 작업물 조합과 진공 그리퍼 길이 사이의 상대적 위치입니다. 0은 평행을 나타내고 1은 수직을 나타냅니다.

위의 코드는 MM_Plan_Results{17} 값을 box_direction 변수에 할당하는 것을 나타내며, box_direction 변수는 작업물 조합의 방향을 나타내게 됩니다.

작업물 조합의 방향에 따라 다양한 배치 전략을 선택하기

IF box_direction=0 THEN
    !move to intermediate waypoint of placing
    MoveJ drop_waypoint_1,v1000,z50,gripper1;
    !move to approach waypoint of placing
    MoveL RelTool(drop_1,0,0,-100),v1000,fine,gripper1;
    !move to placing waypoint
    MoveL drop_1,v300,fine,gripper1;
    !add object releasing logic here, such as "setdo DO_1, 0;"
    Stop;
    !move to departure waypoint of placing
    MoveL RelTool(drop_2,0,0,-100),v1000,fine,gripper1;
ELSE
    !move to intermediate waypoint of placing
    MoveJ drop_waypoint_2,v1000,z50,gripper1;
    !move to approach waypoint of placing
    MoveL RelTool(drop_2,0,0,-100),v1000,fine,gripper1;
    !move to placing waypoint
    MoveL drop_2,v300,fine,gripper1;
    !add object releasing logic here, such as "setdo DO_1, 0;"
    Stop;
    !move to departure waypoint of placing
    MoveL RelTool(drop_2,0,0,-100),v1000,fine,gripper1;
ENDIF

위 코드는 작업물이 진공 그리퍼의 긴 쪽과 평행할 경우(즉, box_direction가 0인 경우), 작업물이 drop_1 위치에 배치된다는 것을 나타냅니다. 그렇지 않으면 작업물은 drop_2 위치에 배치됩니다.

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

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

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

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