python - ROS:ZeroMQ 是否更适合大数据流,例如原始图像,而不是原生图像主题?

标签 python zeromq ros

对 ROS 相当陌生,但四处搜索都找不到这些信息。

我们正在构建一种仪器,我们需要在 100Mbit 有限电缆上通过网络传输大量数据流。最好我们需要传输 RAW 图像(每张约 10MB),或者我们可以进行一些无损压缩,每张大约 5MB。

这对于具有原生图像主题的 ROS 来说是否完美,或者像 ZeroMQ 这样的单独协议(protocol)是否更适合这项任务? ROS 对大数据流的限制是什么?

希望有知识的人能花点时间分享一些经验。

谢谢!

最佳答案

10E6 [B] over a private, 100% free 100E6 [b/s] channel takes <强> no less ~0.8 [s]
_5E6 [B] over a private, 100% free 100E6 [b/s] channel takes <强> no less ~0.4 [s]

Q : What are the limitations in <something> on large data streams?

在这里,我们总是与三重恶魔组合作战:

Power( 对于数据处理, 10[MB]->5[MB] 压缩 + RAM-I/O 不是排除)
+
时间(跨一系列传输 channel 的端到端数据传输的延迟+抖动)
+
错误(端到端数据传输路径上内容交付、完整性和真实性的不确定性)

在 ROS 域中,作为协调控制环的受约束子系统的系统,还有一个问题 - 不满足“及时性”会导致控制失败,进入主要不稳定的区域。

越过这个边界的例子不胜枚举——从生产线陷入 panic ,导致立即紧急全停状态,到工具、产品、设备损坏,继续碰撞,还在继续运行中仍然崩溃(当碰撞检测和紧急全停未安全实现时)。


Q : would a separate protocol such as ZeroMQ be better for this task?

ZeroMQ 具有出色的性能(不会在 Devil-mix 的Time 部分增加太多,但它始终取决于拥有(不足)足够的资源( 权力顺利处理)

ZeroMQ 具有出色的性能可扩展性,当然,如果 Devil-mix 的Power 允许的话。

ZeroMQ 对于 Devil-mix 的 Errors 部分具有出色的属性——我们得到了零错误的保证——它要么将消息(有效负载)作为一个位到位的相同副本传递原始内容,或者什么都没有。这个保证可能看起来很奇怪,对于模糊或嘈杂的图像来说肯定是矫枉过正 - 然而,对于没有额外的PowerTime - 由于错误导致的不确定性问题 - 这是一个公平的策略检测/有限恢复。然而,它让我们可以自由选择,如何处理(如果需要),在给定的、受限的时间-和功率-域,主要职责 - ROS 控制- 循环的稳定性 - 丢失或重新传输请求的有效负载,给定的错误是从时间戳或单调序数索引等间接检测到的。

ROS Topics ,相反,仅限于单个PUB/SUB仅限正式通信模式原型(prototype)并固定使用 TCPROS传输类(ZeroMQ 可以使用更快的 L3+协议(protocol)无堆栈 { inproc:// | ipc:// } 或者,如果需要,甚至可以扩展到 mil-std 保证交付或分布式网格计算 tipc://或管理程序编排的 vmci:// 传输 ) 或 UDPROS ,目前在 roscpp 中可用仅且有损,但与 TCPROS 相比具有更低的延迟.

关于python - ROS:ZeroMQ 是否更适合大数据流,例如原始图像,而不是原生图像主题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59224453/

相关文章:

python - 解析PDF文档

框架内的python tkinter框架

c++ - VS2013 错误 : LNK2019 When trying to build ZeroMQ server

c++ - 如何解析和显示 rosbag (C++) 发布的所有 rostopics 和消息

qt - ROS Qt 媒体在重新制作之前不显示

python - 使用 sqlalchemy 强制列编码

python - 在python中如何跟踪一段代码是否在一个时间间隔内执行,如果没有则停止

ffmpeg - 带有 zmqsend 的多个 ffmpeg 实例

zeromq - 零拷贝接收和消息大小

ros - 如何在 ROS 中为单个节点设置 VERBOSITY?