로봇 가공

공작기계(3또는5 CNC)같은산업용로봇을사용할있습니다. CNC 기계와같은결과를얻으려면산업용로봇에는기계프로그램을로봇프로그램으로변환하기위해 RoboDK같은고급오프라인프로그래밍소프트웨어가필요합니다.

로봇가공에는밀링, 드릴링, 모따기디버링과같은다양한재료제거응용프로그램이포함되며일반적으로자동화된공작기계(CNC)에서수행됩니다.

부품치수는 CAD(Computer-Aided Design, 컴퓨터이용설계) 소프트웨어를사용하여정의한다음 CAM(Computer-Aided Manufacturing, 컴퓨터이용가공) 소프트웨어를통해G 코드와같은제조프로그램으로변환됩니다. 그런다음 RoboDK오프라인프로그래밍도구를사용하여제조프로그램을로봇프로그램으로변환할있습니다.

작업공간을확장하기위해턴테이블선형레일과같은추가축을로봇과동기화할있습니다.

가공설정

섹션에서는로봇가공을위해오프라인으로간단한 RoboDK 스테이션을준비하는방법을보여줍니다. RoboDK 스테이션에는모든로봇, , 기준좌표계, 객체기타설정이포함되어있습니다. RoboDK 스테이션구축에대한추가정보는시작하기섹션에서확인할있습니다.

로봇가공프로젝트를설정하려면기준좌표계에 3D 객체가있는로봇이필요합니다.

1-로봇을선택하십시오.

a.파일Robot Machining - 영상 1온라인라이브러리열기선택하십시오.

b.필터를사용하여브랜드별, 페이로드별로봇을찾으십시오.
예를들어, ABB IRB 2600-20/1.65(20kg 가반하중, 1.65 m 작업반경)선택하십시오.

c.다운로드선택하면로봇은화면에자동으로나타날것입니다.

2-툴을선택하십시오.

a.같은온라인라이브러리에서형태통해필터링하십시오.

b.스핀들툴을내려받으십시오.

c.툴은로봇에자동으로부착될것입니다.        
툴이로드되면온라인라이브러리닫아도됩니다.

3-기준좌표계를추가하십시오.

a.프로그램Robot Machining - 영상 2기준좌표계추가선택하십시오.

b.트리에서기준좌표계를선택하고 F2선택하여이름을Milling Reference변경하십시오.

4-객체를추가하십시오.

a.파일Robot Machining - 영상 3열기선택하십시오.

b.Object wooden bowl.sld라는객체를선택하십시오.

c.스테이션트리내부에서객체를Milling Reference끌어다놓으십시오.

Robot Machining - 영상 4

로봇가공프로젝트

다음단계에따라 CAM 소프트웨어를사용하여생성된 NC 파일(: G 코드또는 APT)새로운로봇가공프로젝트를설정하십시오.

1.유틸리티Robot Machining - 영상 5로봇가공프로젝트(Ctrl+M)선택하십시오.          
그림과같이새로운창이나타날것입니다.

2.경로입력섹션에서NC 파일선택선택하십시오.

3.RoboDK 기본라이브러리의 NC 파일과같은 NC 파일이제공됩니다.         
C:/RoboDK/Library/Milling Bowl 3x.nc

Robot Machining - 영상 6

다음이미지와같이메뉴의왼쪽위에서로봇, 기준좌표계툴을선택하십시오.

Robot Machining - 영상 7

가공공구경로는녹색으로표시되고경로법선은흰색벡터로표시됩니다. 도구경로를숨기려면보이는도구경로를선택취소하십시오.

경로입력

경로입력을통해공구경로를제공하는다양한방법을선택할있습니다. 공구경로는다음과같이정의있습니다.

NC 파일선택:섹션에설명된대로하나의 NC 파일(CAM 소프트웨어에서가져옴)

커브선택: 커브추종프로젝트섹션에설명된대로하나이상의커브를 RoboDK에서좌표목록으로커브불러오기있습니다.  

포인트선택: 포인트추종프로젝트섹션에설명된하나이상의포인트를RoboDK에서좌표목록으로포인트불러오기있습니다.

