完整与非完整运动
“完整”和“非完整”描述的是机器人能多自由地运动这一深层差别:它能不能立刻朝它所指向的每一个方向行进,还是说在任意某个瞬间总有一些方向被封住——尽管它仍能通过来回腾挪最终到达那里。完整型机器人此刻可以随心所欲地移动——向前、向侧、斜着走,或原地转圈——没有哪个方向是禁区。非完整型机器人则做不到:在这一瞬间,某些运动根本无法实现,所以要往那些方向去,它必须先挪动、转向。
最贴近生活的画面是购物车与汽车之比。四个角都装有万向脚轮的购物车是完整型的——你可以让它笔直地横向滑进一个狭窄的缝里,完全不必转动车身。汽车则是非完整型的:它无法直接横向滑进一个停车位,尽管那个车位显然是能到达的,因为它的轮子只能前后滚动和转向。这正是为什么侧方停车要来回扭动:汽车必须把一连串合法的前进与倒车弧线,凑成它无法直接做出的那个横向平移。这种限制约束的是每个瞬间有哪些方向可用,而不是最终能到达哪些位置。
这种区别决定了规划器必须如何工作。对完整型机器人,规划器往往可以把机器当作一个能自由漂浮的点来画路线,因为它能沿任意曲折前进。对非完整型机器人,规划器必须在每一步都尊重那条运动规则——只生成机器真正能描出的路径,里面满是它的轮子所允许的弧线和倒车腾挪——这让规划真正变得更难。这些标签背后更深的含义关乎一种计数:当一个机器人在同一时刻能直接指挥的方向数,等于它独立的位形方式总数(即它的自由度)时,它就是完整型的;当它能指挥的方向数少于这个总数时,它就是非完整型的。
一台装有麦克纳姆轮的全向机器人,可以笔直地横着“螃蟹步”穿过门口(完整型);而同样宽度的差速驱动清洁机,则必须改为原地转身、再以一道小弧线向前滚动,才能到达同一个门口(非完整型)。
同一个缝隙,两套运动规则:直接滑进去,还是扭着挪进去。
粗略地说:完整意味着可控的运动方向数与机器人的自由度数相等;非完整意味着可控方向数少于自由度数,尽管所有位置仍然都能到达。