机器人路径规划总结(2)

Dijkstra算法 BFS算法
该算法采用了贪心的思想,每次都查找与该点距离最的点;
https://blog.csdn.net/AK_Lady/article/details/70169515
A算法
1968年发明的A
算法就是把启发式方法(heuristic approaches)如BFS,和常规方法如Dijsktra算法结合在一起的算法。有点不同的是,类似BFS的启发式方法经常给出一个近似解而不是保证最佳解。然而,尽管A基于无法保证最佳解的启发式方法,A却能保证找到一条最短路径。
启发式算法H(n)
1曼哈顿距离(Manhattan distance)
标准的启发式函数是曼哈顿距离(Manhattan distance)。考虑你的代价函数并找到从一个位置移动到邻近位置的最小代价D。因此,我的游戏中的启发式函数应该是曼哈顿距离的D倍:

   H(n) = D * (abs ( n.x – goal.x ) + abs ( n.y – goal.y ) )

你应该使用符合你的代价函数的衡量单位。
在这里插入图片描述
2.对角线距离(diagonal distance)
如果在你的地图中你允许对角运动那么你需要一个不同的启发函数。(4 east, 4 north)的曼哈顿距离将变成8D。然而,你可以简单地移动(4 northeast)代替,所以启发函数应该是4D。这个函数使用对角线,假设直线和对角线的代价都是D:

h(n) = D * max(abs(n.x - goal.x), abs(n.y - goal.y))

如果对角线运动的代价不是D,但类似于D2 = sqrt(2) * D,则上面的启发函数不准确。你需要一些更准确(原文为sophisticated)的东西:

h_diagonal(n) = min(abs(n.x - goal.x), abs(n.y - goal.y))

h_straight(n) = (abs(n.x - goal.x) + abs(n.y - goal.y))

h(n) = D2 * h_diagonal(n) + D * (h_straight(n) - 2*h_diagonal(n)))

在这里插入图片描述
3.欧几里德距离: Euclidean distance
如果你的单位可以沿着任意角度移动(而不是网格方向),那么你也许应该使用直线距离:

h(n) = D * sqrt((n.x-goal.x)^2 + (n.y-goal.y)^2)

然而,如果是这样的话,直接使用A时将会遇到麻烦,因为代价函数g不会match启发函数h。因为欧几里得距离比曼哈顿距离和对角线距离都短,你仍可以得到最短路径,不过A将运行得更久一些:

A算法改进——Any-Angle Path Planning的Theta算法与Lazy Theta算法
在这里插入图片描述
在这里插入图片描述
Lazy Theta
的核心思想在于,将line of sight检查延迟到打开该节点为止。
在这里插入图片描述
在ComputeCost中,A*算法计算一个点s’的新的g,如果比原来的更好,则将原来的parent和g换成新的。

在Theta中,则在计算前,先去计算s’和s的parent有无视线。如果有视线,则把s’的parent和g以s的parent为parent进行更新。否则跟A一样处理。

然而,Theta有一个很大的问题,就是需要做大量的line of sight检查。有多少个点进入过open列表,就有多少次检查。在较为细致的网格中这个数量是十分巨大的。
在这里插入图片描述
Lazy Theta
的优化
这个优化是在A中就存在的,优化的A叫做Weighted A*,即带权重的A*。

所谓权重是加给启发函数的。原本的估值函数F(s) = G(s) + H(s),加入权重后变成

F(s) = G(s) + weight * H(s) 。

这意味着比起从出发点到当前点的距离,当前点到终点的距离的估值影响更大(当weight > 1时)。

可以简单的理解为weight越大,会“更想接近终点”。
动态权重的选取可以根据HPA的聚类算法来求取
在Lazy Theta
中也可以直接套用这个优化。同时比起普通的weighted A*,Lazy Theta*中的这项优化更加有价值。具体的就不在这里叙述了,在原文中有提到。

https://github.com/Rydra/HierarchicalPathfinder

http://www.cnblogs.com/yangrouchuan/p/6373285.html

路径规划-人工势场法(Artifical Potential Field)
https://blog.csdn.net/weixin_43010548/article/details/86596694
https://ww2.mathworks.cn/matlabcentral/fileexchange/29982-new-algorithm-of-path-planning?s_tid=FX_rc1_behav

猜你喜欢

转载自blog.csdn.net/zjguilai/article/details/89478928