無人駕駛剛剛開始的未來和技術的宏觀架構

人工智能 機器學習 機器人 GPS技術 北京卓迪克信息技術 2017-05-30

無人駕駛技術總結

無人駕駛是一個複雜的系統,如圖1所示,系統主要由三部分組成:算法端、Client端和雲端。其中算法端包括面向傳感、感知和決策等關鍵步驟的算法;Client端包括機器人操作系統以及硬件平臺;雲端則包括數據存儲、模擬、高精度地圖繪製以及深度學習模型訓練。

無人駕駛剛剛開始的未來和技術的宏觀架構

圖1 無人駕駛系統架構圖

算法子系統從傳感器原始數據中提取有意義的信息以瞭解周遭環境情況,並根據環境變化做出決策。Client子系統融合多種算法以滿足實時性與可靠性的要求。舉例來說,傳感器以60HZ的速度產生原始數據,Client子系統需要保證最長的流水線處理週期也能在16ms內完成。雲平臺為無人車提供離線計算以及存儲功能。通過雲平臺,我們能夠測試新的算法、更新高精度地圖並訓練更加有效的識別、追蹤、決策模型。

無人駕駛算法

算法系統由幾部分組成:第一,傳感並從傳感器原始數據中提取有意義信息;第二,感知,以定位無人車所在位置以及感知現在所處的環境;第三,決策,以可靠安全抵達目的地。

傳感

通常來說,一輛無人駕駛汽車裝備有許多不同類型的主傳感器。每一種類型的傳感器都各有優劣,因此,來自不同傳感器的傳感數據應該有效地進行融合。現在無人駕駛中普遍使用的傳感器包括以下幾種。

  • GPS/IMU:通過高達200Hz頻率的全球定位和慣性更新數據以幫助無人車完成自我定位。GPS是一個相對準確的定位用傳感器,但是它的更新頻率過低,僅僅有10HZ,不足以提供足夠實時的位置更新。IMU的準確度隨著時間降低,在長時間內並不能保證位置更新的準確性,但是,它有著GPS所欠缺的實時性,IMU的更新頻率可以達到200HZ或者更高。通過整合GPS與IMU,我們可以為車輛定位提供既準確又足夠實時的位置更新。

  • LiDAR:激光雷達可被用來繪製地圖、定位以及避障。雷達的準確率非常高,因此在無人車設計中雷達通常被作為主傳感器使用。激光雷達是以激光為光源,通過探測激光與被探測無相互作用的光波信號來完成遙感測量。激光雷達可以用來產生高精度地圖,並針對高精地圖完成移動車輛的定位;以及滿足避障的要求。以Velodyne 64-束激光雷達為例,它可完成10HZ旋轉並每秒可達到130萬次讀數。

  • 攝像頭:被廣泛使用在物體識別以及物體追蹤等場景中,像是車道線檢測、交通燈偵測、人行道檢測中都以攝像頭為主要解決方案。為了加強安全性,現有的無人車實現通常在車身周圍使用至少八個攝像頭,分別從前、後、左、右四個維度完成物體發現、識別、追蹤等任務。這些攝像頭通常以60HZ的頻率工作,當多個攝像頭同時工作時,將產生高達1.8GB每秒的巨數據。

  • 雷達和聲吶:雷達通過把電磁波能量射向空間某一方向,處在此方向上的物體反射碰到的電磁波;雷達再接收此反射波,提取有關該物體的某些信息(目標物體至雷達的距離,距離變化率或徑向速度、方位、高度等)。雷達和聲吶系統是避障的最後一道保障。雷達和聲吶產生的數據用來表示在車的前進方向上最近障礙物的距離。一旦系統檢測到前方不遠有障礙物出現,則有極大的相撞危險,無人車會啟動緊急剎車以完成避障。因此,雷達和聲吶系統產生的數據不需要過多的處理,通常可直接被控制處理器採用,並不需要主計算流水線的介入,因為可實現轉向,剎車、或預張緊安全帶等緊急功能。

感知

在獲得傳感信息之後,數據將被推送至感知子系統以充分了解無人車所處的周遭環境。在這裡感知子系統主要做的是三件事:定位、物體識別以及物體追蹤。

無人駕駛剛剛開始的未來和技術的宏觀架構

圖2 基於GPS/IMU的定位

