A*路径规划概念讲解
路径规划简介
- 图搜索法(Search-based path finding)
- 随机采点法(Sampling-based path finding)
- 动力学路径寻找(Kinodynamic path finding)
图搜索法(Search-bashed path finding)
- Dijkstra and A*
- JPS(Jump point search)
**基础设置准备:**因为在路径规划阶段是将机器人当作质点 为了达到这样的效果 我们一般在自主导航阶段都将障碍物进行膨胀(如图所示) 这样就可以将物体当作质点来处理了
图搜索法的发展
路径规划就是一步步探索 最后让机器人到达目的地的方法 仅仅是到达的话在理论上在足够长的时间下并且实际上确实能到达的情况下 是很简单的一件事情 但路径规划更看重的是一种优化的思想在后续进阶规划的时候会分析
无论是图搜索法还是随机采样法都是以树的形式展开的 首先将得到的地图栅格化 再将每个栅格看成一个点 将起始点与目标点标记下 图搜索的关键就是他是基于有继承关系的点(继承关系的意思是下一步的确定是基于上一步已经走完的点来进行确定)之间的一种规划 所以就可以把规划过程分为两步
- 机器人搜索身边的环境 (OPENLIST)
- 机器人选择代价最小的栅格进行移动 (CLOSELIST)
这就是图搜索最主要的概念 以不同的方法达到实现对代价的最小栅格的选择计算方法也就不同
- Dijkstra
- Heuristic search(启发式搜索)
- A*(Dijkstra + Heuristic search)
Dijkstra是一种类似于同心圆扩散的思想 它以起始点为中心 向外扩张
但是这样的思想在探索阶段浪费步骤过于多了 所以明显是需要一定指向型的 这时候就有了启发式搜索也叫贪心算法 启发式搜索的实现比较常见的是在规划代价中添加起始点与终点的曼哈顿距离/欧几里得距离/对角线距离 来实现让搜索更有目的性
A*就是将Dijkstra与Heuristic search进行叠加
ROS下二维A*仿真
A*伪代码:
资料来源:
Dijkstra/A*算法展示:
http://qiao.github.io/PathFinding.js/visual/
伪代码与部分图片:
深蓝学院