RiCServo.py
Go to the documentation of this file.
00001 import re
00002 from threading import Thread
00003 import rospy
00004 import rostopic
00005 from BAL.Handlers.keepAliveHandler import KeepAliveHandler
00006 from BAL.Header.Requests.PublishRequest import PublishRequest
00007 from BAL.Header.Requests.servoRequest import ServoRequest
00008 from BAL.Header.Response.ParamBuildResponse import SERVO
00009 
00010 __author__ = 'tom1231'
00011 from rospy import Publisher, Subscriber
00012 from std_msgs.msg import Float32
00013 from BAL.Interfaces.Device import Device
00014 
00015 
00016 class RiCServo(Device):
00017 
00018     def __init__(self, params, servoNum, output):
00019         Device.__init__(self, params.getServoName(servoNum), output)
00020         self._servoNum = servoNum
00021         self._pub = Publisher('%s/Position' % self._name, Float32, queue_size=params.getServoPublishHz(servoNum))
00022         Subscriber('%s/command' % self._name, Float32, self.servoCallBack)
00023         #KeepAliveHandler('%s/Position' % self._name, Float32)
00024         self._haveRightToPublish = False
00025 
00026     def publish(self, data):
00027         msg = Float32()
00028         msg.data = data
00029         self._pub.publish(msg)
00030 
00031     def servoCallBack(self, recv):
00032         Thread(target=self.sendMsg, args=(recv,)).start()
00033         # TOOD: ServoRequest
00034 
00035     def getType(self): return SERVO
00036 
00037     def sendMsg(self, recv):
00038         position = recv.data
00039         msg = ServoRequest(self._servoNum, position)
00040         self._output.write(msg.dataTosend())
00041 
00042     def checkForSubscribers(self):
00043         try:
00044             subCheck = re.search('Subscribers:.*', rostopic.get_info_text(self._pub.name)).group(0).split(': ')[1]
00045 
00046             if not self._haveRightToPublish and subCheck == '':
00047                 self._output.write(PublishRequest(SERVO, self._servoNum, True).dataTosend())
00048                 self._haveRightToPublish = True
00049 
00050             elif self._haveRightToPublish and subCheck == 'None':
00051                 self._output.write(PublishRequest(SERVO, self._servoNum, False).dataTosend())
00052                 self._haveRightToPublish = False
00053         except: pass


ric_board
Author(s): RoboTiCan
autogenerated on Fri Oct 27 2017 03:02:31