代码请参考guyueju的代码
本文用的代号:
min_cost: 距离起始点的路径长度(代价)
U: 待处理的节点, 也会用 openList
S: 已处理的节点, 也会用 closeList
从U放到S的节点就是本次要处理的节点current_point
parent 父节点
best_path 最优路径
goal 目标
start_point 起始点
current_point 当前处理的node,也会用X代替
near_points 表示处理的node的临近节点, 也会用Y代替
childNodes 除了在closeList以外的周围的节点, 2d的 话有8个, 和near_points 意义相同
line_cost 直线距离长度 norm(point1 - point2), 用于计算相邻点的距离
min_cost 节点到start_point(有些算法是goal)的最短距离, path上所有点的line_cost的合
step 步数, 一格算一步, 有些能斜着走,斜着走的距离有些是1 有些是 (2^0.5)
全局path距离预估值 = 起点到当前点的min_cost + 当前点到终点的step
一, Dijkstra算法
1. 将起始点的min_cost设为0,其余设为inf.起始点放到S,此时起始点是current_point
2. while true循环
(1) 更新起始点的near_points的best_path和parent , 方法是比较current_point作为该节点的parent, 是否会降低其min_cost (第一次由于是inf,一定会更新), 并同步更新其parent
(2) 将near_points都放到U,作为待处理的节点
(3) 在U里取最小min_cost的节点,这个是最有希望成为best_path的, 作为下次处理的节点current_point ,并将其放到S
(4) 如果U是empty. 就跳出去,这时候表示所有需要处理的都处理完了,如果还没有更新到goal, 表示没有解
3. 如果goal的parent 不是inf, 表示有解
缺点:
min_cost只考虑距离start_point的距离,而不是预估的全局路径
如果障碍物会动就不能用了
三维建模复杂
二, Floyd算法
n 网格总数
用一张大表不断的更新所有节点的best_path, 总共更新约n^3次数(每一格对其他格的min_cost都要更新2次,有n个格子,所以是n^3)
,最后得到一张大表,记录所有node到另一个node的best_path
缺点:
起始阶段对空间和时间的要求很高
min_cost只考虑距离start_point的距离,而不是预估的全局路径

本文详细介绍了多种路径规划算法,包括Dijkstra、Floyd、RRT、A*、D*及LPA*。每种算法的优缺点、适用场景和核心思想进行了对比分析,如Dijkstra适用于静态环境,A*考虑全局预估,RRT适合未知三维环境,而D*和LPA*则针对动态障碍物。在2D静态环境下,A*通常是最佳选择,而在3D或动态环境中,RRT家族算法更为实用。
最低0.47元/天 解锁文章
4402

被折叠的 条评论
为什么被折叠?



