基于采样的规划
基于采样的规划,是一类用来在“大到无法逐点检查”的空间里寻找路径的方法。这里说的空间,是机器人所有可能姿态的集合——它能摆出的每一种关节角度或位置的组合;对于一只有好几个关节的机械臂来说,这是一个巨大的、维度极多的区域,根本不可能一格一格地画出来。基于采样的规划器不去把整个区域切成细密的栅格,而是像往靶盘上掷飞镖那样随机撒下一些姿态,留下那些机器人不会撞到任何东西的姿态,再把这些零散的安全姿态逐步缝合成一张它可以沿着行走的网络。
这种做法之所以如此有效,是因为它绕开了“维数灾难”——当你试图给一个维度很多的空间铺栅格时,规模会爆炸式增长。一旦有了六个甚至更多关节,足够细以至于有用的栅格就需要天文数字般多的方格;而少数几个放置得当的随机采样,却能在根本不去逐一枚举的情况下,抓住自由空间的形状。每一个新的采样都会做碰撞检查,若安全,就用一些短连线连接到附近的采样上,而这些连线本身也会被检查为不发生碰撞,于是整张网络里始终只包含机器人真正做得出来的动作。
代价是:随机性放弃了一些保证。基于采样的规划器通常是“概率完备”的,意思是只要存在一条路径,给足够多的采样后它终究会找到——但“终究”不等于“立刻”,在任何一次单独运行中,即便路径确实存在,它也可能返回“无路径”,或者返回一条有效却并非最短的路径。这一家族里最有名的两位成员,是会为整个空间建一张可复用地图的概率路图,以及从起点向目标向外生长出单棵树的快速扩展随机树。
为了规划一只六关节机械臂如何伸到一堆杂乱箱子的后面,规划器会采样成千上万个随机的手臂姿态,丢掉那些会蹭到箱子的姿态,再把剩下的连接起来。一条从起始姿态通到抓取姿态的、由安全连线组成的连贯链条,就成了机械臂要执行的动作——而这一切,都无需对手臂那个庞大的姿态空间铺栅格就完成了。
随机姿态加上碰撞检查,在一个大到无法铺栅格的空间里搭起了一张安全网络。
这些方法是在“构型空间”(机器人姿态所构成的空间)里规划的,而不是在它周围那个普通的三维空间里——正因如此,它们才能应付有许多关节的机械臂。