47 from robolink
import *
51 """Prints a pose target""" 53 return (
'pose([%.6f, %.6f, %.6f, %.6f, %.6f, %.6f])' % (x,y,z,r,p,w))
56 """Prints a joint target""" 59 return (
'[%.6f, %.6f, %.6f, %.6f, %.6f, %.6f]' % (angles[0], angles[1], angles[2], angles[3], angles[4], angles[5]))
61 return 'this post only supports 6-axis robots' 66 """Robot post object""" 72 BLEND_RADIUS_MM = 0.001
78 ROBOT_NAME =
'generic' 80 MAIN_PROGNAME =
'unknown' 85 def __init__(self, robotpost=None, robotname=None, robot_axes = 6, **kwargs):
94 self.
addline(
'def %s():' % progname)
98 self.
addline(
'# default parameters:')
109 def ProgSave(self, folder, progname, ask_user = False, show_result = False):
111 progname = progname +
'.' + self.
PROG_EXT 113 filesave =
getSaveFile(folder, progname,
'Save program as...')
114 if filesave
is not None:
115 filesave = filesave.name
119 filesave = folder +
'/' + progname
120 fid = open(filesave,
"w")
123 print(
'SAVED: %s\n' % filesave)
129 filesave_control = filesave +
'.control' 130 if not progitem.Valid():
131 error_msg =
'Problems getting the program' 134 error_msg, joint_list, error_code = progitem.InstructionListJoints(0.5, 0.5, filesave +
'.control')
137 mbox(
'Program issues:\n\n' + error_msg)
141 if type(show_result)
is str:
144 p = subprocess.Popen([show_result, filesave])
145 p = subprocess.Popen([show_result, filesave_control])
146 elif type(show_result)
is list:
148 p = subprocess.Popen(show_result + [filesave])
152 os.startfile(filesave)
153 if len(self.
LOG) > 0:
154 mbox(
'Program generation LOG:\n\n' + self.
LOG)
157 """Send a program to the robot using the provided parameters. This method is executed right after ProgSave if we selected the option "Send Program to Robot". 158 The connection parameters must be provided in the robot connection menu of RoboDK""" 161 def MoveJ(self, pose, joints, conf_RLF=None):
162 """Add a joint movement""" 166 def MoveL(self, pose, joints, conf_RLF=None):
167 """Add a linear movement""" 172 def MoveC(self, pose1, joints1, pose2, joints2, conf_RLF_1=None, conf_RLF_2=None):
173 """Add a circular movement""" 177 def setFrame(self, pose, frame_id=None, frame_name=None):
178 """Change the robot reference frame""" 185 def setTool(self, pose, tool_id=None, tool_name=None):
186 """Change the robot TCP""" 190 """Pause the robot program""" 194 self.
addline(
'sleep(%.3f)' % (time_ms*0.001))
197 """Changes the robot speed (in mm/s)""" 198 self.
addline(
'speed_mms = %.3f' % speed_mms)
201 """Changes the robot acceleration (in mm/s2)""" 202 self.
addline(
'accel_mmss = %.3f' % accel_mmss)
205 """Changes the robot joint speed (in deg/s)""" 206 self.
addline(
'speed_degs = %.3f' % speed_degs)
209 """Changes the robot joint acceleration (in deg/s2)""" 210 self.
addline(
'accel_degss = %.3f' % accel_degss)
213 """Changes the zone data approach (makes the movement more smooth)""" 220 """Sets a variable (output) to a given value""" 221 if type(io_var) != str:
222 io_var =
'OUT[%s]' % str(io_var)
223 if type(io_value) != str:
230 self.
addline(
'%s=%s' % (io_var, io_value))
232 def waitDI(self, io_var, io_value, timeout_ms=-1):
233 """Waits for an input io_var to attain a given value io_value. Optionally, a timeout can be provided.""" 234 if type(io_var) != str:
235 io_var =
'IN[%s]' % str(io_var)
236 if type(io_value) != str:
244 self.
addline(
'WAIT FOR %s==%s' % (io_var, io_value))
246 self.
addline(
'WAIT FOR %s==%s TIMEOUT=%.1f' % (io_var, io_value, timeout_ms))
248 def RunCode(self, code, is_function_call = False):
249 """Adds code or a function call""" 251 code.replace(
' ',
'_')
258 """Show a message on the controller screen""" 262 self.
addline(
'popup("%s")' % message)
266 """Add a program line""" 270 """Add a log message""" 271 self.
LOG = self.
LOG + newline +
'\n' 276 [x,y,z,r,p,w] = xyzrpw
286 return Mat([[cb*ca, ca*sc*sb - cc*sa, sc*sa + cc*ca*sb, x],[cb*sa, cc*ca + sc*sb*sa, cc*sb*sa - ca*sc, y],[-sb, cb*sc, cc*cb, z],[0,0,0,1]])
289 """Test the post with a basic program""" 291 robot =
RobotPost(
'Universal Robotics',
'Generic UR robot')
293 robot.ProgStart(
"Program")
294 robot.RunMessage(
"Program generated by RoboDK",
True)
295 robot.setFrame(
Pose([807.766544, -963.699898, 41.478944, 0, 0, 0]))
296 robot.setTool(
Pose([62.5, -108.253175, 100, -60, 90, 0]))
298 robot.setAcceleration(3000)
299 robot.MoveJ(
Pose([200, 200, 500, 180, 0, 180]), [-46.18419, -6.77518, -20.54925, 71.38674, 49.58727, -302.54752] )
300 robot.MoveL(
Pose([200, 250, 348.734575, 180, 0, -150]), [-41.62707, -8.89064, -30.01809, 60.62329, 49.66749, -258.98418] )
301 robot.MoveL(
Pose([200, 200, 262.132034, 180, 0, -150]), [-43.73892, -3.91728, -35.77935, 58.57566, 54.11615, -253.81122] )
302 robot.RunMessage(
"Setting air valve 1 on")
303 robot.RunCode(
"TCP_On",
True)
305 robot.MoveL(
Pose([200, 250, 348.734575, 180, 0, -150]), [-41.62707, -8.89064, -30.01809, 60.62329, 49.66749, -258.98418] )
306 robot.MoveL(
Pose([250, 300, 278.023897, 180, 0, -150]), [-37.52588, -6.32628, -34.59693, 53.52525, 49.24426, -251.44677] )
307 robot.MoveL(
Pose([250, 250, 191.421356, 180, 0, -150]), [-39.75778, -1.04537, -40.37883, 52.09118, 54.15317, -246.94403] )
308 robot.RunMessage(
"Setting air valve off")
309 robot.RunCode(
"TCP_Off",
True)
311 robot.MoveL(
Pose([250, 300, 278.023897, 180, 0, -150]), [-37.52588, -6.32628, -34.59693, 53.52525, 49.24426, -251.44677] )
312 robot.MoveL(
Pose([250, 200, 278.023897, 180, 0, -150]), [-41.85389, -1.95619, -34.89154, 57.43912, 52.34162, -253.73403] )
313 robot.MoveL(
Pose([250, 150, 191.421356, 180, 0, -150]), [-43.82111, 3.29703, -40.29493, 56.02402, 56.61169, -249.23532] )
314 robot.ProgFinish(
"Program")
317 if len(robot.LOG) > 0:
318 mbox(
'Program generation LOG:\n\n' + robot.LOG)
320 input(
"Press Enter to close...")
322 if __name__ ==
"__main__":
323 """Function to call when the module is executed by itself: test""" def RunCode(self, code, is_function_call=False)
def MoveC(self, pose1, joints1, pose2, joints2, conf_RLF_1=None, conf_RLF_2=None)
def setDO(self, io_var, io_value)
def MoveL(self, pose, joints, conf_RLF=None)
def setSpeedJoints(self, speed_degs)
def waitDI(self, io_var, io_value, timeout_ms=-1)
def setAcceleration(self, accel_mmss)
def setTool(self, pose, tool_id=None, tool_name=None)
def UploadFTP(program, robot_ip, remote_path, ftp_user, ftp_pass)
def setSpeed(self, speed_mms)
def addlog(self, newline)
def MoveJ(self, pose, joints, conf_RLF=None)
def mbox(msg, b1='OK', b2='Cancel', frame=True, t=False, entry=None)
def ProgStart(self, progname)
def __init__(self, robotpost=None, robotname=None, robot_axes=6, kwargs)
def ProgSendRobot(self, robot_ip, remote_path, ftp_user, ftp_pass)
def addline(self, newline)
def getSaveFile(strdir='C:\\', strfile='file.txt', strtitle='Save file as ...')
def setFrame(self, pose, frame_id=None, frame_name=None)
def setZoneData(self, zone_mm)
def setAccelerationJoints(self, accel_degss)
def RunMessage(self, message, iscomment=False)
def ProgFinish(self, progname)
def ProgSave(self, folder, progname, ask_user=False, show_result=False)