1

我一直在尝试将图像发布到 ROS(使用 Python/rospy),虽然我认为我的方法是正确的,但我很难确认它。使用

rosrun image_view image_view image:=(topic)

似乎没有显示任何东西。我也尝试过 rqtbag,但我真的不知道那个东西是如何工作的,除了它没有显示发布的东西,无论如何。

粘贴我当前的代码之前的一些注意事项:

  1. 我现在使用的代码是基于我以前工作的代码。我使用类似的设置将文本图像发布到 ROS,并且这些输出相当可靠。
  2. 此处稍作修改。大部分代码都是on_message函数的一部分,因为这一切在实现时都通过 MQTT 运行。(逻辑是在一个系统上获取图像 -> 对其进行编码 -> 传输到另一个系统 -> 解码 -> 发布到 ROS。)
  3. 我在 Ubuntu 和 ROS Indigo 上使用 Python 2.7。

事不宜迟,我当前的发布代码:

rospy.init_node('BringInAnImage', log_level = rospy.INFO)

def convert(messagepayload):
    t = open('newpic.bmp','w')
    t.write(messagepayload)
    t.close()

def on_message(client, userdata, msg):
    img = base64.b64decode(msg.payload)

    convert(img)
    time.sleep(5) 
    source = cv2.imread('newpic.bmp')  #this should be a mat file

    # talk to ROS
    bridge = CvBridge()
    pub2 = rospy.Publisher('/BringInAnImage', Image, queue_size = 10)
    pub2.publish(bridge.cv2_to_imgmsg(source, "bgr8"))
    print "uh..... done??"

我正在使用一个基本的监听功能来尝试看看发生了什么(这是在我在单独的终端中执行的不同脚本中):

def listener():
    rospy.init_node('listener', anonymous=True)
    rospy.Subscriber("/BringInAnImage", Image, callback)
    rospy.spin()

if __name__ == '__main__':
    listener()

回调只是打印出图像已收到。

4

1 回答 1

1

如何检查是否在主题 xyz 上发布了某些内容

要检查消息是否真的发布,您可以使用该rostopic命令。在终端中运行以下命令以打印在指定主题上发布的所有内容。这是检查是否已发布内容的最简单方法。

rostopic echo <topic_name>

请参阅ROS wiki了解更多有用的功能rostopic

为什么image_view没有接收到图像?

虽然您的操作基本正确,但任何订阅者都不会收到您的图像,因为您的代码中存在一个不那么明显但致命的问题:您pub2在初始化后立即使用发布者 ()。订阅者需要一些时间来注册新的发布者,并且在您发布图像之前还没有准备好(另请参阅此答案)。

➔ 不要在需要发布者之前初始化它,而是在初始化节点时一开始就这样做。

于 2015-09-23T07:23:54.437 回答