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