3D 프린트객체: 3D 프린팅의대상으로슬라이서는형상을공구경로로변환하는사용됩니다.

Robot Machining - 영상 8Robot Machining - 영상 9

접근/후퇴

접근 / 후퇴이동은메뉴의오른쪽위에있습니다.

Robot Machining - 영상 10

추가선택하여이동을추가하십시오. 녹색경로가그에따라업데이트됩니다. 정상이동 (흰색법선을따라), 탄젠트 (녹색경로를따라) 또는부품을기준으로특정축을따라이동을선택할있습니다.

Robot Machining - 영상 11

값을더블클릭하여길이를수정하거나제거를선택하여특정이동을제거하십시오.

오프셋경로

공구오프셋경로를사용하면공구경로를따라공구의기본방향을변경할있습니다. 옵션은주로 TCP Z 축을중심으로공구를회전시키는사용됩니다.

6로봇은3또는5 CNC 제조프로그램을따르는사용되므로추가로자유롭게정의할있습니다. 자유도는일반적으로 TCP Z 축을중심으로회전입니다.

Robot Machining - 영상 12

기본적으로공구옵셋경로에는rotz (0)변환이표시됩니다. 값은공구의기본방향을설정하고 TCP Z 주위의방향을수정하거나다른축과조합하여수정할있습니다. 선호되는방향은공구경로를따르는동안로봇이유지하려고하는방향입니다.

기본적으로 RoboDK최소공구방향변경알고리즘을사용합니다. 이는공구방향이공구경로를따라가능한일정하게유지됨을의미합니다. 일반적으로옵션은로봇조인트이동을최소화하므로밀링작업에적합합니다. 또는공구경로를따르는공구방향(절삭작업에유용) 또는공구경로를로봇공구에부착해야하는경우(: 디스펜싱또는연마) 물체를고정하는로봇같은다른알고리즘 / 방법을응용하여사용할있습니다.

Robot Machining - 영상 13

변수최적화

원하는방향이주어지면로봇은공구의 Z 축을자유롭게회전할있습니다. 이를통해로봇은로봇특이성과제약을피하면서프로그램을수행할있습니다. 기본적으로 RoboDK사용하면 TCP 축을기준으로도구를최대20도씩 +/- 180회전할있습니다.

용도에따라회전을제한하는것이좋습니다. 예를들어허용회전을반으로제한하기위해 +/- 90도를입력할있습니다.

경로의일부지점에도달할없는경우기준좌표계를이동하거나공구 Z 회전을사용하여이동할있도록하는것이좋습니다. 참조키는 Alt 키를사용하여이동할있습니다.

참조: 추정된공구경로는기준좌표계로표시되거나자동업데이트옵션이선택된경우 TCP수정됩니다.

Robot Machining - 영상 14

프로그램업데이트

제공된설정에따라프로그램을얻으려면업데이트를선택하십시오. 프로그램을성공적으로만들있으면녹색확인표시가나타납니다. 스테이션에서새로운프로그램을확인할있습니다.

Robot Machining - 영상 15

생성된프로그램Robot Machining - 영상 16더블클릭하거나시뮬레이션선택하여로봇가공시뮬레이션을시작하십시오.

프로그램을마우스오른쪽버튼으로클릭하고로봇프로그램생성(F6)선택하여프로그램을얻을있습니다. 프로그램생성에대한자세한정보는프로그램섹션을참고하십시오.

Robot Machining - 영상 17

선호구성

RoboDK선호하는시작조인트(시작점에대해선호하는조인트)가까운시작구성을자동으로선택합니다. 시점에서로봇은선형이동을따르므로로봇구성은변경되지않습니다.

드롭다운메뉴에프로그램을시작하기위한가능한모든솔루션이표시됩니다. 필요한경우기본구성을선택하고업데이트선택하여프로그램을다시계산하십시오.

Robot Machining - 영상 18


로봇절단

경로를따라공구방향을일정하게유지할있습니다. 동작은절단또는용접애플리케이션에유용합니다.

