齐次变换矩阵
齐次变换矩阵是一张 4x4 的数字方阵,它一手抓住了「一个参考系如何关联到另一个参考系」的全部信息:既包括它是怎么转动的,也包括它在空间里平移了多少。一个参考系无非是一组约定好的坐标轴加一个原点,比如“桌子的那个角”或者“机器人的手腕”。这个变换把旋转部分(第二个参考系相对第一个扭转的方向)和平移部分(它的原点离得多远)打包进同一个整洁的对象里。把一个点的坐标喂进这张矩阵,它就会以另一个参考系来表示重新冒出来,仿佛你把这个点从一个视角搬到了另一个视角。
把旋转和平移一起塞进一张 4x4,正是“齐次”这个词所指的巧妙手法。单论旋转,可以用乘法完成;可一旦要加上平移,通常还得另做一步加法。通过多添一行、并把位置看成带有一个“幽灵第四坐标”一,这张矩阵就能让一次乘法同时把两件事都办了。真正的好处在于链式相乘:如果你知道从桌子到机器人底座、从底座到手臂、再从手臂到夹爪各自的变换,只要把这三张矩阵按顺序乘起来,就能得到从桌子径直到夹爪的变换。机器人正是这样,一路穿过每个关节,算出自己的手在世界里的位置。
数学家把所有这些有效的刚体变换的集合称为 SE(3),即特殊欧几里得群——它不过是“一个固体物体在不弯折、不拉伸的前提下能被挪动的每一种方式”的精确叫法。在软件里,一整棵这样的变换树描述着机器人的身体及其周围环境,而像 ROS 这样的系统会把它们组织在一棵变换树里,于是机器人的任何部位都能发问“从我的视角看,那个东西在哪儿”,并得到答案。
为了弄清手腕相机看到的一颗螺丝相对于桌子在哪里,机器人把“桌子到底座”“底座到手腕”“手腕到相机”三个变换相乘,再把结果作用到这颗螺丝的坐标上。
把几个变换链式相乘,一次乘法就回答了“这个东西在那个参考系里位于何处”。
这种 4x4 的形式主要是为了打包方便;左上角的 3x3 块是旋转,最右一列是平移,而最底下一行固定为 0 0 0 1。