一文讀懂自動(dòng)駕駛高速路上的路徑規(guī)劃算法

時(shí)間:2021-07-13

來(lái)源:九三智能控

0

導(dǎo)語(yǔ):路徑規(guī)劃的另一個(gè)問(wèn)題是,人類可以根據(jù)駕駛方式、環(huán)境信息以及目的地,將汽車轉(zhuǎn)換到不同的狀態(tài)。事實(shí)證明,我們可以將機(jī)車輛的狀態(tài)編入字典,并指導(dǎo)它們根據(jù)當(dāng)前狀態(tài),將自動(dòng)駕駛系統(tǒng)的其他層轉(zhuǎn)換到哪些狀態(tài)。

如何安全有效的規(guī)劃行駛路線,是自動(dòng)駕駛汽車需解決的最大的難題之一。

事實(shí)上,路徑規(guī)劃技術(shù),現(xiàn)階段是一個(gè)非常活躍的研究領(lǐng)域。路徑規(guī)劃之所以如此復(fù)雜,是因?yàn)槠浜w了自動(dòng)駕駛的所有技術(shù)領(lǐng)域,從最基礎(chǔ)的制動(dòng)器,到感知周圍環(huán)境的傳感器,再到定位及預(yù)測(cè)模型等等。準(zhǔn)確的路徑規(guī)劃,要求汽車要理解我們所處的位置以及周邊的物體(其他車輛、行人、動(dòng)物等)會(huì)在接下來(lái)的幾秒鐘內(nèi)采取什么樣的行為。另一項(xiàng)關(guān)鍵技術(shù)是軌跡生成器(trajectory generator),其產(chǎn)生輸入路徑規(guī)劃算法的參考軌跡。

本期重點(diǎn)介紹一種基于C++開(kāi)發(fā)的高速公路路徑規(guī)劃算法。該算法利用jerk minimisation技術(shù),可在模擬器中生成安全且高效的行駛路徑。

本算法的一些假設(shè)如下:

任何情況下,不會(huì)與其他車輛發(fā)生事故

最大行駛速度為80KMH

最大加速度為10m/s2

最大jerk為10m/s3

車輛在不同車道之間不超過(guò)3s

車輛不能超出高速的3條車道

車輛不能逆向行駛

本算法的開(kāi)發(fā)難度非常之大,下圖顯示了早期版本所遇到的問(wèn)題。

自動(dòng)駕駛汽車的功能層

首先,我們來(lái)詳細(xì)的研究下自動(dòng)駕駛汽車的功能層(Functional Layers)。


路徑規(guī)劃需要自動(dòng)駕駛汽車不同功能層之間的合作、協(xié)調(diào)。上圖給出了一個(gè)自動(dòng)駕駛系統(tǒng)的功能層的配置形式:

動(dòng)作控制層:負(fù)責(zé)控制汽車,使其盡可能的按照“設(shè)定的”軌跡形式。該層需要最快的反應(yīng)速度;

傳感器融合層:負(fù)責(zé)合并各傳感器的輸出(如雷達(dá)和激光雷達(dá))

定位層:負(fù)責(zé)盡可能準(zhǔn)確的在地圖上定位車輛的位置,并計(jì)算其他物體相對(duì)于車輛的位置

預(yù)測(cè)層:負(fù)責(zé)識(shí)別傳感器檢測(cè)到的物體的性質(zhì)(又名感知),并根據(jù)汽車當(dāng)前的軌跡、其他車輛的軌跡和場(chǎng)景中的各種元素(如交通燈)預(yù)測(cè)場(chǎng)景中近未來(lái)的變化。這個(gè)層的一個(gè)重要任務(wù)是預(yù)測(cè)沖突。

行為層:該層的主要作用是協(xié)調(diào)。根據(jù)底層的輸入信息來(lái)決定如何調(diào)整行車軌跡

軌跡層:負(fù)責(zé)計(jì)算既定條件(速度、距離、車道、jerk等等)下的行車軌跡

生成行車軌跡的方法很多,這里我們采用了Frenet Coordiante System方法。

