【自动驾驶】12.百度Apollo对ROS的优化【详细干货】
轉載自 “Apollo智能駕駛” 公眾號 和搜狐網 “百度開發者中心” : 原文鏈接
7月22日,百度自動駕駛事業部資深架構師、數據平臺專家楊凡,百度自動駕駛資深架構師何瑋,百度智能駕駛事業部資深架構師郁浩三名講師在中關村創業大街車庫咖啡,向參加沙龍的三百多名開發者們深度解析了Apollo平臺與智能駕駛方案。
上期內容中,百度自動駕駛事業部資深架構師楊凡為我們詳細講解了Apollo1.0開放內容及Apollo2.0展望,點此回顧:,本期我們繼續曝光干貨,由百度自動駕駛資深架構師何瑋跟我們分享:
|何瑋講師:《Apollo代碼開放框架—ROS 探索與實踐》
何瑋,百度自動駕駛資深架構師,專注于百度自動駕駛車載計算框架相關工作。
以下是主題演講內容:
一、 自動駕駛對ROS框架的三點需求
自動駕駛系統非常復雜,包含感知、障礙物檢測、決策、車輛控制等模塊,把這么多功能各異的模塊集成在一起,組成一個完整的系統并完成自動駕駛的任務,這是一個非常大挑戰。
1、高效的開發支持,快速的算法迭代要求ROS框架要能提供良好的開發模式,算法工程師更多聚焦在算法本身的開發和功能驗證上。通過一個框架統一完成諸如配置管理、環境配置、整體運行以及調試等功能,快速構建系統原型,驗證算法和功能。
2、模塊靈活配置,感知、定位、決策模塊,本身功能相對獨立,通過接口定義數據。工程師在整體開發中希望各個模塊獨立開發、調試,應用時能通過框架快速集合成完整的系統并運行。
3、豐富的調試工具,自動駕駛系統涉及大量圖像、點云處理算法,對于各種可視化工具有非常高需求,障礙物檢測是否精準, 規劃路徑是否合理、定位是否正確,這些環節在調試過程中都需要可視化工具的支持。
二、 為什么選用ROS框架?
1、行業認可,ROS框架很早就被機器人行業所使用,目前有3000多個基礎庫,能夠支持應用的快速開發。
2、消息機制,ROS在開發過程中,基于功能把整個自動駕駛系統分成多個模塊,每個模塊負責自己消息的接收、處理、發布。當模塊需要聯調時,通過框架可以把各個模塊快速的集成到一起。
3、使用廣泛,ROS是學術界使用最廣泛的框架,對于驗證最新的算法非常便利。
正是基于以上特性,在Apollo1.0版本中選擇ROS作為開發和集成的框架。
三、Apollo中ROS的改進
為適應ROS在自動駕駛汽車上的應用,做了相應改進。
1、通信性能優化
|問題:自動駕駛大量使用傳感器引發很大的傳輸帶寬需求
自動駕駛系統為了能夠感知復雜的道路情況,需要多種傳感器協同工作才能覆蓋不同的場景、不同路況需求。多傳感器共同使用會對車載系統造成很大壓力。
|解決優化:共享內存能減少傳輸中的數據拷貝,顯著提升傳輸效率
|問題:單路傳感器消息有多個消費者時負載成倍增長
|解決優化:共享內存可以有效滿足一對多的傳輸場景
共享內存本身的特性能夠支持一次寫入、多次讀取功能。對于一對多傳輸場景,不同的使用者就可以同時讀取,實現一次寫入,多次讀取的功能,成倍提升傳輸效率。
|通信性能優化效果
A、一對一傳輸過程中,共享內存吞吐量達到socket兩倍,一對多傳輸過程中,共享內存傳輸對帶寬的優勢進一步擴大。
B、共享內存傳輸延遲比Shared節省一半,對強實時性系統的自動駕駛汽車幫助很大。
C、共享內存CPU資源占用要比socket減少很多,一定程度上提升計算算法和能力。
2、去中心化的網絡拓撲
|ROS特點:ROS以Master為中心構建hybridp2p拓撲網絡
ROS是以Master為中心構建Hybrid p2p拓撲網絡,帶來了比較強的容錯性,當某個算法出現異常導致崩潰的時候,不會引起整個的異常,為局部異常處理提供便利。
|問題:Master作為拓撲網絡的中心,一旦異常將影響整個網絡
整個系統非常依賴Master這個單點,一旦Master異常,所有節點都不能發現其他節點,這樣整個系統就不能正常工作。
|解決優化:使用RTPS服務發現協議實現完全的P2P網絡拓撲
在ROS中添加基于RTPS服務協議功能,網絡構建不會以Master作為中心,而是通過域概念作為劃分,所有節點加入域中,會通過RTPS協議相互廣播通知其他節點,然后節點間會建立點對點連接,來發布訂閱消息,以替代Master作為中央信息交換的功能。
|使用RTPS服務發現過程
A. Sub節點啟動,通過組播向網絡注冊
B、通過節點發現,兩兩建立unicast
C、向新加入的節點發送歷史拓撲消息
D、收發雙發建立連接,開始通信
3、數據兼容性擴展
|Message是ROS中描述軟件組件接口的語言
Message是ROS中描述接口的一種語言,當兩個節點之間需要建立連接的時候,通常需要滿足兩個條件。一是接收和發送的Topic屬于同一個話題,二是兩個模塊定義的模式要完全一致。
|ROS使用msg描述文件定義模塊間的消息接口
ROS怎么定義message?ROS使用msg文件對數據接口進行抽象化的描述,并可以生成不同語言的接口實現,以滿足不同語言的通信交流需求。
|問題:接口升級后,不同版本的模塊難以兼容
兼容性的問題,當項目規模比較小時,影響不大;但是對于無人自動駕駛比較龐大的項目時,影響就很大。當某一個模塊接口升級了,需要把所有相關模塊升級到最新版本之后,才能在一起進行基礎功能的連調。同時對于線下仿真調試的時候,有時需要把某一個模塊回到歷史版本驗證或定位某一個問題,這時候若接口之間出現升級,就會出現不兼容問題,導致系統運行障礙。
|問題:接口升級后,歷史數據也面臨無法使用的問題
接口兼容性問題會對歷史數據使用造成更大影響,自動駕駛汽車系統中歷史數據是非常寶貴和重要資源,對于這種問題有一些解決方式,一是通過離線數據批量轉換和在線方式,二是轉換成新數據。
|解決優化:protobuf能夠很好支持向后兼容
使用protobuf來替代ROSmessage,最大好處是可以完全覆蓋message中本身包含的類型,有利于把既有的ROSmessage遷移到protobuf格式下。此外protobuf有非常好的版本兼容性。
|解決優化:protobuf消息格式與ROS深度集成
在Apollo ROS中,做了一整套對protobuf的支持, 在工程中可以不需要做protobuf和ROS message的轉換,直接publish protobuf格式的消息,調試工具也能夠非常正確的解析出來正確的protobuf消息。這樣既能夠很好解決兼容性問題,也不會產生額外的學習成本和使用成本。
四、Apollo框架使用
|如何獲取Apollo?
|Apollo代碼怎么用?
|進入HMI頁面Apollo
HMI界面可以自動映射到主機的系統中,在啟動系統中只需打開瀏覽器,就能看到整個HMI截面,Apollo的HMI界面可直接看到。
|Dreamview實時顯示
把Dreamview打開,出現工程師看的最多的界面,界面會顯示主車路徑、剎車油門狀態、方向盤狀態等信息。
|回放數據重現場景
離線使用時,回到HMI界面,看到車沿著既定的路面運行及規劃軌跡,右上角剎車油門和車的速度,以及方向盤的控制轉角。至此Apollo離線demo就可以跑起來。
|如何改造自動駕駛系統?
quickstart文件中有中英文各種文檔。如果想對Apollo做定制化修改,可增加全新的驅動,或者調試參數,howto這里有一系列教程,告訴大家如何改造自己的自動駕駛系統。
總結
以上是生活随笔為你收集整理的【自动驾驶】12.百度Apollo对ROS的优化【详细干货】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【自动驾驶】11.百度Apollo对RO
- 下一篇: 【自动驾驶】6.实时发布订阅协议(RTP