Apollo作爲自動駕駛平臺,學習者如何從硬體、軟體等方面快速入門。同時,課程還會介紹Apollo的部署安裝以及模擬平臺的使用。
一、Apollo自動駕駛架構介紹
我們還記得,自動駕駛硬體架構:一般採用鐳射雷達作爲主要感知感測器,同時結合攝像頭、GPS/IMU、毫米波雷達、超聲波雷達等,一NVIDIA Drive PX2或者Xavier作爲主要計算平臺,在工業PC機上執行各種演算法模組,通過線控技術控制車輛行駛。
下面 下麪我們開始介紹詳細內容:
底層車輛平臺執行Apollo無人駕駛平臺的車輛控制指令。爲了能夠執行Apollo生成的指令,車輛必須是線控的,例如可以接受一定的指令,比如換擋、加減速、轉向,完成對應的操作。
感測器層主要是整合各種感測器對汽車周圍環境進行感知,包括GPS、IMU、相機、鐳射雷達、毫米波雷達、超聲波雷達等。無人駕駛系統對算力的要求非常高,所以在Apollo上安裝一臺高效能工控機(IPC)機。
Apollo 中GPS/IMU主要是用於自定位。相機的功能主要是做紅綠燈識別。主感測器鐳射雷達主要用來感知車輛周圍環境。在百度內部使用了Velodyne 64線鐳射雷達和國產禾賽的Pandora。Apollo 3.0時,我們開放了更多的鐳射雷達型號,例如16線速騰聚創(Robosense)、16線鐳神科技等等。毫米波雷達主要用來做遠距離的跟車、障礙物的檢測等。超聲波雷達主要用來做五米範圍之內的障礙物的檢測;HMI是對車輛發指令的一些裝置,例如平板。Blackbox是百度開放的一個商業化硬體,它記錄一些內部數據,例如關鍵時刻的執行操作,類似於飛機上的黑匣子。在Apollo 3.0,我們發佈了一些硬體開發平臺,成爲Sensor Unit(ASU)。
核心軟體層又可以細分爲三層:最下面 下麪的是RTOS實時操作系統,在Apollo中,我們使用打修補程式的方式來實現實時的效果。中間層是Runtime Framework。這一層,我們用的是ROS,主要是爲上層的模組提供數據層支援。最上面一層是Apollo各個功能模組實現部分,包括地圖引擎、定位、感知、規劃、監管、控制、端到端以及HMI等。
最上層的雲服務層提供了高精度地圖服務、模擬模擬、D阿塔、 Platform、安全和更新、DuerOS等。
對於高精度地圖,在中國,個人並不具備制定高精度地圖的資歷和能力,因爲政府對地圖的繪製有極其嚴格的限制力度。所以Apollo便將高精度地圖通過雲服務的方式對外開放。
二、Apollo平臺的快速入門
本節主要分享Apollo的快速入門方法,包括編譯、高精度地圖和實時相對地圖、一些偵錯工具以及新加入的計算單元和模組。
下圖是大家對於無人駕駛方面比較感興趣的地方進行的統計如下:
Docker是一種容器的技術,它在是Linux內核的基礎上做了一些輕量級和隔離機制 機製的優化,讓環境更小,部署起來更快。
利用Docker可以使整個工程的安裝更加簡單。Docker映象通常是一個設定好的執行環境,包括依賴的第三方庫等,使得使用者不需要對環境編譯做過多複雜的操作。
例如,在Release版本中,Apollo各個模組是一個已經編譯好的二進制檔案,可以直接執行;如果是開發版本,通常已經載入了所需的第三方庫,使用者只需要執行對應的編譯指令。
要完成自己硬體的整合,需要遵循以下三步:
第一步是原始的UDP(User Data Packet,用戶數據包)。
第二步是做一個ROS Driver 方法,把驅動編譯到Apollo裏面
第三步是把數據發佈出來
如何使用不同於參考硬體的感測器?
我們舉出以下兩個例子,如下所示:
第一個例子是如何用一個新型號的Camera,假設是USB介面的相機。如下圖所示:最下層是相機硬體;往上一層是一個標準的底層驅動,即Video for Linux driver;再上一層是一個ROS Driver,最上層是Apollo可以接收到的內容。要使用該相機,主要的工作是底層硬體的解析,使得Apollo可以接收到相應的數據。
第二個例子就是鐳射雷達。它的工作流程大致爲:硬體通常基於內核Socket的方式把數據傳輸到PC,PC端做一些數據處理之後發佈的對應訊息型別。對於鐳射雷達而言,發佈的是Pointcloud 訊息型別,該訊息將被最上層的Apollo感知模組接收如下所示:右側給出了ROS Driver如何解析UDP數據包的過程。
編譯安裝Apollo的步驟大致分爲三個階段
第一個階段是在Ubuntu環境下進行操作,包括下載Apollo原始碼,安裝Docker。Docker的安裝方式有線上和離線兩種方式,大家可以根據網路選取合適的安裝方式。
第二階段是進入Docker,拉取Apollo映象,並以此建立容器。
第三階段是進入容器,編譯原始碼
編譯結束以後可以做RTK循跡測試。RTK循跡測試就是把車輛底盤發出的這些主題和定位輸出進行融合。
下圖是一個高精度地圖,其右側是相對地圖,實時相對地圖是車輛通過感測器來感知車身周圍環境,可以幫助開放者更友好、方便執行Apollo。
Apollo提供了一些非常有用的工具,幫助開發者提供效率,如下所示:
此外還提供了DBC檔案轉換工具、Teleop、主題監控工具、設定工具等。DBC轉換工具解析車輛DBC檔案,生成對應的Protobuf。Teleop工具可以通過鍵盤控制的方式實現車輛的信號發佈。
主題監控工具可以同時需要監聽多個ROS topic。Configuration工具明確標識出來修改了哪些欄位。另外,Apollo還提供了面向Rosbag的一些工具,包括分析規劃模組、驅動以及統計資訊等,如圖所示。
交通模擬工具可以通過指令碼的方式控制地圖的紅綠燈變化情況,對車輛進行測試,如圖所示:
該模組是整個Apollo專案視覺化的一個模組,基於該模組,開發者可以在沒有車和感測器的情況下使用Apollo各個軟體模組。
三、Apollo安裝過程概述
分三步:
第一步:安裝基礎環境
第二步:拉取Docker映象並建立容器
第三步:進入容器編譯原始碼
1.首先是安裝git,因爲Apollo程式碼是託管在github平臺上,所以需要git工具,然後使用git將Apollo原始碼克隆到本地。
2.下載原始碼後,還要安裝Docker環境,可以使用Apollo提供的指令碼安裝,也可以在官網安裝。
3.環境安裝完成後,運用官方提供的指令碼拉去Apollo Docker映象檔案,執行dev_start.sh-C命令。其中-C選項表示使用中國伺服器進行加速。在拉取成功之後,該指令碼會基於映象建立一個容器Container。
4.接下來是對Apollo的操作,如果沒有編譯,需要先使用apollo.sh指令碼進行編譯。它有很多編譯選項,預設的是Build和OP。還可以選擇面向GPU編譯。RS是對RB速騰聚創的鐳射雷達進行編譯,USB Camera是對Camera的編譯,這幾種編譯方式所涉及的類不同,所以使用的編譯方式也不盡相同。
5.編譯完成之後,需要對Apollo各個模組進行偵錯,我們會在每個版本發佈的時候給出對應的Rosbag數據包,方便去做驗證。比如說Apollo 1.0提供了一個循跡數據包,2.0時發佈了一個鐳射點雲的數據包。
6.我們可以啓動bootstrap.sh指令碼,對Apollo的bag進行回放,看一下效果。這是一個引導指令碼,它做了以下事情,啓動進程守護工具Supervisor,假如有進程出現不可預知的異常,這些進程通常會掛掉,經過設定後Supervisor可以保證在進程掛掉後,會將該進程拉進來。然後啓動Roscore、voice_dectore和Dreamviewer。
7.對於Apollo平臺,很多的模組都被啓動,交由Supervisor進程進行監控,包括Can Bus、 鐳射雷達、控制模組、GPS、Mobileeye、NG等模組。
8.在執行完bootstrap.sh指令碼之後,在瀏覽器位址列輸入localhost:8888檢視Demo的演示效果。Demo載入bag對應的數據,包括車輛的數據、障礙物數據、綠色障礙物ID、速度、形態。車在執行過程中需要檢視的不僅僅是模擬出來的場景,還要看一些跟Planner、控制相關的資訊。
模擬平臺的使用方式大概分爲以下幾個步驟,如下圖所示:
按照下圖所示進入模擬官方平臺,前提是擁有百度賬號。
進入後,就可以使用它的功能進行模擬實驗了。
四、Azure模擬平臺使用
Azure是一種靈活和支援互操作的平臺,它可以被用來建立雲中執行的應用或者通過基於雲的特性來加強現有應用。它開放式的架構給開發者提供了Web應用、互聯裝置的應用、個人電腦、伺服器、或者提供最優線上複雜解決方案的選擇。
上圖是微軟的一個模擬平臺Azure,它不需要本地部署。
圖中左側的Build用來做持續整合,由於有很多的開發者會提交自己對Apollo修改後的程式碼,我們不可能每次都把程式碼下到本地進行驗證。爲了簡化驗證,團隊會把已經編輯好的測試運例來測試開發者提交的程式碼是否正確,以此來判斷開發者的程式碼對目前的Master的分支有影響。Build提供了對開發者程式碼驗證的一種渠道。
Simulation主要用來驗證程式碼的魯棒性。Apollo團隊在微軟的Azure模擬平臺上部署了很多場景,拿最新的程式碼去做這些場景下進行驗證和測試,看相應模組在這些場景的
執行情況,最終得到程式碼的魯棒性報告。該平臺的地址是azure.apollo.auto。在該模擬平臺執行自己的程式碼是不需要進行本地編譯的,其使用流程如下所示:
首先是克隆Apollo在Github上的程式碼
然後再本地對相應的模組進行修改,例如Planning。
將程式碼提交到自己再Github的Apollo倉庫中,可以是Master分支也可以是新建的分支
最後再微軟Azure模擬平臺選擇目標場景對更新後的程式碼進行驗證
執行之後會拿到一個報告,表示修改的程式碼再不同場景下的執行情況。如下圖所示:
其中第一列的Scenario是一些場景,在模擬平臺中,我們會把一段很長的路切割成很多的場景,比如有左轉、左轉有行人、有行人橫插等。後面幾列是對應場景的狀態描述,Run Status表示場景的執行狀態,如果後面的指標有一個失敗,那麼Run Status就是失敗的。具體衡量的指標有:
碰撞檢測、速度校驗、On Road檢測、Red-Light檢測(是否有闖紅燈的情況)、ARW檢測(是否成功到達目的地)、Hard Break(急剎車)、加速度(它是影響體感的一個指標)。
本次對模擬平臺的學習就到這裏了,有什麼不懂得地方可以一起探討哦。