0

作为一个前提,我必须说我对 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 次。

基本上,如果可能的话,我想在不锁定的情况下发布一条消息,这样我就可以在一秒钟内发布多条消息。我有源源不断的消息流,我需要尽可能快地发布它们。

4

1 回答 1

1

部分问题在于rostopicCLI 工具实际上是用于调试/测试的助手。它有你现在看到的某些限制。不幸的是,您无法删除该锁定 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()
于 2021-11-29T18:44:56.860 回答