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 import math, numpy as np
00032
00033 import arm_client as ac
00034 import arms as ar
00035 import roslib; roslib.load_manifest('hrl_cody_arms')
00036 import rospy
00037
00038 import tf.broadcaster as tfb
00039 import hrl_lib.transforms as tr
00040
00041 from hrl_msgs.msg import FloatArray
00042 from std_msgs.msg import Header
00043 from visualization_msgs.msg import Marker
00044
00045 def publish_cartesian_markers(arm, time_stamp, cep, rot, c1, c2, marker_id):
00046 marker = Marker()
00047 marker.header.frame_id = ar.link_tf_name(arm, 0)
00048 marker.header.stamp = time_stamp
00049 marker.ns = arm
00050 marker.type = Marker.ARROW
00051 marker.action = Marker.ADD
00052 marker.pose.position.x = cep[0,0]
00053 marker.pose.position.y = cep[1,0]
00054 marker.pose.position.z = cep[2,0]
00055 marker.scale.x = 0.1
00056 marker.scale.y = 0.2
00057 marker.scale.z = 0.2
00058 marker.lifetime = rospy.Duration()
00059
00060 marker.id = marker_id*100 + 0
00061
00062 rot1 = rot * tr.rotY(math.pi/2)
00063 quat = tr.matrix_to_quaternion(rot1)
00064 marker.pose.orientation.x = quat[0]
00065 marker.pose.orientation.y = quat[1]
00066 marker.pose.orientation.z = quat[2]
00067 marker.pose.orientation.w = quat[3]
00068
00069 marker.color.r = c1[0]
00070 marker.color.g = c1[1]
00071 marker.color.b = c1[2]
00072 marker.color.a = 1.
00073 marker_pub.publish(marker)
00074
00075 marker.id = marker_id*100 + 1
00076 if arm == 'left_arm':
00077
00078 rot2 = rot * tr.rotZ(-math.pi/2)
00079 else:
00080
00081 rot2 = rot * tr.rotZ(math.pi/2)
00082
00083 quat = tr.matrix_to_quaternion(rot2)
00084 marker.pose.orientation.x = quat[0]
00085 marker.pose.orientation.y = quat[1]
00086 marker.pose.orientation.z = quat[2]
00087 marker.pose.orientation.w = quat[3]
00088
00089 marker.color.r = c2[0]
00090 marker.color.g = c2[1]
00091 marker.color.b = c2[2]
00092 marker.color.a = 1.
00093 marker_pub.publish(marker)
00094
00095
00096 def publish_sphere_marker(color, size, frameid, time_stamp, ns,
00097 marker_id):
00098 marker = Marker()
00099 marker.header.frame_id = frameid
00100 marker.header.stamp = time_stamp
00101 marker.ns = ns
00102 marker.type = Marker.SPHERE
00103 marker.action = Marker.ADD
00104 marker.pose.position.x = 0.
00105 marker.pose.position.y = 0.
00106 marker.pose.position.z = 0.
00107 marker.scale.x = size
00108 marker.scale.y = size
00109 marker.scale.z = size
00110 marker.lifetime = rospy.Duration()
00111
00112 marker.id = marker_id
00113 marker.pose.orientation.x = 0
00114 marker.pose.orientation.y = 0
00115 marker.pose.orientation.z = 0
00116 marker.pose.orientation.w = 1
00117
00118 marker.color.r = color[0]
00119 marker.color.g = color[1]
00120 marker.color.b = color[2]
00121 marker.color.a = 1.
00122 marker_pub.publish(marker)
00123
00124
00125 if __name__ == '__main__':
00126 arms = ar.M3HrlRobot()
00127 arm_client = ac.MekaArmClient(arms)
00128
00129 force_r_pub = rospy.Publisher('/r_arm/force_base', FloatArray)
00130 force_l_pub = rospy.Publisher('/l_arm/force_base', FloatArray)
00131 marker_pub = rospy.Publisher('/cody_arms/viz_marker', Marker)
00132
00133 rospy.logout('Sleeping ...')
00134 rospy.sleep(1.0)
00135 rospy.logout('... begin')
00136
00137 r_arm = 'right_arm'
00138 l_arm = 'left_arm'
00139
00140 transform_bcast = tfb.TransformBroadcaster()
00141 torso_link_name = ar.link_tf_name(r_arm, 0)
00142 while not rospy.is_shutdown():
00143 rospy.sleep(0.1)
00144 f_r = arm_client.get_wrist_force(r_arm, base_frame=True)
00145 f_l = arm_client.get_wrist_force(l_arm, base_frame=True)
00146 time_stamp = rospy.Time.now()
00147 h = Header()
00148 h.stamp = time_stamp
00149 force_r_pub.publish(FloatArray(h, f_r))
00150 force_l_pub.publish(FloatArray(h, f_l))
00151
00152 publish_sphere_marker((0.5,0.5,0.5), 0.08, torso_link_name,
00153 time_stamp, 'both_arms', 0)
00154
00155 for arm in [r_arm, l_arm]:
00156 q = arm_client.get_joint_angles(arm)
00157 links = [2, 3, 7]
00158 for i in links:
00159 p, rot = arms.FK_all(arm, q, i)
00160 qaut = tr.matrix_to_quaternion(rot)
00161 frameid = ar.link_tf_name(arm, i)
00162 transform_bcast.sendTransform(p.A1.tolist(), qaut, time_stamp,
00163 frameid, torso_link_name)
00164 publish_sphere_marker((0.5,0.1,0.5), 0.05, frameid,
00165 time_stamp, arm, i)
00166
00167 c1 = (0.5, 0.1, 0.5)
00168 c2 = (0.5, 0.5, 0.1)
00169 p, rot = arms.FK_all(arm, q)
00170 publish_cartesian_markers(arm, time_stamp, p, rot, c1, c2,
00171 marker_id=76)
00172
00173 c1 = (0.2, 0.2, 0.2)
00174 c2 = (0.6, 0.6, 0.6)
00175 jep = arm_client.get_jep(arm)
00176 jep = arms.clamp_to_physical_joint_limits(arm, jep)
00177 cep, rot = arms.FK_all(arm, jep)
00178 publish_cartesian_markers(arm, time_stamp, cep, rot, c1, c2,
00179 marker_id = 77)
00180
00181
00182
00183