运动规划之OMPL-I

1.Walk To算法

  • 直接朝着目标走,直到到达目标点为止。
  • 很多 RPG 游戏就采用了这种简单的算法
  • 最优性,但不完备

2.Bug算法

Bug算法就是为了应对一些简单的障碍物而提出的,其说明如下:

沿着起始点与终点的连线M运动;

遇到障碍物,则绕着障碍物顺(或逆)时针运动,直到回到连线M。

3. 蚁群算法

蚁群算法(Ant Colony Optimization)其实是一种优化算法,但完全可以直接用到路径规划问题上。这种算法能够得到既完备又最优的路径,但由于收敛速度不快,并未得到太广泛应用。

 

4. 人工势场法

势场对应着能量分布,最常见的势场就是重力场了,我们在不同高度会拥有不同重力势能。斜面上的球会自然沿着斜面往下滚。

受此现象的启发,人们便想到人工势场法,人工添加势场函数,让目标点处于谷底,距离目标点越远的势场越高,同时,为了避免发生碰撞,可以在障碍物四周添加排斥势场(障碍物处势能最大)。

 

人工势场非常直观,且对运算量要求不高,可以跟机器人的控制相结合。实验室的师兄们曾在中型组足球机器人比赛中使用过这个方法。

当然,势场法的一个问题就是没办法避开局部极小值问题,所以该方法是不完备的,同时也是非最优化的。

5. 图搜索

另外有一大类算法则是先将运动规划问题转换成图(graph),之后利用各种图搜索算法解决问题。这里简单介绍一下图搜索算法。

图是图论(Graph Theory)里的一个概念,它表示一类用若干离散节点(vertices、node、points)与连接节点的边线(edges,lines,arcs)表示的拓扑结构。

 对于在一个图上寻找到一条最短路径的问题,图论中已经有很多方法了,其中在规划领域最著名的两个分别是Dijkstra算法和A*算法。

6. 空间离散法

空间离散法就更简单了,按照某一尺寸划分网格,包含障碍物的网格认为不可通过,这样便得到一个网格图,之后按照四连通或八连通的方法得到一个图。

显然如果网格尺寸太大的话,可能会造成连通路径堵塞,因此该方法是分辨率完备(Resolution Complete)且最优的。

   这个算法在即时战略游戏里面用得非常多,虽然我不知道红警是不是这样实现的,但我知道开源红警OpenRA(openra.net)是采用的空间离散+A*算法(github上有源码)。

7. 随机路图法PRM

随机路图(Probabilistic Road Maps,PRM)就是在规划空间内随机选取N个节点,之后连接各节点,并去除与障碍物接触的连线,由此得到一个随机路图。

显然,当采样点太少,或者分布不合理时,PRM算法是不完备的,但是随着采用点的增加,也可以达到完备。所以PRM是概率完备且不最优的。

  除了上述方法外,还有很多其他构建搜索图的方法,如Voronoi图法、Cell Decomposition等。

8. 快速扩展随机树法RRT

除了基于图搜索的方法,还有另外一大类基于树状结构的搜索算法,其中最著名的就是快速扩展随机树法(Randomly Exploring Randomized Trees,RRT)了。

RRT算法是从起始点开始向外拓展一个树状结构,而树状结构的拓展方向是通过在规划空间内随机采点确定的。与PRM类似,该方法是概率完备且不最优的。

9. 拓展到机械臂(CSpace+多维)

机械臂与平面机器人的区别主要在两个部分,一个是规划空间不同,另一个是机械臂往往具有更高的自由度。

  • 构形空间C-Space

以上算法都将机器人看做一个点,要想对机械臂进行规划,我们就应该想办法将机械臂用一个点来描述。于是,我们就要简单说一下构形空间(Configuration Space,或C-Space)了。

构形空间,顾名思义就是与机器人构形相关的空间了。

对于平面移动机器人,由于它具有一定尺寸,所以也不能直接当做点来处理。直观的看,如果我们把机器人当做一个点,就应该相应地将障碍物进行膨胀,这个膨胀处理的拓扑方法叫做闵科夫斯基和(Minkowski Sum)

 

但是,机械臂的构形空间就没办法简单地用闵科夫斯基和来处理了。我们知道,用广义座标(通常为各关节角度)可以将机械臂用一个点描述,如六自由度机器人可用六维向量空间的一个点(θ1,θ2,θ3,θ4, θ5, θ6)描述。

但是,相应的障碍物的描述就比较麻烦了,由于机械臂逆解存在多解和奇异等问题,所以从工作空间到构形空间的映射是非线性的,目前没有很好的方法将工作空间的障碍物直接映射到构形空间。对此,一般做法是对构形空间离散化,对构形空间的每个网格判断是否存在障碍物。

 

开源运动规划库 (OMPL). 

接上文,而OMPL (Open Motion Planning Library), 开源运动规划库,就是一个运动规划的C++库,其包含了很多运动规划领域的前沿算法。虽然OMPL里面提到了最优规划,但 总体来说OMPL还是一个采样规划算法库 。而采样规划算法中,最出名的莫过于 Rapidly-exploring Random Trees ( RRT ) 和 Probabilistic Roadmap ( PRM )了, 当然,这两个是比较老的,还有很多 其他 新算法。 

具体基本教程参考这里:https://www.cnblogs.com/uestc-mm/p/15885485.html 

Reference

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章