对 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 部分具有出色的属性——我们得到了零错误的保证——它要么将消息(有效负载)作为一个位到位的相同副本传递原始内容,或者什么都没有。这个保证可能看起来很奇怪,对于模糊或嘈杂的图像来说肯定是矫枉过正 - 然而,对于没有额外的Power 和 Time - 由于错误导致的不确定性问题 - 这是一个公平的策略检测/有限恢复。然而,它让我们可以自由选择,如何处理(如果需要),在给定的、受限的时间-和功率-域,主要职责 - 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/