下載 App
關注我們
  • Facebook
  • YouTube
  • Instagram
  • TikTok
  • X
首頁wikiA*路線規劃演算法

A*路線規劃演算法

2026-08-28 07:00:00

A*演算法係自動駕駛入面最經典、應用最廣泛嘅全局路線規劃演算法之一。佢透過喺已探索嘅路線代價(g(n))同埋未來剩餘路線嘅估算(h(n))之間搵到一個最平衡嘅點,能夠喺靜態環境入面高效地搵到一條由起點到終點嘅最短路線。

💡 演算法核心:一個公式,兩種代價

A*演算法嘅精妙之處,係喺佢用一個簡單嘅公式嚟評價地圖上嘅每一個節點:

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

  • g(n) – 行過嘅路:代表由起點到而家嘅節點 n 已經行過嘅實際代價,好似已經駛過嘅實際距離。

  • h(n) – 前方嘅路:代表由而家嘅節點 n 至終點嘅估計代價。呢個係一個估算值,通常用直線距離(歐幾里得距離)或者只能橫豎行嘅“曼哈頓距離”嚟計算。

A*演算法會優先探索 f(n) 值最小嘅節點,從而確保搜尋路線既唔係單純咁貪圖眼前(只睇g(n)),都唔係只憑感覺往前行(只睇h(n)),而係尋求整體最優。

🚗 演算法流程:好似“探索地圖”

你可以將A*演算法嘅執行過程想像成用一張網格地圖做標記:

  1. 初始化:將起點放入“待檢查列表”(Open List)。

  2. 迭代搜尋:

    • 由“待檢查列表”入面取出 f(n) 值最小嘅節點。

    • 將呢個節點放入“已檢查列表”(Closed List),代表呢度已經探索過咗。

    • 檢查呢個節點周圍所有嘅鄰居(上下左右同埋對角線方向):

      • 如果鄰居係障礙物或者喺“已檢查列表”入面,就忽略。

      • 如果鄰居唔喺“待檢查列表”入面,就計算佢嘅 f(n)、g(n)、h(n) 值,並而將而家嘅節點設為佢嘅父節點,之後加入“待檢查列表”。

      • 如果鄰居已經喺“待檢查列表”入面,就比較從而家嘅節點行過係咪 g(n) 更細,如果係咁就更新佢嘅父節點同代價值。

  3. 揾到路線:當終點被放入“已檢查列表”嗰陣,路線就搵到。由終點開始,沿住每個節點嘅父節點指針一路回溯到起點,就得到完整嘅最優路線。

⚠️ 喺自動駕駛面臨嘅挑戰

儘管喺靜態路網入面好出色,但將A*演算法直接使用喺自動駕駛嗰陣,就會面對幾個核心挑戰:

  • 只適用於靜態環境:經典嘅A*演算法假設地圖係靜止不變,無法應付道路上突然出現嘅行人、車輛等動態障礙物。

  • 路線唔夠“順滑”:A*演算法生成嘅路線往往由折線組成,充滿咗生硬嘅拐角,呢啲唔符合車輛嘅運動學特性(如最細轉彎半徑),車輛無法直接跟隨行駛。

  • 計算效率問題:喺大型、複雜嘅地圖入面,A*演算法需要探索嘅節點數量可能非常龐大,導致計算時間過長,影響決策嘅即時性。

🔧 自動駕駛入面嘅改進方案

針對上述問題,工程師對A*演算法進行咗多種改進,令佢可以適應自動駕駛嘅需求:

  • 混合A (Hybrid A*)**:在A嘅搜尋過程中加入咗車輛嘅運動學約束(如轉彎半徑),並考慮路線嘅順滑性,令生成嘅路線由一開始就係車輛“開得到”嘅。研究指出,改進後嘅混合A*演算法可將搜尋時間縮短50%以上。

  • Jump Point Search (JPS) 同 A* 融合:透過智能地“跳”過地圖上大量冗餘嘅節點,大幅提升搜尋效率,同時結合動態窗口法(DWA)嚟處理局部動態障礙物,實現更智能嘅避障。

  • 與其他演算法融合:將A*演算法生成嘅全局路線作為“指引”,再結合蟻群演算法等喺動態環境入面適應性更強嘅演算法,共同應對複雜嘅駕駛場景。

意見反饋