【自动驾驶】5. ROS和DDS的区别总结
背景:
ROS是在机器人领域大家常用的通信中间件。DDS是一个很古老的用在很多safe-critical领域的通信中间件(航天,汽车,战舰,金融等)。两者要解决的问题都是一样的:灵活,可靠的通信网络。并且两者都是在实际使用诞生的协议,所以都有很强的实用性。但两者有一些不同的价值观:
节点发现机制:
ROS需要一个中心节点ROS master来协调所有通信活动。而DDS完全摆脱了任何有集权作用的节点。自然DDS的容错能力更强。
组成:
QoS:
QoS是用来控制传输的行为的,比如:
QoS在DDS中有很复杂的和灵活的设置方法。通过调整QoS系统,可以把整个系统从类UDP行为逐渐变成类TCP行为。而只是通过定义subscriber和publisher时几个有限的参数来控制QoS。这样做的好处是隐藏了很多普通用户不需要关心的复杂性。
效率上的比较:
ROS不用zero-copy的原因:ROS是基于TCP的,对于TCP的使用者可以一次性提供一大块需要传输的数据,然后由TCP来负责切分成小的package进行传输。在本地情况下(localhost),TCP自动的会把这一大块数据进行内存共享。所以在效率上,在本地环境下,通过TCP传输和zero-copy方式传输没有太大的效率差异。但是DDS是基于UDP,DDS会先把数据切成小块后,再给UDP进行传输,这样就和zero-copy的效率有很大的不同了。
另外使用ROS的时候,如果想要得到更快的大数据本地传输效率可以使用nodelets。nodelets把地址通过消息进行共享,是最快的共享方式。
服务和客户模式(Server/Client model):
目前DDS没有类似于ROS的Service功能
消息描述:
DDS使用的是.idl格式,ROS是自己定义的.msg格式。
参考:https://design.ros2.org/articles/ros_on_dds.html
总结
以上是生活随笔为你收集整理的【自动驾驶】5. ROS和DDS的区别总结的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 【自动驾驶】4.分布式实时通信——DDS
- 下一篇: 【自动驾驶】15.一文读懂图像中点的坐标