Ask Your Question

How to get publisher and callback to talk to one another (python)

asked 2019-05-01 08:50:00 -0500

chusikowski gravatar image

updated 2019-05-06 12:21:00 -0500


I am trying to get my code (python)to publish a simple sequence in form of a Twist message, and then get the timestamp of when those messages are executed with the callback function. This is somehow not working, can someone please help? Thank you in advance.

The code:

#!/usr/bin/env python
import rospy
from geometry_msgs.msg import Twist, TransformStamped

Times = []
x_pos = []

class CommandEvaluatorNode(object):

    def __init__(self):
        self.cmd_vel_pub = rospy.Publisher('cmd_vel', Twist, queue_size = 10) 

    def run_command_tests(self):
        r = rospy.Rate(0.8)
        twist_sequence = [[1, 1, 1], [2, 2 , 3],[3, 3, 4]]
        rospy.loginfo("Publishing first sequence")
        for cmd in twist_sequence:
            msg = Twist()
            msg.linear.x = cmd[0]
            msg.linear.y =cmd[1]
            msg.angular.z = cmd[2]

    def callback(self, msg):
        l = rospy.Rate(0.8)
        time = msg.header.stamp.secs + msg.header.stamp.nsecs * 1e-9

    def ros_init(self):
        rospy.init_node('cmd_evaluator', anonymous=True)
        rospy.Subscriber("tf", TransformStamped, self.callback) 

if __name__ == '__main__':
    rosnode = CommandEvaluatorNode()
edit retag flag offensive close merge delete



Have you tried going through the python publisher/subscriber tutorials yet? Like these

I don't see any reference to rospy.spin() or while rospy.is_not_shutdown() referenced there, so you're only publishing a message once, and only subscribing once.

rukie gravatar image rukie  ( 2019-05-01 10:56:26 -0500 )edit

Also, you don't manually call callbacks. They're executed when a message is received on the topic that they subscribe to.

jayess gravatar image jayess  ( 2019-05-01 12:03:37 -0500 )edit

What are you trying to accomplish with the line


? How are you even getting this to run? You're not initializing the node before instantiating a publisher. Is this the actual code that you're using or is this a "simplified" version? Either way, can you please update your question with the errors that you get?

jayess gravatar image jayess  ( 2019-05-01 18:58:07 -0500 )edit

Hi @rukie , @jayess thank you very much for your answers. I edited the code to showcase the full thing.

The reason why I created this code is to test out short commands on a simulator. This is the reason why there is no reference to rospy.spin() or rospy.is_not_shutdown(). I want to publish a command to the simulator in a Twist() message. Furthermore, I want to subscribe to the tf topic and on the callback part I want to get the timestamp of when that command was sent/received. With the code as of now, my proble is that the callback function doesn't get called. So that I don't get any value for the time. I am very grateful for any ideas on how I could make this work.

chusikowski gravatar image chusikowski  ( 2019-05-04 04:58:09 -0500 )edit

There is no guarantee the message from tf topic will come in the mean time of executing the rest of the code. What do you think this should work like? You can wait for the message using rospy.wait_for_message() function instead of callback.

kump gravatar image kump  ( 2019-05-06 09:06:47 -0500 )edit

@kump , @rukie thank you for the input. I will have a look at this.

chusikowski gravatar image chusikowski  ( 2019-05-06 09:33:53 -0500 )edit

1 Answer

Sort by ยป oldest newest most voted

answered 2019-05-06 09:21:00 -0500

rukie gravatar image

What @kump says. Either "wait" for the message, or make this a node that runs continuously (rospy.spin() or while not shutdown).

edit flag offensive delete link more


Thank you for your help. After some playing around with the code and implementing a delay with rospy.Rate() I managed to make it work. I will leave the working code above in case it is of help to anyone in the future.

chusikowski gravatar image chusikowski  ( 2019-05-06 12:18:34 -0500 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools


Asked: 2019-05-01 08:50:00 -0500

Seen: 577 times

Last updated: May 06 '19