Search Based Path Planning

Search Based Pathing Planning

参考:https://www.bilibili.com/video/BV1yT4y1T7Eb

Dijkstra

流程

  • 从起点开始扩展,每一步为一个节点找到最短路径
  • cost:f(n) = g(n)
  • g(n):当前路径,从起点到n的代价(距离)
  • While true:
    1. 从open list选择代价最小的节点,收录进closed list
    2. 收录后遍历该节点的所有可访问邻节点,更新cost
  • 最优性证明:反证法

特性

完备

最优

算法

开始

​ 将起点放入 open list

​ While 1

​ if open list 为空

​ 无可行路径,搜索失败

​ 取出 open list 中 cost=g(n) 最小的节点为 current

​ 将 current 放入 closed list

​ if current 为终点

​ 找到路径,结束

​ 遍历 current 的邻节点 neighbour

​ if neighbour为障碍物,跳过

​ if neighbour 已被 closed list 收录,跳过

​ if neighbour 在 open list 中

​ 更新 neighbour g(n)

​ else

​ 计算 neighbour g(n),加入 open list

结束

效果

A*

motivation

减少收录的栅格数目,增加搜索速度

在Dijkstra上的改进

  • cost:f(n) = g(n) + h(n)

  • g(n):当前路径,从起点到n的代价(距离)

  • h(n):启发式函数,一般取当前点到终点的距离

  • While true:

    1. 从open list选择代价最小的节点,收录进closed list
    2. 收录后遍历该节点的所有可访问邻节点,更新cost
  • 最优性保证:h(n) ≤ \le *h(n)

特性

完备

最优

算法

开始

​ 将起点放入 open list

​ While 1

​ if open list 为空

​ 无可行路径,搜索失败

​ 取出 open list 中 cost=g(n)+h(n) 最小的节点为 current

​ 将 current 放入 closed list

​ if current 为终点

​ 找到路径,结束

​ 遍历 current 的邻节点 neighbour

​ if neighbour为障碍物,跳过

​ if neighbour 已被 closed list 收录,跳过

​ if neighbour 在 open list 中

​ 更新 neighbour g(n)

​ else

​ 计算 neighbour g(n),加入 open list

结束

效果

Jump Point Search

有众多的算法能够在代价一致的均匀网格中(uniform-cost grid maps)搜索最短线性路径,常见的有A*,Dijkstra’s等。而JPS算法相比其他算法,省略了众多点插入和点删除的操作,有选择性地扩展必要的节点。因此有着很高的搜索效率。

原论文:Online Graph Pruning for Pathfinding on Grid Maps by Daniel Harabor and Alban Grastien

符号和术语

  • JPS算法工作于不定向的均匀网格地图中。
  • 每一次直线运动的代价为1,对角运动的代价为 2 \sqrt{2} 2
  • 涉及不可穿越节点(障碍物)的运动是禁止的。
  • y = x + k d ⃗ y=x+k\vec{d} y=x+kd 代表从 x x x 沿 d ⃗ \vec{d} d 方向运动 k k k 个单位可到达 y y y,当 d ⃗ \vec{d} d 为对角方向时,可分解为
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值