ROKAE 샘플 프로그램 실행

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

■ 최신 버전의 소프트웨어를 사용하려면 Mech-Mind 다운로드 센터를 방문하여 다운로드하세요.

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

이 부분에서는 간단한 인식과 이동을 완성하는 로봇 샘플 프로그램을 소개합니다.

샘플 프로그램 설명

로봇이 간단한 피킹과 배치의 샘플 프로그램은 MM_Project 폴더의 main.mod 파일에 있습니다.

Mech-Vision을 통해 비전 인식을 실행하여 비전 결과를 획득하기

// **********************************************************
// FUNCTION: Eye to Hand simple pick and place with Vision
// **********************************************************
LOCAL PROC Vision_Sample_1()
        AccSet 100,100
        MoveAbsJ home_point,v3000,fine,tool0 //move robot home position
        MoveL camera_capture,v500,fine,tool0
        Pos_Num = 0

        // Set ip address of IPC
        IP_Address = "192.168.2.222"
        Server_Port = 50000
        MM_Timeout = 60
        MM_Init_Socket()
        Wait 0.1

        // Set vision recipe
        Job = 1
        Model_Number = 1
        MM_Switch_Model()

        // Run vision project
        Job = 1
        Pos_Num_Need = 0
        SendPos_Type = 1
        MM_Start_Vis()
        Wait 1
        Job = 1
            MM_Get_VisData()
        IF(MM_Status != 1100)
                EXIT
        ENDIF
        Serial = 1
        MM_Get_Pose()
            robtarget _P = MM_P
        MoveL RelTool(_P,0,0,-100,0,0,0),v1000,fine,tool01
        MoveL MM_P,v300,fine,tool01
        Pause

        // Add object grasping logic here.
        MoveL Offs(_P,0,0,100), v1000, fine, tool01
        MoveL way_point1,v1000,z50,tool01
        MoveL RelTool(drop,0,0,-100,0,0,0),v1000,fine,tool01
        MoveL drop,v300,fine,tool01
        Pause

        // Add object releasing logic here.
        MoveL Offs(drop,0,0,100), v1000, fine, tool01
        MoveAbsJ home_point,v3000,fine,tool0
        RETURN

ENDPROC

프로그램 논리 해석

  • 6번째 줄 : 로봇을 Home 포인트로 이동합니다.

  • 7 번째 줄: 카메라 사진 캡처 위치로 이동합니다.

  • 11 번째 줄: IP_Address는 IPC의 IP 주소입니다.

  • 12 번째 줄: Server_Port는 IPC의 포트 번호입니다.

  • 13 번째 줄: MM_Timeout은 통신 시간 초과 대기 시간을 지정합니다.

  • 14 번째 줄: MM_Init_Socket을 호출하여 통신에 대해 초기화 설정을 합니다.

  • 18번째 줄: Job은 Mech-Vision 프로젝트 번호를 나타냅니다.

  • 19 번째 줄: Model_Number는 Mech-Vision프로젝트의 레시피 템플릿 번호입니다.

  • 20 번째 줄: Mech-Vision 프로젝트 레시피를 설정하려면 여기에서 MM_Switch_Model 호출해서 프로젝트 레시피를 설정할 수 있습니다.

  • 24 번째 줄: Pos_Num_Need는 Mech-Vision으로부터 얻어야 할 시각 포인트의 목표 개수를 지정합니다. 값이 0인 경우 Mech-Vision 프로젝트가 처리 결과에서 인식된 모든 비전 포인트 수 가져옴을 의미합니다.

  • 25번째 줄: SendPos_Type는 “로봇 현재 관절 각도 + 현재 플랜지 포즈”의 포맷으로 비전 시스템에 로봇 포즈를 전송합니다.

  • 26 번째 줄: MM_Start_Vis를 호출하여 Mech-Vision 프로젝트 실행을 트리거합니다.

  • 27 번째 줄: 1초동안 기다립니다. Eye To Hand 모드에서 MM_Start_Vis 와 MM_Get_VisData 사이에 이동 스텝(MoveL 혹은 MoveJ) 이 있으면 여기서 기다릴 필요가 없습니다. Eye-In-Hand 모드에서는 카메라가 사진 촬영을 마칠 때까지 움직이지 않고 1초 동안 기다려야 합니다.

  • 29 번째 줄: Mech-Vision 프로젝트에서 계산한 포즈를 획득합니다.

  • 30 번째 줄: 획득된 포즈의 상태 코드가 정상인지 판단하고, 상태 코드 반환이 비정상인 경우 사용자는 로봇을 정지하는 등의 조치를 취해야 합니다.

  • 34 번째 줄: MM_Get_Pose 피킹 포즈 획득합니다. ROAKE 사용자 정의 함수는 형식 파라미터 전달을 지원하지 않으므로, 전역 변수 MM_P를 지정하여 MM_Get_Pose의 계산 결과를 저장합니다. 지역 변수 _P = MM_P를 사용하여 획득한 포즈 데이터를 사용자 정의의 위치 변수로 덤프합니다.

  • 37 번째 줄: 피킹 웨이포인트로 이동합니다.

  • 42 번째 줄: 피킹 포즈와 배치 포인트 사이의 안전 영역으로 이동합니다.

  • 44 번째 줄: 배치 포인트로 이동합니다.

