停车的难题
想象你左边正好有一个空车位,伸手就能够到的距离。你看得见它,中间也没有任何障碍。可你就是没法让车直接横着滑进去。你得先往前开,猛打方向盘,斜着倒车,再回正,一点点蹭进去。明明走一步就能跨过的距离,为什么要这么大费周章?
答案是机器人学里最优雅的思想之一:汽车能做的动作,比它能到达的位置要少。你的手握着方向盘、脚踩着踏板,能独立操控的只有两个量;而你想停进去的那个位置,却要用三个数字来描述——往东多远、往北多远、车头朝着哪个方向。你能直接下达的指令,和你最终想到达的状态之间,存在着一道真实的鸿沟。要填平这道鸿沟,就得跳一段小小的舞。
约束:你做不到的事
约束,说白了就是一条禁止某些运动的规则。要把它说清楚,我们用位姿来描述机器人的状态——也就是它的位置加上朝向。对于在平地上滚动的机器人,位姿由三个数字组成:x、y,以及它指向的角度 θ。所有可能位姿的集合,就是机器人的位形空间;我们说,一辆平地上的车,在最终能到达的状态上拥有三个自由度。
关键的分野在这里。完整(holonomic)机器人可以沿着其位姿的每一个方向自由运动:在任何一瞬间,它都能独立地前进、横移或原地旋转。它能直接操控的量的数目,恰好等于位形空间的维数。而非完整(nonholonomic)机器人能操控的量比这要少。它的轮子强加了一条它无法违背的速度规则——这条规则正是完整与非完整约束这个术语所命名的,也正是它禁止了横向滑动。
一辆普通汽车和一台差速驱动机器人(两侧各一个驱动轮,靠让两轮转速不同来转向)都是非完整的。它们都只能朝着——或背着——当前车头所指的方向运动,同时转弯。两者都没法瞬移到侧面。这个约束并不是说目标到不了:只要空间够大,两者都能到达任意位姿。它约束的是路径——你只能把那些被允许的动作一段段拼接起来,才能抵达。
为什么这是速度规则,而非一堵墙
微妙之处在于:非完整约束限制的是你的速度,而不是你的位置。一扇锁住的门是位置限制——有些房间你永远进不去。汽车的规则却不同:没有哪个位姿是它到不了的,只有某些方向是它此刻动不了的。轮子乐意往前滚、乐意原地打转,却拒绝横向打滑。这个拒绝,就是约束的全部。
我们可以把这个被禁止的方向,写成简洁的一行式子。设车头朝向角度为 θ,那么它的侧向就垂直于这个朝向。规则说:沿这个侧向的速度分量必须始终为零:
heading direction: ( cos θ , sin θ ) sideways direction: ( -sin θ , cos θ ) no-sideways-slip rule: x_dot * (-sin θ) + y_dot * (cos θ) = 0 ( x_dot, y_dot = the velocity components; the dot means rate of change )
让这个约束成为非完整约束——而不是一个可以化简掉的普通限制——的原因在于:你无法把它积分成一条纯粹关于位置的规则。它背后并不藏着任何形如「f(x, y, θ) = 常数」的方程。证明就是停车位本身:靠着前后挪动、一次也不横滑,你最终却能到达一个纯粹横向偏移的位姿。这些瞬时的禁令,加起来并不构成任何禁区。这正是一个真正非完整系统的标志,也是完整与非完整运动的核心。
为什么规划器在意:挪腾还是滑行
这个区别绝非纸上谈兵——它改变了机器人思考「如何从 A 到 B」的方式。完整机器人可以把自己当成一个自由漂浮的点来规划:朝目标画一条最短的无障碍直线,沿着它走,需要时随手调整朝向就行。全向驱动机器人——它用特制的滚轮实现一次性朝任意方向移动——做的正是这件事:它能直接平移挤进一个狭窄的卡位,而那里换作汽车则需要来回挪上好几把。
非完整机器人没法走这条捷径。它的规划器必须在路线上的每一点都遵守「不打滑」规则,因此只能给出轮子真正跟得动的路径——平缓的圆弧、前后腾挪,而绝不会有突然的横向跳跃。要到达一个仅仅偏在旁边的位置,可能需要一连串远比直线距离长得多的动作。
- 完整规划:从机器人到目标拉一条直线段,确认不撞障碍,然后滑过去。朝向可以在途中独立设定。
- 非完整规划:在可行的圆弧与前进/倒车段中搜索,把它们拼接起来,使轮子始终不打滑——也就是规划器算出来的那套侧方停车舞步。
- 无论哪种,一条无碰撞的路径最终都还得变成电机能执行的、平滑且带时序的轨迹——区别只在于:允许出现哪些路径形状。
给各种驱动方式归类
有了这个概念,常见的轮式平台就能干净利落地落到分野的两侧。非完整这一族包括普通汽车的阿克曼转向(前轮转动,就像真正的小汽车),以及像扫地机器人那样的差速驱动机器人:两者都靠改变朝向来转向,都没法横移。
完整这一族就是各种全向驱动。借助全向轮或带斜向滚子的麦克纳姆轮,这类平台能朝任意方向平移、同时还能旋转,从而把「去向」和「朝向」解耦开来。它们是仓库和竞赛机器人里的宠儿——凡是地面空间紧张、完全的运动自由能派上用场的地方,都有它们的身影。
同一副眼镜也能看到轮子之外。一台用离散落脚行走的足式机器人,表现得很像全向平台——它向旁迈步和向前迈步几乎一样轻松,所以在平地上,足式移动实际上是完整的。而一艘船或一架固定翼飞机,必须保持前进才能转向,则稳稳地站在非完整的那一边。这道分野与其说关乎轮子,不如说关乎一个简单的问题:你能否瞬间朝位姿可以变化的每一个方向运动?