從 Apollo 起步-Lesson 1:無人駕駛概覽
無人駕駛概覽
Udacity無人駕駛項(xiàng)目負(fù)責(zé)人David Silver 表示: “在全球無人駕駛技術(shù)人才奇缺的宏觀現(xiàn)實(shí)下,如果你對(duì)無人駕駛汽車感興趣,或者有志于從事無人駕駛開發(fā)的工作,現(xiàn)在就是最好的時(shí)機(jī)
你將學(xué)到什么
Apollo 無人駕駛開源平臺(tái)的主要部分
- high-definition maps 高精度地圖
無人駕駛車的核心模塊——高精度地圖,幾乎支持著軟件棧的所有其他模塊,包括定位、感知、預(yù)測(cè)和規(guī)劃
- localization 定位
在定位課程中,將討論汽車如何確定它所處的位置。這比預(yù)想得更難!汽車?yán)眉す夂屠走_(dá)數(shù)據(jù),將這些傳感器感知內(nèi)容與高分辨率地圖進(jìn)行對(duì)比,這種對(duì)比使汽車能夠以個(gè)位數(shù)厘米級(jí)精度進(jìn)行自定位
- perception 感知
在感知課程中,將了解無人駕駛車如何感知這個(gè)世界。深度學(xué)習(xí)是一個(gè)重要且強(qiáng)有力的感知工具,卷積神經(jīng)網(wǎng)絡(luò)構(gòu)成深度學(xué)習(xí)分支,對(duì)感知任務(wù)至關(guān)重要。如分類、檢測(cè)和分割,這些方法適用于幾種不同無人駕駛車傳感器的數(shù)據(jù)來源,包括攝像頭、雷達(dá)和激光雷達(dá)
- prediction 預(yù)測(cè)
我們將概述幾種不同的方式,用于預(yù)測(cè)其他車輛或行人可能如何移動(dòng)。一種方法稱為遞歸神經(jīng)網(wǎng)絡(luò)??蓪?duì)其他物體隨時(shí)間的運(yùn)動(dòng)進(jìn)行跟蹤,并使用該時(shí)間序列數(shù)據(jù)預(yù)測(cè)未來
- planning 規(guī)劃
規(guī)劃課程將涵蓋如何將預(yù)測(cè)與路線相結(jié)合以生成車輛軌跡,規(guī)劃是構(gòu)建無人駕駛車最困難的部分之一
- control 控制
控制課程展示了如何使用轉(zhuǎn)向、油門和制動(dòng)來執(zhí)行規(guī)劃軌跡。我們將闡釋幾種不同類型的控制器,類型從簡(jiǎn)單到愈加復(fù)雜,而性能卻從弱到強(qiáng)
希望:在完成這門課時(shí),你將了解無人駕駛車的基本工作原理。我希望你開始這段學(xué)習(xí)之旅時(shí),像我第一次開始學(xué)習(xí)無人駕駛車時(shí)那樣激動(dòng)
Apollo核心模塊
在課程開始之前, 你可以先閱讀Github中以下模塊的Readme, 來對(duì)無人駕駛技術(shù)的架構(gòu)有一個(gè)總體的了解~
為什么我們需要無人駕駛車?
最重要的原因是安全

無人車等級(jí)劃分
汽車工程師已建立并確定了 6 個(gè)等級(jí)的無人駕駛車

- 0 級(jí)為基本等級(jí),駕駛員是系統(tǒng)的唯一決策者
- 1 級(jí)為駕駛員輔助,車輛為駕駛員提供轉(zhuǎn)向或加速支持如巡航控制
- 2 級(jí)為部分自動(dòng)化,車輛自動(dòng)控制幾項(xiàng)功能如自動(dòng)巡航控制和車道保持
- 3 級(jí)為有條件的自動(dòng)化,車輛自主駕駛
- 4 級(jí)為高度自動(dòng)化,車輛控制、駕駛方面不期望駕駛員的介入
- 5 級(jí)為最高級(jí)別,完全自動(dòng)化,應(yīng)與人類駕駛員的水平一樣高或比其更高

How self-driving cars work
無人駕駛車包括五個(gè)核心部件

