嗯,我认为这里有很多解决方案,您甚至可以使用python进程,但我建议使用使用ros Timer的ROS方法。
我在python中并没有那么高效,但这段代码可能会让您有点头晕。#!/usr/bin/env python
import rospy
from std_msgs.msg import Empty
from std_msgs.msg import String
import numpy as np
last_data = ""
started = False
pub = rospy.Publisher('/status', String, queue_size=1000)
def callback(data):
print "New message received"
global started, last_data
last_data = data
if (not started):
started = True
def timer_callback(event):
global started, pub, last_data
if (started):
pub.publish(last_data)
print "Last message published"
def listener():
rospy.init_node('control', anonymous=True)
rospy.Subscriber('control_c', String, callback)
timer = rospy.Timer(rospy.Duration(0.5), timer_callback)
rospy.spin()
timer.shutdown()
if __name__ == '__main__':
print "Running"
listener()
在这里,您的回调将更新消息,您的计时器将每0.5秒触发一次并发布最后收到的数据。
您可以通过每隔3秒在“/control\u c”上发布数据并将计时器配置为0.5秒来测试此代码。启动回音打开/状态$ rostopic echo /status
你的信息会以2赫兹的频率发布。
希望能有帮助!