【自动驾驶】5. ROS和DDS的区别总结
背景:
ROS是在機(jī)器人領(lǐng)域大家常用的通信中間件。DDS是一個很古老的用在很多safe-critical領(lǐng)域的通信中間件(航天,汽車,戰(zhàn)艦,金融等)。兩者要解決的問題都是一樣的:靈活,可靠的通信網(wǎng)絡(luò)。并且兩者都是在實際使用誕生的協(xié)議,所以都有很強(qiáng)的實用性。但兩者有一些不同的價值觀:
節(jié)點(diǎn)發(fā)現(xiàn)機(jī)制:
ROS需要一個中心節(jié)點(diǎn)ROS master來協(xié)調(diào)所有通信活動。而DDS完全擺脫了任何有集權(quán)作用的節(jié)點(diǎn)。自然DDS的容錯能力更強(qiáng)。
組成:
QoS:
QoS是用來控制傳輸?shù)男袨榈?#xff0c;比如:
QoS在DDS中有很復(fù)雜的和靈活的設(shè)置方法。通過調(diào)整QoS系統(tǒng),可以把整個系統(tǒng)從類UDP行為逐漸變成類TCP行為。而只是通過定義subscriber和publisher時幾個有限的參數(shù)來控制QoS。這樣做的好處是隱藏了很多普通用戶不需要關(guān)心的復(fù)雜性。
效率上的比較:
ROS不用zero-copy的原因:ROS是基于TCP的,對于TCP的使用者可以一次性提供一大塊需要傳輸?shù)臄?shù)據(jù),然后由TCP來負(fù)責(zé)切分成小的package進(jìn)行傳輸。在本地情況下(localhost),TCP自動的會把這一大塊數(shù)據(jù)進(jìn)行內(nèi)存共享。所以在效率上,在本地環(huán)境下,通過TCP傳輸和zero-copy方式傳輸沒有太大的效率差異。但是DDS是基于UDP,DDS會先把數(shù)據(jù)切成小塊后,再給UDP進(jìn)行傳輸,這樣就和zero-copy的效率有很大的不同了。
另外使用ROS的時候,如果想要得到更快的大數(shù)據(jù)本地傳輸效率可以使用nodelets。nodelets把地址通過消息進(jìn)行共享,是最快的共享方式。
服務(wù)和客戶模式(Server/Client model):
目前DDS沒有類似于ROS的Service功能
消息描述:
DDS使用的是.idl格式,ROS是自己定義的.msg格式。
參考:https://design.ros2.org/articles/ros_on_dds.html
總結(jié)
以上是生活随笔為你收集整理的【自动驾驶】5. ROS和DDS的区别总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【自动驾驶】4.分布式实时通信——DDS
- 下一篇: 【自动驾驶】15.一文读懂图像中点的坐标