사용자 정의 부분

  • 공구중심점(TCP)을 정의하기

    tool01: 사용자는 티치 펜던트의 캘리브레이션 화면에서 tool01의 값을 수정하여 TCP를 조절할 수 있습니다.

  • “Home 포인트”(원점)를 정의하기

    MoveAbsJ home_point, 사용자가 Home 포인트(원점)의 포즈를 home_point 포즈 변수에 기록해야 합니다.

  • 티치 펜던트를 통해 사진 캡처 위치를 설정하기

    MoveL camera_capture, 사용자가 사진 캡처 포인트의 포즈를 camera_capture 포즈 변수에 기록해야 합니다.

  • 티치 펜더트를 통해 전이점을 설정하기

    MoveL waypoint1, 사용자는 하나 또는 몇 개의 전이점을 추가하여 로봇이 피킹 포즈에서 배치 포인트로 충돌 없이 이동할 수 있습니다.

  • 티치 펜던트를 통해 배치 포인트를 설정하기

    MoveL drop, 사용자가 배치 포즈를 drop 변수에 기록해야 합니다.

  • 그리퍼 동작을 정의하기

    피킹 포즈 및 배치 포인트로 이동할 때 사용자는 그리퍼를 열고 닫기 위한 그리퍼 제어 로직을 추가해야 합니다.

  • 피킹 전후, 배치 전후의 접근 거리를 정의하기

    • 피킹 포즈 접근하기

      MoveL RelTool(_P,0,0,-100,0,0,0),v1000,fine,tool01

      피킹 포즈에서 툴 Z 축 음의 방향으로 100mm 이동합니다. 사용자는 접근 과정에서 충돌이 없도록 오프셋을 수정해야 합니다.

    • 피킹 포즈 떠나기

      MoveL Offs(_P,0,0,100), v1000, fine, tool01

      피킹 포즈에서 물체 좌표 Z축 양의 방향으로 100mm 이동합니다. 사용자는 떠나는 과정에서 충돌이 없도록 오프셋을 수정해야 합니다.

    • 배치 포인트 접근하기

      MoveL RelTool(drop,0,0,-100,0,0,0),v1000,fine,tool01

      배치 포인트에서 툴 Z축 음의 방향으로 100mm 이동합니다. 사용자는 떠나는 과정에서 충돌이 없도록 오프셋을 수정해야 합니다.

    • 배치 포인트 떠나기

      MoveL Offs(drop,0,0,100), v1000, fine, tool01

      배치 포인트에서 물체 좌표 Z축 양의 방향으로 100mm 이동합니다. 사용자는 떠나는 과정에서 충돌이 없도록 으프셋을 수정해야 합니다.

