夹爪必须回答的两个问题
想象一只机械臂伸过去拿一个咖啡杯。它的手,也就是末端执行器,必须到达空间中恰好正确的位置。但「正确的位置」比听起来更微妙,因为这里面其实藏着两个不同的问题。第一:手在哪里?第二:手是怎么倾斜的?你可以完美地悬停在杯子正上方,却仍然抓不住它——只要你的手指指向了错误的方向。
这两个问题是真正彼此独立的。你可以改变手所在的位置,却完全不旋转它;你也可以让手原地旋转,却一寸都不移动。机器人学者给每个问题各起了一个名字:「在哪里」的答案是位置,「朝哪个方向」的答案是朝向。接下来几乎每一章,其实都是在用数字精确地描述这两者之一或两者。
位置:用三个数表示在哪里
位置是简单的那一半,因为我们每天本来就这样思考。要说出某物在哪里,你给出它相对于参考系原点、沿三个互相垂直方向的偏移量:向右多远、向前多远、向上多远。这三个偏移量写成一个位置向量,通常记作 p,分量为 (x, y, z)。杯子位于 p = (0.4, 0.1, 0.2) 米;手需要到达同一个 p。
把位置想成信封上印的地址。它只钉住一个点,仅此而已。它不在乎物体是立着、侧躺,还是像陀螺一样旋转。一个点本身没有「朝向」,所以单靠位置永远无法告诉你怎么抓住某样东西,只能告诉你伸到哪里。
三个数,三种独立的移动方式:左右、前后、上下。每一种都是一个独立的自由度,是一个你可以转动而不影响另外两个的旋钮。这就是为什么我们说位置存在于三维之中。记住「三」这个数字,因为令人意外的是,朝向也恰好需要三个数,下一节会解释原因。
朝向:物体被转到了哪个方向
现在来看比较棘手的那一半。朝向回答的是「它转向了哪个方向?」最清晰的想象方法,是把一小组箭头粘到物体本身上:一支从夹爪手掌指出去,一支指向侧面,一支沿着手腕方向。当手倾斜、旋转时,这一小组箭头也随之倾斜、旋转。朝向,就是这些固定在物体上的箭头,相对于世界那组固定参考箭头,指向了什么方向。
为什么朝向也需要三个数?设想物体的箭头一开始与世界的箭头完全对齐。你可以让它们前后俯仰(pitch),左右翻滚(roll),以及左右偏摆(yaw)。三种独立的旋转,不多也不少,就足以达到三维空间中的任意朝向。所以一个完全自由的刚体总共有六个自由度:三个属于位置,三个属于朝向。
把朝向写下来有好几种不同的记法:一个旋转矩阵、一组欧拉角,或者一个单位四元数。它们只是同一个概念(物体被转到哪个方向)的不同字母表,各有各的长处。本节的重点仅仅是直觉;具体的记法细节留到后面。
位姿:两个部分合二为一
把这两半拼到一起,你就得到了整章里最重要的一个词:位姿。位姿是「在哪里、朝哪个方向」的完整答案——位置加朝向,打包成一个整体。当有人说「让夹爪到这个位姿」时,他的意思是两件事:到达这个点,并且以这个角度倾斜到达。一旦你知道了一个刚体的位姿,关于它摆放方式的一切就再没有遗漏。
由于位置带三个数、朝向带三个数,一个完整的位姿带六个数。这就是为什么你总能听到工程师说一只自由悬浮的机械臂或物体有「六自由度」。位姿永远是相对于某个参考系来表达的,所以同样自然的是描述一个参考系在另一个参考系下看到的位姿,例如从桌角度量出来的夹爪位姿。
pose = position (3 numbers) + orientation (3 numbers)
= where + which way
= 6 degrees of freedom for a free rigid body
mug pose: p = (0.4, 0.1, 0.2) m , upright
gripper goal: same p , fingers pointing down at the mug从这里开始,本章余下的部分都是对一个问题的长长回答:我们如何用数字把朝向写下来,让计算机能够存储它、组合它、并对它发号施令?位置很简单,不过是三个偏移量。朝向才是真正机巧所在,接下来几章会一个接一个地介绍旋转矩阵、欧拉角和四元数。请把位姿这幅图像记在心里,因为这些工具中的每一个,归根结底都只是填好位姿中朝向那一半的方法。