st_get_list_of_stamped_poses_from_csv_file.py
Go to the documentation of this file.
00001 #!/usr/bin/python
00002 import roslib; roslib.load_manifest('iri_common_smach')
00003 import rospy
00004 import smach
00005 import smach_ros
00006 import geometry_msgs
00007 
00008 from geometry_msgs.msg import * 
00009 
00010 import csv
00011 
00012 """
00013 Reads PoseStamped list from a csv file
00014 format of the file:
00015 # allowed comments using '#' at the beginning of the line
00016 frame_id, pos_x, pos_y, pos_z, ori_x, ori_y, ori_z, ori_w
00017 """
00018 def get_list_of_stamped_poses_from_csv_file(filename):
00019     list_of_poses = []
00020     
00021     with open(filename,'rb') as f:
00022         reader = csv.reader(f)
00023 
00024         try:
00025             for row in reader:
00026                 if row:
00027                     if row[0][0] != '#':
00028                         tmp_pose = geometry_msgs.msg.PoseStamped()
00029                         tmp_pose.header.frame_id = row[0]
00030                         tmp_pose.header.stamp = rospy.Time.now()
00031                         tmp_pose.pose.position.x = row[1]
00032                         tmp_pose.pose.position.y = row[2]
00033                         tmp_pose.pose.position.z = row[3]
00034                         tmp_pose.pose.orientation.x = row[4]
00035                         tmp_pose.pose.orientation.y = row[5]
00036                         tmp_pose.pose.orientation.z = row[6]
00037                         tmp_pose.pose.orientation.w = row[7]
00038                         list_of_poses.append(tmp_pose)
00039         except csv.Error as e:
00040             sys.exit('file %s, line %d: %s' % (filename, reader.line_num, e))
00041 
00042     return list_of_poses
00043 
00044 # define state for reading a list of stamped poses from a csv file 
00045 class GetListOfPoseStampedFromCsvFile(smach.State):
00046     """
00047     GET A LIST OF STAMPED POSES FROM A CSV FILE 
00048    
00049     @type  file_name: string
00050     @param file_name: URI of the csv file
00051     @type  list_of_stpose: PoseStamped[]
00052     @param list_of_stpose: List of PoseStamped
00053 
00054     """
00055     def __init__(self, file_name):
00056         smach.State.__init__(self,
00057                              outcomes = ['success','fail'],
00058                              input_keys = [],
00059                              output_keys = ['list_of_stpose'])
00060 
00061         self.file_name = file_name
00062 
00063     def execute(self, userdata):
00064         rospy.loginfo('Executing GetListOfPoseStampedFromCsvFile')
00065         
00066         try:
00067             list_of_stamped_poses = get_list_of_stamped_poses_from_csv_file(self.file_name)
00068             userdata.list_of_stpose = list_of_stamped_poses
00069             if list_of_stamped_poses == None:
00070                 rospy.logerr('No list received from %s', self.file_name)
00071                 return 'fail'
00072 
00073         except rospy.ServiceException, e:
00074             return 'fail'
00075         
00076         return 'success'
00077 


iri_common_smach
Author(s): Jose Luis Rivero
autogenerated on Fri Dec 6 2013 21:05:19