愿你前行的道路有群星闪耀。愿你留下的足迹有百花绽放。

基于采样的路径规划

采样基础:

image

不用显式的构造机器人的工作空间及其边界,只需要指出单个机器人是否发生了碰撞

image

完备的规划器、概率完备的规划器、解析完备的规划器(和概率完备的规划器类似,但采样是基于固定的栅格)

Probabilistic Road Map(概率路图)

image

PRM的两个阶段:

  • 学习阶段:随机撒点,生成一个图结构

    • 采样:基于一定的采样规则,随机采样;删除有障碍碰撞的点
    • 连接(起点和终点要连接):过远的点之间不用连接,删除掉连接有障碍物碰撞的线段
  • 查询阶段:快速找到路径(利用A*和Dijkstra算法)

    image

优点:概率完备、效率高

缺点:要求先学习再查询(在学习阶段的时候没有把生成路径作为重点)

Lazy collision-checking(惰性障碍检测)

image

障碍检测是一个费时操作

惰性障碍检测:随机采点和生成线段时不考虑障碍(Lazy)

image

生成路径,然后检测路径上的边和点是否无障碍碰撞

image

删除有碰撞的点和边,重新生成路径(相当于减少了不必要的障碍物检测)

Rapidly-exploring Radom Tree(快速搜索随机树)

增量式构建搜索树,终点加入搜索树时,就可以构建出一条路径

image

第一步:先随机采一个点A,连接起点O和点A,从起点O处向点A的方向移动一定距离,得到一个新的点B。如果起点O和点B连线没有障碍物,则点B连同线段OB加入到树中。

image

  • 随机采样得到点XrandX_{rand}
  • 找到树中离点XrandX_{rand}最近的点XnearX_{near}
  • 从点XrandX_{rand}向点XnearX_{near}移动一定距离StepSizeStepSize,得到新的点XnewX_{new},和点XnewXnearX_{new}与X_{near}的连线EiE_i
  • 如果XnewX_{new}EiE_i没有与障碍物碰撞的话,将它们加入到树中
  • 当拓展到终点或者其附近时,可以直接利用树的性质,得到路径(找父节点)

image

缺点:

改进RRT的几个核心函数,便可以改进RRT

image

Kd-tree——改进Near( )函数

image

image

双向RRT(从起点和终点同时生成树),当两个树连接时就找到了路径

双向RRT可以解决一部分narrow passage的情况

Rapidly-exploring Random Tree*(保证了全局最优性)

image

image

image

image

RRT*和RRT的不同之处在于:

  • XnewX_{new}CollisoinFreeCollisoinFree时,RRT直接将XnewX_{new}添加到搜索树里

  • XnewX_{new}CollisoinFreeCollisoinFree时,RRT*将进行一些处理,再把XnewX_{new}添加到搜索树中

    • 采用一定的方式包络XnewX_{new}的邻域,得到处于邻域内的一些点(NearC()NearC()

    • 选择了从起点到XnewX_{new}距离最近的路径,并将路径上的该点作为XnewX_{new}的父亲节点

    • XnewX_{new}以及边添加进搜索树中

    • 剪枝:修改搜索树的连接(rewire()rewire()

      看能否通过走XnewX_{new}来减小邻域内其他节点的代价

RRT*在找到路径后,仍会不断进行剪枝的过程,优化路径

Kinodynamic-RRT*

image

image

考虑机器人的动力学约束(改进Steer()函数)

Anytime RRT*

优化和改进的方法

Informed RRT*

image

image

Informed RRT*将采样过程围绕在生成的路径的附近

  • 路径生成部分(和RRT*一样)
  • 当路径生成后,把采样范围限制在椭圆里面(把起点和终点作为椭圆的两个焦点,把路径的代价作为2a2a
  • 路径不断优化,采样范围进一步收缩。

Cross-entropy motion planning

image

image

  • 路径生成部分(和RRT*一样)
  • 这些节点构成了一个多高斯模型,这个多高斯模型的每一部分都以节点为均值,指定的方差为方差(在每个圈内进行采样),得到几条新的路径
  • 规定下一轮的采样空间:对多个轨迹的多个节点求均值,这些均值又构建出一个新的多高斯模型,重复上一步

image