1. 程式人生 > >Apollo原始碼結構

Apollo原始碼結構

Apollo原始碼主要是c++實現的,也有少量python,主要程式在apollo/modules目錄中,共18個包,功能包17個:

這裡寫圖片描述

其中每個模組的作用如下:

  • apollo/modules/calibration : 校準模組,使用前必須對系統進行校準和標定,包括鐳射雷達與攝像頭、毫米波雷達與攝像頭等。所謂校準就是要對齊鐳射雷達、攝像頭以及毫米波雷達獲得的資訊,我們知道鐳射雷達可以獲得詳細的3D資訊,但是不能獲得顏色資訊,攝像頭可以獲得顏色資訊,但是無法獲得深度等3D資訊,毫米波雷達不能獲得顏色資訊,但是可以獲得3D資訊,三者獲得的資訊對齊後,就可以同時獲得實際環境中的3D資訊和顏色資訊。
  • apollo/modules/canbus:汽車can匯流排控制模組。接收控制指令,同時給控制模組control傳送車身狀態資訊。
  • apollo/modules/common:公共原始碼模組。包括如日誌,工廠模式的實現,日誌系統,監控模組,數學演算法等。
  • apollo/modules/control:控制模組。基於決策規劃的輸出路徑及車身的狀態使用不同的控制演算法來輸出控制命令,如轉向剎車,控制等。
  • apollo/modules/data:資料模組。收集、儲存、處理收集到的各種資料的。
  • apollo/modules/dreamview:視覺化模組。檢視規劃的軌跡及實時的轉向剎車油門資訊
  • apollo/modules/drivers:驅動模組。各種感測器驅動。
  • apollo/modules/e2e:end to end,端到端強化學習。
    所謂e2e指的是由感測器的輸入,直接決定車的行為,例如油門,剎車,方向等。也就是機器學習的演算法直接學習人類司機的駕駛行為。這部分在程式碼中需要另外下載,學習的資料主要來源於感測器的原始資料,包括影象、鐳射雷達、雷達等。end-to-end輸入以影象為主。 輸出是車輛的控制決策指令,如方向盤角度、加速、剎車。 連線輸入輸出的是深度神經網路,即通過神經網路直接生成車輛控制指令對車輛進行橫向控制和縱向控制,中間沒有人工參與的邏輯程式。橫向控制,主要是指通過方向盤控制車身橫向移動,即方向盤角度。縱向控制,是指通過油門和剎車控制車身縱向的移動,即加速、剎車等。橫向模型的輸出沒有采用方向盤角度,而是使用要行駛的曲率(即拐彎半徑的倒數)。
  • apollo/modules/elo:利用高精地圖的自定位模組。這部分的程式碼也是另外下載。前向的攝像頭會採集車道資料以實現更精確的定位,輸出的位置資訊包括車輛的x y z座標,還有就是在百度高精度地圖中的ID。
  • apollo/modules/localization:定位模組。輸入GPS和IMU資訊輸出自車定位資訊
  • apollo/modules/map:高精地圖模組。輸出結構化地圖資訊,如車道線,十字路口等。
  • apollo/modules/monitor:監控模組。監控硬體狀態,同時把狀態發給互動介面。
  • apollo/modules/perception:感知模組。輸入鐳射點雲,高精地圖,變換座標,輸出3D障礙物包括速度大小和方向。
  • apollo/modules/planning:區域性決策規劃模組。
  • apollo/modules/prediction:預測模組。輸出感知的障礙物資訊及自定位資訊輸出障礙物未來的軌跡。
  • apollo/modules/routing:全域性規劃模組。輸入包括地圖資訊各起點終點地址,輸出一個全域性的導航資訊。
  • apollo/modules/third_party_perception:第三方感知模組。
  • apollo/modules/tools:通用監控與視覺化模組。

2. 分類

2.1 感知:

  • 感知當前位置,速度,障礙物等等
    – Apollo/modules/perception

  • 三方感知器支援
    – Apollo/modules/third_party_perception

2.2 預測:

  • 對場景下一步的變化做出預測
    – Apollo/modules/prediction

2.3 規劃:

  • 全域性路徑規劃:通過起點終點計算行駛路徑
    – Apollo/modules/routing
  • 規劃當前軌道:通過感知,預測,路徑規劃等資訊計算軌道
    – Apollo/modules/planning
  • 規劃轉換成命令:將軌道轉換成控制汽車的命令(加速,制動,轉向等)
    – Apollo/modules/control

2.4 定位:

  • 輸入GPS和IMU資訊輸出自車定位位置資訊
    – Apollo/modules/localization
  • 高精地圖模組
    – Apollo/modules/map
  • 利用高精地圖的自定位模組,利用前向的攝像頭會採集車道資料以實現更精確的定位
    – Apollo/modules/elo

2.5 互動:

  • 視覺化模組,使用者互動資訊
    – Apollo/modules/dreamview

2.6 驅動

  • 裝置驅動
    – Apollo/modules/drivers
  • 監控模組
    – Apollo/modules/monitor
  • 汽車硬體互動
    – Apollo/modules/canbus

2.7 工具程式

  • 標註工具
    –Apollo/modules/calibration
  • Apollo/modules/common
    –通用公共工具
  • Apollo/modules/data
    – 資料工具
  • Apollo/modules/tools
    – Python工具

2.8 強化學習

  • Apollo/modules/e2e

3. 工作流程

自動駕駛系統先通過起點終點規劃出全域性路徑(routing);然後在行駛過程中感知(perception)當前環境(識別車輛行人路況標誌等),並預測下一步發展;然後把已知資訊都傳入規劃模組(planning),規劃出之後的軌道;控制模組(control)將軌道資料轉換成對車輛的控制訊號,通過汽車互動模組(canbus)控制汽車.

流程圖如下:

這裡寫圖片描述

				<script>
					(function(){
						function setArticleH(btnReadmore,posi){
							var winH = $(window).height();
							var articleBox = $("div.article_content");
							var artH = articleBox.height();
							if(artH > winH*posi){
								articleBox.css({
									'height':winH*posi+'px',
									'overflow':'hidden'
								})
								btnReadmore.click(function(){
									articleBox.removeAttr("style");
									$(this).parent().remove();
								})
							}else{
								btnReadmore.parent().remove();
							}
						}
						var btnReadmore = $("#btn-readmore");
						if(btnReadmore.length>0){
							if(currentUserName){
								setArticleH(btnReadmore,3);
							}else{
								setArticleH(btnReadmore,1.2);
							}
						}
					})()
				</script>