공작기계(3축또는5축 CNC)와같은산업용로봇을사용할수있습니다. CNC 기계와같은결과를얻으려면산업용로봇에는기계프로그램을로봇프로그램으로변환하기위해 RoboDK와같은고급오프라인프로그래밍소프트웨어가필요합니다.
로봇가공에는밀링, 드릴링, 모따기및디버링과같은다양한재료제거응용프로그램이포함되며일반적으로자동화된공작기계(CNC)에서수행됩니다.
부품치수는 CAD(Computer-Aided Design, 컴퓨터이용설계) 소프트웨어를사용하여정의한다음 CAM(Computer-Aided Manufacturing, 컴퓨터이용가공) 소프트웨어를통해G 코드와같은제조프로그램으로변환됩니다. 그런다음 RoboDK의오프라인프로그래밍도구를사용하여제조프로그램을로봇프로그램으로변환할수있습니다.
작업공간을확장하기위해턴테이블및선형레일과같은추가축을로봇과동기화할수있습니다.
이섹션에서는로봇가공을위해오프라인으로간단한 RoboDK 스테이션을준비하는방법을보여줍니다. RoboDK 스테이션에는모든로봇, 툴, 기준좌표계, 객체및기타설정이포함되어있습니다. RoboDK 스테이션구축에대한추가정보는시작하기섹션에서확인할수있습니다.
로봇가공프로젝트를설정하려면기준좌표계에툴및 3D 객체가있는로봇이필요합니다.
1-로봇을선택하십시오.
a.파일➔온라인라이브러리열기를선택하십시오.
b.필터를사용하여브랜드별, 페이로드별로봇을찾으십시오.
예를들어, ABB IRB 2600-20/1.65(20kg 가반하중, 1.65 m 작업반경)을선택하십시오.
c.다운로드를선택하면로봇은주화면에자동으로나타날것입니다.
2-툴을선택하십시오.
a.같은온라인라이브러리에서형태➔툴을통해필터링하십시오.
b.스핀들툴을내려받으십시오.
c.툴은로봇에자동으로부착될것입니다.
툴이로드되면온라인라이브러리를닫아도됩니다.
3-기준좌표계를추가하십시오.
a.프로그램➔기준좌표계추가를선택하십시오.
b.트리에서새기준좌표계를선택하고 F2를선택하여이름을Milling Reference로변경하십시오.
4-객체를추가하십시오.
a.파일➔열기를선택하십시오.
b.Object wooden bowl.sld라는객체를선택하십시오.
c.스테이션트리내부에서객체를Milling Reference로끌어다놓으십시오.
다음단계에따라 CAM 소프트웨어를사용하여생성된 NC 파일(예: G 코드또는 APT)로새로운로봇가공프로젝트를설정하십시오.
1.유틸리티➔로봇가공프로젝트(Ctrl+M)를선택하십시오.
그림과같이새로운창이나타날것입니다.
2.경로입력섹션에서NC 파일선택을선택하십시오.
3.RoboDK 기본라이브러리의 NC 파일과같은 NC 파일이제공됩니다.
C:/RoboDK/Library/Milling Bowl 3x.nc
다음이미지와같이메뉴의왼쪽위에서로봇, 기준좌표계및툴을선택하십시오.
가공공구경로는녹색으로표시되고경로법선은흰색벡터로표시됩니다. 도구경로를숨기려면보이는도구경로를선택취소하십시오.
경로입력을통해공구경로를제공하는다양한방법을선택할수있습니다. 공구경로는다음과같이정의할수있습니다.
●NC 파일선택:이섹션에설명된대로하나의 NC 파일(CAM 소프트웨어에서가져옴)
●커브선택: 커브추종프로젝트섹션에설명된대로하나이상의커브를 RoboDK에서좌표목록으로커브불러오기를할수있습니다.
●포인트선택: 포인트추종프로젝트섹션에설명된하나이상의포인트를RoboDK에서좌표목록으로포인트불러오기를할수있습니다.
●3D 프린트객체: 3D 프린팅의대상으로슬라이서는형상을공구경로로변환하는데사용됩니다.
접근 / 후퇴이동은메뉴의오른쪽위에있습니다.
추가를선택하여이동을추가하십시오. 녹색경로가그에따라업데이트됩니다. 정상이동 (흰색법선을따라), 탄젠트 (녹색경로를따라) 또는부품을기준으로특정축을따라이동을선택할수있습니다.
값을더블클릭하여길이를수정하거나제거를선택하여특정이동을제거하십시오.
공구오프셋경로를사용하면공구경로를따라공구의기본방향을변경할수있습니다. 이옵션은주로 TCP의 Z 축을중심으로공구를회전시키는데사용됩니다.
6축로봇은3축또는5축 CNC 제조프로그램을따르는데사용되므로추가로자유롭게정의할수있습니다. 이자유도는일반적으로 TCP의 Z 축을중심으로한회전입니다.
기본적으로공구옵셋경로에는rotz (0)변환이표시됩니다. 이값은공구의기본방향을설정하고 TCP의 Z 축주위의방향을수정하거나다른축과조합하여수정할수있습니다. 선호되는방향은공구경로를따르는동안로봇이유지하려고하는방향입니다.
기본적으로 RoboDK는최소공구방향변경알고리즘을사용합니다. 이는공구방향이공구경로를따라가능한일정하게유지됨을의미합니다. 일반적으로이옵션은로봇조인트이동을최소화하므로밀링작업에적합합니다. 또는공구경로를따르는공구방향(절삭작업에유용) 또는공구경로를로봇공구에부착해야하는경우(예: 디스펜싱또는연마) 물체를고정하는로봇과같은다른알고리즘 / 방법을응용하여사용할수있습니다.
원하는방향이주어지면로봇은공구의 Z 축을자유롭게회전할수있습니다. 이를통해로봇은로봇특이성과축제약을피하면서프로그램을수행할수있습니다. 기본적으로 RoboDK를사용하면 TCP 축을기준으로도구를최대20도씩 +/- 180도회전할수있습니다.
용도에따라이회전을제한하는것이좋습니다. 예를들어허용회전을반으로제한하기위해 +/- 90도를입력할수있습니다.
경로의일부지점에도달할수없는경우기준좌표계를이동하거나공구 Z 회전을사용하여이동할수있도록하는것이좋습니다. 참조키는 Alt 키를사용하여이동할수있습니다.
참조: 추정된공구경로는기준좌표계로표시되거나자동업데이트옵션이선택된경우 TCP가수정됩니다.
제공된설정에따라프로그램을얻으려면업데이트를선택하십시오. 프로그램을성공적으로만들수있으면녹색확인표시가나타납니다. 스테이션에서새로운프로그램을확인할수있습니다.
생성된프로그램을더블클릭하거나시뮬레이션을선택하여로봇가공시뮬레이션을시작하십시오.
프로그램을마우스오른쪽버튼으로클릭하고로봇프로그램생성(F6)을선택하여프로그램을얻을수있습니다. 프로그램생성에대한자세한정보는프로그램섹션을참고하십시오.
RoboDK는선호하는시작조인트(시작점에대해선호하는조인트)에더가까운시작구성을자동으로선택합니다. 이시점에서로봇은선형이동을따르므로로봇구성은변경되지않습니다.
드롭다운메뉴에프로그램을시작하기위한가능한모든솔루션이표시됩니다. 필요한경우기본구성을선택하고업데이트를선택하여프로그램을다시계산하십시오.
경로를따라공구방향을일정하게유지할수있습니다. 이동작은절단또는용접애플리케이션에유용합니다.
경로를따라선호하는공구경로를다시계산하기위해알고리즘선택드롭다운에서경로에따른공구방향을선택하십시오. 다른설정은공구방향이일정한가공프로젝트프로젝트와같습니다.
제조작업이진행되는동안로봇과함께공구로물체 / 공구경로를잡고있을때로봇을프로그래밍할수있습니다. 이러한방법은접착제를공급하거나연마응용분야에유용합니다.
TCP 경로에공구경로를올바르게배치하기위해알고리즘선택드롭다운에서로봇으로객체잡기를선택하십시오. 다른설정은공구방향이일정한가공프로젝트와같습니다.
RoboDK를사용하여 3D 공간에서로봇이커브를따르도록할수있습니다. RoboDK의커브는객체가장자리에서선택하거나 CSV 파일의포인트목록가져오기로확인할수있습니다. 이옵션은예를들어로봇용접애플리케이션에유용합니다.
커브추종설정을열기위해유틸리티➔커브추종프로젝트를선택하십시오. 이설정은로봇가공프로젝트와같지만경로입력이커브선택으로사전설정되어있다는점만다릅니다.
커브선택을선택하여화면에서커브를선택하십시오.
마우스왼쪽클릭으로커브를선택하십시오. 같은커브를두번선택하면동작방향이전환됩니다. 또한, 이전에선택한커브를마우스오른쪽버튼으로클릭하면방향을전환하거나이전에선택한커브를선택취소할수있습니다.
화면을마우스오른쪽버튼으로클릭하고완료를선택하거나 Esc 키를눌러설정메뉴로돌아갑니다. 녹색경로는객체에대한로봇동작을표시합니다.
공구속도및접근/후퇴이동을각커브에적용해야하는경우와같이설정오른쪽위에서일부추가옵션을사용할수있습니다. 기본설정은다음이미지에표시됩니다.
유틸리티➔커브불러오기를선택하여 CSV 파일또는텍스트파일에서 RoboDK로커브를가져올수있습니다. 스테이션에커브로객체들을보여주는새로운아이템이나타납니다.
파일은커브의각점의 3D 좌표를가진텍스트파일일수있습니다. 선택적으로공구의 Z 축방향을 i, j, k 벡터로제공할수있습니다.
선택적으로객체의기존커브를 CSV 파일로내보내고(커브를마우스오른쪽버튼으로클릭한다음커브내보내기를선택) RoboDK에서수정하고다시가져올수있습니다.
RoboDK를사용하여 3D 공간에서로봇이포인트를따르도록할수있습니다. RoboDK의포인트는객체, 커브에서추출하거나 CSV 파일의포인트목록으로가져올수있습니다. 이옵션은예를들어스폿용접또는드릴링응용분야에유용합니다. 다음영상은스폿용접응용프로그램을설정하는예를보여줍니다. 영상보기.
포인트추종설정을열기위하여유틸리티➔포인트추종프로젝트를선택하십시오. 설정은로봇가공프로젝트와같지만경로입력이포인트선택으로사전설정되어있다는점만다릅니다.
화면에서포인트를선택하려면포인트선택을선택하십시오.
마우스왼쪽클릭으로포인트를선택하십시오. 같은포인트를두번선택하면접근방향이전환됩니다. 또한, 포인트를마우스오른쪽버튼으로클릭하여다음선택을선택하여다음에오는점을선택할수있습니다.
화면을마우스오른쪽버튼으로클릭하고완료를선택하거나 Esc 키를눌러설정메뉴로돌아갑니다. 녹색경로는객체에대한로봇동작을표시합니다.
공구속도및접근거리와같은일부추가옵션은오른쪽위설정에서사용할수있습니다. 기본설정은다음그림과같이표시됩니다.
유틸리티➔포인트불러오기를선택하여텍스트파일또는 CSV 파일에서포인트목록을가져올수있습니다. 포인트가객체로표시되는새로운아이템이스테이션에나타납니다.
파일은곡선의각포인트의 3D 좌표를가진텍스트파일일수있습니다. 선택적으로공구의 Z 축방향을 i, j, k 벡터로제공할수있습니다.
선택적으로커브를마우스오른쪽버튼으로클릭한다음커브포인트추출을선택하여객체의기존커브를포인트로변환할수있습니다.
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을여십시오.
기본적으로 RoboDK는 E 지시문을Extruder라는프로그램에대한프로그램호출로변환하고 E 값을매개변수로전달합니다. 이동작을변경하려면프로그램이벤트를선택하십시오.
압출기값(E)은각이동전에압출해야하는재료의양을나타냅니다. 이값은로봇속도와포인트사이의거리를고려하여로봇에서압출기피드를구동하는데사용할수있습니다.
또는포스트프로세서를사용하여압출기공급을계산하고그에따라적절한코드를생성할수있습니다. 다음섹션에서이에대한예제를제공합니다.
이섹션에서는로봇포스트프로세서를수정하여 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