ROS:无需 3 秒锁定即可发布主题
ROS: Publish topic without 3 second latching
作为前提,我必须说我对 ROS 非常缺乏经验。
我正在尝试发布多个 ros 消息,但对于我所做的每一次发布,我都会收到“发布和锁定消息 3.0 秒”,看起来它阻塞了 3 秒。
我将举例说明我是如何发布一条消息的:
rostopic pub -1 /heifu0/mavros/adsb/send mavros_msgs/ADSBVehicle "header: // then the rest of the message
我还尝试使用以下参数:-r 10,它将消息频率设置为 10Hz(确实如此)但仅适用于第一条消息,即它每秒重新发送第一条消息 10 次。
基本上我想在不锁定的情况下发布消息,如果可能的话,这样我可以每秒发布多条消息。我收到源源不断的消息,我需要尽快发布它们。
部分问题在于 rostopic
CLI 工具实际上是 debugging/testing 的帮手。它有您现在看到的某些限制。不幸的是,您无法删除锁定 3 秒的消息,即使对于 1-shot 出版物也是如此。相反,这是针对实际 ROS 节点的作业。它可以在几行 Python 中完成,如下所示:
import rospy
from mavros_msgs.msg import ADSBVehicle
class MyNode:
def __init__(self):
rospy.init_node('my_relay_node')
self.rate = rospy.Rate(10.0) #10Hz
self.status_pub = rospy.Publisher('/heifu0/mavros/adsb/send', ADSBVehicle, queue_size=10)
def check_and_send(self):
#Check for some condition here
if some_condition:
output_msg = ADSBVehicle()
#Fill in message fields here
self.status_pub.publish(output_msg)
def run_node(self):
while not rospy.is_shutdown():
self.check_and_send()
self.rate.sleep() #Run at 10Hz
if __name__ == '__main__':
node = myNode()
node.run_node()
作为前提,我必须说我对 ROS 非常缺乏经验。
我正在尝试发布多个 ros 消息,但对于我所做的每一次发布,我都会收到“发布和锁定消息 3.0 秒”,看起来它阻塞了 3 秒。
我将举例说明我是如何发布一条消息的:
rostopic pub -1 /heifu0/mavros/adsb/send mavros_msgs/ADSBVehicle "header: // then the rest of the message
我还尝试使用以下参数:-r 10,它将消息频率设置为 10Hz(确实如此)但仅适用于第一条消息,即它每秒重新发送第一条消息 10 次。
基本上我想在不锁定的情况下发布消息,如果可能的话,这样我可以每秒发布多条消息。我收到源源不断的消息,我需要尽快发布它们。
部分问题在于 rostopic
CLI 工具实际上是 debugging/testing 的帮手。它有您现在看到的某些限制。不幸的是,您无法删除锁定 3 秒的消息,即使对于 1-shot 出版物也是如此。相反,这是针对实际 ROS 节点的作业。它可以在几行 Python 中完成,如下所示:
import rospy
from mavros_msgs.msg import ADSBVehicle
class MyNode:
def __init__(self):
rospy.init_node('my_relay_node')
self.rate = rospy.Rate(10.0) #10Hz
self.status_pub = rospy.Publisher('/heifu0/mavros/adsb/send', ADSBVehicle, queue_size=10)
def check_and_send(self):
#Check for some condition here
if some_condition:
output_msg = ADSBVehicle()
#Fill in message fields here
self.status_pub.publish(output_msg)
def run_node(self):
while not rospy.is_shutdown():
self.check_and_send()
self.rate.sleep() #Run at 10Hz
if __name__ == '__main__':
node = myNode()
node.run_node()