0
$\begingroup$

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 : Terminal output

$\endgroup$

1 Answer 1

1
$\begingroup$

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 

you had:

def pose_callback(msg):
    posi.x = msg.x
    posi.y = msg.y
    print(posi.x,posi.y,msg.theta)
    return 
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.