色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          "); //-->

          博客專(zhuān)欄

          EEPW首頁(yè) > 博客 > 兩萬(wàn)字簡(jiǎn)述自動(dòng)駕駛路徑規(guī)劃的常用算法

          兩萬(wàn)字簡(jiǎn)述自動(dòng)駕駛路徑規(guī)劃的常用算法

          發(fā)布人:傳感器技術(shù) 時(shí)間:2023-03-08 來(lái)源:工程師 發(fā)布文章
          作者| 11號(hào)線人

          自動(dòng)駕駛自誕生那天起,其志向便已立下,成為熟知城市每一處道路的“老司機(jī)”,成為乘客更安全、更舒適、更高效出行的“守護(hù)神”。在搞錢(qián)撈錢(qián)的大背景下,這個(gè)無(wú)私追求樸素得令人敬畏。在自動(dòng)駕駛的分工中,決策規(guī)劃將承擔(dān)上述志向?qū)崿F(xiàn)的大部分工作,也因此被毫不吝嗇的稱(chēng)為自動(dòng)駕駛的大腦。決策規(guī)劃這塊網(wǎng)上已經(jīng)有數(shù)量眾多的優(yōu)秀科普文章,但他們都沒(méi)有長(zhǎng)成《十一號(hào)組織》的樣子。抱著將所有自動(dòng)駕駛知識(shí)都“擼一遍”的偉大理想,我決定用兩萬(wàn)字簡(jiǎn)述決策規(guī)劃的常用算法。01概述
          1. 1 自動(dòng)駕駛系統(tǒng)分類(lèi)自動(dòng)駕駛系統(tǒng)沒(méi)有嚴(yán)謹(jǐn)?shù)姆诸?lèi),但行業(yè)內(nèi)普遍喜歡將自動(dòng)駕駛系統(tǒng)區(qū)別為模塊化的和端到端的,圖1所示為兩者系統(tǒng)的原理框圖對(duì)比。圖片

          圖1 模塊化和端到端自動(dòng)駕駛系統(tǒng)原理簡(jiǎn)圖

          1.1.1 模塊化自動(dòng)駕駛系統(tǒng)這是最經(jīng)典也是業(yè)界采用最多的一種自動(dòng)駕駛系統(tǒng),也是最簡(jiǎn)明清爽的一種結(jié)構(gòu),其作用是實(shí)時(shí)地求解出連續(xù)的控制輸出使得自動(dòng)駕駛車(chē)輛可以安全地由初始位置行駛到目標(biāo)位置?;谀K化的思想,將自動(dòng)駕駛系統(tǒng)劃分為三層:環(huán)境感知層、決策規(guī)劃層和控制執(zhí)行層。每一層還可以劃分為不同的模塊,每個(gè)模塊還可以劃分為不同的子模塊……。環(huán)境感知層就像是人的眼睛和耳朵,負(fù)責(zé)對(duì)外部環(huán)境進(jìn)行感知并將感知結(jié)果送入決策規(guī)劃層。決策規(guī)劃層就像是人的大腦,在接收到感知信息后進(jìn)行分析、決策,并生成加減速、變道、直行等控制命令??刂茍?zhí)行層就像人的雙手和雙腳,在接收到控制命令后控制執(zhí)行器完成加速、轉(zhuǎn)向等操作。模塊化自動(dòng)駕駛系統(tǒng)中每一層都是關(guān)鍵和核心。但從實(shí)現(xiàn)自動(dòng)駕駛功能的角度,環(huán)境感知層是基礎(chǔ),決策規(guī)劃層是核心,控制執(zhí)行層是保障。作為核心的決策規(guī)劃層帶著自動(dòng)駕駛往“更安全、更舒適、更高效”的道路上狂奔,畢竟小小的失誤小則影響乘坐舒適性、通行效率,大則影響人身財(cái)產(chǎn)安全。在模塊化自動(dòng)駕駛系統(tǒng)中,不同團(tuán)隊(duì)負(fù)責(zé)不同的模塊,可以實(shí)現(xiàn)更好的分工合作,從而提高開(kāi)發(fā)效率。同時(shí)團(tuán)隊(duì)內(nèi)部可以對(duì)負(fù)責(zé)的模塊進(jìn)行充分的評(píng)估,了解各模塊的性能瓶頸所在,從而讓我們能對(duì)最后的0.1%的不足有更清晰的認(rèn)知,技術(shù)的迭代、更新。缺點(diǎn)就是整個(gè)系統(tǒng)非常復(fù)雜、龐大、需要人工設(shè)計(jì)成百上千個(gè)模塊。二是對(duì)車(chē)載硬件計(jì)算能力要求高,如果越來(lái)越多的子模塊采用深度學(xué)習(xí)網(wǎng)絡(luò),這將帶來(lái)災(zāi)難性的計(jì)算需求爆炸?;谀K化的自動(dòng)駕駛系統(tǒng),我們可能花10%的時(shí)間就實(shí)現(xiàn)了99.9%的問(wèn)題,但我們還需要花90%的時(shí)間去解決最后0.1%的不足。這個(gè)系統(tǒng)的難度之大,已經(jīng)遠(yuǎn)超一家公司的能力范圍,需要一個(gè)協(xié)作的生態(tài)。1.1.2 端到端自動(dòng)駕駛系統(tǒng)術(shù)語(yǔ)端到端(End to End)來(lái)源于深度學(xué)習(xí),指的是算法直接由輸入求解出所需的輸出,即算法直接將系統(tǒng)的輸入端連接到輸出端。2016年NVIDIA將端到端的深度學(xué)習(xí)技術(shù)應(yīng)用在自動(dòng)駕駛汽車(chē)之后,端到端自動(dòng)駕駛迅速捕獲圈內(nèi)一眾大佬的芳心,各種demo更是層出不窮。所謂端到端自動(dòng)駕駛是指車(chē)輛將傳感器采集到的信息(原始圖像數(shù)據(jù)、原始點(diǎn)云數(shù)據(jù)等),直接送入到一個(gè)統(tǒng)一的深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò),神經(jīng)網(wǎng)絡(luò)經(jīng)過(guò)處理之后直接輸出自動(dòng)駕駛汽車(chē)的駕駛命令(方向盤(pán)轉(zhuǎn)角、方向盤(pán)轉(zhuǎn)速、油門(mén)踏板開(kāi)度、制動(dòng)踏板開(kāi)度等)。2016年NVIDIA發(fā)表了論文《End to End Learning for Self-Driving Cars》,拉開(kāi)了端到端自動(dòng)駕駛內(nèi)卷的序幕。論文首先展示了訓(xùn)練數(shù)據(jù)的采集系統(tǒng),如圖2所示。論文中只涉及了車(chē)道保持功能,因此訓(xùn)練數(shù)據(jù)也只對(duì)攝像機(jī)的視頻數(shù)據(jù)和人類(lèi)駕駛員操作方向盤(pán)的角度數(shù)據(jù)進(jìn)行了采集。

          圖片

          圖2 數(shù)據(jù)采集系統(tǒng)框圖三架攝像機(jī)安裝在采集車(chē)的擋風(fēng)玻璃后面,并按照左中右依次布置,這樣布置是為了捕獲完整的前向路面信息。一臺(tái)NVIDIA DRIVETM PX被用來(lái)作為采集車(chē)的計(jì)算單元。攝像機(jī)生成的每一幀視頻數(shù)據(jù)(30FPS)都與人類(lèi)駕駛員的轉(zhuǎn)向角度進(jìn)行時(shí)間同步。采集車(chē)最終在各式道路以及多樣照明和天氣條件組合下采集了72小時(shí)的駕駛數(shù)據(jù)。訓(xùn)練數(shù)據(jù)包含視頻采樣得到的單一圖像,搭配相應(yīng)的轉(zhuǎn)向命令。但是只有來(lái)自人類(lèi)駕駛員的正確數(shù)據(jù)是不足以完成訓(xùn)練的,神經(jīng)網(wǎng)絡(luò)還必須學(xué)習(xí)如何從任何錯(cuò)誤中恢復(fù),否則自動(dòng)駕駛汽車(chē)就將慢慢偏移道路。因此訓(xùn)練數(shù)據(jù)還擴(kuò)充了額外的圖像,這些圖像顯示了遠(yuǎn)離車(chē)道中心的偏離程度以及不同道路方向上的轉(zhuǎn)動(dòng)。兩個(gè)特定偏離中心的變化圖像可由左右兩個(gè)攝像機(jī)捕獲。訓(xùn)練數(shù)據(jù)準(zhǔn)備完畢之后,將其送入一個(gè)卷積神經(jīng)網(wǎng)絡(luò)(CNN),訓(xùn)練系統(tǒng)框圖如圖3所示。

          圖片

          圖3 訓(xùn)練系統(tǒng)框圖CNN計(jì)算一個(gè)被推薦的轉(zhuǎn)向命令,這個(gè)被推薦的轉(zhuǎn)向命令會(huì)與該圖像的期望命令相比較,CNN權(quán)重就會(huì)被調(diào)整以使其實(shí)際輸出更接近期望輸出。在這個(gè)框架中,只要提供足夠的訓(xùn)練數(shù)據(jù),即人類(lèi)駕駛員駕駛攜帶有攝像頭的車(chē)輛累計(jì)駕駛大量的里程,再加上人為創(chuàng)造系統(tǒng)的“極限”道路狀態(tài)——偏離道路線的各種工況,CNN就會(huì)得到充分的訓(xùn)練,而變得足夠強(qiáng)大。一旦訓(xùn)練完成,網(wǎng)絡(luò)就能夠從單中心攝像機(jī)(single center camera)的視頻圖像中生成轉(zhuǎn)向命令,圖4展示了這個(gè)配置。圖片

          圖4 訓(xùn)練過(guò)的網(wǎng)絡(luò)用于從單中心前向攝像機(jī)中生成轉(zhuǎn)向命令

          在端到端自動(dòng)駕駛中,沒(méi)有人工設(shè)計(jì)的繁復(fù)規(guī)則,只需要極少的來(lái)自人類(lèi)的訓(xùn)練數(shù)據(jù),深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)就會(huì)學(xué)會(huì)駕駛。且不用關(guān)心有沒(méi)有高精地圖覆蓋、此時(shí)是行駛在高速主干路還是城區(qū)道路、道路上車(chē)道線有沒(méi)有缺失等。相比模塊化自動(dòng)駕駛系統(tǒng),端到端自動(dòng)駕駛系統(tǒng)設(shè)計(jì)難度低,硬件成本小,還能借助數(shù)據(jù)的多樣性獲得不同場(chǎng)景下的泛用性。各方面條件得天獨(dú)厚,從理論層面看堪稱(chēng)自動(dòng)駕駛的終極夢(mèng)想。然而端到端深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)是一個(gè)完完全全的黑盒子,不具解釋分析性,可靠性、靈活性差,工程師們沒(méi)有辦法對(duì)它進(jìn)行系統(tǒng)化的解釋分析,而是只能依靠推測(cè)和實(shí)驗(yàn)進(jìn)行調(diào)整。最終帶來(lái)的結(jié)果是安全難以得到保障,而自動(dòng)駕駛最最關(guān)注的恰是安全。比如端到端自動(dòng)駕駛系統(tǒng)下汽車(chē)做出一個(gè)汽車(chē)減速左轉(zhuǎn)的行動(dòng),工程師們無(wú)法確定這是因?yàn)槠?chē)看到行人,還是因?yàn)榭吹捷^遠(yuǎn)處的紅燈。但是,在模塊化的自動(dòng)駕駛系統(tǒng)下,由于多個(gè)識(shí)別系統(tǒng)嵌套,相對(duì)好理解到底汽車(chē)所做的每一個(gè)舉動(dòng)背后的邏輯。這也意味著,如果端到端系統(tǒng)出現(xiàn)問(wèn)題時(shí),工程師們并不能對(duì)其對(duì)癥下****,做出合理的應(yīng)對(duì)。更多情況下甚至只能簡(jiǎn)單向模型灌注更多的數(shù)據(jù),希冀它能在進(jìn)一步的訓(xùn)練中“自行”解決問(wèn)題。這也會(huì)大大降低端到端自動(dòng)駕駛系統(tǒng)原本開(kāi)發(fā)簡(jiǎn)單的優(yōu)勢(shì)。1.2 決策規(guī)劃分層架構(gòu)
          決策規(guī)劃的任務(wù),就是在對(duì)感知到的周邊物體的預(yù)測(cè)軌跡的基礎(chǔ)上,結(jié)合結(jié)合自動(dòng)駕駛車(chē)輛的和當(dāng)前位置,對(duì)車(chē)輛做出最合理的決策和控制。正如人的大腦又分為左腦和右腦、并負(fù)責(zé)不同的任務(wù)一樣,模塊化自動(dòng)駕駛系統(tǒng)中決策規(guī)劃層也可以繼續(xù)細(xì)分為執(zhí)行不同任務(wù)的子層。而這一分層設(shè)計(jì)最早其實(shí)是源自2007年舉辦的DAPRA城市挑戰(zhàn)賽,比賽中多數(shù)參賽隊(duì)伍都將自動(dòng)駕駛系統(tǒng)的決策規(guī)劃方式包括三層:全局路徑規(guī)劃層(Route Planning)、行為決策層(Behavioral Layer)和運(yùn)動(dòng)規(guī)劃層(Motion Planning),如圖5所示。

          圖片

          圖5 決策規(guī)劃分層架構(gòu)全局路徑規(guī)劃層聚焦在相對(duì)頂層的路徑規(guī)劃,聚焦在分鐘到小時(shí)級(jí)別的規(guī)劃。該層在接收到輸入的目的地信息后,基于存儲(chǔ)的地圖信息搜索出一條自起始點(diǎn)至目標(biāo)點(diǎn)的一條可通過(guò)的路徑。如圖6所示,在藍(lán)色起點(diǎn)和黃色終點(diǎn)之間,黑色就是搜索出來(lái)的一條可通行的路徑,當(dāng)然路徑不止一條,如何搜索出最優(yōu)是下文將要介紹的內(nèi)容。圖片圖6 全局路徑規(guī)劃示例在全局路徑規(guī)劃的時(shí)候,也可以基于地圖精度和豐富度,提前考慮道路曲率半徑、坡度等信息,來(lái)避免搜索出部分參數(shù)超出ODD要求的全局路徑。但是高度隨機(jī)的交通參與者、高度動(dòng)態(tài)的交通流以及高度復(fù)雜的道路結(jié)構(gòu),全局路徑規(guī)劃是無(wú)法考慮周到的,因此還需要基于具體的行為決策進(jìn)行后面的運(yùn)動(dòng)規(guī)劃,也就是局部路徑規(guī)劃。行為決策層在收到全局路徑后,結(jié)合感知環(huán)境信息、交通規(guī)則信息、車(chē)輛狀態(tài)信息、駕駛場(chǎng)景信息等,推導(dǎo)判斷下一分鐘或下一秒時(shí)刻的情況,作出車(chē)道保持、車(chē)輛跟隨、車(chē)道變換和制動(dòng)避撞等的適合當(dāng)前交通環(huán)境的駕駛行為。如圖7所示,自車(chē)在檢測(cè)到前方存在低速行駛車(chē)輛,且右側(cè)車(chē)道滿足變道條件后,作出向右變道的駕駛行為決策。圖片圖7 行為決策示例運(yùn)動(dòng)規(guī)劃層也被稱(chēng)為局部路徑規(guī)劃層,與全局路徑規(guī)劃聚焦在分鐘到小時(shí)級(jí)別的規(guī)劃不同,運(yùn)動(dòng)規(guī)劃聚焦在毫秒級(jí)到秒級(jí)的規(guī)劃。規(guī)劃的時(shí)候,根據(jù)輸入的行為決策信息、結(jié)合車(chē)輛實(shí)時(shí)位姿信息、局部環(huán)境信息、全局路徑參考信息等,在“安全、舒適、效率”的精神引領(lǐng)下,規(guī)劃生成一條滿足特定約束條件的平滑軌跡軌跡(包括行駛軌跡、速度、方向等),并輸入給控制執(zhí)行層。如圖8所示,在車(chē)輛收到行為決策層的左變道指令后,主車(chē)基于各種信息規(guī)劃出幾條可行的路徑,如何規(guī)劃出最優(yōu)的路徑也是下文要介紹的內(nèi)容。圖片圖8 運(yùn)動(dòng)規(guī)劃示意圖全局路徑規(guī)劃與運(yùn)動(dòng)規(guī)劃作為兩個(gè)層級(jí)的不同規(guī)劃,現(xiàn)將其特點(diǎn)匯總為表1。

          表1 全局路徑規(guī)劃與運(yùn)動(dòng)規(guī)劃特點(diǎn)對(duì)比

          圖片

          02全局路徑規(guī)劃常用算法
          正菜之前,我們先來(lái)了解一下圖(包括有向圖無(wú)向圖)的概念。圖是圖論中的基本概念,用于表示物體與物體之間存在某種關(guān)系的結(jié)構(gòu)。在圖中,物體被稱(chēng)為節(jié)點(diǎn)或頂點(diǎn),并用一組點(diǎn)或小圓圈表示。節(jié)點(diǎn)間的關(guān)系稱(chēng)作邊,可以用直線或曲線來(lái)表示節(jié)點(diǎn)間的邊。
          如果給圖的每條邊規(guī)定一個(gè)方向,那么得到的圖稱(chēng)為有向圖,其邊也稱(chēng)為有向邊,如圖9所示。在有向圖中,與一個(gè)節(jié)點(diǎn)相關(guān)聯(lián)的邊有出邊和入邊之分,而與一個(gè)有向邊關(guān)聯(lián)的兩個(gè)點(diǎn)也有始點(diǎn)和終點(diǎn)之分。相反,邊沒(méi)有方向的圖稱(chēng)為無(wú)向圖。

          圖片

          圖9 有向圖示例

          數(shù)學(xué)上,常用二元組G =(V,E)來(lái)表示其數(shù)據(jù)結(jié)構(gòu),其中集合V稱(chēng)為點(diǎn)集,E稱(chēng)為邊集。對(duì)于圖6所示的有向圖,V可以表示為{A,B,C,D,E,F(xiàn),G},E可以表示為{<A,B>,<B,C>,<B,F(xiàn)>,<B,E>,<C,E>,<E,B>,<F,G>}。<A,B>表示從頂點(diǎn)A發(fā)向頂點(diǎn)B的邊,A為始點(diǎn),B為終點(diǎn)。

          在圖的邊中給出相關(guān)的數(shù),稱(chēng)為權(quán)。權(quán)可以代表一個(gè)頂點(diǎn)到另一個(gè)頂點(diǎn)的距離、耗費(fèi)等,帶權(quán)圖一般稱(chēng)為網(wǎng)。

          在全局路徑規(guī)劃時(shí),通常將圖10所示道路和道路之間的連接情況,通行規(guī)則,道路的路寬等各種信息處理成有向圖,其中每一個(gè)有向邊都是帶權(quán)重的,也被稱(chēng)為路網(wǎng)(Route Network Graph)。

          圖片圖10 道路連接情況

          那么,全局路徑的規(guī)劃問(wèn)題就變成了在路網(wǎng)中,搜索到一條最優(yōu)的路徑,以便可以盡快見(jiàn)到那個(gè)心心念念的她,這也是全局路徑規(guī)劃算法最樸素的愿望。而為了實(shí)現(xiàn)這個(gè)愿望,誕生了DijkstraA*兩種最為廣泛使用的全局路徑搜索算法。

          2.1 Dijkstra算法

          戴克斯特拉算法(Dijkstra’s algorithm)是由荷蘭計(jì)算機(jī)科學(xué)家Edsger W. Dijkstra在1956年提出,解決的是有向圖中起點(diǎn)到其他頂點(diǎn)的最短路徑問(wèn)題。

          假設(shè)有A、B、C、D、E、F五個(gè)城市,用有向圖表示如圖11,邊上的權(quán)重代表兩座城市之間的距離,現(xiàn)在我們要做的就是求出起點(diǎn)A城市到其它城市的最短距離。

          圖片圖11 五個(gè)城市構(gòu)建的有向圖

          用Dijkstra算法求解步驟如下:

          (1)創(chuàng)建一個(gè)二維數(shù)組E來(lái)描述頂點(diǎn)之間的距離關(guān)系,如圖12所示。E[B][C]表示頂點(diǎn)B到頂點(diǎn)C的距離。自身之間的距離設(shè)為0,無(wú)法到達(dá)的頂點(diǎn)之間設(shè)為無(wú)窮大。

          圖片圖12 頂點(diǎn)之間的距離關(guān)系

          (2)創(chuàng)建一個(gè)一維數(shù)組Dis來(lái)存儲(chǔ)起點(diǎn)A到其余頂點(diǎn)的最短距離。一開(kāi)始我們并不知道起點(diǎn)A到其它頂點(diǎn)的最短距離,一維數(shù)組Dis中所有值均賦值為無(wú)窮大。接著我們遍歷起點(diǎn)A的相鄰頂點(diǎn),并將與相鄰頂點(diǎn)B和C的距離3(E[A][B])和10(E[A][C])更新到Dis[B]和Dis[C]中,如圖13所示。這樣我們就可以得出起點(diǎn)A到其余頂點(diǎn)最短距離的一個(gè)估計(jì)值。

          圖片圖13 Dis經(jīng)過(guò)一次遍歷后得到的值

          (3)接著我們尋找一個(gè)離起點(diǎn)A距離最短的頂點(diǎn),由數(shù)組Dis可知為頂點(diǎn)B。頂點(diǎn)B有兩條出邊,分別連接頂點(diǎn)C和D。因起點(diǎn)A經(jīng)過(guò)頂點(diǎn)B到達(dá)頂點(diǎn)C的距離8(E[A][B] + E[B][C] = 3 + 5)小于起點(diǎn)A直接到達(dá)頂點(diǎn)C的距離10,因此Dis[C]的值由10更新為8。同理起點(diǎn)A經(jīng)過(guò)B到達(dá)D的距離5(E[A][B] + E[B][D] = 3 + 2)小于初始值無(wú)窮大,因此Dis[D]更新為5,如圖14所示。

          圖片圖14 Dis經(jīng)過(guò)第二次遍歷后得到的值

          (4)接著在剩下的頂點(diǎn)C、D、E、F中,選出里面離起點(diǎn)A最近的頂點(diǎn)D,繼續(xù)按照上面的方式對(duì)頂點(diǎn)D的所有出邊進(jìn)行計(jì)算,得到Dis[E]和Dis[F]的更新值,如圖15所示。

          圖片圖15 Dis經(jīng)過(guò)第三次遍歷后得到的值

          (5)繼續(xù)在剩下的頂點(diǎn)C、E、F中,選出里面離起點(diǎn)A最近的頂點(diǎn)C,繼續(xù)按照上面的方式對(duì)頂點(diǎn)C的所有出邊進(jìn)行計(jì)算,得到Dis[E]的更新值,如圖16所示。

          圖片圖16 Dis經(jīng)過(guò)第四次遍歷后得到的值

          (6)繼續(xù)在剩下的頂點(diǎn)E、F中,選出里面離起點(diǎn)A最近的頂點(diǎn)E,繼續(xù)按照上面的方式對(duì)頂點(diǎn)E的所有出邊進(jìn)行計(jì)算,得到Dis[F]的更新值,如圖17所示。

          圖片圖17 Dis經(jīng)過(guò)第五次遍歷后得到的值

          (7)最后對(duì)頂點(diǎn)F所有點(diǎn)出邊進(jìn)行計(jì)算,此例中頂點(diǎn)F沒(méi)有出邊,因此不用處理。至此,數(shù)組Dis中距離起點(diǎn)A的值都已經(jīng)從“估計(jì)值”變?yōu)榱恕按_定值”。

          基于上述形象的過(guò)程,Dijkstra算法實(shí)現(xiàn)過(guò)程可以歸納為如下步驟:

          (1)將有向圖中所有的頂點(diǎn)分成兩個(gè)集合P和Q,P用來(lái)存放已知距離起點(diǎn)最短距離的頂點(diǎn),Q用來(lái)存放剩余未知頂點(diǎn)。可以想象,一開(kāi)始,P中只有起點(diǎn)A。同時(shí)我們創(chuàng)建一個(gè)數(shù)組Flag[N]來(lái)記錄頂點(diǎn)是在P中還是Q中。對(duì)于某個(gè)頂點(diǎn)N,如果Flag[N]為1則表示這個(gè)頂點(diǎn)在集合P中,為1則表示在集合Q中。

          (2)起點(diǎn)A到自己的最短距離設(shè)置為0,起點(diǎn)能直接到達(dá)的頂點(diǎn)N,Dis[N]設(shè)為E[A][N],起點(diǎn)不能直接到達(dá)的頂點(diǎn)的最短路徑為設(shè)為∞。

          (3)在集合Q中選擇一個(gè)離起點(diǎn)最近的頂點(diǎn)U(即Dis[U]最?。┘尤氲郊螾。并計(jì)算所有以頂點(diǎn)U為起點(diǎn)的邊,到其它頂點(diǎn)的距離。例如存在一條從頂點(diǎn)U到頂點(diǎn)V的邊,那么可以通過(guò)將邊U->V添加到尾部來(lái)拓展一條從A到V的路徑,這條路徑的長(zhǎng)度是Dis[U]+e[U][V]。如果這個(gè)值比目前已知的Dis[V]的值要小,我們可以用新值來(lái)替代當(dāng)前Dis[V]中的值。

          (4)重復(fù)第三步,如果最終集合Q結(jié)束,算法結(jié)束。最終Dis數(shù)組中的值就是起點(diǎn)到所有頂點(diǎn)的最短路徑。

          2.2 A*算法

          1968年,斯坦福國(guó)際研究院的Peter E. Hart, Nils Nilsson以及Bertram Raphael共同發(fā)明了A*算法。A*算法通過(guò)借助一個(gè)啟發(fā)函數(shù)來(lái)引導(dǎo)搜索的過(guò)程,可以明顯地提高路徑搜索效率。

          下文仍以一個(gè)實(shí)例來(lái)簡(jiǎn)單介紹A*算法的實(shí)現(xiàn)過(guò)程。如圖18所示,假設(shè)小馬要從A點(diǎn)前往B點(diǎn)大榕樹(shù)底下去約會(huì),但是A點(diǎn)和B點(diǎn)之間隔著一個(gè)池塘。為了能盡快提到達(dá)約會(huì)地點(diǎn),給姑娘留下了一個(gè)守時(shí)踏實(shí)的好印象,我們需要給小馬搜索出一條時(shí)間最短的可行路徑。

          圖片圖18 約會(huì)場(chǎng)景示意圖

          A*算法的第一步就是簡(jiǎn)化搜索區(qū)域,將搜索區(qū)域劃分為若干柵格。并有選擇地標(biāo)識(shí)出障礙物不可通行與空白可通行區(qū)域。一般地,柵格劃分越細(xì)密,搜索點(diǎn)數(shù)越多,搜索過(guò)程越慢,計(jì)算量也越大;柵格劃分越稀疏,搜索點(diǎn)數(shù)越少,相應(yīng)的搜索精確性就越低。

          如圖19所示,我們?cè)谶@里將要搜索的區(qū)域劃分成了正方形(當(dāng)然也可以劃分為矩形、六邊形等)的格子,圖中藍(lán)色格子代表A點(diǎn)(小馬當(dāng)前的位置),紫色格子代表B點(diǎn)(大榕樹(shù)的位置),灰色格子代表池塘。同時(shí)我們可以用一個(gè)二維數(shù)組S來(lái)表示搜素區(qū)域,數(shù)組中的每一項(xiàng)代表一個(gè)格子,狀態(tài)代表可通行和不可通行。

          圖片圖19 經(jīng)過(guò)簡(jiǎn)化后的搜索區(qū)域

          接著我們引入兩個(gè)集合OpenList和CloseList,以及一個(gè)估價(jià)函數(shù)F = G + H。OpenList用來(lái)存儲(chǔ)可到達(dá)的格子,CloseList用來(lái)存儲(chǔ)已到達(dá)的格子。G代表從起點(diǎn)到當(dāng)前格子的距離,H表示在不考慮障礙物的情況下,從當(dāng)前格子到目標(biāo)格子的距離。F是起點(diǎn)經(jīng)由當(dāng)前格子到達(dá)目標(biāo)格子的總代價(jià),值越小,綜合優(yōu)先級(jí)越高。

          G和H也是A*算法的精髓所在,通過(guò)考慮當(dāng)前格子與起始點(diǎn)的距離,以及當(dāng)前格子與目標(biāo)格子的距離來(lái)實(shí)現(xiàn)啟發(fā)式搜索。對(duì)于H的計(jì)算,又有兩種方式,一種是歐式距離,一種是曼哈頓距離。

          歐式距離用公式表示如下,物理上表示從當(dāng)前格子出發(fā),支持以8個(gè)方向向四周格子移動(dòng)(橫縱向移動(dòng)+對(duì)角移動(dòng))。

          圖片

          曼哈頓距離用公式表示如下,物理上表示從當(dāng)前格子出發(fā),支持以4個(gè)方向向四周格子移動(dòng)(橫縱向移動(dòng))。這是A*算法最常用的計(jì)算H值方法,本文H值的計(jì)算也采用這種方法。

          圖片

          現(xiàn)在我們開(kāi)始搜索,查找最短路徑。首先將起點(diǎn)A放入到OpenList中,并計(jì)算出此時(shí)OpenList中F值最小的格子作為當(dāng)前方格移入到CloseList中。由于當(dāng)前OpenList中只有起點(diǎn)A這個(gè)格子,所以將起點(diǎn)A移入CloseList,代表這個(gè)格子已經(jīng)檢查過(guò)了。

          接著我們找出當(dāng)前格子A上下左右所有可通行的格子,看它們是否在OpenList當(dāng)中。如果不在,加入到OpenList中計(jì)算出相應(yīng)的G、H、F值,并把當(dāng)前格子A作為它們的父節(jié)點(diǎn)。本例子,我們假設(shè)橫縱向移動(dòng)代價(jià)為10,對(duì)角線移動(dòng)代價(jià)為14。

          我們?cè)诿總€(gè)格子上標(biāo)出計(jì)算出來(lái)的F、G、H值,如圖20所示,左上角是F,左下角是G,右下角是H。通過(guò)計(jì)算可知S[3][2]格子的F值最小,我們把它從OpenList中取出,放到CloseList中。

          圖片圖20 第一輪計(jì)算后的結(jié)果

          接著將S[3][2]作為當(dāng)前格子,檢查所有與它相鄰的格子,忽略已經(jīng)在CloseList或是不可通行的格子。如果相鄰的格子不在OpenList中,則加入到OpenList,并將當(dāng)前方格子S[3][2]作為父節(jié)點(diǎn)。

          已經(jīng)在OpenList中的格子,則檢查這條路徑是否最優(yōu),如果非最優(yōu),不做任何操作。如果G值更小,則意味著經(jīng)由當(dāng)前格子到達(dá)OpenList中這個(gè)格子距離更短,此時(shí)我們將OpenList中這個(gè)格子的父節(jié)點(diǎn)更新為當(dāng)前節(jié)點(diǎn)。

          對(duì)于當(dāng)前格子S[3][2]來(lái)說(shuō),它的相鄰5個(gè)格子中有4個(gè)已經(jīng)在OpenList,一個(gè)未在。對(duì)于已經(jīng)在OpenList中的4個(gè)格子,我們以它上面的格子S[2][2]舉例,從起點(diǎn)A經(jīng)由格子S[3][2]到達(dá)格子S[2][2]的G值為20(10+10)大于從起點(diǎn)A直接沿對(duì)角線到達(dá)格子S[2][2]的G值14。顯然A經(jīng)由格子S[3][2]到達(dá)格子S[2][2]不是最優(yōu)的路徑。當(dāng)把4個(gè)已經(jīng)在OpenList 中的相鄰格子都檢查后,沒(méi)有發(fā)現(xiàn)經(jīng)由當(dāng)前方格的更好路徑,因此我們不做任何改變。

          對(duì)于未在OpenList的格子S[2][3](假設(shè)小馬可以斜穿墻腳),加入OpenList中,并計(jì)算它的F、G、H值,并將當(dāng)前格子S[3][2]設(shè)置為其父節(jié)點(diǎn)。經(jīng)歷這一波騷操作后,OpenList中有5個(gè)格子,我們需要從中選擇F值最小的那個(gè)格子S[2][3],放入CloseList中,并設(shè)置為當(dāng)前格子,如圖21所示。

          圖片圖21 第二輪計(jì)算后的結(jié)果

          重復(fù)上面的故事,直到終點(diǎn)也加入到OpenList中。此時(shí)我們以當(dāng)前格子倒推,找到其父節(jié)點(diǎn),父節(jié)點(diǎn)的父節(jié)點(diǎn)……,如此便可搜索出一條最優(yōu)的路徑,如圖22中紅色圓圈標(biāo)識(shí)。

          圖片圖22 最后計(jì)算得到的結(jié)果

          基于上述形象的過(guò)程,A*算法實(shí)現(xiàn)過(guò)程可以歸納為如下步驟:

          (1)將搜索區(qū)域按一定規(guī)則劃分,把起點(diǎn)加入OpenList。

          (2)在OpenList中查找F值最小的格子,將其移入CloseList,并設(shè)置為當(dāng)前格子。

          (3)查找當(dāng)前格子相鄰的可通行的格子,如果它已經(jīng)在OpenList中,用G值衡量這條路徑是否更好。如果更好,將該格子的父節(jié)點(diǎn)設(shè)置為當(dāng)前格子,重新計(jì)算F、G值,如果非更好,不做任何處理;如果不在OpenList中,將它加入OpenList中,并以當(dāng)前格子為父節(jié)點(diǎn)計(jì)算F、G、H值。

          (4)重復(fù)步驟(2)和步驟(3),直到終點(diǎn)加入到OpenList中。

          2.3 兩種算法比較

          Dijkstra算法的基本思想是“貪心”,主要特點(diǎn)是以起點(diǎn)為中心向周?chē)鷮訉訑U(kuò)展,直至擴(kuò)展到終點(diǎn)為止。通過(guò)Dijkstra算法得出的最短路徑是最優(yōu)的,但是由于遍歷沒(méi)有明確的方向,計(jì)算的復(fù)雜度比較高,路徑搜索的效率比較低。且無(wú)法處理有向圖中權(quán)值為負(fù)的路徑最優(yōu)問(wèn)題。

          A*算法將Dijkstra算法與廣度優(yōu)先搜索(Breadth-First-Search,BFS)算法相結(jié)合,并引入啟發(fā)函數(shù)(估價(jià)函數(shù)),大大減少了搜索節(jié)點(diǎn)的數(shù)量,提高了搜索效率。但是A*先入為主的將最早遍歷路徑當(dāng)成最短路徑,不適用于動(dòng)態(tài)環(huán)境且不太適合高維空間,且在終點(diǎn)不可達(dá)時(shí)會(huì)造成大量性能消耗。

          圖24是兩種算法路徑搜索效率示意圖,左圖為Dijkstra算法示意圖,右圖為A*算法示意圖,帶顏色的格子表示算法搜索過(guò)的格子。由圖23可以看出,A*算法更有效率,手術(shù)的格子更少。

          圖片

          圖23 Dijkstra算法和A*算法搜索效率對(duì)比圖(圖片來(lái)源:https://mp.weixin.qq.com/s/myU204Uq3tfuIKHGD3oEfw)
          03行為決策常用算法

          作為L(zhǎng)4級(jí)自動(dòng)駕駛的優(yōu)秀代表Robotaxi,部分人可能已經(jīng)在自己的城市欣賞過(guò)他們不羈的造型,好奇心強(qiáng)烈的可能都已經(jīng)體驗(yàn)過(guò)他們的無(wú)人“推背”服務(wù)。作為一個(gè)占有天時(shí)地利優(yōu)勢(shì)的從業(yè)人員,我時(shí)常在周末選一個(gè)人和的時(shí)間,叫個(gè)免費(fèi)Robotaxi去超市買(mǎi)個(gè)菜。

          剛開(kāi)始幾次乘坐,我的注意力全都放在安全員的雙手,觀察其是否在接管;過(guò)了一段時(shí)間,我的注意力轉(zhuǎn)移到中控大屏,觀察其夢(mèng)幻般的交互方式;而現(xiàn)在,我的注意力轉(zhuǎn)移到了智能上,觀察其在道路上的行為決策是否足夠聰明。而這一觀察,竟真總結(jié)出不少共性問(wèn)題。比如十字路口左轉(zhuǎn),各家Robotaxi總是表現(xiàn)的十分小心謹(jǐn)慎,人類(lèi)司機(jī)一腳油門(mén)過(guò)去的場(chǎng)景,Robotaxi總是再等等、再看看。且不同十字路口同一廠家的Robotaxi左轉(zhuǎn)的策略基本一致,完全沒(méi)有人類(lèi)司機(jī)面對(duì)不同十字路口、不同交通流、不同天氣環(huán)境時(shí)的“隨機(jī)應(yīng)變”。面對(duì)復(fù)雜多變場(chǎng)景時(shí)自動(dòng)駕駛行為決策表現(xiàn)出來(lái)的小心謹(jǐn)慎,像極了人類(lèi)進(jìn)入一個(gè)新環(huán)境時(shí)采取的猥瑣發(fā)育策略。但在自動(dòng)駕駛終局到來(lái)的那天,自動(dòng)駕駛的決策規(guī)劃能否像人類(lèi)一樣,在洞悉了人情社會(huì)的生活法則之后,做到“見(jiàn)人說(shuō)人話”、“見(jiàn)人下飯”呢?在讓自動(dòng)駕駛車(chē)輛的行為決策變得越來(lái)越像老司機(jī)的努力過(guò)程中,主要誕生了基于規(guī)則基于學(xué)習(xí)的兩大類(lèi)行為決策方法。3.1 基于規(guī)則的方法
          在基于規(guī)則的方法中,通過(guò)對(duì)自動(dòng)駕駛車(chē)輛的駕駛行為進(jìn)行劃分,并基于感知環(huán)境、交通規(guī)則等信息建立駕駛行為規(guī)則庫(kù)。自動(dòng)駕駛車(chē)輛在行駛過(guò)程中,實(shí)時(shí)獲取交通環(huán)境、交通規(guī)則等信息,并與駕駛行為規(guī)則庫(kù)中的經(jīng)驗(yàn)知識(shí)進(jìn)行匹配,進(jìn)而推理決策出下一時(shí)刻的合理自動(dòng)駕駛行為。正如全局路徑規(guī)劃的前提是地圖一樣,自動(dòng)駕駛行為分析也成為基于規(guī)則的行為決策的前提。不同應(yīng)用場(chǎng)景下的自動(dòng)駕駛行為不完全相同,以高速主干路上的L4自動(dòng)駕駛卡車(chē)為例,其自動(dòng)駕駛行為可簡(jiǎn)單分解為單車(chē)道巡航、自主變道、自主避障三個(gè)典型行為。單車(chē)道巡航是卡車(chē)L4自動(dòng)駕駛系統(tǒng)激活后的默認(rèn)狀態(tài),車(chē)道保持的同時(shí)進(jìn)行自適應(yīng)巡航。此駕駛行為還可以細(xì)分定速巡航、跟車(chē)巡航等子行為,而跟車(chē)巡航子行為還可以細(xì)分為加速、加速等子子行為,真是子子孫孫無(wú)窮盡也。自主變道是在變道場(chǎng)景(避障變道場(chǎng)景、主干路變窄變道場(chǎng)景等)發(fā)生及變道空間(與前車(chē)和后車(chē)的距離、時(shí)間)滿足后進(jìn)行左/右變道。自主避障是在前方出現(xiàn)緊急危險(xiǎn)情況且不具備自主變道條件時(shí),采取的緊急制動(dòng)行為,避免與前方障礙物或車(chē)輛發(fā)生碰撞。其均可以繼續(xù)細(xì)分,此處不再展開(kāi)。上面列舉的駕駛行為之間不是獨(dú)立的,而是相互關(guān)聯(lián)的,在一定條件滿足后可以進(jìn)行實(shí)時(shí)切換,從而支撐起L4自動(dòng)駕駛卡車(chē)在高速主干路上的自由自在?,F(xiàn)將例子中的三種駕駛行為之間的切換條件簡(jiǎn)單匯總?cè)绫?,真實(shí)情況比這嚴(yán)謹(jǐn)、復(fù)雜的多,此處僅為后文解釋基于規(guī)則的算法所用。

          表2 狀態(tài)間的跳轉(zhuǎn)事件

          圖片

          在基于規(guī)則的方法中,有限狀態(tài)機(jī)(FiniteStateMaechine,F(xiàn)SM)成為最具有代表性的方法。2007年斯坦福大學(xué)參加DARPA城市挑戰(zhàn)賽時(shí)的無(wú)人車(chē)“Junior”,其行為決策采用的就是有限狀態(tài)機(jī)方法。有限狀態(tài)機(jī)是一種離散的數(shù)學(xué)模型,也正好符合自動(dòng)駕駛行為決策的非連續(xù)特點(diǎn),主要用來(lái)描述對(duì)象生命周期內(nèi)的各種狀態(tài)以及如何響應(yīng)來(lái)自外界的各種事件。有限狀態(tài)機(jī)包含四大要素:狀態(tài)、事件、動(dòng)作轉(zhuǎn)移。事件發(fā)生后,對(duì)象產(chǎn)生相應(yīng)的動(dòng)作,從而引起狀態(tài)的轉(zhuǎn)移,轉(zhuǎn)移到新?tīng)顟B(tài)或維持當(dāng)前狀態(tài)。我們將上述駕駛行為定義為有限狀態(tài)機(jī)的狀態(tài),每個(gè)狀態(tài)之間在滿足一定的事件(或條件)后,自動(dòng)駕駛車(chē)輛執(zhí)行一定的動(dòng)作后,就可以轉(zhuǎn)移到新的狀態(tài)。比如單車(chē)道巡航狀態(tài)下,前方車(chē)輛低速行駛,自車(chē)在判斷旁邊車(chē)道滿足變道條件要求后,切換到自主變道狀態(tài)。自主變道完成后,系統(tǒng)再次回到單車(chē)道巡航狀態(tài)。結(jié)合表2中的切換條件,各個(gè)狀態(tài)在滿足一定事件(或條件)后的狀態(tài)跳轉(zhuǎn)示意圖如圖24所示。圖片圖24 狀態(tài)跳轉(zhuǎn)示意圖基于有限狀態(tài)機(jī)理論構(gòu)建的智能車(chē)輛自動(dòng)駕駛行為決策系統(tǒng),可將復(fù)雜的自動(dòng)駕駛過(guò)程分解為有限個(gè)自動(dòng)駕駛駕駛行為,邏輯推理清晰、應(yīng)用簡(jiǎn)單、實(shí)用性好等特點(diǎn),使其成為當(dāng)前自動(dòng)駕駛領(lǐng)域目前最廣泛使用的行為決策方法。但該方法沒(méi)有考慮環(huán)境的動(dòng)態(tài)性、不確定性以及車(chē)輛運(yùn)動(dòng)學(xué)以及動(dòng)力學(xué)特性對(duì)駕駛行為決策的影響,因此多適用于簡(jiǎn)單場(chǎng)景下,很難勝任具有豐富結(jié)構(gòu)化特征的城區(qū)道路環(huán)境下的行為決策任務(wù)。3.2 基于學(xué)習(xí)的方法上文介紹的基于規(guī)則的行為決策方法依靠專(zhuān)家經(jīng)驗(yàn)搭建的駕駛行為規(guī)則庫(kù),但是由于人類(lèi)經(jīng)驗(yàn)的有限性,智能性不足成為基于規(guī)則的行為決策方法的最大制約,復(fù)雜交通工況的事故率約為人類(lèi)駕駛員的百倍以上。鑒于此,科研工作者開(kāi)始探索基于學(xué)習(xí)的方法,并在此基礎(chǔ)上了誕生了數(shù)據(jù)驅(qū)動(dòng)型學(xué)習(xí)方法和強(qiáng)化學(xué)習(xí)方法。數(shù)據(jù)驅(qū)動(dòng)型學(xué)習(xí)是一種依靠自然駕駛數(shù)據(jù)直接擬合神經(jīng)網(wǎng)絡(luò)模型的方法,首先用提前采集到的老司機(jī)開(kāi)車(chē)時(shí)的自然駕駛數(shù)據(jù)訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型,訓(xùn)練的目標(biāo)是讓自動(dòng)駕駛行為決策水平接近老司機(jī)。而后將訓(xùn)練好的算法模型部署到車(chē)上,此時(shí)車(chē)輛的行為決策就像老司機(jī)一樣,穿行在大街小巷。讀者可參見(jiàn)端到端自動(dòng)駕駛章節(jié)中介紹的NVIDIA demo案例。強(qiáng)化學(xué)習(xí)方法通過(guò)讓智能體(行為決策主體)在交互環(huán)境中以試錯(cuò)方式運(yùn)行,并基于每一步行動(dòng)后環(huán)境給予的反饋(獎(jiǎng)勵(lì)或懲罰),來(lái)不斷調(diào)整智能體行為,從而實(shí)現(xiàn)特定目的或使得整體行動(dòng)收益最大。通過(guò)這種試錯(cuò)式學(xué)習(xí),智能體能夠在動(dòng)態(tài)環(huán)境中自己作出一系列行為決策,既不需要人為干預(yù),也不需要借助顯式編程來(lái)執(zhí)行任務(wù)。強(qiáng)化學(xué)習(xí)可能不是每個(gè)人都聽(tīng)過(guò),但DeepMind開(kāi)發(fā)的圍棋智能AlphaGo(阿爾法狗),2016年3月戰(zhàn)勝世界圍棋冠軍李世石,2017年5月后又戰(zhàn)勝?lài)迨澜缗琶谝豢聺嵉氖?,大家?yīng)該都有所耳聞。更過(guò)分的是,半年后DeepMind在發(fā)布的新一代圍棋智能AlphaZero(阿爾法狗蛋),通過(guò)21天的閉關(guān)修煉,就戰(zhàn)勝了家族出現(xiàn)的各種狗子們,成功當(dāng)選狗蛋之王。而賦予AlphaGo及AlphaZero戰(zhàn)勝人類(lèi)棋手的魔法正是強(qiáng)化學(xué)習(xí),機(jī)器學(xué)習(xí)的一種。機(jī)器學(xué)習(xí)目前有三大派別:監(jiān)督學(xué)習(xí)、無(wú)監(jiān)督學(xué)習(xí)和強(qiáng)化學(xué)習(xí)。監(jiān)督學(xué)習(xí)算法基于歸納推理,通過(guò)使用有標(biāo)記的數(shù)據(jù)進(jìn)行訓(xùn)練,以執(zhí)行分類(lèi)或回歸;無(wú)監(jiān)督學(xué)習(xí)一般應(yīng)用于未標(biāo)記數(shù)據(jù)的密度估計(jì)或聚類(lèi);強(qiáng)化學(xué)習(xí)自成一派,通過(guò)讓智能體在交互環(huán)境中以試錯(cuò)方式運(yùn)行,并基于每一步行動(dòng)后環(huán)境給予的反饋(獎(jiǎng)勵(lì)或懲罰),來(lái)不斷調(diào)整智能體行為,從而實(shí)現(xiàn)特定目的或使得整體行動(dòng)收益最大。通過(guò)這種試錯(cuò)式學(xué)習(xí),智能體能夠在動(dòng)態(tài)環(huán)境中自己作出一系列決策,既不需要人為干預(yù),也不需要借助顯式編程來(lái)執(zhí)行任務(wù)。這像極了馬戲團(tuán)訓(xùn)練各種動(dòng)物的過(guò)程,馴獸師一個(gè)抬手動(dòng)作(環(huán)境),動(dòng)物(智能體)若完成相應(yīng)動(dòng)作,則會(huì)獲得美味的食物(正反饋),若沒(méi)有完成相應(yīng)動(dòng)作,食物可能換成了皮鞭(負(fù)反饋)。時(shí)間一久,動(dòng)物就學(xué)會(huì)基于馴獸師不同的手勢(shì)完成不同動(dòng)作,來(lái)使自己獲得最多數(shù)量的美食。大道至簡(jiǎn),強(qiáng)化學(xué)習(xí)亦如此。一個(gè)戰(zhàn)勝人類(lèi)圍棋冠軍的“智能”也僅由五部分組成:智能體(Agent)、環(huán)境(Environment)、狀態(tài)(State)、行動(dòng)(Action)和獎(jiǎng)勵(lì)(Reward)。強(qiáng)化學(xué)習(xí)系統(tǒng)架構(gòu)如圖25所示,結(jié)合自動(dòng)駕駛代客泊車(chē)中的泊入功能,我們介紹一下各組成的定義及作用。圖片圖25 強(qiáng)化學(xué)習(xí)系統(tǒng)架構(gòu)代客泊車(chē)泊入功能的追求非常清晰,就是在不發(fā)生碰撞的前提下,實(shí)現(xiàn)空閑停車(chē)位的快速泊入功能。這個(gè)過(guò)程中,承載強(qiáng)化學(xué)習(xí)算法的控制器(域控制器/中央計(jì)算單元)就是智能體,也是強(qiáng)化學(xué)習(xí)訓(xùn)練的主體。智能體之外的整個(gè)泊車(chē)場(chǎng)景都是環(huán)境,包括停車(chē)場(chǎng)中的立柱、車(chē)輛、行人、光照等。訓(xùn)練開(kāi)始后,智能體實(shí)時(shí)從車(chē)載傳感器(激光雷達(dá)、相機(jī)、IMU、超聲波雷達(dá)等)讀取環(huán)境狀態(tài),并基于當(dāng)前的環(huán)境狀態(tài),采取相應(yīng)的轉(zhuǎn)向、制動(dòng)和加速行動(dòng)。如果基于當(dāng)前環(huán)境狀態(tài)采用的行動(dòng),是有利于車(chē)輛快速泊入,則智能體會(huì)得到一個(gè)獎(jiǎng)勵(lì),反之則會(huì)得到一個(gè)懲罰。在獎(jiǎng)勵(lì)和懲罰的不斷刺激下,智能體學(xué)會(huì)了適應(yīng)環(huán)境,學(xué)會(huì)了下次看到空閑車(chē)位時(shí)可以一把倒入,學(xué)會(huì)了面對(duì)不同車(chē)位類(lèi)型時(shí)采取不同的風(fēng)騷走位。從上述例子,我們也可以總結(jié)出訓(xùn)練出一個(gè)優(yōu)秀的“智能”,大概有如下幾個(gè)步驟:(1)創(chuàng)建環(huán)境。定義智能體可以學(xué)習(xí)的環(huán)境,包括智能體和環(huán)境之間的接口。環(huán)境可以是仿真模型,也可以是真實(shí)的物理系統(tǒng)。仿真環(huán)境通常是不錯(cuò)的起點(diǎn),一是安全,二是可以試驗(yàn)。(2)定義獎(jiǎng)勵(lì)。指定智能體用于根據(jù)任務(wù)目標(biāo)衡量其性能的獎(jiǎng)勵(lì)信號(hào),以及如何根據(jù)環(huán)境計(jì)算該信號(hào)??赡苄枰?jīng)過(guò)數(shù)次迭代才能實(shí)現(xiàn)正確的獎(jiǎng)勵(lì)塑造。(3)創(chuàng)建智能體。智能體由策略和訓(xùn)練算法組成,因此您需要:

          (a)選擇一種表示策略的方式(例如,使用神經(jīng)網(wǎng)絡(luò)或查找表)。思考如何構(gòu)造參數(shù)和邏輯,由此構(gòu)成智能體的決策部分。

          (b)選擇合適的訓(xùn)練算法。大多數(shù)現(xiàn)代強(qiáng)化學(xué)習(xí)算法依賴(lài)于神經(jīng)網(wǎng)絡(luò),因?yàn)楹笳叻浅_m合處理大型狀態(tài)/動(dòng)作空間和復(fù)雜問(wèn)題。

          (4)訓(xùn)練和驗(yàn)證智能體。設(shè)置訓(xùn)練選項(xiàng)(如停止條件)并訓(xùn)練智能體以調(diào)整策略。要驗(yàn)證經(jīng)過(guò)訓(xùn)練的策略,最簡(jiǎn)單的方法是仿真。(5)部署策略。使用生成的 C/C++ 或 CUDA 代碼等部署經(jīng)過(guò)訓(xùn)練的策略表示。此時(shí)無(wú)需擔(dān)心智能體和訓(xùn)練算法;策略是獨(dú)立的決策系統(tǒng)。強(qiáng)化學(xué)習(xí)方法除了具有提高行為決策智能水平的能力,還具備合并決策和控制兩個(gè)任務(wù)到一個(gè)整體、進(jìn)行統(tǒng)一求解的能力。將決策與控制進(jìn)行合并,這樣既發(fā)揮了強(qiáng)化學(xué)習(xí)的求解優(yōu)勢(shì),又能進(jìn)一步提高自動(dòng)駕駛系統(tǒng)的智能性。實(shí)際上,人類(lèi)駕駛員也是具有很強(qiáng)的整體性的,我們很難區(qū)分人類(lèi)的行為中哪一部分是自主決策,哪一部分是運(yùn)動(dòng)控制?,F(xiàn)階段強(qiáng)化學(xué)習(xí)方法的應(yīng)用還處在摸索階段,應(yīng)用在自動(dòng)駕駛的潛力還沒(méi)有被完全發(fā)掘出來(lái),這讓我想起了母校的一句校歌:“能不奮勉乎吾曹?”04運(yùn)動(dòng)規(guī)劃常用算法

          有了全局路徑參考信息,有了局部環(huán)境信息了,有了行為決策模塊輸入的決策信息,下一步自然而然的就要進(jìn)行運(yùn)動(dòng)規(guī)劃,從而生成一條局部的更加具體的行駛軌跡,并且這條軌跡要滿足安全性和舒適性要求。

          考慮到車(chē)輛是一個(gè)具有巨大慣性的鐵疙瘩且沒(méi)有瞬間移動(dòng)的功能,如果僅考慮瞬時(shí)狀態(tài)的行駛軌跡,不規(guī)劃出未來(lái)一段時(shí)間有前瞻性的行駛軌跡,那么很容易造成一段時(shí)間后無(wú)解。因此,運(yùn)動(dòng)規(guī)劃生成的軌跡是一種由二維空間和一維時(shí)間組成的三維空間中的曲線,是一種偏實(shí)時(shí)的路徑規(guī)劃。運(yùn)動(dòng)規(guī)劃的第一步往往采用隨機(jī)采樣算法,即走一步看一步,不斷更新行駛軌跡。代表算法是基于采樣的方法:PRM、RRT、Lattice。這類(lèi)算法通過(guò)隨機(jī)采樣的方式在地圖上生成子節(jié)點(diǎn),并與父節(jié)點(diǎn)相連,若連線與障礙物無(wú)碰撞風(fēng)險(xiǎn),則擴(kuò)展該子節(jié)點(diǎn)。重復(fù)上述步驟,不斷擴(kuò)展樣本點(diǎn),直到生成一條連接起點(diǎn)到終點(diǎn)的路徑。4.1 PRM算法概率路標(biāo)法 (Probabilistic Road Maps, PRM),是一種經(jīng)典的采樣方法,由Lydia E.等人在1996年提出。PRM主要包含三個(gè)階段,一是采樣階段,二是碰撞檢測(cè)階段,三是搜索階段。圖26為已知起點(diǎn)A和終點(diǎn)B的地圖空間,黑色空間代表障礙物,白色空間代表可通行區(qū)域。在采樣階段中,PRM首先在地圖空間進(jìn)行均勻的隨即采樣,也就是對(duì)地圖進(jìn)行稀疏采樣,目的是將大地圖簡(jiǎn)化為較少的采樣點(diǎn)。圖片圖26 PRM工作原理示意圖(來(lái)源:https://mp.weixin.qq.com/s/WGOUf7g0C4Od4X9rnCfqxA)在碰撞檢測(cè)階段,剔除落在障礙物上的采樣點(diǎn),并將剩下的點(diǎn)與其一定距離范圍內(nèi)的點(diǎn)相連,同時(shí)刪除穿越障礙物的連線,從而構(gòu)成一張無(wú)向圖。在搜索階段,利用全局路徑規(guī)劃算法章節(jié)介紹的搜索算法(Dijkstra、A*等)在無(wú)向圖中進(jìn)行搜索,從而找出一條起點(diǎn)A到終點(diǎn)B之間的可行路徑。算法步驟可以總結(jié)為:(1)構(gòu)造無(wú)向圖G =(V,E),其中V代表隨機(jī)采樣的點(diǎn)集,E代表兩采樣點(diǎn)之間所有可能的無(wú)碰撞路徑,G初始狀態(tài)為空。(2)隨機(jī)撒點(diǎn),并選取一個(gè)無(wú)碰撞的點(diǎn)c(i)加入到V中。(3)定義距離r,如果c(i)與V中某些點(diǎn)的距離小于r,則將V中這些點(diǎn)定義為c(i)的鄰域點(diǎn)。(4)將c(i)與其鄰域點(diǎn)相連,生成連線t,并檢測(cè)連線t是否與障礙物發(fā)生碰撞,如果無(wú)碰撞,則將t加入E中。(5)重復(fù)步驟2-4,直到所有采樣點(diǎn)(滿足采樣數(shù)量要求)均已完成上述步驟。(6)采用圖搜索算法對(duì)無(wú)向圖G進(jìn)行搜索,如果能找到起始點(diǎn)A到終點(diǎn)B的路線,說(shuō)明存在可行的行駛軌跡。PRM算法相比基于搜索的算法,簡(jiǎn)化了環(huán)境、提高了效率。但是在有狹窄通道場(chǎng)景中,很難采樣出可行路徑,效率會(huì)大幅降低。4.2 RRT快速探索隨機(jī)樹(shù)(Rapidly Exploring Random Trees,RRT),是Steven M. LaValle和James J. Kuffner Jr.在1998年提出的一種基于隨機(jī)生長(zhǎng)樹(shù)思想實(shí)現(xiàn)對(duì)非凸高維空間快速搜索的算法。與PRM相同的是兩者都是基于隨機(jī)采樣的算法,不同的是PRM最終生成的是一個(gè)無(wú)向圖,而RRT生成的是一個(gè)隨機(jī)樹(shù)。RRT的最顯著特征就是具備空間探索的能力,即從一點(diǎn)向外探索拓展的特征。RRT分單樹(shù)和雙樹(shù)兩種類(lèi)型,單樹(shù)RRT將規(guī)起點(diǎn)作為隨機(jī)樹(shù)的根節(jié)點(diǎn),通過(guò)隨機(jī)采樣、碰撞檢測(cè)的方式為隨機(jī)樹(shù)增加葉子節(jié)點(diǎn),最終生成一顆隨機(jī)樹(shù)。而雙樹(shù)RRT則擁有兩顆隨機(jī)樹(shù),分別以起點(diǎn)和終點(diǎn)為根節(jié)點(diǎn),以同樣的方式進(jìn)行向外的探索,直到兩顆隨機(jī)樹(shù)相遇,從而達(dá)到提高規(guī)劃效率的目的。下面以圖27所示的地圖空間為例介紹單樹(shù)RRT算法的實(shí)現(xiàn)過(guò)程。在此地圖空間中,我們只知道起點(diǎn)A和終點(diǎn)B以及障礙物的位置(黑色的框)。圖片

          圖27 RRT算法舉例的地圖空間

          對(duì)于單樹(shù)RRT算法,我們將起點(diǎn)A設(shè)置為隨機(jī)樹(shù)的根,并生成一個(gè)隨機(jī)采樣點(diǎn),如圖27所示,隨機(jī)采樣點(diǎn)有下面這幾種情況。(1)隨機(jī)采樣點(diǎn)1落在自由區(qū)域中,但是根節(jié)點(diǎn)A和隨機(jī)采樣點(diǎn)1之間的連線存在障礙物,無(wú)法通過(guò)碰撞檢測(cè),采樣點(diǎn)1會(huì)被舍棄,重新再生成隨機(jī)采樣點(diǎn)。(2)隨機(jī)采樣點(diǎn)2落在障礙物的位置,采樣點(diǎn)2也會(huì)被舍棄,重新再生成隨機(jī)采樣點(diǎn)。(3)隨機(jī)采樣點(diǎn)3落在自由區(qū)域,且與根節(jié)點(diǎn)A之間的連線不存在障礙物,但是超過(guò)根節(jié)點(diǎn)的步長(zhǎng)限制。但此時(shí)這個(gè)節(jié)點(diǎn)不會(huì)被簡(jiǎn)單的舍棄點(diǎn),而是會(huì)沿著根節(jié)點(diǎn)和隨機(jī)采樣點(diǎn)3的連線,找出符合步長(zhǎng)限制的中間點(diǎn),將這個(gè)中間點(diǎn)作為新的采樣點(diǎn),也就是圖28中的4。

          圖片

          圖28 不同隨機(jī)采樣點(diǎn)舉例

          接著我們繼續(xù)生成新的隨機(jī)采樣點(diǎn),如果新的隨機(jī)采樣點(diǎn)位于自由區(qū)域,那么我們就可以遍歷隨機(jī)樹(shù)中已有的全部節(jié)點(diǎn),找出距離新的隨機(jī)采樣點(diǎn)最近的節(jié)點(diǎn),同時(shí)求出兩者之間的距離,如果滿足步長(zhǎng)限制的話,我們將接著對(duì)這兩個(gè)節(jié)點(diǎn)進(jìn)行碰撞檢測(cè),如果不滿足步長(zhǎng)限制的話,我們需要沿著新的隨機(jī)采樣點(diǎn)和最近的節(jié)點(diǎn)的連線方向,找出一個(gè)符合步長(zhǎng)限制的中間點(diǎn),用來(lái)替代新的隨機(jī)采樣點(diǎn)。最后如果新的隨機(jī)采樣點(diǎn)和最近的節(jié)點(diǎn)通過(guò)了碰撞檢測(cè),就意味著二者之間存在邊,我們便可以將新的隨機(jī)采樣點(diǎn)添加進(jìn)隨機(jī)樹(shù)中,并將最近的點(diǎn)設(shè)置為新的隨機(jī)采樣點(diǎn)的父節(jié)點(diǎn)。重復(fù)上述過(guò)程,直到新的隨機(jī)采樣點(diǎn)在終點(diǎn)的步長(zhǎng)限制范圍內(nèi),且滿足碰撞檢測(cè)。則將新的隨機(jī)采樣點(diǎn)設(shè)為終點(diǎn)B的父節(jié)點(diǎn),并將終點(diǎn)加入隨機(jī)樹(shù),從而完成迭代,生成如圖29所示的完整隨機(jī)樹(shù)。圖片

          圖29 隨機(jī)樹(shù)結(jié)算結(jié)果示例

          相比PRM,RRT無(wú)需搜索步驟、效率更高。通過(guò)增量式擴(kuò)展的方式,找到路徑后就立即結(jié)束,搜索終點(diǎn)的目的性更強(qiáng)。但是RRT作為一種純粹的隨機(jī)搜索算法,對(duì)環(huán)境類(lèi)型不敏感,當(dāng)?shù)貓D空間中存在狹窄通道時(shí),因被采樣的概率低,導(dǎo)致算法的收斂速度慢,效率會(huì)大幅下降,有時(shí)候甚至難以在有狹窄通道的環(huán)境找到路徑。圖30展示了 RRT應(yīng)對(duì)存在狹窄通道地圖空間時(shí)的兩種表現(xiàn),一種是RRT很快就找到了出路,一種是一直被困在障礙物里面。圖片圖30 RRT面對(duì)狹窄通道時(shí)的表現(xiàn)(來(lái)源:https://mp.weixin.qq.com/s/O8aK2RwOUXtcPSKQbDViiQ)圍繞如何更好的“進(jìn)行隨機(jī)采樣”、“定義最近的點(diǎn)”以及“進(jìn)行樹(shù)的擴(kuò)展”等方面,誕生了多種改進(jìn)型的算法,包括雙樹(shù)RRT-Connect(雙樹(shù))、lazy-RRT, RRT-Extend等。PRM和RRT都是一個(gè)概率完備但非最優(yōu)的路徑規(guī)劃算法,也就是只要起點(diǎn)和終點(diǎn)之間存在有效的路徑,那么只要規(guī)劃的時(shí)間足夠長(zhǎng),采樣點(diǎn)足夠多,必然可以找到有效的路徑。但是這個(gè)解無(wú)法保證是最優(yōu)的。采用PRM和RRT等隨機(jī)采樣算法生成的行駛軌跡,大多是一條條線段,線段之間的曲率也不不連續(xù),這樣的行駛軌跡是不能保證舒適性的,所以還需要進(jìn)一步進(jìn)行曲線平滑、角度平滑處理。代表算法是基于曲線插值的方法:RS曲線、Dubins曲線、多項(xiàng)式曲線、貝塞爾曲線和樣條曲線等。所有基于曲線插值方法要解決的問(wèn)題就是:在圖31上的若干點(diǎn)中,求出一條光滑曲線盡可能逼近所有點(diǎn)。下文以多項(xiàng)式曲線和貝塞爾曲線為例,介紹曲線插值算法的示例。圖片

          圖31 曲線插值方法要解決的問(wèn)題描述

          4.3 多項(xiàng)式曲線

          找到一條曲線擬合所有的點(diǎn),最容易想到的方法就是多項(xiàng)式曲線。常用的有三階多項(xiàng)式曲線、五階多項(xiàng)式曲線和七階多項(xiàng)式曲線。理論上只要多項(xiàng)式的階數(shù)足夠高,就可以擬合各種曲線。但從滿足需求和工程實(shí)現(xiàn)的角度,階數(shù)越低越好。車(chē)輛在運(yùn)動(dòng)規(guī)劃中,舒適度是一個(gè)非常重要的指標(biāo),在物理中衡量舒適性的物理量為躍度(Jerk),它是加速度的導(dǎo)數(shù)。Jerk的絕對(duì)值越小意味著加速度的變化越平緩,加速度的變化越平緩意味著越舒適。而五次多項(xiàng)式曲線則被證明是在運(yùn)動(dòng)規(guī)劃中可以使Jerk比較小的多項(xiàng)式曲線。以圖30所示換道場(chǎng)景為例,已知Frenet坐標(biāo)系下?lián)Q道起點(diǎn)和終點(diǎn)的六個(gè)參數(shù)s0、v0、a0、st、vt、at,采用橫縱向解耦分別進(jìn)行運(yùn)動(dòng)規(guī)劃的方法,可得橫向位置x(t)和縱向位置y(t)關(guān)于時(shí)間t的五次多項(xiàng)式表達(dá)式。

          圖片

          五次多項(xiàng)式中存在六個(gè)未知量,將起點(diǎn)和終點(diǎn)已知的六個(gè)參數(shù)代入便可這個(gè)六個(gè)未知量。然后根據(jù)時(shí)間t進(jìn)行合并即可得到橫縱向聯(lián)合控制的曲線,即最終運(yùn)動(dòng)規(guī)劃的曲線。4.4 貝塞爾曲線對(duì)于比較少的點(diǎn)來(lái)說(shuō),采用多項(xiàng)式曲線非常合理。但是當(dāng)點(diǎn)比較多時(shí),為了逼近所有點(diǎn),就不得不增加多項(xiàng)式的次數(shù),而由此帶來(lái)的負(fù)面影響就是曲線震蕩。退一步講,即使震蕩能夠被消除,獲得的曲線由于存在非常多的起伏,也不夠光順。而貝塞爾曲線的出現(xiàn),正好解決了上述問(wèn)題。1959年,法國(guó)數(shù)學(xué)家保爾·德·卡斯特里使用獨(dú)家配方求出貝塞爾曲線。1962年,法國(guó)雷諾汽車(chē)公司工程師皮埃爾·貝塞爾將自己在汽車(chē)造型設(shè)計(jì)的一些心得歸納總結(jié),并廣泛發(fā)表。貝塞爾在造型設(shè)計(jì)的心得可簡(jiǎn)單總結(jié)為:先用折線段勾畫(huà)出汽車(chē)的外形大致輪廓,再用光滑的參數(shù)曲線去逼近這個(gè)折線多邊形。繪制貝塞爾曲線之前,我們需要知道起點(diǎn)和終點(diǎn)的參數(shù),然后再提供任意數(shù)量的控制點(diǎn)的參數(shù)。如果控制點(diǎn)的數(shù)量為0,則為一階貝塞爾曲線,如果控制點(diǎn)的數(shù)量為1,則為二階貝塞爾曲線,如果控制點(diǎn)的數(shù)量為2,則為三階貝塞爾曲線,依次類(lèi)推。不論是起點(diǎn)、終點(diǎn)還是控制點(diǎn),它們均代表坐標(biāo)系下的一個(gè)向量。下面我們以經(jīng)典的二階貝塞爾曲線為例,介紹其繪制方法。如圖32所示,P0和P2為已知的參數(shù)的起點(diǎn)和終點(diǎn),P1為已知參數(shù)的控制點(diǎn)。首先我們按照起點(diǎn)、控制點(diǎn)、終點(diǎn)的順序依次連接,生成兩條直線。圖片圖32 二階貝塞爾曲線示例接著我們以每條直線的起點(diǎn)開(kāi)始,向各自的終點(diǎn)按比例t取點(diǎn),如圖中的A和B。隨后我們將A和B相連得到一條直線,也按相同的比例t取點(diǎn),便可得到C點(diǎn),這也是二階貝塞爾曲線在比例為t時(shí)會(huì)經(jīng)過(guò)的點(diǎn)。比列t滿足如下的公式。

          圖片

          當(dāng)我們比例t一點(diǎn)點(diǎn)變大(從0到1),就得到起點(diǎn)到終點(diǎn)的所有貝塞爾點(diǎn),所有點(diǎn)相連便繪制出完整的二階貝塞爾曲線C(t),用公式表達(dá)為。

          圖片

          由二階貝塞爾曲線拓展到N階貝塞爾曲線,可得數(shù)學(xué)表達(dá)式如下。

          圖片

          參考資料:【1】自動(dòng)駕駛中的決策規(guī)劃算法概述https://mp.weixin.qq.com/s/oNHDzdxMy_ciAok79kLDYg【2】基于有限狀態(tài)機(jī)的車(chē)輛自動(dòng)駕駛行為決策分析https://mp.weixin.qq.com/s/Wxt-h3MovCKTbQd5GbFa4Q【3】Dijkstra最短路徑算法http://blog.jobbole.com/101065/【4】A*算法詳解https://mp.weixin.qq.com/s/hgT-a3Ug9578k1DmioRgUg【5】自動(dòng)駕駛技術(shù)2-決策規(guī)劃https://mp.weixin.qq.com/s/9Guin-EbTp4IL4Td_bZKzw【6】強(qiáng)化學(xué)習(xí),讓自動(dòng)駕駛汽車(chē)自我進(jìn)化,越開(kāi)越好https://mp.weixin.qq.com/s/eHp9WOSJkajzx34FTYL3Kg【7】請(qǐng)查收這份強(qiáng)化學(xué)習(xí)簡(jiǎn)要指南https://mp.weixin.qq.com/s/V1QlB3i-udRcxi3ZcTP68Q【8】概率路線圖算法總結(jié)(PRM)https://mp.weixin.qq.com/s/KtHaKNyWd4ygrRersg8KJg【9】運(yùn)動(dòng)規(guī)劃入門(mén) | 4. 白話RRT,從原理到Matlab實(shí)現(xiàn)https://mp.weixin.qq.com/s/CXA5-gkPvk7juUS4CMMswA 


          *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



          關(guān)鍵詞: 自動(dòng)駕駛

          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