傳感器融合層的意義

我們?cè)谀M器中為車輛設(shè)置了一系列傳感器,它們的輸出融合在一起以產(chǎn)生更精確的測(cè)量結(jié)果。大多數(shù)在Level4上的自動(dòng)駕駛汽車公司在他們的傳感器套件中使用雷達(dá)、激光雷達(dá)和照相機(jī)。擁有多種不同類型的傳感器至關(guān)重要,因?yàn)槊糠N傳感器都有各自的優(yōu)缺點(diǎn)。此外,對(duì)于同種傳感器進(jìn)行冗余設(shè)計(jì),可以減輕傳感器故障帶來(lái)的影響。

在本算法中,模擬器可以提供以下傳感器融合功能:

車輛的位置、速度和方向

其他車輛的位置和速度

上次提交的車輛行駛軌跡

通過(guò)以上信息,我們可以計(jì)算車輛與其他車輛的準(zhǔn)確距離,并通過(guò)行車軌跡來(lái)預(yù)測(cè)與其他車輛的碰撞可能性。

下面我們?cè)敿?xì)介紹軌跡生成器(Trajectory Generation)。

Frennt坐標(biāo)系

通常,我們習(xí)慣使用笛卡爾坐標(biāo)系來(lái)定義空間點(diǎn)的位置。但在現(xiàn)實(shí)中,道路往往不是“筆直”的,因此對(duì)于人類非常簡(jiǎn)單的操作(如判斷車輛在哪條車道),在電腦的笛卡爾坐標(biāo)系中,往往是難以準(zhǔn)確定義的。下圖展示了我們使用笛卡爾坐標(biāo)系時(shí)所面臨的問(wèn)題:


笛卡爾坐標(biāo)系中的曲線車道

設(shè)想一下,如果我們采用的坐標(biāo)系可以反映道路的曲率,那么在新的坐標(biāo)系下車輛向前行駛并保持在車道內(nèi)的軌跡就會(huì)變成一條直線,這會(huì)大大簡(jiǎn)化路徑規(guī)劃的難度。而Frenet坐標(biāo)系正可以實(shí)現(xiàn)我們的設(shè)想。

不同坐標(biāo)系下的行車軌跡:

Frenet(左)vs 笛卡爾坐標(biāo)系(右)

在Frenet坐標(biāo)系中,可以平面上的點(diǎn)的位置可以由縱軸和橫軸定位,分別記為S和D 。其背后的數(shù)學(xué)原理非常復(fù)雜,在此我們不進(jìn)行累述。你可以認(rèn)為穿過(guò)道路中心的曲線決定了S軸,并指出了車輛在路上走了多遠(yuǎn);D軸則映射為車輛的側(cè)向位移。下圖顯示了彎曲道路在Frenet坐標(biāo)系上的樣子:


軌跡平滑處理

我們假設(shè)車道已經(jīng)被預(yù)先映射,并且提供了沿著中黃線的路徑點(diǎn),這條中黃線分隔了公路的兩邊。這有助于我們確定我們?cè)谧罱穆窂近c(diǎn)上的位置。

由于我們所設(shè)置的路徑點(diǎn)非常稀疏,當(dāng)我們?cè)噲D將Frenet轉(zhuǎn)換回真實(shí)世界坐標(biāo)時(shí),會(huì)產(chǎn)生帶折角的軌跡。這反過(guò)來(lái)又會(huì)導(dǎo)致車輛突然的加速和顛簸。由于函數(shù)toRealWorld(s, d) -> (x, y)使用兩個(gè)路徑點(diǎn)之間的線性插值,來(lái)確定x和y的最佳逼近值,我們總是冒著產(chǎn)生非平滑軌跡的風(fēng)險(xiǎn)。

