#!/usr/bin/env python import rospy import math import sys import commands import yaml from tf import transformations from geometry_msgs.msg import PoseWithCovarianceStamped class PoseSetter(rospy.SubscribeListener): def __init__(self, pose): self.pose = pose def peer_subscribe(self, topic_name, topic_publish, peer_publish): p = PoseWithCovarianceStamped() p.header.frame_id = "map" p.pose.pose.position.x = self.pose[0] p.pose.pose.position.y = self.pose[1] (p.pose.pose.orientation.x, p.pose.pose.orientation.y, p.pose.pose.orientation.z, p.pose.pose.orientation.w) = transformations.quaternion_from_euler(0, 0, self.pose[2]) p.pose.covariance[6*0+0] = 0.5 * 0.5 p.pose.covariance[6*1+1] = 0.5 * 0.5 p.pose.covariance[6*3+3] = math.pi/12.0 * math.pi/12.0 peer_publish(p) rospy.signal_shutdown("closed!") filenm="/opt/bp/tmp" sh="rostopic list|grep initialpose" globalmap="/opt/bp/maps/global_map.yaml" x=True with open(filenm, 'r') as f: content=f.read() if(content==""): with open(globalmap) as k: cmapyaml = yaml.load(k) with open("/opt/bp/maps/"+str(cmapyaml["hotelid"])+"/"+str(cmapyaml["floor"])+"/map.yaml") as j: mapyaml = yaml.load(j) pose=mapyaml["origin"] else: pose =map(float,content.split(",")) while(1): if(commands.getstatusoutput(sh)[0]==0): break rospy.init_node('pose_setter', anonymous=True) if(x): pub=rospy.Publisher("initialpose", PoseWithCovarianceStamped,PoseSetter(pose),queue_size=10) x=False else: print("x=False") rospy.spin()