RoboDK的PRM运动规划器

PRM运动规划器

在工作中,我们并不总能保证自己的工作空间是整洁与自由开放的。这对于机器人的工作空间也是一样的道理。

有时候机器人真正可以工作的区域就是比我们原来计划的要小;或者有时候这个空间的正中间还有一根弄不走的柱子;又或者是一大堆无处可放置的箱子……

只要你的机器人在工作时有可能与环境内的其他物体发生碰撞,我们的运动规划器就能够帮上你的忙。只需使用一个按键,你就可以在RoboDK的PRM运动规划器中创建出一条避免碰撞的机器人路径。

那么它是如何工作的呢?下面我们就来解读一下它的运作原理,以及你需要在什么时候用到这个功能。

PRM是什么意思?

RoboDK的运动规划器采用了一种叫做“PRM”的算法。这些字母的全称是“Probabilistic Roadmap”(概率路线图)。这是一种很常见的运动规划类型,我们稍后会作详细介绍。

对于机器人而言,有很多种不同的路径规划算法都能够适用,包括复杂的、简单的,以及极为精准的。如果你对运动规划器完全不熟悉,可以参考我们上一篇文章——运动规划基础

以下就是PRM三个字母的具体解释:

(编者注:我们在上一篇博文中介绍过配置空间

字母P意为概率性的——“配置空间”内的点(即规划者用来确认机器人在工作空间内可以到达的一系列点) 由规划者随机选择。这样随机的配置即为“概率性的”,它相对立于“统一的”配置,即这些点被规律性地规划于整个工作空间中。

字母RM意为路径图。PRM算法是通过首先创建一个机器人工作空间的“路线图”来完成的。这个地图就像是你手机上的GPS导航一样。一开始的时候,你得花一些时间去生成这个地图,一旦生成后,你就不用再进行任何计算,而是可以很快捷地查询地图了。

结合这两者来说,PRM运动规划器具有以下两种属性:

  1. 它总能为你找到机器人可行的轨迹(如果该路线存在的话)。
  2. 它能够保存配置空间的路线图,让你更快速地进行查询。

这也是为什么PRM规划器如此受欢迎的两点原因。

PRM是如何运作的?

不像别的一些运动规划器,PRM算法把其工作划分成了两个阶段。在你使用RoboDK的这个规划器以前,你需要设置几个参数。

设置阶段

有三个参数,是你需要在使用这个规划器以前手动设置的。以下是在RoboDK中的设置方法及各项介绍:

  1. 样本数量(Number of samples)——你需要选择一个“样本”数量,让规划器在“建设阶段”(见下文)可以在机器人的工作空间中进行定位。样本越少,意味着建设阶段的任务完成越快,但这也会使路线图变得更为粗糙。
  2. 样本的连线数(Edges per sample)——每个样本拥有“连线”的最大数量。每条连线都连接着两个样本。同样地,连线数越少,意味着建设阶段越快,但这也会使路线图变得更为粗糙。
  3. 机器人步进角度(Robot step (deg))——当PRM算法在建设阶段运行时,它每次会小距离地移动机器人。这个距离就取决于机器人步进的设置。步进越大,意味着建设阶段越快,然而这样也会出现规划器无法注意到潜在碰撞的风险。

设置好这几项以后,你就可以点击“更新线路图”,并进入建设阶段了。

阶段1:建设(缓慢)

规划的第一阶段是要生成路线图。这可能会耗费很长时间(以100个样本和每个样本25个连线来计算,这大概需要15-30分钟)。而这就是规划器在建设阶段背后的运作方式:

  1. 规划器把一个“样本”放置在机器人工作区域内的自由空间中。
  2. 算法会对这个样本及其周围样本的路径进行测试。它通过设定的“机器人步进角度”来移动机器人,并检测是否有碰撞的情况。如果这个路径是可行的,它将把这作为一条“连线”加入到路线图当中。
  3. 当规划器对这个样本的测试达到最大连线数值时,它就会继而处理下一个样本。

现在你知道为什么这需要花很长时间了吧——因为这个算法需要测试许多的样本。但好在只要路线图创建完成,你就不用再费心进行计算了(除非你在环境中加入了新的物件)。

阶段2:查询(快速)

查询阶段正是你在使用运动规划器时常会用到的。你需要在规划器中设定两个目标(开始目标和结束目标)。规划器将会通过存档的路线图,在它们之间创建出一条免碰撞的轨迹。

以下就是规划器在这一阶段背后的运作方式:

  1. 你需要选择两个目标,并让规划器连接它们。
  2. 如果其中一个目标并不存在于已有的路线图上,规划器会把其新增为新的样本,并在这个新的点和周围已有的样本之间,对其创建一系列连线。
  3. 之后规划器会通过路线图来找到两个目标之间最短的路径。

通过使用细节充分的路线图,你就可以通过一个按键,创建出复杂而且免碰撞的机器人路径了。

我在什么情况下需要运动规划器?

通常,在RoboDK中最简单的运动编程方式,还是通过标准的关节运动、线性运动或圆弧运动指令来进行手动规划。这仍然是让机器人在两个目标之间移动的最快捷的方法。

然而,这些标准方法只适用于两个目标之间皆是自由空间的情况下。如果在两点间有任何物体,你可能就需要花费很多时间来设定中间的机器人目标,以避免碰撞以及机器人极限或奇异状态。

运动规划器让你得以使这一过程自动化。它会自动帮你找到一个好的运动计划,以在目标之间无碰撞地移动机器人。

然而,这当然还需要你按需权衡。因为在规划器为你找到可用路径之前,你必须先消耗大量时间以等待“建设阶段”的完成。不过,大部分情况下,这样的等待还是值得的。一旦你做好了前期设定,你就可以一边去做别的事情,一边等待它自己完工了。

(如视频不能正确加载请点击链接至优酷观看)

Leave a Reply

Your email address will not be published.