Go to the documentation of this file.00001
00002 import roslib; roslib.load_manifest('srs_human_sensing')
00003 import rospy
00004 import math
00005 from std_msgs.msg import String
00006 from sensor_msgs.msg import PointCloud
00007 from geometry_msgs.msg import Point32
00008 from cob_people_detection_msgs.msg import PeopleDetectionArray
00009 from srs_human_sensing.srv import Comp_HS_Detections
00010 import tf
00011 from std_msgs.msg import Header
00012 from srs_human_sensing.msg import *
00013
00014
00015 def callback_LD(data):
00016 rospy.loginfo("I heard from LD:")
00017 leg_detections = data.points
00018 global legs
00019 legs = []
00020 for i in range (len(leg_detections)):
00021 legs.append(leg_detections[i])
00022 print leg_detections[i].x,",",leg_detections[i].y
00023
00024 match_detections()
00025
00026
00027 def callback_FD(data):
00028 rospy.loginfo("I heard from FD:")
00029 face_detections = data.detections
00030
00031
00032 global faces
00033 faces = []
00034
00035 for i in range (len(face_detections)):
00036
00037
00038
00039 try:
00040
00041 detection1 = tflistener.transformPose('map', face_detections[i].pose)
00042 newpoint = Point32(detection1.pose.position.x,detection1.pose.position.y,detection1.pose.position.z)
00043 faces.append(newpoint)
00044
00045 except (tf.LookupException, tf.ConnectivityException, tf.ExtrapolationException):
00046 print "tf transform error"
00047
00048 match_detections ()
00049
00050 def match_detections ():
00051 distances = []
00052 global legs
00053 global faces
00054 global pub
00055
00056 pc = PointCloud()
00057 pc.header = Header(0,rospy.get_rostime(),'/map')
00058
00059
00060
00061
00062
00063 for m in range (len(faces)):
00064 pc.points.append(Point32(faces[m].x,faces[m].y,1.5))
00065
00066 for l in range (len(legs)):
00067 pc.points.append(Point32(legs[l].x,legs[l].y,1.0))
00068 distancecol = []
00069 for m in range (len(faces)):
00070
00071
00072 dist = (sqrt((faces[m].x-legs[l].x)**2+(faces[m].y-legs[l].y)**2))
00073 distancecol.append (dist)
00074
00075 distances.append (distancecol)
00076
00077 print "distances"
00078 print distances
00079
00080
00081
00082
00083
00084
00085 pub.publish (pc)
00086
00087 def handle_compare_hs_detections (req):
00088 dh=detect_human()
00089 dha=detect_human_array()
00090
00091 dh.pose.x=1
00092 dh.pose.y=2
00093 dh.probability=80
00094 dha.detect_human.append(dh)
00095 return dha
00096
00097 def listener():
00098
00099 rospy.Subscriber("leg_detections_cloud", PointCloud , callback_LD)
00100 rospy.Subscriber("/cob_people_detection/face_position_array", PeopleDetectionArray , callback_FD)
00101 rospy.spin()
00102
00103 if __name__ == '__main__':
00104 print "Listening ..."
00105
00106
00107 rospy.init_node('SRS_HS_listener', anonymous=True)
00108 legs = []
00109 faces = []
00110 tflistener = tf.TransformListener()
00111 tflistener.waitForTransform("/head_cam3d_link", "/map", rospy.Time(), rospy.Duration(5.0))
00112 pub = rospy.Publisher('people_detections_cloud', PointCloud)
00113 serv = rospy.Service ('compare_hs_detections',Comp_HS_Detections,handle_compare_hs_detections)
00114
00115 listener()