【自动驾驶】4.分布式实时通信——DDS技术
近期,在汽車通信圈討論較火的話題中,DDS絕對排得上號。而對于面向服務的通信協議,DDS與SOME/IP各自的優劣?DDS能否替換SOME/IP等問題也隨之而來。孰優孰劣,今天暫且不探討這些問題,我們先來了解下什么是DDS?
?
DDS簡介
?
DDS定義:Data Distribution Service 數據分發服務,是新一代分布式實時通信中間件協議,采用發布/訂閱體系架構,強調以數據為中心,提供豐富的QoS服務質量策略,以保障數據進行實時、高效、靈活地分發,可滿足各種分布式實時通信應用需求。
?
DDS最早應用在美國海軍系統,用于解決軍艦系統復雜網絡環境中大量軟件升級的兼容性問題。在汽車領域,2018年Adaptive AUTOSAR引用了DDS,作為可選擇的通信方式之一。目前國內已有主機廠開始研究,主要針對自動駕駛相關需求,工具方面,在汽車電子領域常用的工具廠商也在開發這部分內容。不僅是汽車領域引入DDS,在機器人開發領域,最新升級的ROS2也引入了DDS中間件來傳遞信息。
?
AP Development?Workflow
(圖片來源AUTOSAR_EXP_Introduction)
?
DDS規范
?
DDS規范是由OMG(Object Management Group)對象管理組織發布的。OMG組織是一個國際性、開放性、非盈利性技術標準聯盟,由供應商、終端用戶、學術機構、政府機構推動,已經有31年的歷史;OMG工作組針對各種技術和行業制定企業集成標準,并開發可為數千個垂直行業提供現實價值的技術標準。
?
OMG制定的標準
(圖片來源OMG官網:https://www.omg.org/index.htm)?
?
DDS的相關標準包括核心協議(DDSI-RTPS,DDS-XTypes,DDS-Security,Interface Definition Language (IDL)…),API(DDS C++ API,DDS Java API),拓展協議(DDS-RPC,DDS-XML…)等13份協議集合。
?
在分布式系統中,DDS位于操作系統和應用程序之間,支持多種編程語言以及多種底層協議。這便是我們常說的跨平臺。
?
DDS中間件
(圖片來源DDS-The?Proven Data Connectivity Standard for IoT)
?
DDS發布訂閱模型DCPS
?
講具體協議之前,我們先熟悉下幾個專有名詞:
-
Domain:代表一個通信平面,由Domain ID唯一標識,只有在同一個域內的通信實體才可以通信;如果考慮車內通信,可以只劃分1個Domain,也可以按照交互規則或其他規則,定義多個Domain;
-
Domain Participant:代表域內通信的應用程序的本地成員身份,簡單來說,就是說明同一數據域內的通信成員;
-
Topic:是數據的抽象概念,由TopicName標識,關聯相應數據的數據類型(DataType),如果把車內所涉及的所有Topic集合在一起,這樣就形成一個虛擬的全局數據空間“Global Data Space”,進一步弱化了節點的概念,所以域參與者已經不是節點的概念了;
-
DataWriter:數據寫入者,類似緩存,把需要發布的主題數據從應用層寫入到DataWriter中;
-
DataReader:數據讀取者,同樣可以理解為一種緩存,從訂閱者得到主題數據,隨之傳給應用層;
-
Publisher:發布者,發布主題數據,至少與1個DataWriter關聯,通過調用DataWriter的相關函數將數據發出去;
-
Subscriber:訂閱者,訂閱主題數據,至少與1個DataReader關聯。當數據到達時,應用程序可能忙于執行其他操作或應用程序只是等待該消息時,這樣就會存在兩種情況,同步訪問和異步通知。
?
接下來,我們看一下DDS的通信模型。
根據前面介紹,我們清楚了DDS是一個以數據為中心的中間件協議和API標準,意為用戶只關心自己想要的數據,數據通過Topic進行標識,這樣發布者根據主題發布數據,訂閱者根據自己感興趣的主題訂閱數據。這便是DDS的核心,以數據為中心的發布-訂閱模型DCPS(Data-Centric Publish-Subscribe)
?
?
如果是熟悉的以服務為中心的SOME/IP中間件,我們需要做的是把數據打包成服務,之后服務的消費方向服務提供方通過SD訂閱服務中的事件組,當數據發生變化后,相應的事件報文便會發到總線上。相比之下,DDS確實很直接,直接與數據溝通。
?
QoS服務質量
?
DDS的另一重要的知識點是支持QoS(Quality of Service),目前共支持22種QoS策略,每種策略都可以應用在不同的角色上,而針對同一角色,可單獨使用一種QoS,也可以組合使用多種QoS策略。試想一下,QoS應該如何應用呢?具體能起到什么作用?
?
?
?
RELIABILITY (可靠性)
參數定義:
Kind = RELIABLE ,如果當網絡發生錯誤, DataReader可能無法收到DataWriter的樣本數據時,會對樣本數據進行重發,保證DataReader能夠收到數據;
Kind = BEST_EFFORT,如果當網絡發生錯誤, DataWriter不會重新發送丟失的樣本數據,這樣,無法保證DataReader能夠收到數據;
如果在DataWriter上應用此QoS策略,設置Kind = RELIABLE,這樣保證了DataWriter發布的數據都能被DataReader收到。
?
?
LIFESPAN (生命周期)
參數定義:
該QoS的作用是避免交付“過期”的數據,參數為時間duration,默認為無窮大,表示數據樣本永遠不會失效;如果duration設置為有限數值,同時發送方和接收方的時鐘同步,通過在發送端的源時間戳添加定義的duration字段,這樣接收方根據時間戳信息計算出數據是否已失效,如果失效了,可以直接刪除數據。
?
以上是對DDS的介紹??偨Y起來,DDS更針對的是數據本身,去建立各種機制。DDS目前已經廣泛應用于國防、民航、工業控制等領域,成為分布式實時系統中數據發布/訂閱的標準解決方案。想了解更多關于DDS的內容,請持續關注我們呦!
?
總結
以上是生活随笔為你收集整理的【自动驾驶】4.分布式实时通信——DDS技术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【自动驾驶】3. DDS 数据分发服务(
- 下一篇: 【自动驾驶】5. ROS和DDS的区别总