运动规划(Motion Planning):要让一个机器人实现运动规划,需要先将机器人抽象到构形空间(C-Space)。MoveIt就可以帮大家把这些工作给做了,只需提供机器人URDF模型,就可以调用几大运动规划库的规划算法(如OMPL,SBPL,CHMOP),自动生成机器人运动轨迹。之前跟着教程走的时候,很多内部结构不是很清晰,它就像是一个黑匣子,只管启动launch,就会返回机器人所需的运动路径,置于它使用的到底是什么运动规划库,什么路径规划算法,这些细节都没有关注过。
运动规划器 (motion planner):MoveIt! 通过插件机制(plugin interface)与运动规划器(motion planner)进行交互,可以使用多个库的不同运动规划器,使得 MoveIt! 扩展性更强!默认使用的运动规划器是 OMPL(Open Motion Planning Library) 库。如下图所示,Planning Pipeline提供了很多规划器的接口,通过导入planning scene 导入octomap作为机器人环境信息
https://blog.csdn.net/qq_34935373/article/details/104794634,然后通过路径规划算法,完成避障的路径规划。
路径规划算法:先放上官方链接,方便查看 http://ompl.kavrakilab.org/planners.html
OMPL是基于采样方法的运动规划库,其规划算法可以分为两类:
- Geometric planners
- Control-based planners
特性:基于采样,概率完备,非最优/渐进最优
1. Geometric planners
- 多查询规划器
这些规划器构建了一个可用于多个查询的整个环境的路线图。
- 概率路线图法
这是基于采样的算法。使用一个线程来构造路线图,而另一个线程则检查路径是否存在于起始状态和目标状态之间的路线图中。OMPL包含一些PRM的变体:
- LazyPRM
这个规划器类似于常规的PRM,但是“懒惰地”检查顶点或边的有效性,也就是说,只有当它是候选解决方案路径的一部分时。
- PRM*
当常规PRM尝试将状态连接到一个固定数量的邻居时,PRM*随着路线图的增长而逐渐增加连接尝试的次数,从而提供对最优路径的收敛性。
- LazyPRM*
带有延迟状态有效性检查的PRM*版本。
- SPArse Roadmap Spanner algorithm (SPARS)
SPS是一个提供渐进性的计划器。近-最优性(在最优解的常数范围内的解),并包含有意义的停止准则。虽然它不能保证最优性,其收敛速度往往远高于PRM*。
- SPARS 2
SPARS 2是SPS算法的变体,它通过类似的机制工作,但使用不同的方法来识别接口和通过所述接口计算最短路径。
- 单查询规划师
这些规划器通常会生长一棵由有效运动连接的状态树。这些规划器在他们用来控制的启发法上有所不同。
- 优化规划器
近年来,提出了几种基于抽样的规划算法,这些算法仍然提供了一些最优性保证。通常,最优解被假定为最短路径。在OMPL中,我们有一个更通用的表示状态和路径代价的框架,它允许您,例如,最大化路径上的最小间隙,最小化机械工作,或一些用户定义的任意优化准则,器使用这个一般的成本框架,但是要记住,收敛到最优性是无保证当对路径长度以外的内容进行优化时。
OMPL如何选择几何规划器
如果您使用
ompl:geometric::SimpleSetup类(强烈推荐)来定义和解决您的运动规划问题,然后OMPL将自动选择适当的计划器(除非您已经明确指定了)。如果状态空间使用的是任何内置状态空间,那么它将使用
LBKPI如果可以使用双向规划器,否则它将使用
KPIECA。这些默认配置已经被证明在许多现实世界的运动规划问题上一直工作得很好,这就是为什么这些规划器是默认的选择。如果状态空间没有默认配置,
RRTConnect或正常
RRT将被使用,这取决于是否可以使用双向规划器。
2. Control-based planners
如果所考虑的系统受到不同约束,则使用基于控制的计划器。这些规划者依靠
状态传播而不是简单的插值来产生运动。这些规划器不需要
转向功能,但是如果用户实现它,所有这些(KPIECA除外)都将使用它。下面的前两个规划算法是上面相应的
Geometric planners的替代
OMPL如何选择基于控制的计划器
如果您使用
ompl::Control::SimpleSetup类来定义和解决您的运动规划问题,然后OMPL将自动选择适当的计划器(除非您已经明确指定了)。如果状态空间使用的是任何内置状态空间,那么它将使用
KPIECA。这些默认配置已经被证明在许多现实世界的运动规划问题上一直工作得很好,这就是为什么这些规划器是默认的选择。如果状态空间没有默认配置,
RRT会被使用。
OMPL自定义运动规划算法的方法
自从看了交大邱博的路径规划的一个视频之后(如下其中之一的截图),才知道这里面包含的方法有很多,才发现ROS是多么的强大,帮我这种小硕铺了一条康庄大道,很多东西直接拿来就用了。
当然对于大神来说,折腾总是在路上的,看了那么多算法,虽然很多都不适用于机械臂这种高维空间的路径规划,但是还是免不了想试试看自己导入一些算法。一番搜索,发现虽然尝试的人貌似很少,可还是有大神以及做了:
https://blog.csdn.net/sinat_23853639/article/details/87854461,https://blog.csdn.net/weixin_36965307/article/details/105312020前提就是不能以Binary的方式在ROS中安装MoveIt!,而以source的方式来安装,就可以将自己写的运动算法(比如在OMPL中的算法基础上进行修改)集成到MoveIt!中。先占坑!!!
评论(1)
您还未登录,请登录后发表或查看评论