定位

GPS以較低的更新頻率提供相對準確的位置信息;IMU則以較高的更新頻率提供準確性偏低的位置信息。我們可使用卡爾曼濾波來整合兩類數據各自的優勢,合併提供準確且實時的位置信息更新。如圖2所示,IMU每5ms更新一次,但是期間誤差不斷累積精度不斷降低。所幸的是,每100ms可以得到一次GPS數據更新,以幫助我們校正IMU積累的誤差。因此,我們最終可以獲得實時並準確的位置信息。然而,我們不能僅僅依靠這樣的數據組合以完成定位工作。原因有三:其一,這樣的定位精度僅在一米之內;其二,GPS信號有著天然的多路徑問題將引入噪聲干擾;其三,GPS必須在非封閉的環境下工作,因此在諸如隧道等場景中GPS都不適用。

無人駕駛剛剛開始的未來和技術的宏觀架構

圖3 基於立體視覺的測距

因此作為補充方案,攝像頭也被用為定位。簡化來說,如圖3所示,基於視覺的定位由三個基本步驟組成:1. 通過對立體圖像的三角剖分,將首先獲得視差圖用以計算每個點的深度信息;2. 通過匹配連續立體圖像幀之間的顯著特徵,可通過不同幀之間的特徵建立相關性,並由此估計這兩幀之間的運動情況;3. 通過比較捕捉到的顯著特徵和已知地圖上的點來計算車輛的當前位置。然而,基於視覺的定位方法對照明條件非常敏感,因此其使用受限並可靠性有限。

因此,藉助於大量粒子濾波的激光雷達通常作為車輛定位的主傳感器。由激光雷達產生的點雲對環境進行了“形狀化描述”,但並不足以區分各自不同的點。通過粒子濾波,系統可將已知地圖與觀測到的具體形狀進行比較以減少位置的不確定性。

為了在地圖中定位運動的車輛,我們使用粒子濾波的方法來關聯已知地圖和激光雷達測量過程。粒子濾波可以在10釐米的精度內達到實時定位的效果,在城市的複雜環境中尤為有效。然而,激光雷達也有其固有的缺點:如果空氣中有懸浮的顆粒比如雨滴或者灰塵,測量結果將受到極大的擾動。因此,為了完成可靠並精準的定位,需要傳感器融合,如圖4所示,處理來整合所有傳感器的優點。

無人駕駛剛剛開始的未來和技術的宏觀架構

圖4 定位中的傳感器融合

物體識別與跟蹤

激光雷達可提供精準的深度信息,因此常被用於在無人駕駛中執行物體識別和追蹤的任務。近年來,深度學習技術得到了快速的發展,通過深度學習可達到較顯著的物體識別和追蹤精度。

卷積神經網絡(CNN)是一類在物體識別中被廣泛應用的深度神經網絡。通常,卷積神經網絡由三個階段組成:1. 卷積層使用不同的濾波器從輸入圖像中提取不同的特徵,並且每個過濾器在完成訓練階段後都將抽取出一套“可供學習”的參數;2. 激活層決定是否啟動目標神經元;3. 匯聚層壓縮特徵映射圖所佔用的空間以減少參數的數目,並由此降低所需的計算量;4. 對物體進行分類。一旦某物體被CNN識別出來,下一步將自動預測它的運行軌跡或進行物體追蹤。

無人駕駛剛剛開始的未來和技術的宏觀架構

圖5 面向行為預測的隨機模型

物體追蹤可以被用來追蹤鄰近行駛的車輛或者路上的行人,以保證無人車在駕駛的過程中不會與其他移動的物體發生碰撞。近年來,相比傳統的計算機視覺技術,深度學習技術已經展露出極大的優勢,通過使用輔助的自然圖像,離線訓練好的模型直接應用在在線的物體追蹤中。

決策

在決策階段,行為預測、路徑規劃以及避障機制三者結合起來實時完成無人駕駛動作規劃。

行為預測

車輛駕駛中的一個主要考驗是司機如何應對其他行駛車輛的可能行為,這種預判斷直接影響司機本人的駕駛決策,特別是在多車道環境或者交通燈變燈的情況下,司機的預測決定了下一秒行車的安全。因此,過渡到無人駕駛系統中,決策模塊如何根據周圍車輛的行駛狀況決策下一秒的行駛行為顯得至關重要。

