ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

105、路径规划A星与Dijkstra:栅格地图与机器人全局路径规划

2026/8/28 3:07:17 拓冰建站 浏览量
105、路径规划A星与Dijkstra:栅格地图与机器人全局路径规划 105、路径规划A星与Dijkstra:栅格地图与机器人全局路径规划从一次真实调试说起上周在实验室调试一台差速底盘机器人,地图是2D栅格,分辨率0.05m,场地大概20m×20m。导航栈用的是ROS的move_base,默认全局规划器是NavfnROS,底层就是Dijkstra。机器人从起点出发,要穿过一条1.2m宽的走廊去对面房间。结果呢?路径倒是出来了,但机器人贴着墙根走,离墙最近的地方只有8cm,底盘半径15cm,直接蹭墙。我盯着RViz里的绿色路径看了半天,第一反应是膨胀层参数没设好,检查了一圈,膨胀半径确实设了0.2m,没问题。后来把全局规划器换成A*(通过修改plugin参数),路径立刻变了——从走廊中间穿过去,离两侧墙都有30cm以上。同一个地图,同一个代价函数,两种算法给出的路径风格完全不同。这就是今天想聊的:A*和Dijkstra在栅格地图上的本质区别,以及工程上怎么选、怎么调。两种算法,一个核心差异先别急着看公式。Dijkstra和A的区别,一句话就能说清:Dijkstra只关心“从起点到我这里已经花了多少代价”,A额外关心“从我这里到终点大概还要花多少代价”。这个“大概”就是启发函数h(n)。Dijkstra相当于h(n)=0的特例,所以它像个没头苍蝇一样从起点向四周均匀扩散,直到终点被弹出。A*因为有方向感,会优先朝终点方向扩展,搜索空间小得多。但这里有个工程上容易忽略的点:A的“方向感”是启发函数给的,启发函数设计不好,A可能比Dijkstra还慢,甚至找不到最优路径。我见过有人直接把欧氏距离当