对于ROS来说还很陌生,但一直无法在搜索中找到此信息。
我们正在构建一种仪器,需要使用100Mbit受限电缆通过网络传输大型数据流。最好我们需要传输RAW图像(每张约10MB),或者我们可以做一些无损压缩,从而使每张约5MB。
这对于具有本地图像主题的ROS来说是完美的,还是像ZeroMQ这样的单独协议更适合此任务? 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:大型数据流中
<something>
的限制是什么?
在这里,我们总是与以下三项魔鬼混战:
Power(用于数据处理,不排除[10[MB]->5[MB]
压缩+ RAM-I / O)+Time(在一系列传输通道上的E2E数据传输的延迟+抖动)+错误(E2E数据传输路径上内容交付的不确定性,完整性和真实性)
在ROS域中,作为用于协调控制环约束子系统的系统,还有另一个问题-不满足“及时性”会导致控制失败并进入不稳定的区域。
跨越边界时发生的无数示例-从生产线陷入恐慌,导致立即紧急全停状态,到损坏的工具,产品,设备和持续碰撞,在仍然持续的操作过程中仍然崩溃(当碰撞检测和紧急全站仪未实现安全)。
Q:将诸如ZeroMQ之类的单独协议用于此任务会更好吗?
ZeroMQ具有出色的性能((在Devil-mix的Time分支上并没有增加太多,但它始终取决于拥有(不足)资源(Power处理)
如果Devil-mix的Power部分允许,则[[ZeroMQ具有出色的性能可伸缩性]。
ZeroMQ对于Devil-mix的Errors支路具有出色的性能-我们得到零错误的保证-它可以将消息(有效负载)作为原始内容的逐位相同副本进行传递,或者什么都没有。该保修可能看起来很奇怪,对于模糊或嘈杂的图像肯定是过大了-但是,这是不因错误检测/有限恢复而导致的其他[[Power和Time-不确定性问题的合理策略。但是,这使我们可以自由选择,如何在给定的受限制的Time-和Power域内处理(如果需要),主要职责-ROS控制环的稳定性-具有如果从时间戳或单调序数索引等中间接检测到错误,则丢失或重新传输请求的有效负载
相反,ROSTopics
仅限于单个PUB/SUB
正式通信模式原型,并且固定为使用TCPROS
传输类(ZeroMQ可以使用更快的,无L3 +协议的协议栈) { inproc:// | ipc:// }
tipc://
或系统管理程序协调的vmci://
传输)或UDPROS
,目前可在与roscpp
相比,仅TCPROS
有损耗,但延迟较低。