Go to the documentation of this file.00001
00002
00003 import sys
00004 import math, numpy as np
00005
00006 import roslib; roslib.load_manifest('hrl_fabric_based_tactile_sensor')
00007 import rospy
00008 from hrl_msgs.msg import FloatArray
00009
00010 import hrl_lib.util as ut
00011 import hrl_lib.transforms as tr
00012
00013 import hrl_fabric_based_tactile_sensor.adc_publisher_node as apn
00014
00015 from m3skin_ros.msg import RawTaxelArray
00016 from geometry_msgs.msg import Transform
00017
00018 from m3skin_ros.srv import None_TransformArray, None_TransformArrayResponse
00019 from m3skin_ros.srv import None_String
00020 from sensor_msgs.msg import JointState
00021
00022 from pr2_tactile_sleeve_driver_node import Tactile_Sleeve
00023
00024 def joint_states_cb(data):
00025 global ignore_forearm_taxel0
00026
00027 idx = data.name.index('r_wrist_flex_joint')
00028 ang = data.position[idx]
00029
00030 if abs(ang) > math.radians(70.):
00031 ignore_forearm_taxel0 = True
00032 else:
00033 ignore_forearm_taxel0 = False
00034
00035
00036
00037 if __name__ == '__main__':
00038 import optparse
00039 p = optparse.OptionParser()
00040
00041 p.add_option('--arm_to_use', action='store',
00042 dest='arm', type='string',
00043 help='l or r')
00044
00045 opt, args = p.parse_args()
00046
00047 if opt.arm != 'r' and opt.arm != 'l':
00048 rospy.logerr('Invalid arm_to_use')
00049 raise RuntimeError('Invalid arm_to_use')
00050
00051 ts = Tactile_Sleeve(opt.arm)
00052 raw_data_forearm_pub = rospy.Publisher('pr2_fabric_forearm_sensor/taxels/raw_data',
00053 RawTaxelArray)
00054 rospy.Service('pr2_fabric_forearm_sensor/taxels/srv/local_coord_frames',
00055 None_TransformArray, ts.local_coord_frames_forearm_cb)
00056 rospy.Service('pr2_fabric_forearm_sensor/taxels/srv/link_name', None_String,
00057 ts.link_name_forearm_cb)
00058
00059
00060 global ignore_forearm_taxel0
00061 ignore_forearm_taxel0 = False
00062 rospy.Subscriber('/joint_states', JointState, joint_states_cb)
00063
00064 rospy.init_node('fabric_tactile_sleeve_driver_node')
00065
00066 baudrate = 115200
00067 dev1_nm = '/dev/robot/arduino1'
00068 dev1 = apn.setup_serial(dev1_nm, baudrate)
00069
00070 for i in range(10):
00071 dev1.readline()
00072
00073 rospy.loginfo('Started publishing data')
00074
00075
00076
00077 adc_data = apn.get_adc_data(dev1, 32)
00078 a forearm_taxel0_dummy_val = adc_data[0] - 30
00079
00080 rta2 = RawTaxelArray()
00081 while not rospy.is_shutdown():
00082 adc_data = apn.get_adc_data(dev1, 32)
00083
00084
00085 forearm_vals = adc_data[0:13] + adc_data[14:15]
00086 if ignore_forearm_taxel0:
00087 forearm_vals[0] = forearm_taxel0_dummy_val
00088 rta2.val_z = forearm_vals
00089 raw_data_forearm_pub.publish(rta2)
00090
00091 dev1.close()
00092
00093
00094