為了預測其他車輛的行駛行為,可以使用隨機模型產生這些車輛的可達位置集合,並採用概率分佈的方法預測每一個可達位置集的相關概率。

路徑規劃

為無人駕駛在動態環境中進行路徑規劃是一件非常複雜的事情,尤其如果車輛是在全速行駛的過程中,不當的路徑規劃有可能造成致命的傷害。路徑規劃中採取的一個方法是使用完全確定模型,它搜索所有可能的路徑並利用代價函數的方式確定最佳路徑。然後,完全確定模型對計算性能有著非常高的要求,因此很難在導航過程中達到實時的效果。為了避免計算複雜性並提供實時的路徑規劃,使用概率性模型成為了主要的優化方向。

避障

安全性是無人駕駛中最為重要的考量,我們將使用至少兩層級的避障機制來保證車輛不會在行駛過程中與障礙物發生碰撞。第一層級是基於交通情況預測的前瞻層級。交通情況預測機制根據現有的交通狀況如擁堵、車速等,估計出碰撞發生時間與最短預測距離等參數。基於這些估計,避障機制將被啟動以執行本地路徑重規劃。如果前瞻層級預測失效,第二級實時反應層將使用雷達數據再次進行本地路徑重規劃。一旦雷達偵測到路徑前方出現障礙物,則立即執行避障操作。

Client系統

Client系統整合之前提到的避障、路徑規劃等算法以滿足可靠性及實時性等要求。Client系統需要克服三個方面的問題:其一,系統必須確保捕捉到的大量傳感器數據可以及時快速地得到處理;其二,如果系統的某部分失效,系統需要有足夠的健壯性能從錯誤中恢復;其三,系統必須在設計的能耗和資源限定下有效地完成所有的計算操作。

機器人操作系統

機器人操作系統ROS是現如今廣泛被使用、專為機器人應用裁剪、強大的分佈式計算框架。每一個機器人任務,比如避障,作為ROS中的一個節點存在。這些任務節點使用話題與服務的方式相互通信。

ROS非常適用於無人駕駛的場景,但是仍有一些問題需要解決。

  • 可靠性:ROS使用單主節點結構,並且沒有監控機制以恢復失效的節點。

  • 性能:當節點之間使用廣播消息的方式通信時,將產生多次信息複製導致性能下降。

  • 安全:ROS中沒有授權和加密機制,因此安全性受到很大的威脅。

儘管ROS 2.0 承諾將解決上述問題,但是現有的ROS版本中仍然沒有相關的解決方案。因此為了在無人駕駛中使用ROS,我們需要自行克服這些難題。

可靠性

現有的ROS實現只有一個主節點,因此當主節點失效時,整個系統也隨之奔潰。這對行駛中的汽車而言是致命的缺陷。為了解決此問題,我們在ROS中使用類似於ZooKeeper的方法。如圖6所示,改進後的ROS結構包括有一個關鍵主節點以及一個備用主節點。如果關鍵主節點失效,備用主節點將被自動啟用以確保系統能夠無縫地繼續運行。此外,ZooKeeper機制將監控並自動重啟失效節點,以確保整個ROS系統在任何時刻都是雙備份模式。

無人駕駛剛剛開始的未來和技術的宏觀架構

圖6 面向ROS的Zoo-Keeper結構

性能

性能是現有ROS版本中有欠考慮的部分,ROS節點之間的通信非常頻繁,因此設計高效的通信機制對保證ROS的性能勢在必行。首先,本地節點在與其他節點通信時使用迴環機制,並且每一次迴環通信的執行都將完整地通過TCP/IP全協議棧,從而引入高達20微秒的時延。為了消除本地節點通信的代價,我們不再使用TCP/IP的通信模式,取而代之採用共享內存的方法完成節點通信。其次,當ROS節點廣播通信消息時,消息被多次拷貝與傳輸,消耗了大量的系統帶寬。如果改成目的地更明確的多路徑傳輸機制則將極大地該改善系統的帶寬與吞吐量。

安全

安全是ROS系統中最重要的需求。如果一個ROS節點被挾制後,不停地在進行內存分配,整個系統最終將因內存耗盡而導致剩餘節點失效繼而全線奔潰。在另一個場景中,因為ROS節點本身沒有加密機制,黑客可以很容易地在節點之間竊聽消息並完成系統入侵。

