ROS:用于Automated Driving的模塊化軟件架構

自動駕駛對軟件架構-Software Frameworks (SWFs)設計有著特殊的需求,若開始一個自動駕駛項目,作為開發者,我們可能會有如下幾方面的訴求。
1、模塊化和可擴展性
軟件可被明確劃分為獨立的子模塊,由于它們功能獨立,這些模塊可在Low Effort下被單獨測試和評估,從而提高維護性并實現高效的協作開發。為了實現模塊化,需要定義通用的接口,具有良好接口定義的軟件架構,可便于功能的擴展。
2、性能
在實時計算中,任務應在確定的時間內執行。硬實時保證了每個計算響應都在預期的時間內以特定的速率進行。而軟實時則僅保證平均響應時間。在自動駕駛領域,至少應滿足軟實時的要求。
3、仿真和調試
自動系統的離線仿真和調試是非常重要的一方面,因此軟件架構應提供運行環境和支持工具以用于車輛不同抽象層的模擬,例如從高層級的預測到低層級的控制。
4、容錯性和監控
SWF應能夠在運行時從意外故障中恢復,例如硬件或軟件相關的中斷,特別是通訊時的噪聲、抖動、延遲等。為了實現容錯,監控可實現冗余的邏輯校驗,以保證系統的可靠運行。
5、應用及支持
SWF應為用戶或開發者提供簡易的監測和數據可視化工具,提高其易用性,并可提供大量的文檔、示例和教程。
1、自動駕駛軟件架構介紹
在過去的這些年,自動駕駛領域出現了很多不同的軟件架構。在自動駕駛項目開始前期,軟件架構的選擇和設計是至關重要的一步,下面我介紹兩種被人所熟知且被廣泛使用的自動駕駛軟件架構。
Real-time Database for Cognitive Automobiles(KogMo-RTDB)
KogMo-RTDB為對象的插入、更新和刪除提供了統一的接口,盡管KogMo-RTDB為數據對象提供了動態內存分配,但內存需要在對象內靜態分配。這在物體尺寸變化的場景可能會變的麻煩,如通過雷達掃描設備獲取的測量數據。對象可在共享內存中保留一段時間、序列化并寫入存儲中。然而在分布式系統中,KogMo-RTDB并不通過網絡協議進行通訊。KogMo-RTDB需要額外的工具用于記錄和回放數據,而且,最關鍵的是目前該項目的開發者社區并不活躍,因此維護的很差。

時間觸發式架構
EB基于和Audi的合作開發經驗推出的模塊化ADAS開發環境平臺—EB Assist Automotive Data and Time-Triggered Framework (ADTF)是目前用于ADAS系統開發和測試的最常用軟件架構,可幫助ADAS軟件開發者快速完成新功能的開發。作為一種具有分布式進程鏈的實時系統,其可支持同步和異步數據的處理。各進程鏈之間的通訊可通過事件、服務呼叫等方式實現。ADTF可通過自定義模塊進行擴展,同時也提供諸如設備驅動和Matlab/simulink插件等工具箱以提高開發效率,與KogMo-RTDB一樣,ADTF也提供離線系統的仿真和調試。由于ADTF是商業化產品,因此主要用于商業化公司而不能被我們普通開發者所使用,除非你既是土豪又對這玩意感興趣,這樣的結果就是普通開發者或興趣愛好者很難獲取有關的應用教程和案例。

下面我將切入該篇重點,著重介紹被研究結構和很多國際團隊,哪怕我們普通開發者也可廣泛使用的一種用于自動駕駛項目開發的軟件架構:ROS
2、Robot Operating System(ROS)
樓主開通公眾號時寫的第一篇文章就是關于ROS的,主要就是對ROS的發展史、特性及系統架構做了簡單的介紹《ROS簡介及其系統框架》,下面我將結合文章開頭提到的軟件架構需求闡述ROS應用于自動駕駛領域的優勢。
系統架構
ROS架構是一多服務器分布式計算環境,其允許應用跨服務器通訊并有機的組成一個系統整體。Master是ROS中一特殊的服務器,其負責應用的注冊、執行并運行參數服務器(Parameter Server)和信息記錄服務(Logging Service)。從服務器(Slave Server)與Master可使用TCP或UDP協議通過局域網與Master建立連接。

軟件架構
運行在ROS環境中的應用為Nodes(節點)和Nodelets(結點),兩者之間的區別就是Nodes(節點)是單獨的OS進程,而Nodelets(結點)則是將多個算法打包并運行在單個OS進程中,這樣避免了數據傳輸(因進程內部是共享的,傳數據的話傳個指針即可),從而實現零拷貝(Zero Copy),因此Nodelet可有效降低Node之間的消息傳輸(進程間通訊)。ROS應用代碼可使用C++、Python或Lisp進行編寫,ROS的交互層能提供如下服務:
1、 單向異步信息通訊
2、 雙向同步信息通訊
3、 診斷信息傳輸
4、 局部和全局參數處理
5、 基于時間的坐標轉換
6、 關鍵信息記錄等

模塊化和可擴展性
Message通訊機制:基于Message通訊的ROS支持兩種類型的Message通訊:同步和異步。但同步通訊其實用的很少,因此主要介紹一下異步通訊。異步通訊在ROS中的應用以發布-訂閱的形式設計,如下圖所示:

提供信息的節點會首先定義一發布器并將其注冊到ROS系統中,訂閱信息的節點則需要定義和注冊一訂閱器,注冊的發布器和訂閱器之間以獨有的主題名(Topic)相互進行通訊。
即插即用的模塊化特性:在新系統開發時,最終采用的算法往往在原型設計之后,為了實現功能子組件的及時替換,需要組件之間建立簡潔且完善的接口。而在ROS內部,所需的接口在上述介紹的Message機制中得到了很好的解決。每個節點都遵守組件的輸入和輸出消息格式,例如圖像處理的ROS節點可不經任何修改的情況下插入系統。
請輸入評論內容...
請輸入評論/評論長度6~500個字
最新活動更多
- 1 AI狂歡遇上油價破百,全球股市還能漲多久? | 產聯看全球
- 2 OpenAI深夜王炸!ChatGPT Images 2.0實測:中文穩、細節炸,設計師慌了
- 3 6000億美元估值錨定:字節跳動的“去單一化”突圍與估值重構
- 4 Tesla AI5芯片最新進展總結
- 5 連夜測了一波DeepSeek-V4,我發現它可能只剩“審美”這個短板了
- 6 熱點丨AI“瑜亮之爭”:既生OpenClaw,何生Hermes?
- 7 AI界的殺豬盤:9秒刪庫跑路,全員被封號,還繼續扣錢!
- 8 2026,人形機器人只贏了面子
- 9 DeepSeek降價90%:價格屠夫不是身份,是戰略
- 10 AI Infra產業鏈卡在哪里了?


分享













