矩阵完全一样,输出也完全一样,为什么会有映射和算子两种解读方法?
前文《矩阵乘法的本质》讲到“矩阵乘法就是线性变换”这个核心思想,但是在学习机器人学中的矩阵乘法时,可以看到有两种理解矩阵乘法的角度,分别是“映射”和“算子”。
“映射”指的是同一个向量在两个不同坐标系下的读法,“算子”指的是同一个坐标系下,把一个向量搬到另一个位置的那个变换本身。
既然是同一个矩阵,那为什么有两种读法呢,本文将重点讲解这一问题。
映射与算子
不论是映射还是算子,其实都与“矩阵乘法就是线性变换”这句话保持一致。
先来看算子,它是最能与线性变换对应上的,所谓算子,就是在同一坐标系下,将指定的向量变换到另一个位置,其实和线性变换是一样的,在经过线性变换之后,向量被移动到了新的位置,这个新的位置便是矩阵乘法的结果。
再来说映射,其实只是换一个角度的问题,在前文中讲到线性变换的过程中,其实是用坐标系的变换来演示的。我们看到的向量变化了,只是在原来那个坐标系的视角下看到的;而站在新坐标系的视角下看,向量本身并没有动,它在新坐标系里的坐标始终是同一个。那么映射是什么呢?它就是新坐标系中的一个向量,在原坐标系下的表示,这就是映射,就这么简单。
从矩阵乘法的结果的真实含义来看,算子和映射是一致的:算子表达的是变换后的向量在原坐标系下的表示,映射表达的是新坐标系中的一个向量在原坐标系下的表示。二者其实都是向量在原坐标系下的表示。
上面用“原坐标系”和“新坐标系”来区分,这两个说法现在也可以忘掉了,因为在机器人学中,这两个坐标系是同时存在的,没有时间上的先后。下面直接给它们起名字:原来的那个叫参考坐标系 ,被变换到新位置的那个叫源坐标系 。如此便理解了映射与算子的区分。
再从写法上来看,映射一般写成 这样带前后角标的形式。上标就是刚才说的参考坐标系 ,也就是“在谁眼里看”;下标是源坐标系 ,也就是“看的是谁”。所以 读作“ 相对 的描述”。映射天生牵扯两个坐标系,这两个角标一个都省不掉。
算子就不同,它只在一个坐标系内部发生,不必交代从谁到谁,所以写法上往往把角标全部省掉,直接写成 、 这种样子,括号里装的是变换的参数(转了多少、平移了多少),而不是坐标系的身份。一个交代身份,一个交代动作,这就是两种写法最直观的差别。
真正能看出差别的场合是连乘:
等号右边中间那两个 像约分一样抵消掉,谁接谁一目了然,不用额外记顺序。算子写法里没有这些角标, 只能靠从右往左依次作用这条约定来读,顺序记反了结果就错了——这正是前文说矩阵乘法不满足交换律的另一种表现。
不过要提醒一句,两种读法面对的是同一个等式:
映射读法关心的是等号两边是同一个向量的两种描述,算子读法关心的是左边这个向量是右边这个向量被矩阵作用之后的结果。式子没有变,变的只是你把等号右边那个向量当成了什么。
映射与算子的判据
那实际工程应用的时候,怎么知道眼前这个矩阵该按哪种读?判据其实只有一条:看那个点到底动没动。
| 映射 | 算子 | |
|---|---|---|
| 在做什么 | 同一个物理量,换一个参考系重新描述一遍 | 参考系不动,矢量真的被搬到别处 |
| 点动了吗 | 没动 | 动了 |
| 符号长什么样 | ,带前后角标,牵扯两个坐标系 | ,不带角标,只牵扯一个坐标系 |
矩阵逆的真相
这条关系太顺手了,顺手到很容易记成转置就是逆。但它是个特例,只在正交阵上成立。真把它当成通法用,到齐次变换矩阵上一定会翻车。
逆的本义,和转置无关
逆矩阵的含义只有一条:把映射倒过来。 把 的说法翻译成 的说法,它的逆就是把这一趟翻译倒回去:
这里头没有转置什么事。反向的映射就是反向的映射,转置只是碰巧在某些矩阵上能算出同样的东西。
转置等于逆是特殊情况
那 为什么成立?还是回到列的含义: 装的是 的轴在 里的分量,转置之后,它变成了 的轴在 里的分量——这正好就是反方向的描述。
这是特殊情况:只有三根轴两两垂直、长度都为 1 的时候,把行列对调才恰好等于把描述的方向倒过来。一般的方阵没有这个待遇。
一般情况:齐次变换
齐次变换矩阵不能这么干:
而且 不只是不等于 ,它连合法的刚体变换都不是:最后一行从 变成了 。最后一行管的是 守恒,是点和方向的分界线(前文讲第四列时说过这件事),这一行一坏, 就守不住了,乘出来的东西既不是点也不是方向。
一般情况下的逆怎么求
这不是一个要背的公式,它就是解方程的结果:把 左乘过来,把 和 一条条移项,出来的就是这个样子。左上角是转置,因为旋转部分要反过来描述;最后一行还是 ,因为 的规矩不能破。真正需要想一下的只有右上角那一项。
那么移动项里面那个别扭的负号和旋转矩阵是怎么来的呢?
用 、 试一遍最清楚。看着最自然的写法是直接把平移取反,也就是 ,但这是错的,正确答案是
原因在于 是在 里量出来的,它是 原点在 中的位置。要把它写进从 翻译到 的那个变换里,得先把它换算到 的视角下,而这一步换算就是左乘 。不换视角就直接取负号,等于把在 里量出来的数当成 里的数用了。
换个角度看,这个负号还和操作顺序有关。正向变换的顺序是先旋转再平移,也就是 ;那么反向自然是先反向平移,再反向旋转,写成式子就是 。把它展开:
那个别扭的负号和旋转矩阵就是这么来的,它不是额外规定的,是顺序反过来之后自然出现的。