Mech-Viz를 사용하여 경로를 계획하기

// **********************************************************
// FUNCTION: Eye to Hand simple pick and place with Viz
// **********************************************************
    LOCAL PROC Vision_Sample_2()
            AccSet 100, 100
            MoveAbsJ home_point,v3000,fine,tool0    //move robot home position
            MoveL camera_capture,v500,fine,tool0
            Pos_Num = 0

            // Set ip address of IPC
            IP_Address = "192.168.2.222"
            Server_Port = 50000
            MM_Timeout = 60
            MM_Init_Socket()
            Wait 0.1

            // Set vision recipe
            Job = 1
            Model_Number = 1
            MM_Switch_Model()

            // Run Viz project
            SendPos_Type = 1
            MM_Start_Viz()
            Wait 0.1

            // set branch exitport
            Branch_Num = 1
            Export_Num = 1
            MM_Set_Branch()

            // get planned path
            Jps_Pos = 2
            MM_Get_VizData()
            IF(MM_Status != 2100)
                    EXIT
            ENDIF
            robtarget _P[20]
            int _Label[20]
            int _Speed[20]
            Serial = 0
            while(Serial < Pos_Num)
                    Serial += 1
                    MM_Get_Pose()
                    _P[Serial] = MM_P
                    _Label[Serial] = MM_Label
                    _Speed[Serial] = MM_Speed
            endwhile

            // follow the planned path to pick
            int count = 0
            while(count < Pos_Num)
                    count += 1
                    MoveL _P[count],v1000,fine,tool01
                    IF(count == VisPos_Num)
                            Pause
                            // add object grasping logic here
                    ENDIF
            endwhile

            // go to drop location
            MoveL RelTool(drop,0,0,-100,0,0,0),v1000,z50,tool01
            MoveL drop,v500,fine,tool01     // drop point
            Pause

            // add object releasing logic here
            MoveL Offs(drop,0,0,100), v1000, fine, tool01
            MoveAbsJ home_point,v3000,fine,tool0
            RETURN

    ENDPROC

프로그램 논리 해석

  • 6번째 줄 : 로봇을 Home 포인트로 이동합니다.

  • 7 번째 줄: 카메라 사진 캡처 위치로 이동합니다.

  • 11 번째 줄: IP_Address는 IPC의 IP 주소입니다.

  • 12 번째 줄: Server_Port는 IPC의 포트 번호입니다.

  • 13 번째 줄: MM_Timeout은 통신 시간 초과 대기 시간을 지정합니다.

  • 14 번째 줄: MM_Init_Socket을 호출하여 통신에 대해 초기화 설정을 합니다.

  • 18번째 줄: Job은 Mech-Vision 프로젝트 번호를 나타냅니다.

  • 19 번째 줄: Model_Number는 Mech-Vision프로젝트의 레시피 템플릿 번호입니다.

  • 20 번째 줄: Mech-Vision 프로젝트 레시피를 설정하려면 여기에서 MM_Switch_Model 호출해서 프로젝트 레시피를 설정할 수 있습니다.

  • 23 번째 줄: SendPos_Type는 "로봇의 현재 관절 각도+현재 플랜지"의 포맷을 Mech-Viz로 로봇 포즈를 전송합니다.

  • 24번째 줄: Mech-Viz 프로젝트 실행을 트리거합니다.

  • 28 번째 줄: Branch_Num은 분기 스텝 번호입니다.

  • 29 번째 줄: Export_Num은 분기 스텝의 아웃 포트 번호입니다.

  • 30번째 줄: Mech-Viz 프로젝트에서 분기를 설정해야 하는 경우 MM_Set_Branch() 를 호출하여 분기 스텝의 아웃 포트를 설정할 수 있습니다.

  • 33 번째 줄: Jps_Pos는 웨이포인트가 로봇 TCP 포즈의 포맷으로 반환될 것임을 나타냅니다.

  • 34 번째 줄: Mech-Viz 프로젝트에서 계획된 이동 경로를 획득합니다.

  • 35 번째 줄: 상태 코드가 정상인지 판단하고, 상태 코드 반환이 비정상인 경우 사용자는 로봇을 정지하는 등의 조치를 취해야 합니다.

  • 42~48 번째 줄: 루프를 통해 MM_Get_Pose를 반복 호출하여 포즈 데이터를 획득하고, 이를 _P[20], _Label[20], _Speed[20]의 해당 변수에 덤프합니다. ROAKE 사용자 정의 함수는 형식 파라미터 전달을 지원하지 않으므로, 전역 변수 MM_P, MM_Label 및 MM_Speed를 지정하여 MM_Get_Pose의 계산 결과를 저장합니다.

  • 52~59 번째 줄: FOR 루프를 사용하여 Mech-Viz가 계획된 경로를 따라 로봇이 피킹 포즈로 이동합니다.

  • 63 번째 줄: 배치 포인트로 이동하고 배치합니다.

