2 import roslib; roslib.load_manifest(
'ptu46')
6 from sensor_msgs.msg
import JointState
15 state_lock = threading.Lock()
19 self.
tsmin = rospy.get_param(
'/ptu/min_tilt_speed', 4.0)
20 self.
tsmax = rospy.get_param(
'/ptu/max_tilt_speed', 140.0)
21 self.
psmin = rospy.get_param(
'/ptu/min_pan_speed' , 4.0)
22 self.
psmax = rospy.get_param(
'/ptu/max_pan_speed' , 140.0)
23 self.
pstep = rospy.get_param(
'/ptu/pan_step', 0.00089759763795882463)
24 self.
tstep = rospy.get_param(
'/ptu/tilt_step', 0.00089759763795882463)
28 self.
ptu_pub = rospy.Publisher(
'cmd', JointState)
29 self.
as_goto = actionlib.SimpleActionServer(
'SetPTUState', \
30 ptu_control.msg.PtuGotoAction, execute_cb=self.
cb_goto)
31 self.
as_reset = actionlib.SimpleActionServer(
'ResetPtu', \
32 ptu_control.msg.PtuResetAction, execute_cb=self.
cb_reset)
35 pan, tilt, pan_vel, tilt_vel = np.radians((msg.pan, msg.tilt, msg.pan_vel, msg.tilt_vel))
42 self.
_goto(pan, tilt, pan_vel, tilt_vel)
44 result = ptu_control.msg.PtuGotoResult()
46 self.as_goto.set_succeeded(result)
50 result = ptu_control.msg.PtuResetResult()
51 self.as_reset.set_succeeded(result)
53 def _goto(self, pan, tilt, pan_vel, tilt_vel):
54 rospy.loginfo(
'going to (%s, %s)' % (pan, tilt))
55 msg_out = JointState()
56 msg_out.header.stamp = rospy.Time.now()
57 msg_out.name = [
'head_pan_joint',
'head_tilt_joint']
58 msg_out.position = [pan, tilt]
59 msg_out.velocity = [pan_vel, tilt_vel]
60 self.ptu_pub.publish(msg_out)
62 wait_rate = rospy.Rate(10)
63 while not self.
_at_goal((pan, tilt))
and not rospy.is_shutdown():
67 return all(np.abs(np.array(goal) - (self.
pan, self.
tilt)) <= np.degrees((self.
pstep, self.
tstep)))
70 self.state_lock.acquire()
72 self.state_lock.release()
75 self.state_lock.acquire()
76 pt = np.degrees((self.
pan, self.
tilt))
77 self.state_lock.release()
80 if __name__ ==
'__main__':
81 rospy.init_node(
'ptu46_action_server')