- 計(jì)算機(jī)視覺 就是我們通過攝像頭圖像弄清楚我們周圍的世界是怎樣的
- 傳感器融合 是我們合并來自其他傳感器的數(shù)據(jù), 如激光和雷達(dá),從而更加深入地了解我們周圍的環(huán)境
- 只要我們對(duì)周圍的世界有了深刻的理解,就可以使用 定位 來精確地確定我們?cè)谀莻€(gè)世界所處的位置
- 弄清楚where we are in the world and what the world looks like,就可以使用 路徑規(guī)劃 來繪制路線
- 控制 就是我們?yōu)榱俗屍囇刂覀冊(cè)诼窂揭?guī)劃期間建立的軌道,如何轉(zhuǎn)動(dòng)方向盤并打開油門 然后踩剎車
Apollo 技術(shù)框架由四個(gè)層面組成
參考車輛平臺(tái)、參考硬件平臺(tái)、開源軟件平臺(tái)和云服務(wù)平臺(tái)
參考車輛與硬件平臺(tái)
如果我們想要打造一輛無人駕駛車。首先要開發(fā)一款可通過電子控制的基礎(chǔ)車輛,而不僅僅是通過實(shí)體方向盤、油門踏板和剎車踏板來控制,這種類型的車輛具有特殊的名稱:線控駕駛車輛
Apollo 無人駕駛車有幾個(gè)不同的傳感器。
- 控制器區(qū)域網(wǎng)絡(luò)(或 CAN),是車輛的內(nèi)部通信網(wǎng)絡(luò),計(jì)算機(jī)系統(tǒng)通過 CAN 卡連接汽車內(nèi)部網(wǎng)絡(luò),發(fā)送加速、制動(dòng)和轉(zhuǎn)向信號(hào)。
- 全球定位系統(tǒng)(或 GPS),通過繞地衛(wèi)星接收信號(hào),這些信號(hào)可幫助我們確定所處位置。
- 慣性測(cè)量裝置(或 IMU),測(cè)量車輛的運(yùn)動(dòng)和位置,是通過跟蹤位置、速度、加速度和其他因素。
- 激光雷達(dá) (LiDAR) 由一組脈沖激光器組成Apollo 使用的激光雷達(dá)可 360 度掃描車輛周圍,這些激光束的反射形成了軟件可用于了解環(huán)境的點(diǎn)云
- 攝像頭捕獲圖像數(shù)據(jù),我們可以使用計(jì)算機(jī)視覺來提取這些圖像的內(nèi)容并了解周圍的環(huán)境。例如 因?yàn)閿z像頭可以感知顏色,我們用它們來檢測(cè)和了解交通燈
- 雷達(dá)也用于檢測(cè)障礙物,雷達(dá)分辨率低,難以分辨雷達(dá)檢測(cè)到了哪種障礙物,但雷達(dá)的優(yōu)勢(shì)在于經(jīng)濟(jì)實(shí)惠,適用于各種天氣和照明條件,雷達(dá)特別擅長測(cè)量其他車輛的速度。
下圖說明如何將主要硬件組件安裝到車輛上,包括攝像頭、雷達(dá)、激光雷達(dá)、GPS-IMU 和 IPC

