1. 程式人生 > >百度無人駕駛apollo專案路徑規劃a*演算法分析

百度無人駕駛apollo專案路徑規劃a*演算法分析

百度無人駕駛apollo專案路徑規劃a*演算法分析

車輛路徑規劃尋路演算法有很多,apollo路徑規劃模組使用的是啟發式搜尋演算法A*尋路演算法

a*演算法是一種在路網上中求解最短路徑的直接搜尋尋路演算法,原理是引入估價函式,加快搜索速度,提高了區域性擇優演算法搜尋的精度,成為當前較為流行的最短路演算法

估價函式用公式表示為: f(n)=g(n)+h(n)

其中, f(n) 是從初始節點到目標節點的最佳路徑的估計代價,

g(n) 是從初始節點到節點n的代價,

h(n) 是從節點n到目標節點的估計代價。

要保證找到最短路徑(最優解的)條件,關鍵在於估價函式f(n)的選取(或者說h(n)的選取)。

很顯然,距離估計與實際值越接近,估價函式取得就越好,例如對於路網來說,可以取兩節點間曼哈頓距離做為距離估計,即f=g(n) + (abs(dx - nx) + abs(dy - ny));這樣估價函式f(n)在g(n)一定的情況下,會或多或少的受距離估計值h(n)的制約,節點距目標點近,h值小,f值相對就小,能保證最短路的搜尋向終點的方向進行。

a*演算法保持著兩個表,open表和closed表,open表由未考察的節點組成,而closed表由已考察的節點組成,當演算法已經檢查過與某個節點相連的所有節點,計算出它們的f,g和h值,並把它們放入open表,以待考察,則稱這個節點為已考察的

演算法過程

1 令s為起始節點

2 計算s的f,g和h值

3 將s加入open表,此時s是open表裡唯一的節點

4 令b=open表中的最佳節點(最佳的意思是該節點的f值最小)

如果b是目標節點,則退出,此時已找到一條路徑

如果open表為空,則退出,此時沒有找到路徑

5 令c等於一個與b相連的有效節點

計算c的f,g,h值

檢查c是在open表裡還是在closed表裡,若在closed 表中,則檢查新路徑是否比原先更好(f值更小),若是則採用新路徑,否則把c新增入open表

對所有b的有效子孫節點重複第5步

6 重複第4步

現在分析一下route模組裡a*演算法的實現

節點定義在modules/routing/graph/topo_node.h檔案,graph目錄下還有計算用到的邊和圖的定義

主要演算法實現在modules/routing/strategy/a_star_strategy.cc檔案

首先看定義的h(n)函式

double AStarStrategy::HeuristicCost(const TopoNode* src_node,

const TopoNode* dest_node) {

const auto& src_point = src_node->AnchorPoint();

const auto& dest_point = dest_node->AnchorPoint();

double distance = fabs(src_point.x() - dest_point.x()) +

fabs(src_point.y() - dest_point.y());

return distance;

}

這段程式碼非常清晰,h(n)=abs(dx-nx)+abs(dy-ny)

bool Reconstruct(

const std::unordered_map<const TopoNode*, const TopoNode*>& came_from,

const TopoNode* dest_node, std::vector<NodeWithRange>* result_nodes)

這段函式實現了主要是演算法第5步的功能,然後內部呼叫了AdjustLaneChange,AdjustLaneChange函式又呼叫了AdjustLaneChangeBackward和AdjustLaneChangeForward函式

最後是供其他模組呼叫的Search函式

bool AStarStrategy::Search(const TopoGraph* graph,

const SubTopoGraph* sub_graph,

const TopoNode* src_node, const TopoNode* dest_node,

std::vector<NodeWithRange>* const result_nodes)

其中open_set_detail就是open表,使用的是priority_queue優先順序佇列,push加入一個元素,pop刪除第一個元素

這是一個非常標準的A*尋路演算法實現

百度路徑尋路演算法的不足

1 使用了通用的a*演算法,沒有使用效果更好的其他尋路演算法

2 只考慮了本車的情況,沒有考慮和周圍其他行人車輛的協同

3 沒有考慮碰撞檢測和避障演算法的實現,避障演算法這個其實是重中之重


相關推薦

無人駕駛apollo專案路徑規劃a*演算法分析

百度無人駕駛apollo專案路徑規劃a*演算法分析車輛路徑規劃尋路演算法有很多,apollo路徑規劃模組使用的是啟發式搜尋演算法A*尋路演算法a*演算法是一種在路網上中求解最短路徑的直接搜尋尋路演算法,原理是引入估價函式,加快搜索速度,提高了區域性擇優演算法搜尋的精度,成為當

手把手教用matlab做無人駕駛(二)-路徑規劃A*演算法

