欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

【自动驾驶】5. ROS和DDS的区别总结

发布时间:2025/3/21 编程问答 56 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【自动驾驶】5. ROS和DDS的区别总结 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

背景:

ROS是在机器人领域大家常用的通信中间件。DDS是一个很古老的用在很多safe-critical领域的通信中间件(航天,汽车,战舰,金融等)。两者要解决的问题都是一样的:灵活,可靠的通信网络。并且两者都是在实际使用诞生的协议,所以都有很强的实用性。但两者有一些不同的价值观:

  • ROS所在的机器人领域更加开放(基本都是开源软件),用户的参与度更高(大部分问题都是被社区人员回答)。但是在工业落地的应用相对于DDS少很多。
  • DDS和ROS正好相反,基本所有问题都由开发商来回答,而且开源的代码很少。但是DDS的文档和案例库比ROS要强很多,而且通过很多落地项目的实践,验证了DDS的可靠性和实用性。
  • 节点发现机制:

    ROS需要一个中心节点ROS master来协调所有通信活动。而DDS完全摆脱了任何有集权作用的节点。自然DDS的容错能力更强。

    组成:

  • ROS中的node和DDS中的participent对应。ROS中一个进程只能有一个node,但是DDS中可以有多个participent。
  • ROS和DDS中都有subscriber和publisher。ROS中的两者包含了具体的读写操作。但是DDS中的两者只是一个身份的标示。使用中还需要附带一个对应的DataReaders和DataWriters来处理具体怎么对不同的消息进行读写。DDS这样做的好处是可以来从不同的层级来设置各种属性。比如想要把某个特性(比如不需要正确性验证)应用到某个具体的消息传输上,可以对DataReaders进行修改。如果想要应用到所有Subscriber,就可以对subscriber进行修改。
  • Topic的概念对ROS和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的区别总结的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。