포스트프로세서는특정로봇컨트롤러용로봇프로그램을생성할수있으므로오프라인프로그래밍의핵심단계입니다. 로봇프로그래밍은공급업체별프로그래밍규칙을따라야하며, 이러한규칙은포스트프로세서에서구현됩니다. 로봇포스트프로세서는특정로봇컨트롤러에대해로봇프로그램을생성하는방법을정의합니다.
RoboDK 시뮬레이션에서특정로봇프로그램으로의변환은포스트프로세서에의해수행됩니다. 각로봇은특정로봇프로그래밍스타일을정의하는포스트프로세서에연결됩니다. 포스트프로세서는프로그램 생성섹션에표시된대로프로그램을오프라인으로생성할때사용됩니다(프로그램을마우스우측버튼으로클릭한후로봇프로그램생성을선택).
RoboDK는사용 가능한 포스트 프로세서섹션에나열된많은로봇컨트롤러를지원하는많은포스트프로세서와함께제공됩니다. 또는맞춤형포스트프로세서를생성하거나기존포스트프로세서를수정할수있습니다. 사용가능한모든포스트프로세서는다음폴더에있습니다.
C:/RoboDK/Posts/
하나의포스트프로세서는하나의PY 파일입니다(각포스트프로세서는 Python 스크립트로정의됨). RoboDK의Posts폴더에있는파일을수동으로추가, 수정또는삭제할수있습니다. RoboDK 포스트프로세서(PY 파일)가제공된경우, RoboDK에서선택할수있도록 Posts 폴더에배치해야합니다.
이섹션에서는포스트프로세서를선택, 편집또는생성하여 RoboDK에서로봇과함께사용하는방법을보여줍니다. 다음영상은이에대한간략한개요를보여줍니다: https://www.robodk.com/help#PostProcessor
로봇의특정포스트프로세서를선택하려면다음절차를수행하십시오.
1.로봇이나프로그램을마우스우측버튼으로클릭하십시오.
2.포스트 프로세서 선택을선택하십시오.
3.목록에서포스트프로세서를선택하십시오.
4.확인을선택하십시오.


이제변경사항이적용되고프로그램을다시생성하여결과를볼수있습니다.
또한, 다음단계에따라포스트프로세서를선택할수도있습니다.
1.로봇을더블클릭하여로봇패널을여십시오.
2.파라미터를선택하십시오.
3.다음그림과같이로봇브랜드상자에서포스트프로세서를선택하십시오.

그래픽사용자인터페이스를사용하여포스트프로세서설정을쉽게수정할수있습니다. 포스트프로세서에디터를사용하면로봇컨트롤러에특화된, 포스트프로세서에정의된변수를수정할수있습니다.
포스트프로세서에디터는포스트프로세서를사용자지정하는데도움이되는플러그인입니다. 다음페이지에서플러그인을쉽게다운로드하여설치할수있습니다: https://robodk.com/addin/com.robodk.plugin.postprocessoreditor.
포스트프로세서에디터를열려면다음단계를따르십시오:
1.Program→Post Processor Editor를선택합니다.
2.사용자지정할포스트프로세서를선택합니다.
3.OK를선택합니다. 새창이열리고수정할수있는변수가표시됩니다.
4.Save Post Processor as…를선택합니다.
5.저장할이름을입력합니다.


예를들어 Fanuc R30iA 포스트프로세서를선택하면이전이미지에표시된창이나타납니다.
기존포스트프로세서를수정하거나새포스트프로세서를만들수있습니다. 포스트프로세서는 C:/RoboDK/Posts/ 폴더에있어야 RoboDK에서선택할수있습니다. 이전섹션에서는특정로봇을포스트프로세서에연결하는방법을설명했습니다.
각포스트프로세서는하나의 PY 파일입니다. 다른포스트프로세서를공유하기위해파일이름을바꾸거나 C:/RoboDK/Posts/ 폴더에서파일을복사하거나 C:/RoboDK/Posts/ 폴더로파일을복사할수있습니다. 기존포스트프로세서스크립트를삭제하려면 Posts 폴더에서해당 PY 파일을삭제하십시오.
포스트프로세서는텍스트편집기나파이썬편집기(파이썬 IDLE)를사용하여편집할수있습니다.
포스트프로세서를올바르게테스트하고사용하려면파이썬을설치해야합니다. 파이썬은기본적으로 RoboDK와함께설치됩니다.
기존포스트프로세서를수정하려면아래의절차를수행하십시오.
1.프로그램 ➔ 포스트 프로세서 추가 / 편집을선택하십시오.
2.기존포스트프로세서를선택하십시오.
3.확인을선택하십시오. 텍스트편집기와프로그램이열릴것입니다.
4.실행 ➔ 모듈 실행(F5)을선택하여결과를미리봅니다. 필요한경우변경하십시오.

