【自动驾驶】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.一文读懂图像中点的坐标