對於路徑規劃演算法-A*演算法在matlab中模擬,首先我們在matlab中構建地圖: 先給出matlab主函式程式: % editor: Robert.Cao % 2018.9.1 clc clear all close all disp('A Star

手把手教用matlab做無人駕駛(三)-路徑規劃A*演算法

這裡,我們更新主程式如下: % editor: Robert.Cao % 2018.9.1 clc clear all close all disp('A Star Path Planing start!!') p.start=[1,1]; %起始點 p.goa

地圖SDK導航(路徑規劃+實時導航)

裡面的demo寫的非常詳細 ,我主要說一下我個人遇到的問題以及對它的理解: 首先貼核心程式碼: 【路徑規劃】 private void startCalcRoute(int netmode) { // 獲取輸入的起終點

路徑規劃A*演算法及SLAM自主地圖建立導航演算法

最近研究機器人自主路徑規劃,關注了「泡泡機器人SLAM」專欄平臺,上面有很多公開的視訊,涵蓋多種SLAM技術及其演算法的視訊、PPT和程式碼資源,屬於公開,轉載請註明。第一期1.工業相機選型及介紹-劉富強:2.深度學習-顏沁睿:3.SVO & LSD_SLAM解析 -

最新無人駕駛前沿!2019-CES-自動駕駛-Apollo3.5企業版正式釋出!

百度釋出全球首個最全面的智慧駕駛商業化解決方案—— Apollo Enterprise。 釋出會上,百度推出的 Apollo3.5 版本。                  

計算之道第一場A無人車詳解

官方給出的題目解析是二分搜尋 直接二分最後的最大值,然後檢車錢是否足夠即可   為什麼不能將l設定為最小值的原因:while迴圈的退出條件是r-l <= 0題目中有一句話就是任何時候每一輛車的重量必須大於等於1kg 按照你原來的設計思想,也就是將l設定為最小值那麼當

Ueditor 圖片上傳路徑配置

找到php資料夾中的config.json檔案,修改其中的imagePathFormat屬性  "imagePathFormat": "/blog/Data/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", 

如何去掉編輯器 ueditor 元素路徑、字數統計等

在百度編輯器 ueditor 根目錄下: ueditor.config.js 檔案中 搜尋並將引數elementPathEnabled設定成false即可常用功能開關如下: ,elementPathEnabled : false  //是否啟用元素路徑,預設是true顯示

自動駕駛測試車有幾款

1、百度自動駕駛測試車有林肯MKZ,由美國創業公司AutonomouStuff的工程師Josh一個人改裝完成,花費的時間僅僅是3天。林肯 MKZ 擁有一套電氣化非常完善的系統,而更重要的一點是,作為整車廠的福特(林肯屬於福特旗下的豪華車品牌),也是幾乎是眾多車場中獨一無二的

包含高德,等地圖 apikey 專案打包 relese debug keystore

1.debug版, 不同編譯環境,sha1不同,需要自己提取; 在android studio terminal中輸入 keytool -list -v -keystore C:\Users\Ad

無人駕駛中的決策規劃控制技術

作者: 李力耘,劉少山 責編:何永燦,歡迎人工智慧領域技術投稿、約稿、給文章糾錯,請傳送郵件至[email protected] 本文為《程式設計師》原創文章,未經允許不得轉載,更多精彩文章請訂閱《程式設計師》 無人車作為一個複雜軟硬體結合系統

李彥巨集:無人車收到罰單,2018年實現量產

今天上午,百度創始人、董事長兼CEO李彥巨集在2017年百度世界大會上說,今年7月百度AI開發者大會之後,他被問的最多的問題,是自己坐無人車上北京五環有沒有吃到罰單,事實是確實收到了一張罰單。 外界對於無人車量產的時間表是2020年,百度“不滿足”,正在把這個時間提前。前不久百度剛剛宣佈和金龍汽車

自動駕駛首席架構師陳競凱:自動駕駛的現狀及發展 | 北大AI公開課筆記...

主講人:陳競凱 | 百度自動駕駛首席架構師整理:陳銘林 俞晶翔量子位 出品 | 公眾號 Qbit

2018 計蒜之道 初賽 第一場A無人

百度一共製造了 nn 輛無人車,其中第 ii 輛車的重量為 a_i\ \mathrm{kg}ai​kg。由於車輛過重會增大輪胎的磨損程度,現在要給這 nn 輛車減輕重量。每將一輛車減輕 1\ \mathrm{kg}1kg 需要消耗 pp 萬百度幣,總預算為 ss 萬百度幣。現在希望你設計一種最優的減重方案,使

2018 計蒜之道 初賽第一場 A 無人

題目概述 百度一共製造了 n 輛無人車,其中第i輛車的重量為 aii kg。 由於車輛過重會增大輪胎的磨損程度,現在要給這 n輛車減輕重量。每將一輛車減輕 1 kg 需要消耗 p萬百度幣,總預算為 s 萬百度幣。 現在希望你設計一種最優的減重方案,使得最

小馬智行A輪融資達2.14億美元,創始人系自動駕駛前員工

據《南華早報》報道,自動駕駛創企小馬智行(Pony.ai)今日宣佈完成了1.02億美元的A1輪融

2018 計蒜之道-初賽 第一場 A-無人

百度一共製造了nn輛無人車,其中第ii輛車的重量為a_i\ \mathrm{kg}ai​kg。由於車輛過重會增大輪胎的磨損程度,現在要給這nn輛車減輕重量。每將一輛車減輕1\ \mathrm{kg}1kg需要消耗pp萬百度幣,總預算為ss萬百度幣。現在希望你設計一種最優的減重方案,使得最重的車輛的重量是所有減

路徑規劃Dijkstra演算法

Dijkstra搜尋最短路徑: 整體思路 從起始節點開始,將鄰域節點進行遍歷,標註好鄰域節點最小的累計路徑長度,直到遍歷到終止節點。 演算法複雜度 naive的方式,演算法複雜度為O(|V|2),其中|V|是節點數量 聰明的方式,使用優先佇