rospy.Subscriber由于sleep()接收不到实时数据
zemel
zemel 216 0
2017-07-31 12:11
在Publisher函数中定义了queue_size = 1,但是一旦Subscriber定义的中断函数中出现sleep()函数,就会出现无法接收到实时数据的问题。
我一直的理解都是中断如果出现阻塞,则Subscriber无法接收数据,当queue_size=1,则应该当中断函数结束时可以接收到最新数据。
但是结果出现的状况时,不仅无法接收当前数据,而且一直再也无法接收更新的数据。
更奇特的是,最开始在没有定义rospy.rate时,如果先让Publisher rospy.loginfo()需要传输的值,居然Subscriber可以实时接收数据
其中Publisher代码如下:

#!/usr/bin/env python
# main_start.py
#
import rospy
from std_msgs import Int8
import time


def main():
 train_dur = 50
 is_train = 2
 rospy.init_node("main_start",anonymous=True)
 rate = rospy.Rate(1000)
 pub = rospy.Publisher("main_control",Int8,queue_size=1)
 train_start = time.time()


 while not rospy.is_shutdown():
 time_now = time.time() - train_start
 # print(time_now)
 if (time_now < (train_dur-2)):
 is_train = 1
 elif((train_dur-2) < time_now < (train_dur)):
 is_train = -1
 else:
 is_train = 0
 # rospy.loginfo("orginal   "+str(is_train))
 pub.publish(is_train)
 rate.sleep()


if __name__ == '__main__':
 main()
Subscriber代码如下:

#!/usr/bin/env python
# show_time.py
#
import rospy
from std_msgs import Int8
import time



def show_time(data): loginfo("Received:  "+str(data.data))
 time.sleep(0.2)


def main():
 rospy.init_node("show_time",anonymous=True)
 rospy.Subscriber("main_control",Int8,show_time)
 rospy.spin()


if __name__ == '__main__':
 main()
分享:
游客
要评论请先登录 或者 注册
返回顶部