你自己的手臂早已懂得答案
坐着别动,先定下三个角度:肩膀转多少、手肘弯多少、手腕翘多少,然后保持不动。此刻你的指尖正停在房间里某个确定的点上——你甚至可以用笔在那里做个记号。你并没有去想该把指尖放到哪里;你只是定好了角度,位置就自然产生了。这个每天都在发生的小奇迹,正是我们所说的正运动学:已知每个关节的角度,算出手臂末端会落在哪里。
机器人手臂就是同一幅画面,只是被剥到只剩金属骨架。它是一串坚硬的连杆(大臂、小臂),由关节处的电机连接起来。把每个关节角度告诉机器人,它的末端——也就是末端执行器,无论是夹爪、焊枪还是吸盘——就只可能停在一个确定的位置上。正运动学就是把这串角度变成一个位置和姿态的配方。
从关节空间到任务空间的映射
工程师喜欢给这套计算的两端各起个名字。所有关节角度组成的完整列表,是关节空间中的一个点:如果你的手臂有六个电机,把这六个数字一次性拍个快照,就是这个六维「关节可摆出的姿势」空间里的一个点。而夹爪最终停下的地方——它的位置以及朝向——则是任务空间中的一个点,也就是真正干活的那个普通三维世界。
有了这两个名字,正运动学就只是一个映射:你给它关节空间里的一个点,它还你任务空间里的一个点。让这个方向如此友好的,是这个映射是一个真正的函数——一个输入对应一个输出,毫不含糊。喂进去一串角度,绝不会出现「到底是哪个位置?」的疑问。连杆是刚性的,角度是定死的,于是几何只留下唯一一个可能的答案。
用手算一条两连杆手臂
我们用一个最小却有趣的机器人把它讲具体:一条平放在桌面上的两连杆手臂,就像从上往下看一只弯着的手肘。第一根连杆长 L1,在肩膀处以角度 θ1 转动,这个角从 x 轴起量。第二根连杆长 L2,在手肘处以角度 θ2 弯折,这个角相对于第一根连杆来量。我们想求出指尖落点的 (x, y)。
一段一段地走。手肘在第一根连杆的末端,沿方向 θ1 走出 L1 的距离,所以手肘位于 (L1·cos θ1, L1·sin θ1)。从手肘出发,第二根连杆沿着叠加后的角度 θ1 + θ2 指出去——因为它的弯折是叠在肩膀已经转过的角度之上的。把第二段加上,你就到达了指尖。沿着手臂向外走时,角度只是一路累加上去;这种叠加正是整个思想的核心。
x = L1*cos(t1) + L2*cos(t1 + t2) y = L1*sin(t1) + L2*sin(t1 + t2) # try L1 = L2 = 1 # t1 = 0, t2 = 0 -> arm straight out # (x, y) = (2, 0) # t1 = 90, t2 = 0 -> straight up # (x, y) = (0, 2) # t1 = 0, t2 = 90 -> forearm bent up # (x, y) = (1, 1)
代几个数进去,你就能感觉到这个函数在呼吸。手臂伸直(两个角都为零)够得最远,伸出两个连杆的长度。把手肘弯成直角,指尖就缩回到 (1, 1)。这里没有任何比正弦、余弦更难的东西,可你已经为一个真实的——尽管很小的——机器人算出了正运动学。
为真实机器人堆叠坐标系
我们那条平面手臂之所以靠加角度就能蒙混过关,是因为一切都待在同一个平面里。真实的手臂会在三维空间里扭转、倾斜,所以我们需要一套永远不会跟丢的记账技巧。这个技巧就是给每根连杆粘上一个小小的坐标系——三根标着「前、左、上」的轴——再描述每个坐标系相对于它前一个坐标系是怎么摆放的。
每一句「这个坐标系相对于上一个怎么摆放」,都被一个叫齐次变换矩阵的单一对象捕捉下来——一个紧凑的 4×4 方格,把一次旋转(下一根连杆朝哪个方向扭)和一次平移(沿连杆走多远)打包成一个步骤。今天你不需要亲手去算它;只要相信一个矩阵的意思就是「先转这么多,再走这么远」。
现在就是回报时刻:要找出夹爪在哪里,你把这些矩阵从肩到腕依次相乘,每个关节一个。每一次相乘,都是你刚才用手做的角度叠加在三维里的版本——它把你从一根连杆的坐标系带到下一根。乘出来的积,是一个最终的变换,它精确地告诉你末端执行器在世界中处于什么位置、朝向如何。这个一步步累乘的过程,配上一张记录连杆长度与扭转的表格,正是真实控制器每秒要算许多次的东西。
两种语言,以及为什么下一个问题更难
退一步你会发现,现在你有两种方式描述同一个机器人。在关节空间里,你说的是电机的语言:「肩膀 30 度,手肘 45 度。」在任务空间里,你说的是世界的语言:「夹爪在这个点,朝着这个方向。」两者描述的是同一个构型;它们是同一时刻的两种方言。
正运动学就是那个单向的翻译——从电机的语言翻到世界的语言——而且翻得毫无差错,因为几何已被完全确定。你用一串关节角度来规划一次运动,就总能精确读出每一瞬间手会在哪里。正是这种可靠性,让仿真器、安全校验和动画全都倚赖它。
但真实任务通常是从世界的语言开始的:「把夹爪放到这里。」于是你需要反向翻译——挑出能命中指定点的关节角度。这趟反向之旅,逆运动学,正是我们一直暗示的麻烦所在:一个目标可能有好几种「抬肘」或「落肘」的姿势都能够到,也可能一种都没有——如果它落在手臂够不着的范围之外。正因为你在这里掌握了简单的那个方向,你现在已经完全准备好去体会,为什么困难的那个方向值得拥有自己专门的篇章了。