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()