00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 import roslib
00038 roslib.load_manifest('qualification')
00039 import rospy
00040
00041 from wg_invent_client import Invent
00042 from pr2_self_test_msgs.srv import ScriptDone, ScriptDoneRequest
00043
00044 class MotorStatusVerifier:
00045 def __init__(self):
00046 rospy.init_node('motor_tester')
00047 self.done_service = rospy.ServiceProxy('prestartup_done', ScriptDone)
00048
00049 self.has_finished = False
00050
00051 def finished(self, pass_bool, msg = ''):
00052 if self.has_finished:
00053 return
00054
00055 try:
00056 result = ScriptDoneRequest()
00057 if pass_bool:
00058 result.result = 0
00059 else:
00060 result.result = 1
00061
00062 result.failure_msg = msg
00063
00064 rospy.wait_for_service('prestartup_done', 10)
00065 self.done_service.call(result)
00066 self.has_finished = True
00067 except Exception, e:
00068 rospy.logerr('Unable to report results. Data: %s. Exception:\n%s' % (msg, traceback.format_exc()))
00069
00070 def check_motor(self):
00071 username = rospy.get_param('/invent/username', None)
00072 password = rospy.get_param('/invent/password', None)
00073
00074 if username == None or password == None:
00075 self.finished(False, 'Invalid username or password to inventory.')
00076 return
00077
00078 self.invent = Invent(username, password)
00079 if not self.invent.login():
00080 self.finished(False, 'Unable to login to invent.')
00081 return
00082
00083 item = rospy.get_param('qual_item/serial', None)
00084 if item is None:
00085 self.finished(False, 'No item found')
00086 return
00087
00088 if len(item) != 12:
00089 self.finished(False, 'Invalid serial number for motor: %s' % item)
00090 return
00091
00092
00093
00094 pf = self.invent.getKV(item, 'Test Status')
00095 if pf == 'PASS':
00096 self.finished(True, 'Motor has passed EE test')
00097 return
00098 self.finished(False, 'Motor has failed EE test')
00099 return
00100
00101
00102 if __name__ == '__main__':
00103 rospy.init_node('motor_tester')
00104
00105 verifier = MotorStatusVerifier()
00106 try:
00107 verifier.check_motor()
00108 rospy.spin()
00109 except KeyboardInterrupt:
00110 pass
00111 except:
00112 import traceback
00113 rospy.logerr(traceback.format_exc())
00114 verifier.finished(False, 'Caught exception in check_motor loop. %s' % traceback.format_exc())