사용자 정의 부분

  • 공구중심점(TCP)을 정의하기

    tool01: 사용자는 티치 펜던트의 캘리브레이션 화면에서 tool01의 값을 수정하여 TCP를 조절할 수 있습니다.

  • “Home 포인트”(원점)를 정의하기

    MoveAbsJ home_point, 사용자가 Home 포인트(원점)의 포즈를 home_point 포즈 변수에 기록해야 합니다.

  • 티치 펜던트를 통해 사진 캡처 위치를 설정하기

    MoveL camera_capture, 사용자가 사진 캡처 포인트의 포즈를 camera_capture 포즈 변수에 기록해야 합니다.

  • 티치 펜던트를 통해 배치 포인트를 설정하기

    MoveL drop, 사용자가 배치 포즈를 drop 변수에 기록해야 합니다.

  • 그리퍼 동작을 정의하기

    피킹 포즈 및 배치 포인트로 이동할 때 사용자는 그리퍼를 열고 닫기 위한 그리퍼 제어 로직을 추가해야 합니다.

  • 피킹/배치 전후의 접근 거리를 정의하기

    • 배치 포인트 접근하기

      MoveL RelTool(drop,0,0,-100,0,0,0),v1000,fine,tool01

      배치 포인트에서 툴 Z축 음의 방향으로 100mm 이동합니다. 사용자는 떠나는 과정에서 충돌이 없도록 오프셋을 수정해야 합니다.

    • 배치 포인트 떠나기

      MoveL Offs(drop,0,0,100), v1000, fine, tool01

      배치 포인트에서 물체 좌표 Z축 양의 방향으로 100mm 이동합니다. 사용자는 떠나는 과정에서 충돌이 없도록 으프셋을 수정해야 합니다.

Mech-Vision "경로 계획" 스텝을 사용하여 계획된 경로를 획득하기

