0. 前言

该系列笔记主要是记录在学习路径规划中的知识,其中主要侧重实际的应用,会记录实际中遇到的问题,对于细节部分介绍有些欠缺,力求能够将学习到的知识应用到实际中。

ROS导航包

整体的导航框架如上图所示,有感知、建图、定位、规划等模块,而规划还分成:全局规划局部规划,该文所讨论的内容主要是其中的规划部分,着重是关于全局规划的

在规划模块中首先明确经常容易混淆的几个概念:

运动规划Motion Planning

路径规划Path Planning

轨迹规划Trajectory Planning

1.路径规划+轨迹规划=运动规划

2.路径规划:已知几何约束的情况下(障碍物、地图信息),求解一条路径,也即是找到一条无碰撞的路径。

3.轨迹规划:已知运动学约束(时间约束、速度约束等)情况下求解轨迹。

当然也有的路径规划算法在搜索路径过程中也将动力学约束(Hybrid A*)考虑进去,本系列的所涉及的规划算法主要是路径规划,也会涉及一部分轨迹规划。

1. 作用

路径规划(path planning)目的是为了寻找成本最小的路径, 需要给出的条件包括: 地图, 起始地点, 目标地点, 成本函数.

2. 组成

路径规划组成

路径规划主要由两部分组成,前端是路径搜索,后端是轨迹规划,最后生成一条机器人可执行的路径。

路径搜索——在地图中,搜索出一条避开障碍物的轨迹;

轨迹规划(优化)——对搜索到的轨迹进行优化,从而符合机器人的运动学和动力学约束。

规划示意图

如上图所示,a路径为前端路径搜索得出的,为一条无碰撞的路径,b为a路径经过轨迹规划过的路径,该路径满足运动学和动力学约束,为一条机器人可执行的路径。

3. 分类

路径规划(搜索)的算法主要可分成这三类,后续的章节也是按照以下的顺序进行介绍的。

3.1 基于搜索的算法

DIjkstra、A*、JPS

3.2 基于采样的算法

PRM、RRT、RRT*

3.3 满足动力学约束的搜索算法

Hybrid A*

更多的内容可看下面的介绍:

DIjkstr和A*基本的流程相似,只是A*带有启发函数,是一种启发式搜索算法,下一章将对DIjkstr和A*作相关介绍。