Apollo自动驾驶入门课程第⑧讲 — 规划(下)
目錄
1. 路徑-速度解耦規(guī)劃
2. 路徑生成與選擇
3. ST圖
4. 速度規(guī)劃
5. 優(yōu)化
6. 路徑-速度規(guī)劃的軌跡生成
7. Lattice規(guī)劃
8. ST軌跡的終止?fàn)顟B(tài)
9. SL軌跡的終止?fàn)顟B(tài)
10. Lattice規(guī)劃的軌跡生成
本文轉(zhuǎn)自微信公眾號:Apollo開發(fā)者社區(qū)?原創(chuàng): 阿波君?Apollo開發(fā)者社區(qū)?9月20日
上周我們發(fā)布了無人駕駛技術(shù)的?規(guī)劃(上),車輛基于高精地圖、感知和預(yù)測模塊的數(shù)據(jù)來進行這一規(guī)劃。我們詳細(xì)介紹了A*算法,并規(guī)劃了前往目的地的地圖路線。
本期我們將繼續(xù)學(xué)習(xí)路徑-速度解耦規(guī)劃和Lattice規(guī)劃來構(gòu)建免碰撞軌跡。規(guī)劃是無人駕駛開發(fā)過程中最困難的部分之一。希望開發(fā)者能夠繼續(xù)努力,充分掌握規(guī)劃的相關(guān)知識,在開發(fā)的道路上越走越遠(yuǎn)。
視頻鏈接為:Apollo自動駕駛?cè)腴T課程Sebastian規(guī)劃_騰訊視頻
1. 路徑-速度解耦規(guī)劃
路徑-速度解耦規(guī)劃將軌跡規(guī)劃分為兩步:路徑規(guī)劃、速度規(guī)劃。首先在路徑規(guī)劃步驟中生成候選曲線,這是車輛可行駛的路徑。使用成本函數(shù)對每條路徑進行評估,該函數(shù)包含平滑度、安全性、與車道中心的偏離以及開發(fā)者想要考慮的其他任何因素。然后按成本對路徑進行排名并選擇成本最低的路徑。
下一步是確定沿這條路線行進的速度。我們可能希望改變在該路徑上的速度,所以真正需要選擇的是與路徑點相關(guān)的一系列速度,而不是單個速度。我們將該序列稱作“速度曲線”。我們可以使用優(yōu)化功能為路徑選擇受到各種限制的良好速度曲線。通過將路徑和速度曲線相結(jié)合可構(gòu)建車輛行駛軌跡。
2. 路徑生成與選擇
為了在路徑-速度解耦規(guī)劃中生成候選路徑,首先將路段分割成單元格。然后對這些單元格中的點進行隨機采樣。通過從每個單元格中取一個點并將點連接,我們創(chuàng)建了候選路徑。通過重復(fù)此過程可以構(gòu)建多個候選路徑。使用成本函數(shù)對這些路徑進行評估并選擇成本最低的路徑,成本函數(shù)可能考慮以下因素:與車道中心的偏離、與障礙物的距離、速度和曲率的變化、對車輛的壓力、或希望列入的任何其他因素。
3. ST圖
選擇路徑后的下一步是選擇與該路徑關(guān)聯(lián)的速度曲線,一個被稱為“ST 圖”的工具可以幫助設(shè)計和選擇速度曲線。在ST圖中,“s”表示車輛的縱向位移、“t”表示時間。ST 圖上的曲線是對車輛運動的描述,因為它說明了車輛在不同時間的位置。由于速度是位置變化的速率,所以可以通過查看曲線的斜率從 ST 圖上推斷速度。斜坡越陡則表示在更短的時間段內(nèi)有更大的移動,對應(yīng)更快的速度。
4. 速度規(guī)劃
為構(gòu)建最佳速度曲線需要將 ST 圖離散為多個單元格。單元格之間的速度有所變化,但在每個單元格內(nèi)速度保持不變,該方法可簡化速度曲線的構(gòu)建并維持曲線的近似度。在 ST 圖中可以將障礙物繪制為在特定時間段內(nèi)阻擋道路的某些部分的矩形。例如,假設(shè)預(yù)測模塊預(yù)測車輛將在 t0 到 t1 的時間段內(nèi)駛?cè)氲能嚨馈S捎谠撥噷⒃诖似陂g占據(jù)位置 s0 到 s1,因此在 ST 圖上繪制了一個矩形,它將在時間段 t0 到 t1 期間阻擋位置 s0 到 s1。為避免碰撞,速度曲線不得與此矩形相交。既然有了一張各種單元格被阻擋的 ST 圖,便可以使用優(yōu)化引擎為該圖選擇最佳的速度曲線。優(yōu)化算法通過復(fù)雜的數(shù)學(xué)運算來搜索受到各種限制的低成本解決方案。這些限制可能包括:法律限制,如速度限制;距離限制,如與障礙物的距離;汽車的物理限制,如加速度限制。
5. 優(yōu)化
路徑-速度解耦規(guī)劃在很大程度上取決于離散化。路徑選擇涉及將道路劃分為單元格,速度曲線構(gòu)建涉及將 ST 圖劃分為單元格。盡管離散化使這些問題更容易解決,但該解決方案生成的軌跡并不平滑。
為了將離散解決方案轉(zhuǎn)換為平滑軌跡,可使用“二次規(guī)劃”技術(shù)(Quadratic Programming)。二次規(guī)劃將平滑的非線性曲線與這些分段式線性段擬合。盡管二次規(guī)劃背后的數(shù)學(xué)運算很復(fù)雜,但對于我們的目的而言,細(xì)節(jié)并不是必需的。我們只需簡單使用幾種不同的優(yōu)化包中的一種,包括一種由 Apollo 推出的運行方案來生成平滑的軌跡,一旦路徑和速度曲線就緒,便可以用其構(gòu)建三維軌跡。
6. 路徑-速度規(guī)劃的軌跡生成
回顧一下端到端路徑-速度解耦規(guī)劃。假設(shè)我們正在路上行駛,感知系統(tǒng)觀察到一輛緩慢行駛的車輛離我們越來越近。首先,在這輛車的周圍生成多條候選路線,使用成本函數(shù)對這些候選路徑進行評估并選擇成本最低的路徑。然后使用 ST 圖來進行速度規(guī)劃,根據(jù)其他車輛隨時間變化的位置阻擋了 ST 圖的部分區(qū)域。優(yōu)化引擎可幫助確定該圖的最佳速度曲線,該曲線受制于約束和成本函數(shù)。我們可以使用二次規(guī)劃讓路徑和速度曲線變平滑。最后,將路徑和速度曲線合并構(gòu)建軌跡。這里的軌跡在速度較快時為紅色,在速度較慢時為藍(lán)色。我們使用該軌跡來安全地繞開其他車輛并繼續(xù)我們的旅程。
7. Lattice規(guī)劃
現(xiàn)在來學(xué)習(xí)一種稱為?Lattice 規(guī)劃的軌跡生成方法,通過使用 Frenet 坐標(biāo)可以將環(huán)境投射到縱軸和橫軸上,目標(biāo)是生成三維軌跡:縱向維度、橫向維度、時間維度。
可以將三維問題分解成兩個單獨的二維問題,這是通過分離軌跡的縱向和橫向分量來解決的。其中一個二維軌跡是具有時間戳的縱向軌跡稱之為 ST 軌跡,另一個二維軌跡是相對于縱向軌跡的橫向偏移稱之為 SL 軌跡。
Lattice 規(guī)劃具有兩個步驟即先分別建立 ST 和 SL 軌跡,然后將它們合并為生成縱向和橫向二維軌跡。先將初始車輛狀態(tài)投射到 ST 坐標(biāo)系和 SL 坐標(biāo)系中,通過對預(yù)選模式中的多個候選最終狀態(tài)進行采樣。來選擇最終車輛狀態(tài)。對于每個候選最終狀態(tài)構(gòu)建了一組軌跡將車輛從其初始狀態(tài)轉(zhuǎn)換為最終狀態(tài),使用成本函數(shù)對這些軌跡進行評估并選擇成本最低的軌跡。
8. ST軌跡的終止?fàn)顟B(tài)
根據(jù)情況可以將狀態(tài)分成 3 組:巡航?、跟隨、停止。巡航意味著車輛將在完成規(guī)劃步驟后定速行駛,實際上在對圖上的點進行采樣,在圖中橫軸代表時間,縱軸代表速度。對于該圖上的點,這意味著汽車將進入巡航狀態(tài),在時間 t 以 s 點的速度巡航,對于這種模式,所有最終狀態(tài)的加速度均為零。
下一個要考慮的模式為跟隨車輛,在這種情況下要對位置和時間狀態(tài)進行采樣,并嘗試在時間t出現(xiàn)在某輛車后面,在跟隨車輛時,需要與前方的車保持安全距離,這時速度和加速度將取決于要跟隨的車輛,這意味著在這種模式下,速度和加速度都會進行修正。
最后一種模式是停止,對于這種模式只需對汽車何時何地停止進行抽樣,這里速度和加速度會被修正為 0 。
9. SL軌跡的終止?fàn)顟B(tài)
根據(jù)這樣一個假設(shè)來進行SL 規(guī)劃,即無論車輛進入怎樣的終止?fàn)顟B(tài),車輛都應(yīng)該穩(wěn)定地與車道中心線對齊。這意味著只需要在一個小區(qū)域內(nèi),對橫向終止位置進行采樣。具體來說采樣的是道路上相鄰車道中心線周圍的位置。為了確保穩(wěn)定性,汽車駛向的終止?fàn)顟B(tài)應(yīng)該與車道中心一致。當(dāng)用橫向位置與縱向位置作圖時 ,想要的候選軌跡應(yīng)該以車輛與車道對齊并直線行駛而結(jié)束。為了達到這種終止?fàn)顟B(tài),車的朝向和位置的一階和二階導(dǎo)數(shù)都應(yīng)該為零。這意味著車輛既不是橫向移動的,那是一階導(dǎo)數(shù);也不是橫向加速,那是二階導(dǎo)數(shù)。這意味著車輛正沿著車道直行。
10. Lattice規(guī)劃的軌跡生成
一旦同時擁有了 ST 和 SL 軌跡,就需要將它們重新轉(zhuǎn)換為笛卡爾坐標(biāo)系。然后可以將它們相結(jié)合構(gòu)建由二維路徑點和一維時間戳組成的三維軌跡。ST 軌跡是隨時間變化的縱向位移,SL 軌跡是縱向軌跡上每個點的橫向偏移。由于兩個軌跡都有縱坐標(biāo) S,所以可以通過將其 S 值進行匹配來合并軌跡。
總結(jié)
以上是生活随笔為你收集整理的Apollo自动驾驶入门课程第⑧讲 — 规划(下)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 0.Overview
- 下一篇: onetouch.exe - oneto