完整约束与非完整约束
完整约束和非完整约束是限制机器人如何移动的两类规则,二者的区别在于:这条规则能不能归结为关于各部件位置的一种关系,还是只管住了速度——也就是机器人在每一刻该怎么动。完整约束是一种可以纯粹用各部件“在哪里”来表述的规则:它把某些位置锁在一起,因而真正缩小了机器人所能到达的位置的范围。非完整约束则更微妙——它限制的是机器人的瞬时运动,却不禁止任何目的地,于是机器人仍然哪儿都能到,只是永远没法笔直地朝那里走过去。
购物车就是再贴切不过的写照。商店里没有哪个位置是这辆车到不了的,所以它并不排除任何最终位置——可这辆车却无法直接向旁边平移;在每一刻,它都只被允许沿着轮子所指的方向滚动。要想横着挪进一道缝里,你只能前一下、后一下地来回挪,一边扭动轮子,直到一点点蹭过去。这条“不准横滑”的禁令就是一种非完整约束:一种对瞬时速度的限制,它永远无法被改写成一条只关乎位置的规则——而这正是它之所以“非完整”的原因。汽车和差速驱动机器人都活在同一条规则之下,这正是为什么平行泊车要小心翼翼地跳上一支舞。
为什么要费心区分这两者?因为它告诉你路径规划会有多难,也告诉你什么才算是完整约束的机器人。一台完整约束的机器人——比如全向驱动,它不受任何这种速度限制,能在任意一刻朝任意方向溜走——可以沿着最显而易见的直线被一径引向目标,因此为它规划运动很容易。一台非完整约束的机器人虽然同样能到达那个目标,却必须在一路上遵守它那些瞬时的限制,于是它的规划器得把一连串被允许的扭动和弧线串接起来。一台机器人面对的是哪一类约束,是工程师在决定该如何让它动起来之前,第一件要弄清楚的事。
同样要求向右移动一米,全向机器人径直滑过去就是了,而差速驱动机器人却必须先转身、再向前开、再转回来——两者都能到达那个点,但只有一个能笔直地朝它走过去。
目的地相同,抵达它的自由度却大不相同。
大致来说:完整约束的机器人能瞬时移动的方向数,与它的自由度数一样多;非完整约束的机器人,其瞬时可走的方向,比它能到达的位置所暗示的要少。