• 沒有找到結果。

新增「擴充定位服務申請」推廣頁面

在文檔中 章節目錄 (頁 170-180)

肆、高精地圖供應服務

2. 新增「擴充定位服務申請」推廣頁面

e–GNSS 為內政部國土測繪中心建構之高精度之電子化全球衛星即 時動態定位系統,可應用於自駕車相關技術研究,配合機關推廣此 系統,於本平台新增頁面並連結至「e-GNSS 即時動態定位系統入口 網站」,提供HD MAPS 圖資申請者參考。

圖4-6、「擴充定位服務申請」推廣頁面

155 引入 DDS(Data Distribution Service,數據分發服務)訊息傳輸技術,

並規劃出一個通用的傳訊平台(包含訊息格式、連接方式、認證等機制),

156

圖4-7、自動駕駛資訊整合平臺及高精地圖供應平台介接機制

目前市場上有許多的連網通訊技術,其中被廣泛使用的技術為 MQTT(Message Queuing Telemetry Transport,信息佇列遙測傳輸),但 本案選用 DDS 作為高精地圖的傳輸技術。以下將針對 DDS 與 MQTT 兩種技術做一闡述與比較以說明本案選用 DDS 的原因。此外,本案中 的工作項目也包括分別實作兩種技術傳送高精地圖,並呈現出 DDS 的 優勢。

MQTT 本身是一種中介軟體(Middleware),其底層是 TCP/IP

(Transmission Control Protocol/Internet Protocol,網際網路協議),因此 可以沿用既有的網路架構和設備進行部署。MQTT 的訊息格式相當精 簡(標頭僅占2 Bytes),非常適合用於處理器資源及網路頻寬有限的連 網裝置。MQTT 採用主從式架構(圖 4-7),以基於主題的發布-訂閱模 式傳送訊息,並提供三種服務質量策略(Quality of Service,QoS)。在 MQTT 的通訊網路中必須有一台稱為代理人(Broker)的伺服器負責訊 息的傳遞。但隨著使用者數量或訊息量的增加,伺服器的負荷勢必愈來 愈重,因此造成效能滑落。為了維持效能,又必須增加伺服器的運算力 和數量,使得後續的維護成本升高。

為了達到即時更新高精地圖的功能,並且可應付未來日益增加的 自駕車數量。本案選擇了DDS 做為因應方案。DDS 是一套面向即時系 統(Real-time system)的資訊發送機制,它的效率非常高,能做到秒級 內同時分發百萬條訊息到眾多設備。DDS 最早應用於美國海軍,用於

157

解決艦船複雜網絡環境中大量軟件升級的兼容性問題,現在已經成為 美國國防部的強制標準。2013 年 DDS 轉由物件管理組織(Object Management Group,OMG)組織負責管理規劃,成為一項公開的數據 分發訂閱標準協議。目前 DDS 已深入各個產業領域,從國防、航太、

能源、汽車到製造業等。例如石油天然氣工業大廠National Oilwell Varco 便是利用 DDS 來開發自動化系統;美國陸軍工兵部隊則淘汰原本的數 據採集監控系統(SCADA),轉而擁抱DDS。此外,法國軍火業者 Thales、

通用汽車、英特爾等皆已導入 DDS。

DDS 與 MQTT 有許多相似之處,並包含許多改進的部分。DDS 和 MQTT 同樣屬於中介軟體,底層也都是 TCP/IP,可沿用既有的網路架 構和設備進行部署。DDS 一樣採用基於主題的發布─訂閱架構發送訊 息,支援一對一、一對多、多對一與多對多四種傳送方式。另外,DDS 屬於分散式系統,端點間直接通訊,不存在中心伺服器的需求(圖 4-8)。DDS 強調以數據為中心,可自訂訊息的架構,並提供 21 種的 QoS,

保障數據能夠即時、有效、靈活地傳送。表4-1 羅列了 DDS 與 MQTT 的特性比較。由此可知,DDS 不但具有 MQTT 的優點,更改進了 MQTT 的缺點。基於DDS 的高擴展性、高即時性、高可靠度與高性能,相當 適合做為高精地圖的傳送管道,這也是本案採用 DDS 的原因。

158

圖4-8、DDS 與 MQTT 架構示意圖

159

目前市面上的 DDS 系統軟體主要有 RTI(Real-Time Innovations)

的 Connext DDS,以及凌華科技(AD-Link)的 Vortex DDS。另外還有 Object Computing 以開放源碼方式發布的 OpenDDS。其中以 RTI 的

160

Connext DDS 佔有了大部分的市場。另外,RTI Connext DDS 支援以 C、

C++、Java、.NET、Lua、Python、Javascript 等多種程式語言撰寫 DDS 程式。基於相容性的考量,本計劃案選用 RTI Connext DDS,並以 C、

C++、Python 等三種程式語言撰寫 DDS 程式。

DDS 的通訊網路由領域(Domain)、主題(Topic)、訊息格式(Data Type)、發送者(Publisher)、接收者(Subscriber)、資料寫入者(Data Writer)、資料讀取者(Data Reader)等元素組成(圖 4-9)。形成一個 DDS 通訊網路首先必須定義一個基礎的通訊領域;接著在此領域上定 義一個主題以及對應的訊息格式。資料寫入者可以對該主題發送該格 式的訊息,資料讀取者可以自該主題接受該格式的訊息,且訊息僅於資 料寫入者與資料讀取者之間直接傳遞。而發送者與接收者則分別是資 料寫入者與資料讀取者的集合群組。另一方面,QoS 則規範了訊息如 何被傳遞,例如單一訊息的存活時間,是否保證訊息被資料讀取者接收 等等。透過 QoS 可以對領域、主題、發送者、接收者、資料寫入者、

資料讀取者做不同的行為規範,使得訊息的流動可以靈活有效率。

圖 4-9、DDS 組成元素

161

std::string topic_name = ‘HDMap’;

// 設定訊息內容

HDMAPTYPE Instance = {…};

// 建立領域

participant = dds::domain::DomainParticipant(domain_id);

// 建立主題

topic = dds::topic::Topic<HDMAPTYPE>(participant, topic_name);

// 建立發送者

publisher = dds::pub::Publisher(participant);

// 建立資料寫入者

writer = dds::pub::DataWriter<HDMAPTYPE>(publisher, topic);

// 發送訊息

writer.write(instance);

以下為使用 C++使用建立一個資料讀取者並接收一次資料的範例:

// 設定領域 int domain_id = 0;

// 設定主題

std::string topic_name = ‘HDMap’;

// 建立領域

participant = dds::domain::DomainParticipant(domain_id);

// 建立主題

topic = dds::topic::Topic<HDMAPTYPE>(participant, topic_name);

// 建立接收者

subscriber = dds::sub::Subscriber(participant);

// 建立資料讀取者

reader = dds::sub::DataReader<HDMAPTYPE>(subscriber, topic);

// 接收訊息

dds::sub::LoanedSamples<HDMAPTYPE> samples = reader.take();

162

163

⚫ 測試 DDS Persistence Service。

⚫ 完成

164

時程 執行內容 備註

11 月底 ⚫ DDS 傳輸規格文件化。 ⚫ 完成

在文檔中 章節目錄 (頁 170-180)

相關文件