MoveIt ROS切除术1——核心planner

目前的RobotFlow-rFUniverse战术体系中不需要ROS,或者说我们在尽可能地减少ROS的影响,在这种情况下,我们要尽可能把原来ROS中的一些核心部件去ROS化。

如果去不了的,就考虑怎么在不影响RobotFlow体系的情况下共存。

首先下刀的,就是ROS最重要的库(可能没有)之一MoveIt。根据MoveIt Concepts,整个MoveIt框架里有大量的外层封装与ROS体系适配。因此我们要对MoveIt做切除,一个比较简单的策略是先把里面的规划核心库搬出来。然后参考MoveIt对ROS的封装,自己写一套封装。

截至2021年1月,MoveIt引入了5种外部规划器插件,其中最重要的是OMPL,别的有CHOMP,SBPL,trajopt,pilz_industrial_motion_planner。

主要的规划库 —— OMPL

OMPL全称是The Open Motion Planning Library,是一个包含了大量sampling-based算法的运动规划库,典型的如RRT,PRM及其变种在里面都有。 OMPL也有大量的实践是不依赖于ROS的,比如有现成的流程和V-REP,OpenRAVE,MORSE等整合。

OMPL目标是打造一个standalone的规划库,自己不带任何前端和collision detection,但官方的偏好是FCL和PQP。考虑到MoveIt也是用的FCL,那么这一套pipeline就保留下来。

次要的规划库 —— SBPL

SBPL的全称是Search-Based Planning Library,顾名思义,里面有大量search-based的算法,类似A*这样。这个库本身也可以独立于ROS编译。

特有的规划算法 —— CHOMP

CHOMP的论文很容易找到,就不说了,但是它的代码比较难找,因为to the best of my knowledge,论文作者并没有其官方实现,只有在MoveIt里有一个和ROS集成得很紧密的CHOMP实现。因此要把CHOMP拉出来,需要进一步地剥离ROS的痕迹。 这个算法自带碰撞检测,能规避掉障碍物,不过貌似调参可能有坑,可以看看这个issue

新加的规划算法 —— trajopt

trajopt也是一个基于论文出来的规划算法,论文作者放出了代码,可以独立编译。据说速度比OMPL和CHOMP快。

面向工业场景的规划库 —— pilz industrial motion planner

这个motion planner是最近加入MoveIt的规划器,不过从它的文档来看,更多的像是一个轨迹生成器。

围绕planner的接口

  1. 仿真环境分为visual environment,以及collision environment。送入planner的是collision environment,这也就要求仿真器能把所有collision的状态都返回回来。
  2. 仿真器的规划需要一个规划组,这个规划组的定义可以参考moveit_config,或者直接用(毕竟那个assistent还是比较好用的,而且assistent有了之后也可以暂时不考虑kinematics solver)
  3. 有了collision state,机器人的规划组,我们就能使用规划算法了。