// ****************************************************************************
// FUNCTION: Eye to Hand simple pick and place with Vision Path Planning Step
// ****************************************************************************
    LOCAL PROC Vision_Sample_3()
            AccSet 100, 100
            MoveAbsJ home_point,v3000,fine,tool0    //move robot home position
            MoveL camera_capture,v500,fine,tool0
            Pos_Num = 0

            // Set ip address of IPC
            IP_Address = "192.168.2.222"
            Server_Port = 50000
            MM_Timeout = 60
            MM_Init_Socket()
            Wait 0.1

            // Set vision recipe
            Job = 1
            Model_Number = 1
            MM_Switch_Model()

            // Run vision project
            Job = 1
            Pos_Num_Need = 0
            SendPos_Type = 1
            MM_Start_Vis()
            Wait 1

            // get planned path from {product-vis} Path Planning Step
            Job = 1
            Jps_Pos = 2
            MM_Get_VisPath()
            IF(MM_Status != 1103)
                    EXIT
            ENDIF
            robtarget _P[20]
            int _Label[20]
            int _Speed[20]
            Serial = 0
            while(Serial < Pos_Num)
                    Serial += 1
                    MM_Get_Pose()
                    _P[Serial] = MM_P
                    _Label[Serial] = MM_Label
                    _Speed[Serial] = MM_Speed
            endwhile

            // follow the planned path to pick
            int count = 0
            while(count < Pos_Num)
                    count += 1
                    MoveL _P[count],v1000,fine,tool01
                    IF(count == VisPos_Num)
                            Pause
                            // add object grasping logic here
                    ENDIF
            endwhile

            // go to drop location
            MoveL RelTool(drop,0,0,-100,0,0,0),v1000,z50,tool01
            MoveL drop,v500,fine,tool01     // drop point
            Pause

            // add object releasing logic here
            MoveL Offs(drop,0,0,100), v1000, fine, tool01
            MoveAbsJ home_point,v3000,fine,tool0
            RETURN

    ENDPROC

프로그램 논리 해석

  • 6번째 줄 : 로봇을 Home 포인트로 이동합니다.

  • 7 번째 줄: 카메라 사진 캡처 위치로 이동합니다.

  • 11 번째 줄: IP_Address는 IPC의 IP 주소입니다.

  • 12 번째 줄: Server_Port는 IPC의 포트 번호입니다.

  • 13 번째 줄: MM_Timeout은 통신 시간 초과 대기 시간을 지정합니다.

  • 14 번째 줄: MM_Init_Socket을 호출하여 통신에 대해 초기화 설정을 합니다.

  • 18번째 줄: Job은 Mech-Vision 프로젝트 번호를 나타냅니다.

  • 19 번째 줄: Model_Number는 Mech-Vision프로젝트의 레시피 템플릿 번호입니다.

  • 20 번째 줄: Mech-Vision 프로젝트 레시피를 설정하려면 여기에서 MM_Switch_Model 호출해서 프로젝트 레시피를 설정할 수 있습니다.

  • 24 번째 줄: Pos_Num_Need는 Mech-Vision으로부터 얻어야 할 시각 포인트의 목표 개수를 지정합니다. 값이 0인 경우 Mech-Vision 프로젝트가 처리 결과에서 인식된 모든 비전 포인트 수 가져옴을 의미합니다.

  • 25번째 줄: SendPos_Type는 “로봇 현재 관절 각도 + 현재 플랜지 포즈”의 포맷으로 비전 시스템에 로봇 포즈를 전송합니다.

  • 26 번째 줄: MM_Start_Vis를 호출하여 Mech-Vision 프로젝트 실행을 트리거합니다.

  • 27 번째 줄: 1초동안 기다립니다. Eye To Hand 모드에서 MM_Start_Vis 와 MM_Get_VisData 사이에 이동 스텝(MoveL 혹은 MoveJ) 이 있으면 여기서 기다릴 필요가 없습니다. Eye-In-Hand 모드에서는 카메라가 사진 촬영을 마칠 때까지 움직이지 않고 1초 동안 기다려야 합니다.

  • 31 번째 줄: Jps_Pos는 웨이포인트가 로봇 TCP 포즈의 포맷으로 반환될 것임을 나타냅니다.

  • 32 번째 줄: MM_Get_VisPath는 Mech-Vision “경로 계획” 스텝에서 출력된 이동 경로를 획득합니다.

  • 33 번째 줄: 획득된 경로의 상태 코드가 정상인지 판단하고, 상태 코드 반환이 비정상인 경우 로봇을 정지시켜야 하며 사용자는 조치를 취해야 합니다.

  • 40~46 번째 줄: 루프를 통해 MM_Get_Pose를 반복 호출하여 포즈 데이터를 획득하고, 이를 _P[20], _Label[20], _Speed[20]의 해당 변수에 덤프합니다. ROAKE 사용자 정의 함수는 형식 파라미터 전달을 지원하지 않으므로, 전역 변수 MM_P, MM_Label 및 MM_Speed를 지정하여 MM_Get_Pose의 계산 결과를 저장합니다.

  • 50~57 번째 줄: 루프를 사용하여 계획된 경로를 따라 로봇을 이동하여 비전 피킹을 완료합니다.

  • 61 번째 줄: 고정된 배치 포인트로 이동합니다.