如何進(jìn)行改善呢?在之前分享的算法中,我們發(fā)現(xiàn)由多項(xiàng)式擬合的曲線往往會(huì)產(chǎn)生非常平滑的軌跡。因此,我們用多項(xiàng)式擬合來(lái)替代線性插值。利用在Frenet坐標(biāo)系中取位置s來(lái)創(chuàng)建樣條,得到真實(shí)世界的坐標(biāo)(x, y)和偏移量(dx和dy),然后代入這個(gè)公式,得到最接近真實(shí)世界的坐標(biāo)點(diǎn)。

x = spline_s_x(s) + d * spline_s_dx(s)

y = spline_s_y(s) + d * spline_s_dy(s)

可以看到,經(jīng)過(guò)優(yōu)化的行車軌跡非常平滑。


狀態(tài)控制機(jī)制

路徑規(guī)劃的另一個(gè)問(wèn)題是,人類可以根據(jù)駕駛方式、環(huán)境信息以及目的地,將汽車轉(zhuǎn)換到不同的狀態(tài)。事實(shí)證明,我們可以將機(jī)車輛的狀態(tài)編入字典,并指導(dǎo)它們根據(jù)當(dāng)前狀態(tài),將自動(dòng)駕駛系統(tǒng)的其他層轉(zhuǎn)換到哪些狀態(tài)。

在算法中,我們的狀態(tài)控制機(jī)制非常簡(jiǎn)單,如下所示:


最終的狀態(tài)控制機(jī)制

最常見(jiàn)的狀態(tài)是保持車道,但每當(dāng)我們想要改變車道,汽車將首先過(guò)渡到準(zhǔn)備換車道的左/右狀態(tài),并在確保轉(zhuǎn)換車道是安全的。在換車道前進(jìn)入的中間狀態(tài),類似于車輛在換車道前打開(kāi)左/右信號(hào)。

關(guān)于狀態(tài)機(jī)的實(shí)現(xiàn),我們?cè)贔renet坐標(biāo)上獲得了靈感。我們將一個(gè)給定的狀態(tài)分解為它的縱向和橫向分量??v向狀態(tài)代表保持當(dāng)前車道,橫向狀態(tài)代表我們可能會(huì)進(jìn)入的下一個(gè)狀態(tài),而損失函數(shù)(Cost Function)則傾向于選擇縱向狀態(tài)。

損失函數(shù)

鑒于我們通常會(huì)返回多個(gè)候選狀態(tài)以及軌跡,我們必須找到一種選擇“最佳”行動(dòng)路線的方法。我們用損失函數(shù)來(lái)解決該問(wèn)題。損失函數(shù)可以教會(huì)汽車我們想要的合理行為,以及通過(guò)不同的權(quán)重來(lái)懲罰哪些行為。

我們所有的成本損失函數(shù)都遵循在cost_functions文件中定義的接口:

typedef function<double (const Vehicle&, const vector&,  const Trajectory&, const State&, const double&)> CostFunction;

最終結(jié)果

可以看到,當(dāng)前我們?cè)O(shè)計(jì)的路徑規(guī)劃器運(yùn)行得相當(dāng)好,可以確保車輛在車道上安全有效的行駛。后續(xù),我們計(jì)劃通過(guò)調(diào)整權(quán)重、改進(jìn)損失函數(shù)以及在預(yù)測(cè)層中加入機(jī)器學(xué)習(xí)算法來(lái)進(jìn)一步優(yōu)化。

 
低速無(wú)人駕駛產(chǎn)業(yè)綜合服務(wù)平臺(tái)版權(quán)與免責(zé)聲明:

凡本網(wǎng)注明[來(lái)源:低速無(wú)人駕駛產(chǎn)業(yè)綜合服務(wù)平臺(tái)]的所有文字、圖片、音視和視頻文件,版權(quán)均為低速無(wú)人駕駛產(chǎn)業(yè)綜合服務(wù)平臺(tái)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-85260609聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來(lái)源“低速無(wú)人駕駛產(chǎn)業(yè)綜合服務(wù)平臺(tái)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來(lái)源的稿件,均來(lái)自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來(lái)源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問(wèn)題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

關(guān)注低速無(wú)人駕駛產(chǎn)業(yè)聯(lián)盟公眾號(hào)獲取更多資訊

最新新聞