UR10-Sentry/Robot/UR/URScript.py

143 lines
6.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# SW Version 1.8 - URScript manual:
# When connected URScript programs or commands are sent in clear text on the socket.
# Each line is terminated by \n
# python 3 must use bytes (b"") to send the string
# When using URScript the robot moves according to the base plane.
# Joint positions (q) and joint speeds (qd) are represented directly as lists of 6 Floats, one for each robot joint.
# Tool poses (x) are represented as poses also consisting of 6 Floats.
# In a pose, the first 3 coordinates is a position vector and the last 3 an axis-angle
class URScript:
""" Defines functions for use with the URRobot.
Based on URScript manual version 1.8
"""
__version__ = 1.8
@staticmethod
def movec(pose_via, pose_to, a=0.1, v=0.1, r=0, joint_p=False):
"""Move Circular: Move to position (circular in tool-space)
TCP moves on the circular arc segment from current pose, through pose_via to pose_to.
Accelerates to and moves with constant tool speed v
:param pose_via: path point (note: only position is used).
(pose_via can also be specified as joint positions, then forward kinematics is used to
calculate the corresponding pose)
:param pose_to: target pose (pose_to can also be specified as joint positions, then
forward kinematics is used to calculate the corresponding pose
:param a: tool acceleration [m/2^s]
:param v: tool speed [m/s]
:param r: blend radius (of target pose) [m]
:param joint_p: if True, poses are specified as joint positions
:return: string containing the movec script
"""
prefix = "" if joint_p else "p"
return"movec({}[{}, {}, {}, {}, {}, {}], {}[{}, {}, {}, {}, {}, {}], " \
"a={}, v={}, r={})".format(prefix, *pose_via, prefix, *pose_to, a, v, r) + "\n"
@staticmethod
def movej(q, a=0.1, v=0.1, t=0, r=0, joint_p=False):
"""Move to position (linear in joint-space)
When using this command, the
robot must be at standstill or come from a movej or movel with a blend.
The speed and acceleration parameters controls the trapezoid speed
profile of the move. The $t$ parameters can be used in stead to set the
time for this move. Time setting has priority over speed and acceleration
settings. The blend radius can be set with the $r$ parameters, to avoid
the robot stopping at the point. However, if he blend region of this mover
overlaps with previous or following regions, this move will be skipped, and
an Overlapping Blends warning message will be generated.
:param q: joint positions (q can also be specified as a pose, the inverse
kinematics is used to calculate the corresponding joint positions)
:param a: joint acceleration of leading axis [rad/sˆ2]
:param v: joint speed of leading axis [rad/s]
:param t: time [S]
:param r: blend radius [m]
:param joint_p: if True, poses are specified as joint positions
:return: string containing the movej script
"""
prefix = "" if joint_p else "p"
return "movej({}[{}, {}, {}, {}, {}, {}], a={}, v={}, t={}, r={})".format(prefix, *q, a, v, t, r) + "\n"
@staticmethod
def movel(pose, a=0.1, v=0.1, t=0, r=0, joint_p=False):
"""Move to position (linear in tool-space)
:param pose: target pose (pose can also be specified as joint positions,
then forward kinematics is used to calculate the corresponding pose)
:param a: tool acceleration [m/2^s]
:param v: tool speed [m/s]
:param t: time [S]
:param r: blend radius [m]
:param joint_p: if True, poses are specified as joint positions
:return: string containing the movel script
"""
prefix = "" if joint_p else "p"
return "movel({}[{}, {}, {}, {}, {}, {}], a={}, v={}, t={}, r={})".format(prefix, *pose, a, v, t, r) + "\n"
@staticmethod
def movep(pose, a=0.1, v=0.1, t=0, r=0, joint_p=False):
"""Move Process
Blend circular (in tool-space) and move linear (in tool-space) to position.
Accelerates to and moves with constant tool speed v.
:param pose: target pose (pose can also be specified as joint positions,
then forward kinematics is used to calculate the corresponding pose
:param a: tool acceleration [m/2^s]
:param v: tool speed [m/s]
:param t: time [S]
:param r: blend radius [m]
:param joint_p: if True, poses are specified as joint positions
:return: string containing the movep script
"""
prefix = "" if joint_p else "p"
return "movep({}[{}, {}, {}, {}, {}, {}], a={}, v={}, t={}, r={})" .format(prefix, *pose, a, v, t, r) + "\n"
@staticmethod
def speedj(qd, a=0.1, t=0):
"""Accelerate linearly in joint space and continue with constant joint speed.
The time t is optional; if provided the function will return after time t, regardless of the target speed has been reached.
If the time t is not provided, the function will return when the target speed is reached.
:param qd: joint speeds [rad/s]
:param a: joint acceleration [rad/sˆ2]
:param t: time [S]. Optional. Will not consider if equals or bellow 0
:return: string containing the speedj script
"""
speedtime = "" if t <= 0 else ", t=" + str(t)
return "speedj([{}, {}, {}, {}, {}, {}], a={}{})".format(*qd, a, speedtime) + "\n"
@staticmethod
def set_tcp(pose):
"""Set the Tool Center Point
Sets the transformation from the output flange coordinate system to the TCP as a pose.
:param pose: A pose representing the offset in x, y z and the rotation of the tcp around x, y and z
:return: A string containing the set tcp script
"""
return "set_tcp(p[{}, {}, {}, {}, {}, {}])".format(*pose) + "\n"
@staticmethod
def stopj(a=1.5):
"""Stop (linear in joint space)
Decelerate joint speeds to zero
:param a: joint acceleration [rad/sˆ2] (of leading axis)
:return: String containing the stopj script
"""
return "stopj({})".format(a) + "\n"
@staticmethod
def stopl(a=0.5):
"""Stop (linear in tool space)
Decelerate tool speeds to zero
:param a: joint acceleration [rad/sˆ2] (of leading axis)
:return: String containing the stopj script
"""
return "stopl({})".format(a) + "\n"