在上一篇中,我們介紹了DDS,eProsima的Fast DDS是DDS規范的C++實現,Fast DDS的前稱是Fast RTPS,目前ROS2將Fast DDS作為默認的DDS中間件實現。Fast DDS主要包括以下內容:
DDS API
DDS采用的通信模型是一種多對多單向數據交換,其中產生數據的應用程序將數據發布到屬于使用數據的應用程序的訂閱者的本地緩存。信息流由負責數據交換的實體之間建立的服務質量(QoS)策略來控制。
作為一個以數據為中心的模型,DDS建立在所有感興趣的應用程序都可以訪問的“全局數據空間”的概念之上。提供信息的應用程序作為發布者,訪問部分數據空間的應用程序作為訂閱者。每當發布者向該空間發布新數據時,中間件就將該信息傳播給所有感興趣的訂閱者。
通信發生在多個域之間,即連接所有能夠相互通信的分布式應用程序的孤立抽象平面。只有屬于同一個域的實體才能進行交互,訂閱數據的實體和發布數據的實體之間的匹配通過主題進行中介。主題是明確的標識符,它將在域中惟一的名稱與數據類型和一組附加的特定于數據的QoS相關聯。
DDS實體被建模為類或類型化接口,后者意味著更有效的資源處理,因為在執行前了解數據類型允許提前分配內存,而不是動態分配。
fastddsgen HelloWorld.idl
├── HelloWorld.cxx --> 實際存儲數據的結構
├── HelloWorld.h
├── HelloWorldPubSubTypes.cxx --> 繼承自eprosima::fastrtps::TopicDataType
└── HelloWorldPubSubTypes.h
fastddsgen -example CMake HelloWorld.idl
├── CMakeLists.txt
├── HelloWorld.cxx
├── HelloWorld.h
├── HelloWorldPublisher.cxx --> 發布者的實現
├── HelloWorldPublisher.h
├── HelloWorldPubSubMain.cxx --> 主程序
├── HelloWorldPubSubTypes.cxx
├── HelloWorldPubSubTypes.h
├── HelloWorldSubscriber.cxx --> 訂閱者的實現
└── HelloWorldSubscriber.h
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
相關活動:汽車以太網技術論壇
投稿合作:18918250345(微信)