00001 #!/usr/bin/python 00002 # 00003 # Copyright (c) 2010, Georgia Tech Research Corporation 00004 # All rights reserved. 00005 # 00006 # Redistribution and use in source and binary forms, with or without 00007 # modification, are permitted provided that the following conditions are met: 00008 # * Redistributions of source code must retain the above copyright 00009 # notice, this list of conditions and the following disclaimer. 00010 # * Redistributions in binary form must reproduce the above copyright 00011 # notice, this list of conditions and the following disclaimer in the 00012 # documentation and/or other materials provided with the distribution. 00013 # * Neither the name of the Georgia Tech Research Corporation nor the 00014 # names of its contributors may be used to endorse or promote products 00015 # derived from this software without specific prior written permission. 00016 # 00017 # THIS SOFTWARE IS PROVIDED BY GEORGIA TECH RESEARCH CORPORATION ''AS IS'' AND 00018 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 00019 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00020 # DISCLAIMED. IN NO EVENT SHALL GEORGIA TECH BE LIABLE FOR ANY DIRECT, INDIRECT, 00021 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 00022 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 00023 # OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00024 # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 00025 # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 00026 # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00027 # 00028 00029 # \author Jason Okerman (Healthcare Robotics Lab, Georgia Tech.) 00030 import roslib; roslib.load_manifest('pr2_clutter_helper') 00031 #depnds on sensor_msgs, opencv2, cv_bridge 00032 import rospy 00033 from sensor_msgs.msg import PointCloud 00034 import cv #version 2.1 expected 00035 from cv_bridge import CvBridge 00036 #may need image_transport? 00037 00038 import time #sleep 00039 from random import * #randint 00040 00041 TOPIC_NAME = "tilt_laser_cloud" 00042 global_ros_data = None 00043 ''' 00044 Comments: 00045 traps exactly one message from the topic specified. This is 00046 assumes the launch of "pr2_laser_snapshotter" with mapping to "tilt_laser_cloud" 00047 ''' 00048 00049 def myCallback(data): 00050 print 'callback called' 00051 global global_ros_data 00052 global_ros_data = data 00053 00054 ##def listener(): 00055 ## rospy.init_node('my_listener', anonymous=True) 00056 ## rospy.Subscriber("tilt_laser_cloud", PointCloud, cloudCallback) 00057 ## rospy.spin() 00058 00059 def subscribe_once(topic_name=TOPIC_NAME, msg_type=PointCloud): 00060 rospy.init_node('my_listener', anonymous=True) 00061 s = rospy.Subscriber(topic_name, msg_type, myCallback) 00062 #spin until 1 message is received. 00063 print 'sleeping now' 00064 while (not global_ros_image): 00065 rospy.sleep(.1) 00066 print 'waking and exiting now' 00067 s.unregister() 00068 return #value will be returned as 'global_ros_data' 00069 00070 if __name__ == 'main': 00071 subscribe_once(TOPIC_NAME, PointCloud) 00072 00073 #assume global_ros_data is defined. 00074 #do something with the pointcloud 00075 for i in range(10): 00076 pt = global_ros.points[i] 00077 print "(%f, %f, %f)" %(pt.x, pt.y, pt.z) 00078 00079 00080 00081 00082 00083