3月31日,我們在北京舉辦了第三期自動駕駛公開課“Apollo2.0自動駕駛平臺—技術解析與應用”,吸引了300多位來自車企、零部件廠商、軟件公司、自動駕駛初創企業的開發者參加。
來自百度的資深工程師楊凡、萬國偉及Apollo生態合作伙伴黃英君、李曉飛做了精彩的分享。從Apollo“云+端”開發模式及迭代代碼的解析、到Apollo2.0定位技術及子模塊功能使用、分布式計算平臺解決方案,以及低速自動駕駛落地解決方案做了深入淺出的講解和演示。開發者爭相提問,現場氣氛非常熱烈。
今天,我們將整理后的公開課視頻和資料分享給大家,沒能到達現場的開發者可以通過PPT資料來詳細了解課程內容。
{ Apollo 2.0 實戰技術基礎 }
百度自動駕駛事業部資深架構師楊凡
非常高興有機會跟大家分享百度Apollo“云和端”的研發模式,接著幫助大家了解Apollo2.0演示方式的實戰以及車輛與循跡自動駕駛能力的實戰;之后是本次公開課的核心部分,障礙物識別和路徑規劃能力的實戰;在此基礎上介紹云端訓練平臺訓練紅綠燈感知能力,這是使用云端算法來加強自動駕駛能力的實戰;最后簡要介紹用云端仿真能力來完成驗證實戰。
現在的AI自動駕駛能力來自云端,所以在云端要采用大量的數據,進行標注和訓練。以紅綠燈為例,來解釋AI的訓練過程。一輛車在路上行駛,在安全方面嚴苛的要求,這種要求遠遠超過了對傳統汽車一般性的要求。要完成一套自動駕駛系統的安全性測試,如果利用100輛車,7×24小時的跑,大概要一百年才能夠測試完成。所以絕不是依靠真車來完成自動駕駛測試的,90%的測試工作需要在云端,通過仿真技術大規模的驗證實車能力,才能保證它的安全。
正因為要保證自動駕駛的安全是一件長期而艱難的事情,是一個復雜的系統工程,所以百度自動駕駛采取了開放策略。百度在自動駕駛方面做了長時間的探索,做的越久,就越發敬畏自動駕駛和汽車產業。一輛車有上萬個零件組成,自動駕駛更不是一個簡單的產業環節,而是一個完整的產業鏈條,包括主機廠、零部件、通訊、感知、決策和控制系統等廠商。所以我們認為它是一個生態,大家在一個完整的生態環境中,找尋自己的位置,合作完成自動駕駛系統的開發。
所以百度提出了Apollo開放戰略計劃。百度把多年積累的自動駕駛研究成果開放給生態鏈,讓大家可以共享技術和數據,在此基礎上實現資源共享。使用的越多,分享的越多,大家收獲的越多,在生態里實現共贏。
Apollo技術框架由4層構成。分別是:
? Reference Vehicle Platform(參考車輛平臺,指一輛能夠受電子信號控制的車,我們管它叫線控車)
? Reference Hardware Platform(參考硬件平臺,包含計算單元、GPS/IMU、Camera、激光雷達、毫米波雷達、人機交互設備、BlackBox等硬件)
? Open Software Platform(開放軟件平臺:包括實時操作系統、承載所有模塊的框架層、高精地圖與定位模塊、感知模塊、決策規劃模塊、控制模塊)
? Cloud Service Platform(云端服務平臺:包括高精地圖、模擬駕駛的仿真服務、數據平臺、安全和OTA服務等)
Apollo 2.0最新開放的模塊包括了Security、Camera、Radar和Black Box,這意味著Apollo平臺開放了云端服務、服務平臺、參考硬件平臺以及參考車輛平臺在內的四大模塊。Apollo 2.0新開放的安全和OTA升級服務,只允許正確和被保護的數據進入車內,并進一步強化了自定位、感知、規劃決策和云端方陣等能力。其中Black Box模塊包括了軟件和硬件系統,能夠實現安全存儲和大容量數據集傳輸,可以幫助我們及時發現異常情況,提升整個平臺的安全可靠性。
硬件方面,增加兩個前向攝像頭(長焦+短焦)主要用于識別紅綠燈,正前方保險杠上方新安裝了毫米波雷達。在Apollo 2.0開放了Camera和Radar的模塊后,整個平臺具備傳感器融合的初步能力,增強了對晝夜簡單城市道路工況的適應能力。
在今年的春晚上,百度Apollo開放平臺率百余輛車隊上了港珠澳大橋,并在自動駕駛模式下完成“8”字交叉跑的高難度動作。
那么如何在短時間內完成在大橋的自動駕駛demo的適配?先看一下Apollo的目錄結構,里面有Docs、Modules、Scripts等子目錄。Modules是Apollo所有模塊的位置;Scripts包括一些常用的操作工具腳本;Third-party涉及到一些官方庫,Tools則包含一些工具。
在Modules中,可以看到Apollo的各個主要模塊。
Apollo采用base class和class factory架構,具有新模塊、新功能的拓展能力。每一個開發者或者生態合作伙伴都可以很容易的把自己的部分添加到Apollo的框架里,從而得到有特色的自動駕駛能力。
主要模塊之間的關系如下圖所示:
由HD-Map支持的Localization模塊產生地圖和定位信息,整個系統都高精地圖和定位信息為基礎;以此為基礎,對周邊環境感知,障礙物的感知;與地圖結合可以做紅綠燈識別感知;預測模塊基于感知結果做障礙物的行為預測;Planning模塊根據障礙物預測的結果和Routing模塊的信息做路徑和速度的Trajectory決策規劃;Control模塊根據Planning的結果通過CANBUS模塊控制車輛行駛。
Apollo系統是基于ROS平臺的。ROS是大家在機器人領域非常熟悉的平臺,百度和ROS達成了深入合作來降低開發者的門檻。ROS的特點主要包括完整的開發工具包,完整的計算調度模型,還有眾多的調試工具以及已有的軟件系統等。為了增強ROS在自動駕駛方面的能力,Apollo做了多項定制優化,如果在真實車輛上測試自動駕駛,建議開發者使用Apollo平臺提供的ROS版本。
ROS的通信是基于ROS Topic的,Apollo主要的ROS Topic如圖所示。開發者可以使用ROS原生工具查看調試Apollo。
有了這些基礎以后,如何一步一步構建自動駕駛?
我們先演示一下沒有實際整車條件下,也可以了解和驗證Apollo的離線演示方式。
至此,就可以在瀏覽器上看到Apollo的DreamView演示。
車輛與循跡駕駛能力實戰
接下來介紹車輛與循跡駕駛能力實戰,這個步驟可以驗證線控車和軟硬件集成的基礎能力。如上圖虛線框中所示,車輛循跡主要依靠的就是定位能力和控制能力。
如我們Apollo架構中介紹的,車輛平臺需要由車廠來完成線控改裝。在車輛平臺上需要完成硬件設備的安裝以及工控機配置,具體的安裝方式可見Apollo的安裝指南。在車輛和硬件平臺之上,Apollo提供相應的軟件能力支持,比如制動、動力、轉向控制以及一些信息交互。
(建議在Wi-Fi環境下觀看)
開發者可以通過Vehicle接口來增加自己的車輛,參見:
【https://github.com/ApolloAuto/apollo/blob/master/docs/howto/how_to_add_a_new_vehicle.md】
? 實現新車控制器
? 實現新消息管理器
? 在工廠類中注冊新車
? 更新配置文件:canbus/conf/canbus_conf.pb.txt
CANCard也有很多要求,對小車大車的控制是不一樣的,需要不同的算法。整體模塊具有可插拔、可靈活配置擴展的特性。
? 實現新CAN卡類CanClient
? 在工廠類CanClientFactory中注冊新CAN卡
? 更新配置文件:canbus/proto/can_card_parameter.proto
接下來創建一個控制器,在control_config文件中為新控制器添加配置,注冊新控制器。
在車輛的基礎上,Apollo提供高精度的定位能力,主要是通過多個傳感器的融合定位保證高精度。我們會有另外一個專題講定位技術,這里就不多講了。
之后通過GPS Receiver接口增加車輛:
· 繼承Parse類,實現新GPS接收機的數據解析
· 在Parse類為新GPS接收機增加新接口
· 在配置文件config.proto,增加新GPS接收機的數據格式
· 為data_parser.cpp中方法 create_parser,增加新接收機的實現邏輯
以上這些都準備好后,就開始做循跡自動駕駛。首先是錄制,在Dreamview中的目錄Quick Record下,單擊Setup以啟動所有模塊并執行硬件運行狀況檢查。如果硬件健康檢查通過,單擊 Start 按鈕開始記錄驅動程序軌跡。到達目的地后,點擊Stop 按鈕停止錄制。
其次是執行,在Quick Play下,單擊 Setup 啟動所有模塊并執行硬件運行狀況檢查。要確保駕駛員準備好了!點擊 Start按鈕開始自動駕駛。到達目的地后,點擊 Stop 按鈕停止重放錄制的軌跡。
(Apollo 1.0演示)
在這一系列工作完成后,就完成了Apollo 1.0的自動駕駛能力。可以看到,經過高精定位能力的輸出,循跡自動駕駛可以完成非常精準的動作,兩車可以非常精準的交錯行駛。
障礙物感知和路徑規劃能力實戰
在Apollo 2.0里面提供了什么樣的自動駕駛能力? 如上圖虛線框所示,在定位和控制的基礎上,添加了感知和決策規劃控制,這樣就可以完成車輛的自動駕駛閉環。
主流的傳感器包括攝像頭、雷達和激光雷達。每一種傳感器都是既有長處也有短板。例如攝像頭對于障礙物分類有很好的表現,但想對障礙物速度做準確判斷,攝像頭就很難做到了。
對于雷達(Radar)來說,在距離和速度判斷上有優勢,穿透力非常好,但對于障礙物的分類能力,就比較弱了。
激光雷達通過主動發射能量,依靠回波來檢測,所以對于判斷障礙物的遠近,例如暗光條件下障礙物的狀態有優勢。但是激光雷達目前還非常昂貴。
所以,我們要把這些傳感器融合在一起,發揮各自所長。
當使用多個傳感器的時候會碰到標定問題。由于傳感器都是高精傳感器,安裝操作很難做到特別精準。為了有效使用多個傳感器,我們需要對車輛上的傳感器完成標定。因為我們在車輛安裝時,很難把安裝做到極精密,通過標定就可以知道安裝的具體誤差,然后通過計算來補償。
LiDAR GNSS標定參考:
? 啟動64線激光雷達以及組合慣導系統。Novatel組合慣導初次上電時需要校準。此時應將車在開闊地帶進行直行、左右轉彎等操作,直至慣導初始化完成。
? 確認傳感器數據的topic均有輸出。
? 標定的地點需要選擇無高樓遮擋、地面平坦、四周有平整的建筑物并且可以進行8字軌跡行駛的地方。
1 | bashlidar_calibration.sh start_record/stop_record |
? 程序會檢測所錄制的bag中是否含有所需的所有topics。檢測通過后,會將bag打包成 lidar_calib_data.tar.gz 文件,內容包括錄制的rosbag以及對應的MD5校驗和文件。
【 https://console.bce.baidu.com/apollo/calibrator/index/list】
1 | mkdir -pmodules/calibration/data/[CAR_ID]/ |
? 其他標定請參考:
【https://github.com/ApolloAuto/apollo/blob/master/docs/quickstart/apollo_2_0_sensor_calibration_guide_cn.md】
裝好傳感器以后要有感知系統,而感知又分很多種,如:障礙物識別、障礙物分類、語義分割、目標跟蹤,我們是怎么做的呢?
在Apollo中,我們以3D障礙物檢測為例,介紹感知的流程。
基于LiDAR的3D障礙物感知,其好處是可以不分晝夜并連續檢測;我們在框架中使用深度學習,這樣就可以很精準識別一些傳統規則并解決很多疑難問題;我們使用了NVIDIA GPU,這樣可以把巨大運算負載放在GPU上完成,從而高效率的進行感知處理。
為了識別一個障礙物,主要步驟是通過高精地圖配置一個ROI過濾器,過濾出我們認為有效的數據;接著把特征值計算出來,通過CNN來完成每個區域的Segmentation,這樣就可以有效地識別出物體;通過MinBox,完成障礙物邊框構建;最后通過HM對象跟蹤就可以感知到障礙物的軌跡,計算速度。
做三維檢測的時候需要處理激光點云,根據高精地圖把我們感興趣的部分過濾出來,激光點云做特征化后,導入CNN網絡,通過邊緣識別合成一個一個物體,最后就可以把物體在坐標系中表達出來。通過把不同幀上的物體串聯在一起,可以完成對物體的追蹤。有了不同幀上的物體軌跡,就可以知道它的位置,它的速度是多少。
在Apollo上有Lidar的檢測,有毫米波的檢測,還有基于圖像的紅綠燈的識別,這些東西如何融合到一起?多傳感器融合,依賴于Perception fusion DAG框架。如上圖所示,通過構造算法subnode,并且通過DAG描述連接到一起,開發者就可以完成定制的多傳感器感知和融合。
如何規劃一條有效的路徑來自動駕駛?以EM為例,如下圖所示,Planning Structure由ReferenceLine、HD-Map 、EM Planner的幾部分構成。
通過DP路徑算法,得到成本最低的可調路徑。
我們將求解過程離散化。好處是:受道路中心線影響低;成本函數形式不單一,適應復雜路況;天然適合并行化。解決了decision 的基于規則優化的痛點。另一方面,這一步DP算法的結果,但并不完美,不是最優解,銜接點處形式固定,即使平滑但路線較為僵硬,復雜情況處理不夠平滑。
如上圖,通過一樣的DP邏輯,我們可以完成s,t坐標系下的DP規劃。在此基礎上,進一步做QP優化和迭代調整,就可以得到有效的Planning結果。
最后創建一個Planner:將新的Planner配置添加到modules/planning/conf/planning_config.pb.txt文件中;在module/planning/planning.cc中注冊新的Planner。
“云+端”研發迭代新模式 Cloud + Vehicles
從上面的自動駕駛開發過程可以看到,百度Apollo采用了“云+端”研發迭代新模式,加速自動駕駛汽車研發效率。百度在自動駕駛研發中積累海量的數據,把這些積累的數據用云端的服務器集群高效地生成人工智能的模型,也就是車輛大腦。把汽車大腦更新到車輛上,車輛就被賦予了自動駕駛的能力。
自動駕駛數據可以分為四大類:
自動駕駛車輛產生的數據首先是原始數據,主要是傳感器數據、車輛自身數據、駕駛行為數據等。這些數據的特點是數據量極大、類型多樣、以非結構化半結構化數據為主。無論對存儲、傳輸、處理都構成比較大的挑戰。
數據平臺是百度支撐智能汽車的“云+端”研發迭代新模式的核心平臺。由數據采集與傳輸,自動駕駛數據倉庫,自動駕駛計算平臺三個部分構成。首先是數據采集與傳輸部分。使用Data-Recorder會按Apollo數據規范產生,完整的、精確記錄的數據包,可以完成問題復現,也同時完成數據積累。通過傳輸接口,可以將數據高效地傳輸到運營點和云集群中。
接著是自動駕駛數據倉庫部分,會將全部海量數據成體系地組織在一起,快速搜索,靈活使用,為數據流水線和各業務應用提供數據支撐。
自動駕駛計算平臺部分,基于云資源異構計算硬件提供超強算力,通過細粒度容器調度提供多種計算模型,來支撐起各業務應用。如訓練平臺、仿真平臺、車輛標定平臺等等。
為了在深度學習中使用數據,還需要大量標注數據。百度標記數據集中,主要有紅綠燈數據集,障礙物數據集(2D、3D),語義分割數據集,自由空間數據集,行為預測數據集等等。
為了刻畫自動駕駛行為,還需要將數據抽象成邏輯數據。主要是完美感知數據,環境抽象數據,車輛動力學模型等。
最后,我們還為仿真構建仿真數據,主要是參數模糊化數據,三維重建數據,互動行為數據等。
Apollo開放了6個標注數據集:
? 激光點云障礙物檢測分類
提供三維點云標注數據,標注四類障礙物:行人、機動車、非機動車及其他,可用于障礙物檢測和分類算法的研發和評測。
? 紅綠燈檢測
提供了常見豎式紅綠燈的圖像數據。采集時段為白天,采集天氣覆蓋晴天、陰天和霧天,分辨率為1080P。
? Road Hackers
本數據集有兩種主要類型數據,街景圖像和車輛運動狀態。街景圖像提供車前圖像,車輛運動狀態數據則包括車輛的當前速度和軌跡曲率。
? 基于圖像的障礙物檢測分類
數據采集涵蓋城市道路和高速場景,由人工標注出四大類障礙物:機動車、非機動車、行人及靜態障礙物,可用于視覺障礙物檢測識別算法的研發和評測。
? 障礙物軌跡預測
采樣數據來源于多源傳感器的綜合抽象特征,每組數據提供62維車輛和道路相關信息,可用于障礙物行為預測算法的研發和評測。
? 場景解析
數據包括了上萬幀的高分辨率RGB視頻和與其對應的逐像素語義標注,同時,提供了具有語義分割測量級別的稠密點云、緊急情況的立體視頻以及立體全景圖像。
此外,我們還開放了ApolloScape數據集,目前規劃到20萬幀級別,在3月8日已經開放了第一批,有8萬幀的數據集,是用相機以及激光雷達掃描的場景。
ApolloScape對整個學術界都會有比較大的幫助,已經公開的數據中無論是數據本身還是質量都有一些特色。我們還跟會在近期發布一些,希望大家也能參與到整個算法中來。【數據集下載:請訪問http://apolloscape.auto】
我們還通過Apollo訓練平臺為每一個數據集提供類配套的計算能力。訓練平臺的特色是:通過Docker+GPU集群,提供與車端的一致硬件計算能力。集成多種框架,提供完整的深度學習解決方案。通過交互式可視化結果分析,方便算法調試優化。
在自動駕駛的算法開發中,最大的痛點之一就是需要對海量數據集,反復嘗試。通過將深度學習算法的研發流程(開發、訓練、驗證、調試)在云端實現,可以在充分利用云端大量計算資源的同時,將數據的流動僅在云端的服務器內完成,從而大幅提高算法研發效率。具體來說,首先開發者在本地開發機中基于Docker開發算法,并部署依賴環境。接著將開發好的環境推到云端的私有Docker Repository中。
接下來在平臺上挑選數據集,發起訓練任務。Apollo訓練平臺的云計算調度就會將任務調度到計算集群上執行。這個過程中,在云集群的內部,開發者的程序使用數據獲取接口,獲得自動駕駛數據倉庫中的數據集。最終由業務管理框架將執行過程、評估的結果和Model返回給可視化平臺,完成可視化的調試。
在云上訓練出來算法,然后可以把算法運用到車上來,這相當于有無數輛車來跑,無數輛車在驗證和優化算法。因為云有幾十萬臺服務器,可支持眾多車輛的驗證。
同時在Apollo開放平臺也有仿真器。這是一個紅綠燈檢測的DEMO算法。SSD: Single Shot MultiBox Detector
【https://arxiv.org/abs/1512.02325】
【https://github.com/weiliu89/caffe/tree/ssd】
每個朋友都可以上去注冊一個帳號來體驗整個流程,有各種各樣的場景,可以看到自己的模型和代碼在仿真器里跑起來。可以看到即使在下雨的狀況下,紅綠燈的識別也很好。
-
自動駕駛
+關注
關注
784文章
13784瀏覽量
166386 -
Apollo
+關注
關注
5文章
342瀏覽量
18444 -
深度學習
+關注
關注
73文章
5500瀏覽量
121111
原文標題:自動駕駛公開課 | Apollo“云+端”研發迭代模式實戰
文章出處:【微信號:Apollo_Developers,微信公眾號:Apollo開發者社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論