경로를따라선호하는공구경로를다시계산하기위해알고리즘선택드롭다운에서경로에따른공구방향선택하십시오. 다른설정은공구방향이일정한가공프로젝트프로젝트와같습니다.

Robot Machining - 영상 19

로봇으로객체잡기

제조작업이진행되는동안로봇과함께공구로물체 / 공구경로를잡고있을로봇을프로그래밍할있습니다. 이러한방법은접착제를공급하거나연마응용분야에유용합니다.

TCP 경로에공구경로를올바르게배치하기위해알고리즘선택드롭다운에서로봇으로객체잡기선택하십시오. 다른설정은공구방향이일정한가공프로젝트같습니다.

Robot Machining - 영상 20

커브추종프로젝트

RoboDK사용하여 3D 공간에서로봇이커브를따르도록있습니다. RoboDK커브는객체가장자리에서선택하거나 CSV 파일의포인트목록가져오기확인할있습니다. 옵션은예를들어로봇용접애플리케이션에유용합니다.

커브추종설정을열기위해유틸리티커브추종프로젝트선택하십시오. 설정은로봇가공프로젝트같지만경로입력커브선택으로사전설정되어있다는점만다릅니다.

커브선택선택하여화면에서커브를선택하십시오.

Robot Machining - 영상 21

마우스왼쪽클릭으로커브를선택하십시오. 같은커브를선택하면동작방향이전환됩니다. 또한, 이전에선택한커브를마우스오른쪽버튼으로클릭하면방향을전환하거나이전에선택한커브를선택취소할있습니다.

Robot Machining - 영상 22

화면을마우스오른쪽버튼으로클릭하고완료선택하거나 Esc 키를눌러설정메뉴로돌아갑니다. 녹색경로는객체에대한로봇동작을표시합니다.

공구속도접근/후퇴이동을커브에적용해야하는경우와같이설정오른쪽위에서일부추가옵션을사용할있습니다. 기본설정은다음이미지에표시됩니다.

Robot Machining - 영상 23

커브불러오기

유틸리티커브불러오기선택하여 CSV 파일또는텍스트파일에서 RoboDK커브를가져올있습니다. 스테이션에커브로객체들을보여주는새로운아이템이나타납니다.

Robot Machining - 영상 24

파일은커브점의 3D 좌표를가진텍스트파일일있습니다. 선택적으로공구의 Z 방향을 i, j, k 벡터로제공할있습니다.

선택적으로객체의기존커브를 CSV 파일로내보내고(커브를마우스오른쪽버튼으로클릭한다음커브내보내기를선택) RoboDK에서수정하고다시가져올있습니다.

Robot Machining - 영상 25

포인트추종프로젝트

RoboDK사용하여 3D 공간에서로봇이포인트를따르도록있습니다. RoboDK포인트는객체, 커브에서추출하거나 CSV 파일의포인트목록으로가져올있습니다. 옵션은예를들어스폿용접또는드릴링응용분야에유용합니다. 다음영상은스폿용접응용프로그램을설정하는예를보여줍니다. 영상보기.

포인트추종설정을열기위하여유틸리티포인트추종프로젝트선택하십시오. 설정은로봇가공프로젝트같지만경로입력포인트선택으로사전설정되어있다는점만다릅니다.

화면에서포인트를선택하려면포인트선택선택하십시오.

Robot Machining - 영상 26

마우스왼쪽클릭으로포인트를선택하십시오. 같은포인트를선택하면접근방향이전환됩니다. 또한, 포인트를마우스오른쪽버튼으로클릭하여다음선택선택하여다음에오는점을선택할있습니다.

Robot Machining - 영상 27

화면을마우스오른쪽버튼으로클릭하고완료선택하거나 Esc 키를눌러설정메뉴로돌아갑니다. 녹색경로는객체에대한로봇동작을표시합니다.

공구속도접근거리와같은일부추가옵션은오른쪽설정에서사용할있습니다. 기본설정은다음그림과같이표시됩니다.

Robot Machining - 영상 28

포인트불러오기

유틸리티포인트불러오기선택하여텍스트파일또는 CSV 파일에서포인트목록을가져올있습니다. 포인트가객체로표시되는새로운아이템이스테이션에나타납니다.

