add missing digital and analog methods

This commit is contained in:
Olivier R-D 2013-03-06 10:42:51 +01:00
parent 3903a1d400
commit ea0a50b3da
2 changed files with 55 additions and 33 deletions

View File

@ -264,6 +264,8 @@ class SecondaryMonitor(Thread):
""" """
wait for next data packet from robot wait for next data packet from robot
""" """
with self._dataEvent:
self._dataEvent.wait()
def getCartesianInfo(self, wait=False): def getCartesianInfo(self, wait=False):
if wait: if wait:

View File

@ -112,6 +112,7 @@ class URRobot(object):
self.rtmon.start() self.rtmon.start()
self.start_pose = [1.57, -1.77, 1.57, -1.8, -1.57, -1.57] self.start_pose = [1.57, -1.77, 1.57, -1.8, -1.57, -1.57]
self.secmon.wait() # make sure we get data to not suprise clients
def __repr__(self): def __repr__(self):
@ -204,12 +205,32 @@ class URRobot(object):
data = self.secmon.getAllData() data = self.secmon.getAllData()
return data["MasterBoardData"]["analogInput0"], data["MasterBoardData"]["analogInput1"] return data["MasterBoardData"]["analogInput0"], data["MasterBoardData"]["analogInput1"]
def getDigitalOutputBits(self):
def getAnalogInput(self, nb):
"""
get analog input
"""
data = self.secmon.getAllData()
return data["MasterBoardData"]["analogInput" + str(nb)]
def getDigitalInputBits(self):
""" """
get digital output get digital output
""" """
data = self.secmon.getAllData() data = self.secmon.getAllData()
return data["MasterBoardData"]["digitalOutputBits"] return data["MasterBoardData"]["digitalInputBits"]
def getDigitalInput(self, nb):
"""
get digital output
"""
data = self.secmon.getAllData()
val = data["MasterBoardData"]["digitalInputBits"]
mask = 1 << nb
if (val & mask):
return 1
else:
return 0
def getDigitalOutput(self, val): def getDigitalOutput(self, val):
""" """
@ -241,15 +262,15 @@ class URRobot(object):
""" """
relative joint move relative joint move
""" """
l = self.getj() self.movej(joints, acc, vel, wait, relative=True)
newl = [v + l[i] for i, v in enumerate(joints)]
return self.movej(newl, acc, vel, wait )
def movej(self, joints, acc=0.1, vel=0.05, wait=True): def movej(self, joints, acc=0.1, vel=0.05, wait=True, relative=False):
""" """
wrapper around the movej command in URRobot move in joint space
""" """
#todo: should check joints input and velocity if relative:
l = self.getj()
joints = [v + l[i] for i, v in enumerate(joints)]
prog = "movej(%s, a=%s, v=%s)" % (list(joints), acc, vel) prog = "movej(%s, a=%s, v=%s)" % (list(joints), acc, vel)
self.sendProgram(prog) self.sendProgram(prog)
if not wait: if not wait:
@ -273,18 +294,17 @@ class URRobot(object):
def movelrel(self, tpose, acc=0.01, vel=0.01, wait=True): def movelrel(self, tpose, acc=0.01, vel=0.01, wait=True):
""" """
relative move in cartesian coordinate relative linear move
""" """
l = self.getl() return self.movel(tpose, acc, vel, wait, relative=True)
newl = [v + l[i] for i, v in enumerate(tpose)]
return self.movel(newl, acc, vel, wait )
def movel(self, tpose, acc=0.01, vel=0.01, wait=True): def movel(self, tpose, acc=0.01, vel=0.01, wait=True, relative=False):
""" """
move in tool corrdinate system linear move
wrapper around the movel command in URRobot
""" """
#todo: should check joints input and velocity if relative:
l = self.getl()
tpose = [v + l[i] for i, v in enumerate(tpose)]
tpose = [round(i, 2) for i in tpose] tpose = [round(i, 2) for i in tpose]
prog = "movel(p%s, a=%s, v=%s)" % (tpose, acc, vel) prog = "movel(p%s, a=%s, v=%s)" % (tpose, acc, vel)
self.sendProgram(prog) self.sendProgram(prog)
@ -446,12 +466,15 @@ class Robot(object):
trans = self.get_transform(wait) trans = self.get_transform(wait)
return trans.pos return trans.pos
def movel(self, pose, acc=None, vel=None, wait=True): def movel(self, pose, acc=None, vel=None, wait=True, relative=False):
""" """
move linear to given pose in base coordinate move linear to given pose in base coordinate
""" """
t = math3d.Transform(pose) t = math3d.Transform(pose)
self.apply_transform(t, acc, vel, wait) if relative:
self.add_transform_b(t, acc, vel, wait)
else:
self.apply_transform(t, acc, vel, wait)
def movel_tool(self, pose, acc=None, vel=None, wait=True): def movel_tool(self, pose, acc=None, vel=None, wait=True):
""" """
@ -460,12 +483,6 @@ class Robot(object):
t = math3d.Transform(pose) t = math3d.Transform(pose)
self.add_transform_t(t, acc, vel, wait) self.add_transform_t(t, acc, vel, wait)
def movelrel(self, pose, acc=None, vel=None, wait=True):
"""
move linear to given pose in base coordinate at tool point
"""
self.add_transform_b(math3d.Transform(pose), acc, vel, wait)
def getl(self, wait=False): def getl(self, wait=False):
t = self.get_transform(wait) t = self.get_transform(wait)
return t.pose_vector return t.pose_vector
@ -485,23 +502,26 @@ class Robot(object):
return self.robot.setGravity(vector) return self.robot.setGravity(vector)
def set_digital_out(self, output, val): def set_digital_out(self, output, val):
self.robot.setDigitalOut(output, val) return self.robot.setDigitalOut(output, val)
def movej(self, joints, acc=0.1, vel=0.05, wait=True): def get_digital_out(self, nb):
self.robot.getDigitalOutput(nb)
def get_digital_in(self, nb):
return self.robot.getDigitalInput(nb)
def get_analog_in(self, nb):
return self.robot.getAnalogInput(nb)
def movej(self, joints, acc=0.1, vel=0.05, wait=True, relative=False):
""" """
wrapper around the movej command in URRobot wrapper around the movej command in URRobot
""" """
self.robot.movej(joints, acc, vel, wait) self.robot.movej(joints, acc, vel, wait, relative)
def getj(self, wait=False): def getj(self, wait=False):
return self.robot.getj(wait) return self.robot.getj(wait)
def movejrel(self, joints, acc=0.1, vel=0.05, wait=True):
"""
relative joint move
"""
self.robot.movejrel(joints, acc, vel, wait)
def cleanup(self): def cleanup(self):
self.robot.cleanup() self.robot.cleanup()