為了解決安全問題,我們使用Linux containers (LXC)的方法來限制每一個節點可供使用的資源數,並採用沙盒的方式以確保節點的運行獨立,這樣以來可最大限度防止資源洩露。同時我們為通信消息進行了加密操作,以防止其被黑客竊聽。

無人駕駛剛剛開始的未來和技術的宏觀架構

圖7 基於Spark和ROS的模擬平臺

硬件平臺

為了深入理解設計無人駕駛硬件平臺中可能遇到的挑戰,讓我們來看看現有的領先無人車駕駛產品的計算平臺構成。此平臺由兩個計算盒組成,每一個裝備有Intel Xeon E5處理器以及4到8個Nvidia Tesla K80 GPU加速器。兩個計算盒執行完全一樣的工作,第二個計算盒作為計算備份以提高整個系統的可靠性,一旦第一個計算盒發生故障,計算盒二可以無縫接手所有的計算工作。

在最極端的情況下,如果兩個計算盒都在峰值下運行,及時功耗將高達5000W,同時也將遭遇非常嚴重的發熱問題。因此,計算盒必須配備有額外的散熱裝置,可採用多風扇或者水冷的方案。同時,每一個計算盒的造價非常昂貴,高達2萬-3萬美元,致使現有無人車方案對普通消費者而言無法承受。

現有無人車設計方案中存在的功耗問題、散熱問題以及造價問題使得無人駕駛進入普羅大眾顯得遙不可及。為了探索無人駕駛系統在資源受限以及能耗受限時運行的可行性,我們在ARM面向移動市場的SoC實現了一個簡化的無人駕駛系統,實驗顯示在峰值情況下能耗僅為15W。

非常驚人地,在移動類SoC上無人駕駛系統的性能反而帶給了我們一些驚喜:定位算法可以達到每秒25幀的處理速度,同時能維持圖像生成的速度在30幀每秒。深度學習則能在一秒內完成2-3個物體的識別工作。路徑規劃和控制則可以在6毫秒之內完成規劃工作。在這樣性能的驅動之下,我們可以在不損失任何位置信息的情況下達到每小時5英里的行駛速度。

雲平臺

無人車是移動系統,因此需要雲平臺的支持。雲平臺主要從分佈式計算以及分佈式存儲兩方面對無人駕駛系統提供支持。無人駕駛系統中很多的應用,包括用於驗證新算法的仿真應用,高精度地圖產生和深度學習模型訓練都需要雲平臺的支持。我們使用Spark構建了分佈式計算平臺,使用OpenCL構建了異構計算平臺,使用了Alluxio作為內存存儲平臺。通過這三個平臺的整合,我們可以為無人駕駛提供高可靠、低延遲以及高吞吐的雲端支持。

仿真

當我們為無人駕駛開發出新算法時,我們需要先通過仿真對此算法進行全面的測試,測試通過之後才進入真車測試環節。真車測試的成本非常高昂並且迭代週期異常之漫長,因此仿真測試的全面性和正確性對降低生產成本和生產週期尤為重要。在仿真測試環節,我們通過在ROS節點回放真實採集的道路交通情況,模擬真實的駕駛場景,完成對算法的測試。如果沒有云平臺的幫助,單機系統耗費數小時才能完成一個場景下的模擬測試,既耗時同事測試覆蓋面有限。

在雲平臺中,Spark管理著分佈式的多個計算節點,在每一個計算節點中,都可以部署一個場景下的ROS回訪模擬。在無人駕駛物體識別測試中,單服務器需耗時3小時完成算法測試,如果使用8機Spark機群,時間可以縮短至25分鐘。

高精度地圖生成

如圖8所示,高精度地圖產生過程非常複雜,涉及到:原始數據處理、點雲生成、點雲對其、2D反射地圖生成、高精地圖標註、地圖生成等階段。使用Spark,我們可以將所有這些階段整合成為一個Spark作業。由於Spark天然的內存計算的特性,作業運行過程中產生的中間數據都存儲在內存中。當整個地圖生產作業提交之後,不同階段之間產生的大量數據不需要使用磁盤存儲,數據訪問速度加快,從而極大提高了高精地圖產生的性能。

相關推薦

推薦中...