一文了解基于圖搜索的常用路徑規(guī)劃算法
本文來源:智車科技
/ 導(dǎo)讀 /
自動(dòng)駕駛汽車從A點(diǎn)行駛到B點(diǎn),需要軌跡規(guī)劃算法來進(jìn)行全局規(guī)劃,而具體都有哪些算法呢?這篇文章想和大家分享一下一類最常用的軌跡規(guī)劃算法,基于圖搜索的規(guī)劃算法。
在開始介紹圖搜索算法之前,先簡單介紹一下自動(dòng)駕駛中的規(guī)劃問題:規(guī)劃模塊處于自動(dòng)駕駛軟件框架中的中間位置,其接收感知、定位、地圖發(fā)來的上游信息,輸出一條安全、平穩(wěn)、舒適的軌跡給到控制模塊,因此起到了一個(gè)承上啟下的作用,可以說是影響自動(dòng)駕駛中舒適性及安全性最重要的一環(huán)。而傳統(tǒng)意義上的規(guī)劃問題可以分為兩個(gè)步驟:
前端負(fù)責(zé)粗粒度的路徑查找,搜索出一條可行路徑;后端負(fù)責(zé)細(xì)粒度的軌跡生成,生成出一條控制模塊可以很好執(zhí)行的平滑軌跡。而這篇文章想要探討的,就是前端路徑搜索中一種最常用的方法,基于圖搜索的路徑規(guī)劃算法。
圖搜索基礎(chǔ)
圖是數(shù)據(jù)結(jié)構(gòu)中非常重要的一個(gè)概念,包含了節(jié)點(diǎn)和邊。在自動(dòng)駕駛中,通?梢詫⒌貓D存儲(chǔ)為柵格地圖,每一格就代表了圖的節(jié)點(diǎn),格與格之間的連線就代表了邊。
上圖展示了一種無向圖,即節(jié)點(diǎn)之間的連線是沒有指向的。而在實(shí)際場景中,往往每條邊(道路)不僅僅需要考慮距離信息,還需要考慮方向信息、路口擁堵情況、車流量等等,因此自動(dòng)駕駛中往往構(gòu)建的為有向圖、權(quán)重圖等等。除此之外,合理地對自動(dòng)駕駛場景下的地圖進(jìn)行分割也是保證規(guī)劃效果的一個(gè)很重要的基礎(chǔ),不能分割太密集導(dǎo)致規(guī)劃搜索的效率太低,也不能太粗略從而導(dǎo)致某些場景下明明存在可行解卻無法搜索到。 構(gòu)建完圖之后,具體的規(guī)劃過程其實(shí)就是一個(gè)搜索的過程,即如何在給定起點(diǎn)及終點(diǎn)的條件下快速搜索出一條滿足期望的最優(yōu)路徑。在代碼實(shí)現(xiàn)上,整個(gè)過程需要維護(hù)一個(gè)容器(container),具體的操作分為三個(gè)步驟:移除、擴(kuò)展、塞入,以此不停循環(huán),直至搜索到終點(diǎn)。下面介紹幾種最常用的搜索算法。
搜索算法DFS & BFS
了解了圖搜索的基礎(chǔ)之后,接下來介紹兩種最基礎(chǔ)的搜索算法:深度優(yōu)先搜索(DFS)和廣度優(yōu)先搜索(BFS)。深度優(yōu)先顧名思義,從起點(diǎn)開始,按照某個(gè)順序一條路走下去,直至不能再繼續(xù)為止,然后回到上一節(jié)點(diǎn),再換另一條路走下去;而廣度優(yōu)先則是每一步都擴(kuò)展同一層的所有可能節(jié)點(diǎn),一層一層擴(kuò)展下去,直到某一層搜索到終點(diǎn)為止?梢钥吹缴疃葍(yōu)先搜索的過程是一條路走到底后,最后訪問的節(jié)點(diǎn)最先拿來處理,整個(gè)過程可以用棧(stack)來表示,符合“后進(jìn)先出”的原則;而廣度優(yōu)先搜索的過程是一層中先訪問的節(jié)點(diǎn)拿來處理,可以用隊(duì)列(queue)來表示,符合“先進(jìn)先出”的原則。
那對于搜索算法來說,哪一種算法好一些呢?可以看下下面這張圖,相同的場景下,BFS可以給出一條最短路徑,而DFS雖然速度很快,但隨機(jī)性很大,無法給出一條最優(yōu)路徑,這一缺陷使得我們不得不拋棄DFS,目前的主流基于圖搜索的規(guī)劃算法,原理其實(shí)都是基于BFS延伸出來的。
但是BFS其實(shí)也有一個(gè)很嚴(yán)重的問題,就是其遍歷的無效節(jié)點(diǎn)過多,從而導(dǎo)致搜索效率太慢,上面左圖中的深灰色格點(diǎn)就展示了在搜索過程中,所需要訪問的節(jié)點(diǎn),可以看出大多數(shù)的訪問其實(shí)都是無用的,不能給最終的搜索提供任何幫助。針對這一缺陷,就引入了Heuristic Search(啟發(fā)式搜索),即加入終點(diǎn)信息,從而使得搜索的目標(biāo)更明確,避免過多的無效搜索。而基于這一改進(jìn)提出的算法就是GBFS(Greedy Breath-First Search)。
BFS和DPS是根據(jù)先入或者后入的順序來選擇要處理的節(jié)點(diǎn),之中不考慮任何終點(diǎn)相關(guān)的信息,而GBFS則是將與終點(diǎn)的距離考慮進(jìn)來,構(gòu)造一個(gè)規(guī)則來挑選依次要訪問的節(jié)點(diǎn)。與終點(diǎn)的距離有多種形式,最常用的三種為Euclidean Distance、Manhattan Distance以及Diagonal Distance。
舉個(gè)例子,在實(shí)現(xiàn)BFS算法時(shí),上圖中起點(diǎn)周圍的8個(gè)鄰居節(jié)點(diǎn)會(huì)一起存儲(chǔ)進(jìn)容器中,由于右上角的節(jié)點(diǎn)距離終點(diǎn)更近,因此再彈出時(shí)首先彈出該節(jié)點(diǎn),基于該節(jié)點(diǎn)再進(jìn)行擴(kuò)展,從而加快了搜索效率。從下圖中可以看出,算法過程中所訪問的節(jié)點(diǎn)減少了很多,搜索的目標(biāo)性更加明確,從而極大提升了搜索效率。
Dijkstra算法和A*算法
有了上面的基礎(chǔ),理解路徑規(guī)劃中的Dijkstra和A*算法就很容易了。Dijkstra算法其實(shí)BFS的進(jìn)階版,其可以用于處理帶權(quán)重邊的地圖,因此更適合在實(shí)際場景中使用。在該算法中,通常采用優(yōu)先隊(duì)列(priority queue)來作為訪問容器,這是由于優(yōu)先隊(duì)列(<key, value>這種形式)可以根據(jù)設(shè)定的key值自動(dòng)進(jìn)行排序,在Dijkstra中key值可以設(shè)定為和起點(diǎn)的距離,由于沒考慮和終點(diǎn)的距離信息,因此還不能顯示出優(yōu)先隊(duì)列的優(yōu)勢,但之后的A*算法里可以看出利用這種結(jié)構(gòu)的方便性。Dijkstra算法的偽代碼如下圖所示:
A*算法和Dijkstra算法的唯一區(qū)別就在于優(yōu)先隊(duì)列中排序的依據(jù)不同,即key值不同。不同于Dijkstra,A*在存儲(chǔ)節(jié)點(diǎn)時(shí),還會(huì)考慮和終點(diǎn)的距離(可以類比GBFS之于BFS),其key值計(jì)算可以表示為:
其中即為Heuristic Function,有了這個(gè)指向信息,A*算法可以更快地找到終點(diǎn),避免了許多的無效搜索。其偽代碼如下圖所示:
這里我們可以看出優(yōu)先隊(duì)列的優(yōu)勢了,我們只需要每次計(jì)算的值并將其存儲(chǔ)進(jìn)優(yōu)先隊(duì)列,它就會(huì)自動(dòng)根據(jù)其值進(jìn)行排序,因此每次就可以取出容器的頂部值即為的最小值。在同一場景下,它們的實(shí)際效果如下圖所示,可以看出由于A*避免了許多無效節(jié)點(diǎn)的訪問,效率提升很多。 而這又引出了另一個(gè)問題,Dijkstra由于無差別的搜索可以保證最短路徑,A*帶有強(qiáng)指向型的搜索方式,能保證結(jié)果最優(yōu)嗎?這其實(shí)取決于A*的啟發(fā)函數(shù)設(shè)定,為了保證最優(yōu)性,需要保證啟發(fā)函數(shù)是admissible的,即啟發(fā)函數(shù)的值需要小于等于實(shí)際上該點(diǎn)到終點(diǎn)的距離。
如果啟發(fā)式函數(shù)是admissible的,那么A*的最終搜索結(jié)果就是最優(yōu)的。其實(shí)這也很好理解,因?yàn)槿绻麊l(fā)函數(shù)的選擇實(shí)際上大于到終點(diǎn)的實(shí)際距離,那么依據(jù)該規(guī)則進(jìn)行的排序搜索,必然會(huì)漏掉距離最短的那條路。因此如果我們需要A*給出最短路徑的話,我們可以將啟發(fā)函數(shù)設(shè)定為歐式距離或者對角距離,而不是曼哈頓距離。
以上就是基于圖搜索的常用路徑規(guī)劃算法介紹,歡迎大家交流指正~
- End -
請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個(gè)字
最新活動(dòng)更多
-
即日-11.13立即報(bào)名>>> 【在線會(huì)議】多物理場仿真助跑新能源汽車
-
11月20日火熱報(bào)名中>> 2024 智能家居出海論壇
-
11月28日立即報(bào)名>>> 2024工程師系列—工業(yè)電子技術(shù)在線會(huì)議
-
12月19日立即報(bào)名>> 【線下會(huì)議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
-
即日-12.26火熱報(bào)名中>> OFweek2024中國智造CIO在線峰會(huì)
-
即日-2025.8.1立即下載>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍(lán)皮書》
推薦專題
- 1 【一周車話】沒有方向盤和踏板的車,你敢坐嗎?
- 2 特斯拉發(fā)布無人駕駛車,還未迎來“Chatgpt時(shí)刻”
- 3 特斯拉股價(jià)大跌15%:Robotaxi離落地還差一個(gè)蘿卜快跑
- 4 馬斯克給的“驚喜”夠嗎?
- 5 打完“價(jià)格戰(zhàn)”,大模型還要比什么?
- 6 馬斯克致敬“國產(chǎn)蘿卜”?
- 7 神經(jīng)網(wǎng)絡(luò),誰是盈利最強(qiáng)企業(yè)?
- 8 比蘋果偉大100倍!真正改寫人類歷史的智能產(chǎn)品降臨
- 9 諾獎(jiǎng)進(jìn)入“AI時(shí)代”,人類何去何從?
- 10 Open AI融資后成萬億獨(dú)角獸,AI人才之爭開啟
- 高級(jí)軟件工程師 廣東省/深圳市
- 自動(dòng)化高級(jí)工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級(jí)銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專家 廣東省/江門市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市