中文
关注我们
  • Facebook
  • YouTube
  • Instagram
  • TikTok
  • X
首页wikiA*路径规划算法

A*路径规划算法

2026-08-25 10:25:50

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*算法生成的全局路径作为“指引”,再结合蚁群算法等在动态环境中适应性更强的算法,共同应对复杂的驾驶场景

意见反馈