百度無人駕駛apollo項目路徑規(guī)劃a*算法分析

算法分析

車輛路徑規(guī)劃尋路算法有很多,apollo路徑規(guī)劃模塊使用的是啟發(fā)式搜索算法A*尋路算法律杠。

a*算法是一種在路網(wǎng)上中求解最短路徑的直接搜索尋路算法,原理是引入估價函數(shù)患蹂,加快搜索速度决记,提高了局部擇優(yōu)算法搜索的精度,成為當前較為流行的最短路算法桐汤。

估價函數(shù)用公式表示為:

f(n)=g(n)+h(n)

其中:

  • f(n) 是從初始節(jié)點到目標節(jié)點的最佳路徑的估計代價垢夹;
  • g(n) 是從初始節(jié)點到節(jié)點n的代價溢吻;
  • h(n) 是從節(jié)點n到目標節(jié)點的估計代價。

要保證找到最短路徑(最優(yōu)解的)條件棚饵,關鍵在于估價函數(shù)f(n)的選让喝埂(或者說h(n)的選妊谕辍)噪漾。

很顯然,距離估計與實際值越接近且蓬,估價函數(shù)取得就越好欣硼,例如對于路網(wǎng)來說,可以取兩節(jié)點間曼哈頓距離做為距離估計恶阴,即f=g(n) + (abs(dx - nx) + abs(dy - ny))诈胜;這樣估價函數(shù)f(n)在g(n)一定的情況下豹障,會或多或少的受距離估計值h(n)的制約,節(jié)點距目標點近焦匈,h值小血公,f值相對就小,能保證最短路的搜索向終點的方向進行缓熟。

a*算法保持著兩個表累魔,open表和closed表,open表由未考察的節(jié)點組成够滑,而closed表由已考察的節(jié)點組成垦写,當算法已經(jīng)檢查過與某個節(jié)點相連的所有節(jié)點,計算出它們的f,g和h值彰触,并把它們放入open表梯投,以待考察,則稱這個節(jié)點為已考察的况毅。

算法過程

算法過程

  1. 令s為起始節(jié)點
  2. 計算s的f,g和h值
  3. 將s加入open表分蓖,此時s是open表里唯一的節(jié)點
  4. 令b=open表中的最佳節(jié)點(最佳的意思是該節(jié)點的f值最小)
    • 如果b是目標節(jié)點尔许,則退出咆疗,此時已找到一條路徑
    • 如果open表為空,則退出母债,此時沒有找到路徑
  5. 令c等于一個與b相連的有效節(jié)點
    • 計算c的f,g,h值
    • 檢查c是在open表里還是在closed表里午磁,若在closed 表中,則檢查新路徑是否比原先更好(f值更姓泵恰)迅皇,若是則采用新路徑,否則把c添加入open表
    • 對所有b的有效子孫節(jié)點重復第5步
  6. 重復第4步

源碼分析

現(xiàn)在分析一下route模塊里a*算法的實現(xiàn)衙熔。

  • 節(jié)點定義在modules/routing/graph/topo_node.h文件,graph目錄下還有計算用到的邊和圖的定義
  • 主要算法實現(xiàn)在modules/routing/strategy/a_star_strategy.cc文件

首先看定義的h(n)函數(shù)

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)

這段函數(shù)實現(xiàn)了主要是算法第5步的功能红氯,然后內(nèi)部調用了AdjustLaneChange框咙,AdjustLaneChange函數(shù)又調用了AdjustLaneChangeBackward和AdjustLaneChangeForward函數(shù)

最后是供其他模塊調用的Search函數(shù)

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優(yōu)先級隊列痢甘,push加入一個元素喇嘱,pop刪除第一個元素。
這是一個非常標準的A*尋路算法實現(xiàn)塞栅。

百度路徑尋路算法的不足

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

  1. 使用了通用的a*算法者铜,沒有使用效果更好的其他尋路算法
  2. 只考慮了本車的情況,沒有考慮和周圍其他行人車輛的協(xié)同
  3. 沒有考慮碰撞檢測和避障算法的實現(xiàn),避障算法這個其實是重中之重

參考

[] 百度無人駕駛apollo項目路徑規(guī)劃a*算法分析

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末作烟,一起剝皮案震驚了整個濱河市愉粤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拿撩,老刑警劉巖衣厘,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異压恒,居然都是意外死亡头滔,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門涎显,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坤检,“玉大人,你說我怎么就攤上這事期吓≡缧” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵讨勤,是天一觀的道長箭跳。 經(jīng)常有香客問我,道長潭千,這世上最難降的妖魔是什么谱姓? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮刨晴,結果婚禮上屉来,老公的妹妹穿的比我還像新娘。我一直安慰自己狈癞,他們只是感情好茄靠,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蝶桶,像睡著了一般慨绳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上真竖,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天脐雪,我揣著相機與錄音,去河邊找鬼恢共。 笑死战秋,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的旁振。 我是一名探鬼主播获询,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼涨岁,長吁一口氣:“原來是場噩夢啊……” “哼拐袜!你這毒婦竟也來了吉嚣?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蹬铺,失蹤者是張志新(化名)和其女友劉穎尝哆,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體甜攀,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡秋泄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年皂吮,在試婚紗的時候發(fā)現(xiàn)自己被綠了交惯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片队伟。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡攻冷,死狀恐怖口蝠,靈堂內(nèi)的尸體忽然破棺而出博肋,到底是詐尸還是另有隱情舟肉,我是刑警寧澤桶现,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布厉碟,位于F島的核電站喊巍,受9級特大地震影響,放射性物質發(fā)生泄漏箍鼓。R本人自食惡果不足惜崭参,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望款咖。 院中可真熱鬧何暮,春花似錦、人聲如沸铐殃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽背稼。三九已至贰军,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蟹肘,已是汗流浹背词疼。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留帘腹,地道東北人贰盗。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像阳欲,于是被迫代替她去往敵國和親舵盈。 傳聞我的和親對象是個殘疾皇子陋率,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容