本文中我们不对拓扑学中的相关概念进行阐述,并假设读者对三维空间中的刚体运动以及机器人有一定了解。
机器人上各点位置的一个完整规范被称为位形(Configuration),所有可能的位形组合的集合被称为位形空间。我们将用 Q Q 来表示位形空间,用 W W 表示工作空间, 用 Oi O i 表示工作空间中的障碍物。我们使用 A A 来表示机器人,那么,处于位形 q q 的机器人所占据的工作空间可被表示为 A(q) A ( q ) 。会与障碍物碰撞的所有位形所组成的集合成为位形空间障碍(Configuration Space Obstacle),其定义如下:
势场法是一种高效的在线规划方法。势场法背后的基本思想是:把机器人当作位形空间中处于人工势场 U U 影响下的一个点。势场 U U 的构造如下:机器人能够被吸引到最终位形 qf q f ,同时因受到排斥而远离障碍区域 QO Q O 的边界。如果可能的话,构造 U U 使得势场 U U 中只有单个全局最小值,没有局部最小值。规划过程以增量方式发生:在每个位形点 q q 处,由势场产生的人工作用力定义为该势场的负梯度 −∇U(q) − ∇ U ( q ) ,表示最有可能的局部运动方向。
势场是一种合力场,它由引导机器人到达 qf q f 的引力分量,以及排斥机器人以远离 QO Q O 边界的斥力分量组成:
引力场需要满足几个条件:
我们也可以选择将二次型势场和圆锥形势场结合起来:当 oi o i 远离目标位置时,使用圆锥形势场;当 oi o i 离目标位置比较近时,使用二次型势场。当然交界处需要对梯度有定义:
斥力场应该满足若干标准。它们应该使机器人排斥并远离障碍物,并且,当机器人离障碍物比较远时,障碍物对机器人运动的影响应该很小或者没有。需要注意的是:仅对DH 坐标系原点定义斥力场,我们无法确保永远不发生碰撞。
我们定义 ρ0 ρ 0 为一个障碍物影响的距离。一个标准的势场函数由下式给出:
如果障碍物的形状不是凸形的,那么距离函数 ρ ρ 不一定在每个地方都可微,这意味着力向量不连续。有多种方法可以解决这个问题,其中最简单的一种是,确保不同的障碍影响区域不重叠。因此,仅仅对DH坐标系的原点定义斥力场并不能保证机器人不与障碍物发生碰撞。为解决该问题,我们可以使用一组浮动斥力控制点(Floating Repulsive Control Point) ofloat,i o f l o a t , i 。通常在各个连杆上设置一个。浮动控制点的定义为连杆边界上距离任何工作空间障碍物最近的点。也可以将非凸障碍在建立势场前将其分解为各个凸的部分。
我们已经展示了如何在机器人的工作空间内构建势场,从而在机器人的手臂的DH坐标系原点 oi o i 处诱导生成人工力(Artificial Force)。下面我们介绍如何将这些力映射到关节力矩。
如果用 τ τ 来表示由施加在末端执行器上的工作空间力 F F 诱导生成的关节力矩向量,那么
作用在机械臂上的总人工力矩源自所有引力和斥力势场的人工力矩之和
从初始位形开始,在负梯度方向(尽快降低势能的方向)上前进一小步。这提供一种新位形,然后重复该过程,直至达到最终的位形。大致过程如下:
使用该算法必须要做出很多设计选择。 ξi ξ i 控制着对点 oi o i 引力场的相对影响。没有必要将所有 ξ ξ 设置为同一个值。通常我们为一个点分配较大权重,用来生成一个跟随引导者(follow the leader)类型的运动,然后机器人重新定位自身是其他点到达最终目的。 ηi η i 控制着对点 oi o i 斥力场的相对影响。对于靠近机器人目标位置的障碍物,我们通常将对应的 ηi η i 值设置得很小。 ρ0 ρ 0 定义了障碍物的影响距离。我们可以对各障碍物定义不同的取值。
困扰所有梯度下降算法的一个问题是势场中可能存在局部最小值。为解决该问题,人们已经开发了诸如模拟退火等概率方法。类似地,机器人路径规划领域也开发了随机化方法。
概率规划属于离线规划,它们需要预先知道关于机器人工作空间中障碍物的几何形状和位置信息。概率规划是一类非常高效地规划方法。它们属于基于抽样(Sampling-based)方法族。其基本思想是:确定一个能充分表示 Qfree Q f r e e 连通性的有限避碰位形集合并利用该集合建立用于解决运动规划问题的路径图。实现该思路的途径是在每一步迭代的过程中抽取一个位形样本并检查是否会使机器人与工作空间内的障碍发生碰撞。如果发生碰撞,则丢弃该样本;否则将其加入当前路径图中并于其它记录的位形建立可行连接。
具体策略有赖于一些特别的设计,区别主要体现在用什么样的标准选择样本进行碰撞检测。比如通过规则的栅格采样。但是更可取的办法是随机采样。
为了解决多个路径规划问题,一种方法是构造 Qfree Q f r e e 的一个表示,当遇到新的路径规划问题时,这个表示可被用来快速生成路径。此类的一种表示被称为位形空间路线图(Configuration Space Roadmap)。此时,规划算法包括三个阶段:
我们将介绍概率路线图(Probabilistic Road Map, PRM)。 PRM是由在节点处相连的简单曲线段或者弧线段组成的一个网络。其中每个节点对应一个位形。两个节点之间的每个弧线段对应两个位形之间的无碰撞路径。下面将详细介绍构建PRM的过程。
Step 1: 采样
生成一组随机位形作为路线图中的节点。最简单的方法是对位形空间采用均匀随机采样,然后丢弃 QO Q O 内部点位形样本。该方法的缺点是: Qfree Q f r e e 中任何特定区域的样本数目与该区域的体积成正比,因此不太可能在狭窄的通道内进行。这被称为狭窄通道问题(Narrow Passage Problem)。
Step 2: 连接
使用一个简单的局部路径规划算法,来生成连接位形对的路径。典型的方法是尝试把各个节点与其 k k 个最近邻节点连接起来。
Step 3: 增强
加入新的节点和弧线,把路线图中不相连的元素连接起来。增强的目标是最大程度地把不相交的单元连接起来。一种增强方法是:将两个不相交单元中的节点连接起来,采用较复杂的规划算法。另一种方法是:将更多随机节点添加到路线图中。
PRM方法不利的一面在于它只是概率完全(Probabilistically Complete)的,即当求解规划问题的计算时间趋于无穷大时,求得一个解(如果存在)的概率趋于1。这意味着:如果问题无解,算法运行时间不确定,需要加一个最大迭代次数以保证算法终止。
与PRM这样多重查询规划方法不同,单次查询的方法针对快速求解规划问题的一个特定情况。这种方法并不依赖产生一个尽可能表征自由位形空间的连通的路网图,而是在 Qfree Q f r e e 中探索一个与有把握解决该问题相关的子集。这使得计算量大幅减少。
单次查询方法的一个典型例子是双向RRT算法,该方法使用一个被称为RRT的数据结构,记为 T T 。一个RRT的增量扩张依靠每步迭代中重复一个随机化的程序来实现。如下图所示:
Step 1: 采样
依据一个空间中的随机采样生成随机位形 qrand q r a n d (与PRM类似)。
Step 2: 连接
在 T T 上找到最靠近 qrand q r a n d 的位形 qnear q n e a r ,并在从 qnear q n e a r 到 qrand q r a n d 的连线上找到一个候选点 qnew q n e w ,使之到 qnear q n e a r 的距离为预先给定的值 δ δ 。接下来进行碰撞检测,如果 qnear q n e a r 到 qnew q n e w 的连线段属于 Qfree Q f r e e ,则将该连线段和 qnew q n e w 添加到 T T 中。
注意 qrand q r a n d 并未被添加到 T T 中,它只是标识 T T 的生长方向。为加速搜索过程,双向RRT方法采用两个分别以 qs q s 和 qg q g 为根节点的树 Ts T s 和 Tg T g 。迭代到一定步数的时候,算法进入下一步:
Step 3: 两棵树连接
通过产生一个 qnew q n e w 作为 Ts T s 的生长点并尝试将 Tg T g 连接到该点。此时的计算步长是可变的而非常数 δ δ 。
双向RRT方法也是概率完全的。对于不满足自由运动假设的机器人——比如非完整约束的机器人——基于RRT的方法也是适用的。
机器路径规划方法还包括基于回缩的路径规划(Planning via Retraction)方法和基于单元分解的路径规划(Planning via Cell Decomposition)方法等,此处不作介绍。