사용자 정의 부분

  • 공구중심점(TCP)을 정의하기

    tool01: 사용자는 티치 펜던트의 캘리브레이션 화면에서 tool01의 값을 수정하여 TCP를 조절할 수 있습니다.

  • “Home 포인트”(원점)를 정의하기

    MoveAbsJ home_point, 사용자가 Home 포인트(원점)의 포즈를 home_point 포즈 변수에 기록해야 합니다.

  • 티치 펜던트를 통해 사진 캡처 위치를 설정하기

    MoveL camera_capture, 사용자가 사진 캡처 포인트의 포즈를 camera_capture 포즈 변수에 기록해야 합니다.

  • 티치 펜던트를 통해 배치 포인트를 설정하기

    MoveL drop, 사용자가 배치 포즈를 drop 변수에 기록해야 합니다.

  • 그리퍼 동작을 정의하기

    피킹 포즈 및 배치 포인트로 이동할 때 사용자는 그리퍼를 열고 닫기 위한 그리퍼 제어 로직을 추가해야 합니다.

  • 피킹/배치 전후의 접근 거리를 정의하기

    • 배치 포인트 접근하기

      MoveL RelTool(drop,0,0,-100,0,0,0),v1000,fine,tool01

      배치 포인트에서 툴 Z축 음의 방향으로 100mm 이동합니다. 사용자는 떠나는 과정에서 충돌이 없도록 오프셋을 수정해야 합니다.

    • 배치 포인트 떠나기

      MoveL Offs(drop,0,0,100), v1000, fine, tool01

      배치 포인트에서 물체 좌표 Z축 양의 방향으로 100mm 이동합니다. 사용자는 떠나는 과정에서 충돌이 없도록 으프셋을 수정해야 합니다.

샘플 프로그램 실행

샘플 프로그램을 실행하기 전에 다음 전제 조건이 충족되어야 합니다.

  1. ROKAE 표준 인터페이스 통신 구성 참조하여 작업을 완료했는지 확인하십시오.

  2. ROKAE 캘리브레이션 프로세스 내용을 참조하여 핸드-아이 캘리브레이션 작업을 완료했는지 확인하십시오.

  3. Mech-Vision 솔루션 및 프로젝트가 구축되었는지 확인하고 현재 솔루션 자동 로드하십시오.

  4. "Mech-Viz 계획 경로" 샘플 실행하려면 Mech-Viz 프로젝트를 구축하고 Mech-Viz프로젝트 리소스 패널에서 마우스 오른쪽 버튼으로 클릭한 후 자동 로드로 설정을 체크합니다.

  5. 티치 펜더트에서 Home 포인트, 카메라 촬영 포인트, 로봇 TCP, 중간 웨이포인트의 포즈 데이터가 정의했는지 확인하십시오.

위 전제를 충족하는 경우 Run the Robot Program을 참조하여 프로그램을 실행하십시오.

아래 스텝을 실행할 때 해당 샘플 예시 따라 설명을 열립니다. 예를 들어, 첫 번째 샘플 예시 실행하려면 "// Vision_Sample_1()"선택하고 차례로 More  Comment/Uncomment버튼을 클릭하십시오.

rokae sample 1

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

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

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

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