# Error in Pose(): All values are zero for turtlesim/Pose

Here is the program I have written. The function is to make the turtlesim complete one revolution, with a fixed angular velocity and speed.

#!/usr/bin/env python

import rospy
from geometry_msgs.msg import Twist
from turtlesim.msg import Pose
from math import *

def pose_callback(msg):
print(msg.x,msg.y,msg.theta)
return

def main():

speed = 10
angular_vel= 5

rospy.init_node('turtle_revolve', anonymous=True)
rate= rospy.Rate(10)
velocity_publisher = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10)
vel_msg = Twist()

rospy.Subscriber("/turtle1/pose", Pose, pose_callback)
posi = Pose()

#Setting the time of the start of the node to be t1
t1= rospy.Time.now().to_sec()
#Initial positions x and y
x = posi.x
y=  posi.y
vel_msg.linear.x = speed
vel_msg.angular.z = angular_vel
rospy.logwarn(posi.x)
rospy.logwarn(posi.y)

while not rospy.is_shutdown():

velocity_publisher.publish(vel_msg)

#Another time measurement t2 is taken for every iteration

t2 = rospy.Time.now().to_sec()

# difference in time measurements t1 and t2

t_diff = t2 - t1

#If the time delay between measurements is greater than 0.5 secs and theta has reached 0 ,
#it means that the circle has been completed

if (t_diff >0.5  and posi.theta == 0.0 ):

break

rospy.logwarn("Completing circle")

if __name__ == '__main__':
try:
main()
except rospy.ROSInterruptException:
pass



Now my reasoning here is that theta will become zero again when it reaches the initial position and x, y should be equal to the initial values. I tried to find out x, y with posi = Pose () , after subscribing to turtle1/Pose . However all values in posi, i.e x,y, theta etc are zero. Ive confirmed this with multiple print/logwarn statements that i removed. It seems posi is returning zero values continuosly.

However I have confirmed using rostopic in the terminal that the Pose topic is printing values. Furthermore the pose values are correctly being displayed by the pose_callback function. So the zero values are only in the main function. Could anyone point out anything wrong in the code ? Why does posi have all values zero all the time ?

Here is the output showing zero in logwarn and proper values for the pose_callback function :

The position values look like they're getting to the callback okay, but then you're not doing anything with them in the callback. I can't see where posi.x or posi.y are defined, but what if instead of:

def pose_callback(msg):
print(msg.x,msg.y,msg.theta)
return


def pose_callback(msg):