Robot Machining - 영상 29

파일은곡선의포인트 3D 좌표를가진텍스트파일일있습니다. 선택적으로공구의 Z 방향을 i, j, k 벡터로제공할있습니다.

선택적으로커브를마우스오른쪽버튼으로클릭한다음커브포인트추출선택하여객체의기존커브를포인트로변환할있습니다.

Robot Machining - 영상 30

로봇 3D 프린팅프로젝트

3D 프린팅또는적층제조는디지털파일에서3차원솔리드객체를만드는프로세스입니다. 산업용로봇암은3 3D 프린터또는 RoboDK함께5 3D 프린터로사용할있습니다. 다음영상은 RoboDK오프라인으로사용하여 3D 프린팅을설정하는방법에대한개요입니다. 영상보기.

로봇을사용한 3D 프린팅은다음방법하나로가능합니다.

로봇가공프로젝트같이 RoboDK사용하여 G 코드프로그램(NC 파일)로봇프로그램으로직접변환합니다. 재료흐름속도(압출기지침 E)움직임에대해적절히고려되며생성된프로그램에프로그램이벤트통합될있습니다. G 코드는 RoboDK에서지원하는 NC 파일유형이며많은 3D 프린터에서지원되는형식이기도합니다. 대부분의슬라이서소프트웨어는 STL 파일이주어지면 G 코드를생성할있습니다.

유틸리티3D 프린트프로젝트선택하여 3D 프린팅설정을여십시오. 설정은로봇가공프로젝트동일하지만경로입력3D 프린트개체사전설정되어있다는점만다릅니다. 메인화면에서객체를선택하고공구경로를자동으로얻으려면객체선택선택하십시오. 3D 프린팅옵션을선택하여 Slic3r여십시오.

Robot Machining - 영상 31

Robot Machining - 영상 32

기본적으로 RoboDK E 지시문을Extruder라는프로그램에대한프로그램호출로변환하고 E 값을매개변수로전달합니다. 동작을변경하려면프로그램이벤트선택하십시오.

Robot Machining - 영상 33

압출기(E)이동전에압출해야하는재료의양을나타냅니다. 값은로봇속도와포인트사이의거리를고려하여로봇에서압출기피드를구동하는사용할있습니다.

또는포스트프로세서를사용하여압출기공급을계산하고그에따라적절한코드를생성할있습니다. 다음섹션에서이에대한예제를제공합니다.

로봇 3D 프린팅포스트프로세서

섹션에서는로봇포스트프로세서수정하여 3D 프린팅을위한이동명령을실행하기전에압출기속도를계산하는방법을보여줍니다. 또는압출기프로그램호출(압출기를구동하기위한기본명령)사용하여로봇컨트롤러에서이러한작업을수행할있습니다.

로봇포스트프로세서를개별화함으로써프로그램을로봇으로보내기전에 3D 프린팅을위한압출기의통합을더욱쉽게있습니다. 이러한작업을수행하려면로봇포스트프로세서에서프로그램이생성될일부계산을수행하고맞춤형코드를출력해야합니다.

Note: ABB RAPID IRC5, KUKA KRC2 Comau 포스트와같은일부포스트프로세서는기본적으로이러한권장수정사항을구현합니다.

번째단계는압출기호출대신포스트프로세서의 RunCode 섹션내에서새로운압출기(E )읽는것입니다. 다음섹션은프로그램에대해생성된모든프로그램호출을처리합니다.

def RunCode(self, code, is_function_call = False):

    if is_function_call:

        if code.startswith("Extruder("):

            # Intercept the extruder command.

            # if the program call is Extruder(123.56)

            # we extract the number as a string

            # and convert it to a number

            self.PRINT_E_NEW = float(code[9:-1])

            # Skip the program call generation

            return

        else:

            self.addline(code + "()")

    else:

# Output program code

self.addline(code)

압출기(길이 / E)로봇포스트프로세서에서 PRINT_E_NEW 변수로저장됩니다.

각각의새로운선형이동명령으로 new_move라는함수호출을실행해야합니다. MoveL 명령을시작할호출을추가있습니다.

