3

我正在尝试设置一个 ROS 操作服务器和客户端来处理在 Python 和 ROS 之间发送图像(编码为 64 位字符串)(目的是使图像成为其他脚本可以从 ROS 中提取的图像)。作为对所有这些(Python、Ubuntu、Bash、ROS 等)非常陌生的人,我很难确定如何准确地做到这一点。我认为部分原因是 ROS wiki 教程/文档是线性错误的,而这个过程只是令人费解且异常复杂。有没有人知道任何非 ROS-wiki 相关/依赖的教程来帮助我解决这个问题?或者您能否创建一个简明的分步指南来建立该系统?我一直找不到与这个主题相关的任何东西——这让我觉得它要么是一个非常不常见的用途,要么是超级简单的,而我还没有达到那个水平。

我对解决方案的尝试基本上只是让信息流下来。我希望 Python 能够读取图像,将其转换为字节(使用 b64encode),然后将其发送到 ROS 以作为操作发布。(因此,如果我理解正确,可以像使用服务一样,不间断地发送图像流。)订阅节点(或服务器,但是有效,我会在我得到时弄清楚)那里)然后可以看到图像并从操作服务器中提取它们。

现在,有人告诉我采取行动是做到这一点的最佳方式。就个人而言,我不明白为什么一项服务不够用(而且我至少已经让其中一项工作)。

再次感谢大家可以提供的任何帮助!

编辑:这里的最终应用程序是用于视频流。服务器将抓取实时视频,将其转换为图像,将其更改为字节字符串,并将它们流式传输到客户端,然后将它们发布到 ROS Action Server。

4

1 回答 1

0

我认为你过于复杂了。我不会将它实现为 actionlib 服务器,尽管这是一种方法。我创建了一些类似的系统,这就是我构建它们的方式:

  1. 通过在主题上发布图像来编写流式传输视频的节点。您可以将其实现为 actionlib 服务器,但这不是必需的。就我而言,我使用预先存在的raspicam_node来读取 Raspberry Pi 的相机。如果您想在 Python 中实现这一点,请阅读有关创建发布者的教程。
  2. 创建一个订阅您的图像主题的节点,然后从主题消息中读取图像。同样,本教程展示了如何创建订阅者。主要区别在于您将使用 anyCompressedImageImagefromsensor_msgs.msg作为您的消息类型。

对于订阅方,这是我编写的一个示例Python ROS 节点,它实现了 MJPEG 流媒体。它订阅一个主题,读取图像数据,然后通过流式 HTTP 响应重新发布它。即使它是“慢速 Python”,我的延迟时间也不到 1 秒。

于 2016-04-21T16:11:06.267 回答