Go to the documentation of this file.00001
00002
00003 import sys
00004 import math, numpy as np
00005 import copy
00006
00007 import roslib; roslib.load_manifest('hrl_fabric_based_tactile_sensor')
00008 import rospy
00009
00010 import hrl_lib.util as ut
00011 import hrl_lib.transforms as tr
00012
00013 from m3skin_ros.msg import RawTaxelArray
00014 from geometry_msgs.msg import Transform
00015
00016 from m3skin_ros.srv import None_TransformArray, None_TransformArrayResponse
00017 from m3skin_ros.srv import None_String
00018
00019 from pr2_tactile_sleeve_driver_node import Tactile_Sleeve
00020
00021 roslib.load_manifest('pr2_msgs')
00022 from pr2_msgs.msg import PressureState
00023
00024 def pps_cb(msg):
00025 global l_fingertip, r_fingertip
00026 l_fingertip = copy.copy(msg.l_finger_tip)
00027 r_fingertip = copy.copy(msg.r_finger_tip)
00028
00029
00030 if __name__ == '__main__':
00031 import optparse
00032 p = optparse.OptionParser()
00033
00034 p.add_option('--arm_to_use', action='store',
00035 dest='arm', type='string',
00036 help='l or r')
00037
00038 opt, args = p.parse_args()
00039
00040 if opt.arm != 'r' and opt.arm != 'l':
00041 rospy.logerr('Unsupported arm_to_use')
00042 raise RuntimeError('Unsupported arm_to_use')
00043
00044 ts = Tactile_Sleeve(opt.arm)
00045
00046 raw_data_left_pps_pub = rospy.Publisher('pr2_pps_left_sensor/taxels/raw_data',
00047 RawTaxelArray)
00048
00049 raw_data_right_pps_pub = rospy.Publisher('pr2_pps_right_sensor/taxels/raw_data',
00050 RawTaxelArray)
00051
00052 rospy.Service('pr2_pps_left_sensor/taxels/srv/local_coord_frames',
00053 None_TransformArray, ts.local_coord_frames_pps_left_cb)
00054 rospy.Service('pr2_pps_left_sensor/taxels/srv/link_name', None_String,
00055 ts.link_name_pps_left_cb)
00056
00057 rospy.Service('pr2_pps_right_sensor/taxels/srv/local_coord_frames',
00058 None_TransformArray, ts.local_coord_frames_pps_right_cb)
00059 rospy.Service('pr2_pps_right_sensor/taxels/srv/link_name', None_String,
00060 ts.link_name_pps_right_cb)
00061
00062 global l_fingertip, r_fingertip
00063 l_fingertip = None
00064 r_fingertip = None
00065
00066 if opt.arm == 'l':
00067 input_topic = '/pressure/l_gripper_motor'
00068 if opt.arm == 'r':
00069 input_topic = '/pressure/r_gripper_motor'
00070
00071 rospy.Subscriber(input_topic, PressureState, pps_cb)
00072
00073 rospy.init_node('pps_driver_node')
00074
00075 rospy.loginfo('waiting for fingertip data')
00076 while r_fingertip == None:
00077 rospy.sleep(0.1)
00078
00079 rospy.loginfo('Started publishing data')
00080
00081 rta_left = RawTaxelArray()
00082 rta_right = RawTaxelArray()
00083
00084 import time
00085 start = time.time()
00086 while not rospy.is_shutdown():
00087 l = l_fingertip
00088 r = r_fingertip
00089
00090
00091 data_left = [l[3]+l[4], l[5]+l[6], l[1]+l[2]]
00092 rta_left.val_z = data_left
00093
00094
00095 data_right = [r[3]+r[4], r[1]+r[2], r[5]+r[6]]
00096 rta_right.val_z = data_right
00097
00098 raw_data_left_pps_pub.publish(rta_left)
00099 raw_data_right_pps_pub.publish(rta_right)
00100
00101 rospy.sleep(0.02)
00102
00103
00104
00105