**:
通訊效能優化 -> 共享記憶體能減少傳輸中的資料拷貝,顯著提公升傳輸效率
去中心化的網路拓撲 -> 使用rtps服務發現協議實現完全的p2p網路拓撲
資料相容性擴充套件 -> protobuf能夠很好支援向後相容
1. apollo對ros優化總結
1.1 關於通訊效能優化
通訊效能優化過程中通過指標或者呼叫值的方式實現了共享記憶體,該方法支援一次寫入、多次讀取。這裡就不多說了。
1.2 關於去中心化的網路拓撲
apollo在ros中新增基於rtps服務協議功能,但是去中心化的功能在ros2裡面已經被解決,因此,具體哪個優化更加好,還等待後續測試。
1.3 關於資料相容性擴充套件
在apollo中在模組內部使用protobuf來替代rosmessage,個人認為這是apollo最主要的優化,關於protobuf的介紹可以看我整理的protobuf分類。
2. 詳細介紹
2.1 通訊效能優化 -> 共享記憶體
共享記憶體 -> 在一對一傳輸過程中,吞吐量達到socket兩倍,一對多傳輸過程中,共享記憶體傳輸對頻寬的優勢進一步擴大。
共享記憶體 -> 傳輸延遲比shared節省一半,對強實時性系統的自動駕駛汽車幫助很大。
共享記憶體 -> cpu資源占用要比socket減少很多,一定程度上提公升計算演算法和能力。
ros問題:自動駕駛大量使用感測器引發很大的傳輸頻寬需求
自動駕駛系統為了能夠感知複雜的道路情況,需要多種感測器協同工作才能覆蓋不同的場景、不同路況需求。多感測器共同使用會對車載系統造成很大壓力。
apollo優化:共享記憶體能減少傳輸中的資料拷貝,顯著提公升傳輸效率
ros問題:單路感測器訊息有多個消費者時負載成倍增長
apollo優化:共享記憶體可以有效滿足一對多的傳輸場景
共享記憶體本身的特性能夠支援一次寫入、多次讀取功能。對於一對多傳輸場景,不同的使用者就可以同時讀取,實現一次寫入,多次讀取的功能,成倍提公升傳輸效率。
apollo通訊效能優化效果
2.2 去中心化的網路拓撲
ros特點:ros以master為中心構建hybridp2p拓撲網路
ros是以master為中心構建hybrid p2p拓撲網路,帶來了比較強的容錯性,當某個演算法出現異常導致崩潰的時候,不會引起整個的異常,為區域性異常處理提供便利。
ros問題:master作為拓撲網路的中心,一旦異常將影響整個網路
整個系統非常依賴master這個單點,一旦master異常,所有節點都不能發現其他節點,這樣整個系統就不能正常工作。但是這個問題在ros2中得到了解決。
apollo優化:使用rtps服務發現協議實現完全的p2p網路拓撲
在ros中新增基於rtps服務協議功能,網路構建不會以master作為中心,而是通過域概念作為劃分,所有節點加入域中,會通過rtps協議相互廣播通知其他節點,然後節點間會建立點對點連線,來發布訂閱訊息,以替代master作為**資訊交換的功能
使用rtps的工作原理:
sub節點啟動,通過組播向網路註冊
通過節點發現,兩兩建立unicast
向新加入的節點傳送歷史拓撲訊息
收發雙發建立連線,開始通訊
sub節點啟動,通過組播向網路註冊
通過節點發現,兩兩建立unicast
向新加入的節點傳送歷史拓撲訊息
收發雙發建立連線,開始通訊
2.3 資料相容性擴充套件
ros特點:message是ros中描述軟體元件介面的語言
message是ros中描述介面的一種語言,當兩個節點之間需要建立連線的時候,通常需要滿足兩個條件。一是接收和傳送的topic屬於同乙個話題,二是兩個模組定義的模式要完全一致。
ros怎麼定義message?ros使用msg檔案對資料介面進行抽象化的描述,並可以生成不同語言的介面實現,以滿足不同語言的通訊交流需求。
ros問題:介面公升級後,不同版本的模組難以相容
對於相容性的問題,當專案規模比較小時,影響不大;但是對於無人自動駕駛比較龐大的專案時,影響就很大。當某乙個模組介面公升級了,需要把所有相關模組公升級到最新版本之後,才能在一起進行基礎功能的連調。同時對於線下**除錯的時候,有時需要把某乙個模組回到歷史版本驗證或定位某乙個問題,這時候若介面之間出現公升級,就會出現不相容問題,導致系統執行障礙。
apollo優化:protobuf能夠很好支援向後相容
apollo使用protobuf來替代rosmessage,最大好處是可以完全覆蓋message中本身包含的型別,有利於把既有的rosmessage遷移到protobuf格式下。此外protobuf有非常好的版本相容性。
個人覺得這是對ros最大的優化所在
protobuf訊息格式與ros深度整合
在apollo ros中,做了一整套對protobuf的支援, 在工程中可以不需要做protobuf和ros message的轉換,直接publish protobuf格式的訊息,除錯工具也能夠非常正確的解析出來正確的protobuf訊息。這樣既能夠很好解決相容性問題,也不會產生額外的學習成本和使用成本。
ROS 總結(一) ROS系統框架
ros的系統主要被分成了三部分 檔案系統級 程式是如何組織和構建的,需要的核心檔案 計算圖級 描述程式是如何執行的,程序和系統之間如何通訊 開源社群級 程式的分布式管理方式,開發人員之間如何共享知識 演算法和 ros系統的不同元件被放在不同的功能資料夾下。這些資料夾根據功能的不同來對檔案進行組織 功...
ROS總結 建立ROS工作空間
mkdir p catkin ws src cd catkin ws src2.編譯catkin工作空間 cd catkin ws catkin make3.配置環境變數 source devel setup.bashnote 要想保證工作空間已配置正確需確保ros package path環境變數...
初學ROS總結
初步總結一下自己對ros的認識,遇到的坑以及相應的解決辦法。首先介紹一下我的電腦配置,win10系統,裝虛擬機器ubuntu16.04,ros版本kinetic.第一步是ubuntu的使用,如果不熟悉ubuntu的話,可以去乙個叫 實驗樓的 上學習ubuntu的基本操作,命令。第二部ros的安裝,按...