또는포스트프로세서를수동으로편집할수있습니다.
1.포스트프로세서폴더로이동하십시오. C:/RoboDK/Posts/
2.파이썬 IDLE(오른쪽클릭➔ IDLE로편집) 또는다른텍스트편집기로 PY 파일(*.py)을여십시오.
3.원하는대로변경하십시오.
4.파일을실행하여결과를테스트하십시오. 파이썬 IDLE에서실행 ➔ 모듈 실행(기본적으로 F5)을선택하십시오.
또는텍스트편집기를사용하여이파일을편집하고두번클릭하여파이썬으로실행할수있습니다.

중요 사항: Notepad++와같은텍스트편집기를사용하는경우,탭을4개의공백으로바꾸는것이중요합니다. 그렇지않으면들여쓰기에탭과공백이일관되지않는다는 TabError가발생합니다.
이섹션에서는기존포스트프로세서를약간변경하는방법을보여줍니다. 대부분의포스트프로세서에는공급업체별로봇프로그래밍기능을수정하거나활성화하기위해쉽게수정할수있는일부변수가있습니다.
예를들어기존 ABB 및쿠카포스트프로세서가다음과같이변경됩니다.
●관절각도정보를사용하여동작명령을생성하도록관절이동을설정합니다.
●최대속도를 500 mm/s로재정의하십시오. 로봇이더빨리움직이도록프로그램되어있어도속도는포스트프로세서에서 500 mm/s로제한됩니다.
●각프로그램을별도의파일로생성하고프로그램이프로그램당최대3000줄의코드를갖도록합니다. 큰프로그램은작은프로그램으로나누어차례로호출됩니다.
이전섹션에서는기존포스트프로세서를열어편집하는방법을보여줍니다.
1.프로그램 ➔ 포스트 프로세서 추가 / 편집을선택하십시오.
2.포스트프로세서를선택하십시오. 예를들어, 쿠카 KRC4의경우쿠카_KRC4를선택하십시오.
3.확인을선택하십시오. 포스트프로세서는파이썬 IDLE 편집기에표시됩니다.
다음섹션에서는텍스트편집기(또는파이썬 IDLE)에서제안된변경을수행하는방법을보여줍니다.
파일당둘이상의프로그램을추가하지않고최대3000줄의코드로프로그램을생성하려면다음변경사항을추가하십시오.
1.변수MAX_LINES_X_PROG를 3000으로설정하십시오.
2.INCLUDE_SUB_PROGRAMS변수를 False로설정하십시오.

다음단계에따라 500 mm/s의속도제한을설정하고 RoboDK를사용하여더높은속도를설정하지마십시오. 이예에서는쿠카 KRC2 또는 KRC4 컨트롤러를사용한다고가정합니다.
1.setSpeed함수정의를지정하십시오(def setSpeed).
2.속도를 m/s로변경하는 $VEL.CP 출력을생성하기전에다음코드를추가하십시오.
speed_mms = 분 (speed_mms, 500)

