ROS中python接受话题的方式

Python接受话题有两种方式,但是与C++相比,其只有rospy.spin(),没有ros::spinOnce,所以想要在循环中处理需要特别注意。 关于rospy.spin()和ros::spinOnce在上一篇文章中已经详细讲解了。

1.第一种方法:rospy.Subscriber

第一种方式与c++类似,调用回调函数来处理,但是因为只有rospy.spin()来调用回调函数,所以程序会阻塞在回调函数中,接受到一个数据,调用一次。在使用中当代码执行到rospy.spin()后就会全部阻塞在回调函数中,不会再往下执行。

#建立节点
rospy.init_node('listener', anonymous=True)
#订阅话题
rospy.Subscriber('/receiver', receiver_data, callback)
#调用回调函数,并阻塞,直到程序结束
rospy.spin()

2.第二种方法:rospy.wait_for_message

该方法无需节点,也无需回调函数,其与一个函数类似,等待话题发布消息,当接收到一个消息时,返回数据,继续执行后面的程序。相对于第一种,我们把它称为半阻塞,接收的话题如果没有发布消息,它会一直等待,但是接收到一个消息后,等待结束,会继续执行后面的程序。

msg2 = rospy.wait_for_message('/receiver', receiver_data, timeout=None)

猜你喜欢

转载自blog.csdn.net/weixin_62705892/article/details/127930225