def MoveL(self, pose, joints, conf_RLF=None):

    """Add a linear movement"""

# Handle 3D printing Extruder integration

self.new_move(pose)

   ...

또한, 압출기증분을계산하려면포스트프로세서의헤더에다음변수를추가해야합니다.

# 3D Printing Extruder Setup Parameters:

PRINT_E_AO =5# Analog Output ID to command the extruder flow

PRINT_SPEED_2_SIGNAL =0.10# Ratio to convert the speed/flow to an analog output signal

PRINT_FLOW_MAX_SIGNAL =24# Maximum signal to provide to the Extruder

PRINT_ACCEL_MMSS =-1# Acceleration, -1 assumes constant speed if we use rounding/blending

# Internal 3D Printing Parameters

PRINT_POSE_LAST =None# Last pose printed

PRINT_E_LAST =0# Last Extruder length

PRINT_E_NEW =None# New Extruder Length

PRINT_LAST_SIGNAL =None# Last extruder signal

마지막으로, 이동거리, 로봇속도로봇가속에따라적절한압출기이송명령을생성하는새로운절차를정의해야합니다. 이는압출기공급이특정아날로그출력또는맞춤형프로그램호출에의해구동된다고가정합니다.

def MoveL 프로그램정의전에다음코드를추가해야합니다.

def calculate_time(self, distance, Vmax, Amax=-1):

    """Calculate the time to move a distance with Amax acceleration and Vmax speed"""

    if Amax < 0:

        # Assume constant speed (appropriate smoothing/rounding parameter must be set)

        Ttot = distance/Vmax

    else:

        # Assume we accelerate and decelerate

        tacc = Vmax/Amax;

        Xacc = 0.5*Amax*tacc*tacc;

        if distance <= 2*Xacc:

            # Vmax is not reached

            tacc = sqrt(distance/Amax)

            Ttot = tacc*2

        else:

            # Vmax is reached

            Xvmax = distance - 2*Xacc

            Tvmax = Xvmax/Vmax

            Ttot = 2*tacc + Tvmax

    return Ttot

def new_move(self, new_pose):                       

    """Implement the action on the extruder for 3D printing, if applicable"""

    if self.PRINT_E_NEW isNone or new_pose is None:

        return

    # Skip the first move and remember the pose

    if self.PRINT_POSE_LAST isNone:

        self.PRINT_POSE_LAST = new_pose

        return         

    # Calculate the increase of material for the next movement

    add_material = self.PRINT_E_NEW - self.PRINT_E_LAST

    self.PRINT_E_LAST = self.PRINT_E_NEW

    # Calculate the robot speed and Extruder signal

    extruder_signal = 0

    if add_material > 0:

        distance_mm = norm(subs3(self.PRINT_POSE_LAST.Pos(), new_pose.Pos()))

        # Calculate movement time in seconds

        time_s = self.calculate_time(distance_mm, self.SPEED_MMS, self.PRINT_ACCEL_MMSS)

        # Avoid division by 0

        if time_s > 0:

            # This may look redundant but it allows you to account for accelerations and we can apply small speed adjustments

            speed_mms = distance_mm / time_s

            # Calculate the extruder speed in RPM*Ratio (PRINT_SPEED_2_SIGNAL)

            extruder_signal = speed_mms * self.PRINT_SPEED_2_SIGNAL

    # Make sure the signal is within the accepted values

    extruder_signal = max(0,min(self.PRINT_FLOW_MAX_SIGNAL, extruder_signal))

    # Update the extruder speed when required

    if self.PRINT_LAST_SIGNAL isNone or abs(extruder_signal - self.PRINT_LAST_SIGNAL) > 1e-6:

        self.PRINT_LAST_SIGNAL = extruder_signal

        # Use the built-in setDO function to set an analog output

        self.setDO(self.PRINT_E_AO, "%.3f"% extruder_signal)

        # Alternatively, provoke a program call and handle the integration with the robot controller

        #self.addline('ExtruderSpeed(%.3f)' % extruder_signal)

    # Remember the last pose

    self.PRINT_POSE_LAST = new_pose