Skip to content

Commit 8b91b68

Browse files
committed
added watchdog for servoing
1 parent b4c12e7 commit 8b91b68

File tree

2 files changed

+28
-7
lines changed

2 files changed

+28
-7
lines changed

src/prpy/base/mico.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
from manipulator import Manipulator
3333
from std_msgs.msg import Float64
3434
import rospy
35+
from ..util import Watchdog
36+
from functools import partial
3537

3638
class Mico(Manipulator):
3739
def __init__(self, sim,
@@ -69,11 +71,13 @@ def __init__(self, sim,
6971
self.GetName(), '', self.GetArmIndices(), 0, True)
7072
self.servo_simulator = ServoSimulator(self, rate=20,
7173
watchdog_timeout=0.1)
72-
7374
else:
74-
#if not simulation, create publishers for each joint
75+
#if not simulation, create publishers for each joint
7576
self.velocity_topic_names = ['vel_j'+str(i)+'_controller/command' for i in range(1,7)]
76-
self.velocity_publishers = [rospy.Publisher(topic_name, Float64) for topic_name in self.velocity_topic_names]
77+
self.velocity_publishers = [rospy.Publisher(topic_name, Float64, queue_size=1) for topic_name in self.velocity_topic_names]
78+
79+
#create watchdog to send zero velocity
80+
self.servo_watchdog = Watchdog(timeout_duration=0.3, handler=lambda: self.SendVelocitiesToMico([0.,0.,0.,0.,0.,0.,]))
7781

7882
def CloneBindings(self, parent):
7983
super(Mico, self).CloneBindings(parent)
@@ -106,9 +110,11 @@ def Servo(self, velocities):
106110
self.GetRobot().GetController().Reset(0)
107111
self.servo_simulator.SetVelocity(velocities)
108112
else:
109-
for velocity_publisher,velocity in zip(self.velocity_publishers, velocities):
110-
velocity_publisher.publish(velocity)
111-
#raise NotImplementedError('Servo is not implemented.')
112-
113+
self.SendVelocitiesToMico(velocities)
114+
#reset watchdog timer
115+
self.servo_watchdog.reset()
113116

114117

118+
def SendVelocitiesToMico(self, velocities):
119+
for velocity_publisher,velocity in zip(self.velocity_publishers, velocities):
120+
velocity_publisher.publish(velocity)

src/prpy/util.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -497,6 +497,21 @@ def stop(self):
497497
def get_duration(self):
498498
return self.end - self.start
499499

500+
class Watchdog(object):
501+
def __init__(self, timeout_duration, handler):
502+
self.timeout_duration = timeout_duration
503+
self.handler = handler
504+
self.timer = threading.Timer(self.timeout_duration, self.handler)
505+
self.timer.start()
506+
507+
def reset(self):
508+
self.timer.cancel()
509+
self.timer = threading.Timer(self.timeout_duration, self.handler)
510+
self.timer.start()
511+
512+
def stop(self):
513+
self.timer.cancel()
514+
500515

501516
def quadraticPlusJointLimitObjective(dq, J, dx, q, q_min, q_max, delta_joint_penalty=5e-1, lambda_dqdist=0.01, *args):
502517
'''

0 commit comments

Comments
 (0)