@TOC
系列文章目录:
下一篇:
前言
系统:Ubuntu20
ROS版本:ROS Noetic(官方安装链接)
之前一直不理解rospy.spin()
到底是什么意思,一直以为只要在subscriber("topic")
后面加上rospy.spin()
,代码就能一直订阅该topic
,实际上不是这样的。
rospy.spin()的理解
rospy.spin()
的作用在于,代码运行到rospy.spin()
之后会暂停会锁住这个程序:
def listener():
global sub
rospy.init_node('listener', anonymous=True)
sub = rospy.Subscriber('/topic', Image(data_type: 这里是不同的数据类型记得更换), callback_function, queue_size=1)
# spin() simply keeps python from exiting until this node is stopped
rospy.spin()
print("Hi I am here")
如果这个时候在"rospy.spin()"后面加一个print("Hi I am here")
,则不会打印Hi I am here
。
Question: 那有些人会问了,那我注释掉rospy.spin()
之后确实再也没有订阅的topic
了啊?
Answer: 确实,那是因为程序运行结束了,直接退出来了,所以没有任何的打印输出了。如果这个时候想要不停的获取Subscriber()
的内容需要:
if __name__ == '__main__':
listener()
while not rospy.is_shutdown():
pass