이섹션에서는기존포스트프로세서의참조좌표계설정을사용자지정하는방법을설명합니다. 예를들어 KUKA 로봇에사용자지정참조좌표계를설정하는경우입니다.
컴파일된포스트프로세서를사용하여필요한함수(예: setFrame, setTool, setSpeed)만쉽게재구현할수있습니다.
이예제에서는 KUKA 컨트롤러의베이스정의방식을사용자지정하고자한다고가정합니다. 예를들어참조좌표계를설정할때다음줄을출력하고싶다면:
BASE_DATA[8] = {FRAME: X:2000, Y:0, Z:0, A:0, B:0, C:0}
BAS (#BASE,8)
C:/RoboDK/Posts/ 폴더에다음몇줄을포함하는 KUKA_Custom_Post.py라는새파일을만들기만하면됩니다. 이파일은기본 KUKA_KRC2 포스트프로세서를사용하고참조좌표계설정(setFrame 함수)을재정의합니다:
from KUKA_KRC2 import RobotPost as MainPost
class RobotPost(MainPost):
def setFrame(self, pose, frame_id, frame_name):
"""Change the robot reference frame"""
self.addline('; BASE_DATA[8] = {FRAME: %s}' % (self.pose_2_str(pose)))
self.addline('BAS (#BASE,8)')
그러나특정조건에따라사용자지정필터를추가하여기본동작을사용할지사용자지정구현을사용할지필터링할수도있습니다. 이경우포스트프로세서파일은다음과같이수정할수있습니다:
from KUKA_KRC2 import RobotPost as MainPost
class RobotPost(MainPost):
def setFrame(self, pose, frame_id, frame_name):
"""Change the robot reference frame"""
if frame_name == "Frame 4": # Enter any condition here
# Trigger the call to the default method (same as not overriding the function)
super(MainPost, self).setFrame(pose, frame_id, frame_name)
return
# Implement a custom setFrame
self.addline('; ---- Setting reference: %s ----' % frame_name)
self.addline('; BASE_DATA[8] = {FRAME: %s}' % (self.pose_2_str(pose)))
self.addline('BAS (#BASE,8)')
self.addline('; --------------------------')
KUKA KRC 컨트롤러용프로그램을생성할때좌표계또는참조좌표계를설정하는방법은여러가지가있습니다. 다음 setFrame 정의는다양한옵션을사용한대체구현예를보여줍니다:
def setFrame(self, pose, frame_id, frame_name):
"""Change the robot reference frame"""
self.addline('; ---- Setting reference: %s ----' % frame_name)
# option 1: Build the kinematics based on the MACHINE_DEF array and the provided offset
#self.addline('$BASE = EK (MACHINE_DEF[2].ROOT, MACHINE_DEF[2].MECH_TYPE, { %s })' % self.pose_2_str(pose))
# option 2: Build the kinematics based on the EX_AX_DATA array and the provided offset
#self.addline('$BASE=EK(EX_AX_DATA[1].ROOT,EX_AX_DATA[1].EX_KIN, { %s })' % self.pose_2_str(pose))
# Option 3: Build the kinematics based on the EX_AX_DATA array and the pre-defined offset
#self.addline('; Using external axes')
#self.addline('; $BASE=EK(EX_AX_DATA[1].ROOT,EX_AX_DATA[1].EX_KIN,EX_AX_DATA[1].OFFSET)')
#self.addline('; $ACT_EX_AX= %i' % (self.nAxes - 6))
# Option 4: Use the BAS(#ex_BASE) init function from the BAS.src file
#self.addline('; BASE_DATA[%i] = {FRAME: %s}' % (self.BASE_ID, self.pose_2_str(pose)))
#self.addline('BAS(#ex_BASE,%i)' % self.BASE_ID)
# Option 5: Use the BAS(#BASE) init function from the BAS.src file
self.addline('; BASE_DATA[%i] = {FRAME: %s}' % (self.BASE_ID, self.pose_2_str(pose)))
self.addline('BAS (#BASE,%i)' % self.BASE_ID)
# Option 6: Directly take the base from the BASE_DATA array (usually what the BAS(#BASE) does)
# self.addline('$BASE=BASE_DATA[%i]' % self.BASE_ID)
self.addline('; --------------------------')
다음단계는조인트각도를사용하여축방향이동을강제하기위해기존포스트프로세서를수정하는방법을보여줍니다. 이예에서는 ABB IRC5 로봇컨트롤러에이변경사항을적용하는방법을보여줍니다.
1.특정로봇컨트롤러의프로그래밍매뉴얼을찾으십시오. 이예에서는 ABB IRC5 RAPID 프로그래밍매뉴얼을사용합니다.
2.조인트운동지침을찾으십시오. 이경우 ABB의절대관절이동명령을MoveAbsJ라고합니다. 이명령에는조인트축을정의하는jointtarget 변수가필요합니다.

3.프로그램 ➔ 포스트 프로세서 추가 / 편집을선택하고현재수정하고있는포스트프로세서를선택하십시오. 현재사용자정의가능한포스트프로세서를사용중인경우기본적으로선택됩니다.
4.포스트프로세서내부에서MoveJ기능을찾아야합니다. 이기능은포스트프로세서가조인트동작명령을생성하는방식을정의합니다. 또는 RoboDK는선형이동에MoveL을사용합니다. 파이썬프로그래밍언어를사용하여다음이미지와같이관절각도정보를제공하도록프로그램파일에추가된행을수정하십시오.

5.마지막으로, 포스트프로세서가조인트각도또는포즈를문자열로변환하는방식을수정해야할수도있습니다. angles_2_str 및pose_2_str함수는조인트각도와포즈가각각텍스트로변환되는방식을정의합니다.

대부분의 RoboDK 포스트프로세서는조인트이동에조인트데이터를사용하고선형이동에직교좌표를사용합니다. 조인트좌표를지정하여조인트움직임으로일련의선형움직임에서항상첫번째점을시작하는것이좋습니다. 이것은잘못된로봇구성으로프로그램을시작하지않고특이점또는축제한에도달하지않도록합니다.
기본적으로 RoboDK에서다음포스트프로세서를사용할수있습니다.
●ABB_RAPID_IRC5: for ABB IRC5 robot controllers
●ABB_RAPID_S4C: for ABB S4C robot controllers
●Adept_Vplus: for Adept V+ programming language
●Allen_Bradley_Logix5000: for Allen Bradley Logix5000 PCL
●CLOOS: for CLOOS robot controllers
●Comau_C5G: for Comau C5G robot controllers
●Denso_PAC: for Denso RC7 (and older) robot controllers (PAC programming language)
●Denso_RC8: for Denso RC8 (and newer) robot controllers (PacScript programming language)
●Dobot: for educational Dobot robots
●Fanuc_R30iA: for Fanuc R30iA and R30iB robot controllers
●Fanuc_R30iA_Arc: for Fanuc Arc welding
●Fanuc_RJ3: for Fanuc RJ3 robot controllers
●GCode_BnR: for B&R robot controllers
●GSK: for GSK robots
●HIWIN_HRSS: for HIWIN robots
●KAIRO: for Keba Kairo robot controllers
●KUKA_IIWA: for KUKA IIWA sunrise programming in Java
●KUKA_KRC2: for KUKA KRC2 robot controllers
●KUKA_KRC2_CamRob: for KUKA CamRob milling option
●KUKA_KRC2_DAT: for KUKA KRC2 robot controllers including DAT data files
●KUKA_KRC4: for KUKA KRC4 robot controllers
●KUKA_KRC4_Config: for KUKA KRC4 robot controllers with configuration data in each line
●KUKA_KRC4_DAT: for KUKA KRC4 robot controllers including DAT data files
●Kawasaki: for Kawasaki AS robot controllers
●Mecademic: for Mecademic Meca500 robot
●Mitsubishi: for Mitsubishi robot controllers
●Motoman/Yaskawa: for different Motoman robot controllers using Inform II and Inform III (JBI)
●Nachi_AX_FD: for Nachi AX and FD robot controllers
●OTC: for Daihen OTC robot controllers
●Panasonic: For Panasonic PRG programs
●Precise: for Precise Scara robots
●Siemens_Sinumerik: for Siemens Sinumerik ROBX robot controller
●Staubli_VAL3: for Staubli VAL3 robot programs (CS8 controllers and later)
●Staubli_VAL3_InlineMove: to generate Staubli VAL3 programs with inline movement data
●Staubli_S6: for Staubli S6 robot controllers
●Toshiba: for Toshiba robots
●Universal_Robots: for UR robots, generates linear movements as pose targets
●Universal_Robots_RobotiQ: for UR robots including support for RobotiQ gripper
●Universal_Robots_joints: for UR robots, generates linear movements as joint targets
●Yamaha: for Yamaha robots
참고#RefPostProc
다음영상은 RoboDK의포스트프로세서개요를보여줍니다.
https://robodk.com/help#PostProcessor
포스트프로세서의각방법에대한참조문서는온라인으로제공됩니다.
http://robodk.com/doc/en/PythonAPI/postprocessor.html
모든포스트프로세서는robodk.py모듈을사용합니다.
http://robodk.com/doc/en/PythonAPI/robodk.html#robodk.Mat
robodk.py모듈은포즈작업 (곱셈, 역,…) 및포즈간의오일러각도를다른형식으로변환하는도구를제공합니다.
파이썬프로그래밍에대한정보는온라인에서제공됩니다.
https://docs.python.org/3/
프로그램이생성되면사전처리된 / 보편적인파이썬프로그램이생성되어로컬임시폴더에저장됩니다. 사전처리된프로그램은RoboDK에서사용자가선택한포스트프로세서와연결되어있습니다. 포스트프로세서는원하는코드를생성하는 RobotPost 클래스를정의합니다.
사전컴파일된프로그램은파이썬으로실행됩니다.
이섹션에는포스트프로세서및필요에맞게사용자지정하는방법에관한유용한참고자료가포함되어있습니다.
지원되는포스트프로세서의전체목록은포스트프로세서라이브러리에서확인할수있습니다: https://robodk.com/posts. 포스트프로세서를선택하면지원되는컨트롤러와사용자지정가능한매개변수에대해자세히알아볼수있습니다.
포스트프로세서의각메서드에대한참조문서는문서의 RoboDK API 섹션에서확인할수있습니다: https://robodk.com/doc/en/PythonAPI/postprocessor.html
대부분의포스트프로세서는 robodk.py 모듈을사용합니다. robodk.py 모듈은포즈연산(곱셈, 역행렬등) 및다양한형식의오일러각도와포즈간변환을위한도구등을제공합니다.
파이썬프로그래밍에대해알아볼수있는온라인문서가제공됩니다: https://docs.python.org/3/.
RoboDK에서프로그램을생성하면전처리된범용파이썬프로그램이생성되어로컬임시폴더에저장됩니다. 이전처리된프로그램은 (RoboDK에서사용자가선택한) 적절한포스트프로세서와연결됩니다. 포스트프로세서에는로봇컨트롤러용으로프로그램을생성하는방법을정의하는 RobotPost 클래스가있습니다.
사전컴파일된프로그램은파이썬을사용하여실행됩니다.