百度無人駕駛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}aikg。由於車輛過重會增大輪胎的磨損程度,現在要給這 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}aikg。由於車輛過重會增大輪胎的磨損程度,現在要給這nn輛車減輕重量。每將一輛車減輕1\ \mathrm{kg}1kg需要消耗pp萬百度幣,總預算為ss萬百度幣。現在希望你設計一種最優的減重方案,使得最重的車輛的重量是所有減
路徑規劃Dijkstra演算法
Dijkstra搜尋最短路徑: 整體思路 從起始節點開始,將鄰域節點進行遍歷,標註好鄰域節點最小的累計路徑長度,直到遍歷到終止節點。 演算法複雜度 naive的方式,演算法複雜度為O(|V|2),其中|V|是節點數量 聰明的方式,使用優先佇