開源軟件棧
軟件層分為三個(gè)子層:實(shí)時(shí)操作系統(tǒng)(real-time operating system(ROTS))、運(yùn)行時(shí)框架(Runtime Framework) 和 應(yīng)用程序模塊層(a layer of application modules)
實(shí)時(shí)操作系統(tǒng)(或 RTOS)可確保在給定時(shí)間內(nèi)完成特定任務(wù)?!皩?shí)時(shí)”是指無人駕駛車的操作系統(tǒng)能夠及時(shí)進(jìn)行計(jì)算、分析并執(zhí)行相應(yīng)的操作。實(shí)時(shí)性能是確保系統(tǒng)穩(wěn)定性和駕駛安全性的重要要求。
Apollo RTOS 是 Ubuntu Linux 操作系統(tǒng)與 Apollo 內(nèi)核相互結(jié)合的成果。Ubuntu 是業(yè)內(nèi)頂級(jí) Linux 發(fā)行版之一,也是最流行的云操作系統(tǒng),然而 原始 Ubuntu 系統(tǒng)并非實(shí)時(shí)操作系統(tǒng),通過加入 Apollo 設(shè)計(jì)的內(nèi)核 我們可以使其成為一個(gè) RTOS。
運(yùn)行時(shí)框架 是 Apollo 的操作環(huán)境它是 ROS(機(jī)器人操作系統(tǒng))的定制版,ROS 實(shí)際上是一個(gè)在 Apollo RTOS 上運(yùn)行的軟件框架。ROS 在機(jī)器人行業(yè)有著悠久的歷史,目前有 3,000 多個(gè)基礎(chǔ)庫支持應(yīng)用程序的快速開發(fā),ROS 根據(jù)功能將自治系統(tǒng)劃分為多個(gè)模塊,每個(gè)模塊負(fù)責(zé)接收、處理和發(fā)布自己的消息。由于這些模塊相互獨(dú)立 只能通過運(yùn)行時(shí)框架進(jìn)行通信,因此調(diào)整任何單一模塊都很容易。ROS 是應(yīng)用最廣泛的機(jī)器人框架,因此它所包含的模塊涉及許多最新的研究突破,所有這些功能使 ROS 成為理想的 Apollo 開發(fā)與集成框架。
為使 ROS 適應(yīng)無人駕駛車,Apollo 團(tuán)隊(duì)改進(jìn)了共享內(nèi)存的功能和性能、去中心化和數(shù)據(jù)兼容性
- 共享內(nèi)存降低了需要訪問不同模塊時(shí)的數(shù)據(jù)復(fù)制需求。
對(duì)于一對(duì)多傳輸方案,共享內(nèi)存支持“一次寫入 多次讀取”模式。例如 如果你只收到一次點(diǎn)云 你可以同時(shí)運(yùn)行障礙物檢測(cè)、定位和 GUI 工具。這可以加快通信速度
- 去中心化 解決了單點(diǎn)故障問題
現(xiàn)成的 ROS 由許多節(jié)點(diǎn)組成,每個(gè)節(jié)點(diǎn)都有對(duì)應(yīng)的功能。例如 一個(gè)節(jié)點(diǎn)可能負(fù)責(zé)收集攝像頭圖像,另一個(gè)節(jié)點(diǎn)可能負(fù)責(zé)規(guī)劃軌跡,而第三個(gè)節(jié)點(diǎn)可能負(fù)責(zé)將控制命令發(fā)送到 CAN 總線上的車輛,但是所有這些節(jié)點(diǎn)都需要由單個(gè) ROS 主節(jié)點(diǎn)來控制。如果這個(gè)主節(jié)點(diǎn)發(fā)生故障,整個(gè)系統(tǒng)都會(huì)失效。
為了避免這個(gè)問題,Apollo 將所有節(jié)點(diǎn)放在一個(gè)公共域中,域中的每個(gè)節(jié)點(diǎn)都有關(guān)于域中其他節(jié)點(diǎn)的信息,通過這種去中心化方案,公共域取代了原來的 ROS 主節(jié)點(diǎn),因此消除了單點(diǎn)故障風(fēng)險(xiǎn)。
- 對(duì)于無人駕駛車來說 由于項(xiàng)目本身的規(guī)模很大,數(shù)據(jù)兼容性 至關(guān)重要
不同的 ROS 節(jié)點(diǎn)通過,名為 ROS 消息的接口語言相互通信。ROS 消息需要使用通用接口語言,使每個(gè)節(jié)點(diǎn)都可以解讀來自其他節(jié)點(diǎn)的消息數(shù)據(jù)。如果消息文件的格式,與節(jié)點(diǎn)所期望的格式稍有不同,通信會(huì)失敗,這可能會(huì)導(dǎo)致嚴(yán)重的兼容性問題。例如 當(dāng)一個(gè)接口升級(jí)時(shí),數(shù)據(jù)不兼容通常會(huì)導(dǎo)致系統(tǒng)故障。此外 必須一次又一次地轉(zhuǎn)換之前所記錄的測(cè)試數(shù)據(jù), 以適應(yīng)新的消息格式。
為了解決這個(gè)問題,Apollo 團(tuán)隊(duì)使用另一種名為 protobuf 的接口語言,來替代原生 ROS 消息。Protobuf 是一種結(jié)構(gòu)化數(shù)據(jù)序列化方法. 這對(duì)開發(fā)用于通過電線彼此通信,或用于存儲(chǔ)數(shù)據(jù)的程序非常有用。你可以將新字段添加到消息格式中 而不會(huì)破壞后向兼容性,新的二進(jìn)制文件可以在解析過程中接受舊的消息格式。向 ROS 添加 protobuf 格式有助于 Apollo 的長期發(fā)展。
- 應(yīng)用程序模塊
Apollo 的軟件平臺(tái)具有各種模塊,這些模塊包括 MAP 引擎、定位、感知、規(guī)劃、控制、端到端駕駛以及人機(jī)接口(或 HMI)。每個(gè)模塊都有自己的算法庫,模塊之間的關(guān)系非常復(fù)雜。后續(xù)將在整個(gè)課程中對(duì)這些模塊及其關(guān)聯(lián)方式進(jìn)行研究
云服務(wù)
Apollo 云服務(wù)包含高精度地圖(HD Maps)、仿真環(huán)境(Simulation)、數(shù)據(jù)平臺(tái)(Data Platform)、安全(Security)、軟件升級(jí)(OTA)以及被稱為 DuerOS 的智能語音系統(tǒng)
在這里 我們將重點(diǎn)介紹仿真和數(shù)據(jù)平臺(tái)。
- 仿真環(huán)境平臺(tái)是 Apollo 開放軟件棧的重要工具
該平臺(tái)允許每個(gè)人出于自身需要 來構(gòu)建仿真環(huán)境。該平臺(tái)還聚合了大量駕駛數(shù)據(jù),使開發(fā)人員能夠檢驗(yàn)和驗(yàn)證無人駕駛軟件系統(tǒng)。仿真環(huán)境使 Apollo 車輛不僅可以查看環(huán)境,還可以了解道路情況和場(chǎng)景。
仿真環(huán)境平臺(tái)具有許多功能。首先,仿真環(huán)境平臺(tái)允許開發(fā)人員配置不同的駕駛場(chǎng)景,比如障礙物,路線和交通燈狀態(tài)。執(zhí)行模式為開發(fā)人員提供了一個(gè)在多個(gè)場(chǎng)景中運(yùn)轉(zhuǎn)的完整設(shè)置。在執(zhí)行模式中 ,開發(fā)人員可以在 Apollo 環(huán)境中上傳和驗(yàn)證模塊。當(dāng)前的自動(dòng)評(píng)分系統(tǒng),從幾個(gè)指標(biāo)對(duì)場(chǎng)景進(jìn)行評(píng)估。其中包括:碰撞檢測(cè)、交通燈識(shí)別、速度限制、障礙物檢測(cè)和路線邏輯。最后,三維可視化描述了實(shí)時(shí)路況。在顯示無人駕駛車狀態(tài)的同時(shí),使模塊輸出可視化。
- 數(shù)據(jù)對(duì)無人駕駛車來說很重要。無人駕駛數(shù)據(jù)可能來自模擬場(chǎng)景或道路測(cè)試,Apollo 為這些類別提供了各種各樣的數(shù)據(jù)。
仿真場(chǎng)景數(shù)據(jù)有兩個(gè)不同的來源:記錄場(chǎng)景和虛擬場(chǎng)景。我們可以使用記錄的場(chǎng)景,來重放我們?cè)趯?shí)際道路測(cè)試中已經(jīng)觀察到的傳感器數(shù)據(jù),我們可以借助虛擬場(chǎng)景 使用虛擬編輯器創(chuàng)建新的駕駛場(chǎng)景,這有助于快速檢驗(yàn)與驗(yàn)證算法。為了訓(xùn)練像深度學(xué)習(xí)網(wǎng)絡(luò)那樣的機(jī)器學(xué)習(xí)模型,我們需要帶標(biāo)簽的注釋數(shù)據(jù),其中包括交通信號(hào)燈數(shù)據(jù),帶邊界框的障礙物數(shù)據(jù),以及語義分割數(shù)據(jù)。
此外 Apollo 已向公眾發(fā)布了 ApolloScape 數(shù)據(jù)集。ApolloScape 涵蓋了各種復(fù)雜路況,ApolloScape 在單個(gè)圖像中列入并注釋了,多達(dá) 162 輛車或 80 名行人。同時(shí) 開放數(shù)據(jù)集使用語義分割對(duì)圖像進(jìn)行逐像素標(biāo)記,這使得 ApolloScape 成為世界上最為復(fù)雜又最精確的無人駕駛數(shù)據(jù)集。