矩阵即变换
矩阵不是一张数表,而是一个动作:它把整个空间拉伸、旋转、剪切。只要知道 î 和 ĵ 去了哪里,就知道每一个点去了哪里。同一个矩阵还能讲第二个故事:点不动,换一把尺子去量它。
1为什么机器人需要它
机器人的相机看到桌上一个杯子,报告说:"杯子在我前方 0.8 米、偏左 0.2 米。"可机械臂要的是杯子在世界坐标系里的位置。机器人转了个身,同一个杯子在相机里的读数全变了,杯子本身却一动没动。
"把一堆点按同一个规则统一挪动"和"同一个点换一个坐标系重新描述",是机器人软件里最常做的两件事。它们背后是同一个数学对象:矩阵。机器人代码里很多 bug 都出在一个问题上:这个矩阵到底是在搬动点,还是在换坐标系?
2直觉:什么样的变换叫"线性"
把平面想象成一张画着方格的橡皮膜。变换就是把膜上每个点挪到新位置。在所有挪法里,有一类特别"守规矩",叫线性变换:
- 直线变换后仍然是直线;
- 平行、等距的网格线变换后仍然平行、等距;
- 原点不动。
下面切换三种变换,看看哪一种满足全部三条。
线性变换有一个惊人的推论。任何向量都能写成基向量的组合:\( \mathbf v = x\,\ihat + y\,\jhat \)。网格变换后仍然"平行且等距",这个组合关系就原封不动地保留下来:
一个线性变换完全由两个向量决定:î 落在哪里、ĵ 落在哪里。把这两个落点并排写成两列,就是这个变换的矩阵。矩阵的第 1 列是 î 的落点,第 2 列是 ĵ 的落点。
3动手玩:矩阵实验室
拖动红色 Aî 和绿色 Aĵ 的箭头尖,矩阵会跟着变。也可以直接改矩阵里的数(左右拖动数字可以连续调节),或者点一个预设。黄色向量 Av 也可以拖动。
- 只拖箭头,做出一个逆时针 90° 旋转。提示:î 应该去哪?ĵ 呢?
- 让整个平面塌成一条直线。这时黄色向量为什么拖不动了?
- 让网格翻面:Aî 转到 Aĵ 的"顺时针一侧"。平行四边形的颜色会变。
- 矩阵不是单位矩阵时,拖动黄色向量,让它正好落在变换后网格的格点 (2, −1) 上。
小游戏:猜矩阵
紫色虚线是一个"目标变换"作用后的网格。拖动 Aî、Aĵ,让你的网格和它重合。读出目标矩阵的诀窍:找到原来的格点 (1, 0) 和 (0, 1) 跑到了哪里。
- 累计猜中 3 题。
4两种视角:搬动点,还是换尺子
同一个等式 \( \mathbf p = A\mathbf c \) 可以讲两个完全不同的故事。
主动视角(变换):坐标系不动,点被搬走。\( \mathbf c \) 是旧位置,\( \mathbf p \) 是新位置,两者用同一把尺子量。
被动视角(换基):点不动,换一把尺子。\( A \) 的两列 \( \mathbf b_1, \mathbf b_2 \) 是一套新的基向量。同一支箭头用新基去量,读数是 \( \mathbf c \);用标准基去量,读数是 \( \mathbf p \)。这时 \( A \) 的作用是把新坐标翻译成标准坐标。
在下面两张图里拖动任意一个黄色箭头,两张图会同步变化。
| 主动视角(变换) | 被动视角(换基) | |
|---|---|---|
| 什么在动 | 点(整个空间) | 坐标系 / 尺子 |
| \(A\) 的列 | \(\ihat, \jhat\) 被送到哪里 | 新基向量在旧坐标系中的样子 |
| \(\mathbf c \to \mathbf p\) | 旧位置 → 新位置 | 新坐标系读数 → 标准坐标系读数 |
| 机器人例子 | 把点云整体旋转 30° | 把相机坐标系里的点换算到世界坐标系 |
5再看数学
提示:把鼠标悬停在公式中带底色的符号上,FIG 2 中对应的元素会被高亮。
定义
变换 \(T:\R^2\to\R^2\) 是线性的,当且仅当它保持加法和数乘:
取 \(s = 0\) 就得到 \(T(\mathbf 0)=\mathbf 0\),也就是原点不动。所以平移不是线性变换。
从基向量推出矩阵
设 î 被送到 \(\ci{(a, c)}\),ĵ 被送到 \(\cj{(b, d)}\)。由线性:
列视角(本节的视角):\(A\mathbf v\) 是 \(A\) 各列的线性组合,组合系数就是 \(\mathbf v\) 的各个分量。这是几何直觉的来源。
行视角(计算时常用):\(A\mathbf v\) 的第 \(i\) 个分量,是 \(A\) 的第 \(i\) 行与 \(\mathbf v\) 的点积(1.7 节)。两种读法算出的结果完全一样。
换基公式
设新基为 \(B = [\,\mathbf b_1\;\mathbf b_2\,]\)。同一支箭头在新基下坐标为 \(\mathbf c\),在标准基下坐标为 \(\mathbf p\),则:
注意方向:\(B\) 把"新坐标"翻译成"标准坐标";反方向要用 \(B^{-1}\)。1.10 节会讲到,对旋转矩阵 \(R\) 来说 \(R^{-1} = R^\top\),求逆只需要转置,这是机器人里最常用的技巧之一。
6机器人中的它:相机坐标与世界坐标
一个移动机器人站在世界原点(平移先放一边,5.3 节再加回来),朝向角为 \(\theta\)。它的"前方"和"左方"两根坐标轴,在世界坐标系中写出来,就是旋转矩阵 \(R(\theta)\) 的两列:
切换下面两种模式,转动机器人。"物体固定在世界中"对应被动视角:杯子不动,机器人测到的读数在变。"物体随机器人转动"对应主动视角:托盘上的杯子被机器人带着走。
- 在"物体固定在世界中"模式下,转动机器人,让杯子正好位于它正前方(机器人坐标的 y 分量为 0,x 分量为正)。
ROS 的 tf2 每秒要做成千上万次这样的换算:激光雷达系 → 底盘系 → 地图系。机械臂的末端执行器、相机光心、每个关节,都各自带着一个坐标系。这一节讲的"列是新基向量在旧坐标系中的样子",就是理解这些坐标变换的钥匙。
7常见误区
不能。平移会移动原点,而线性变换必须保持原点不动。解决办法是给坐标添一个 1,升一维,这就是 5.3 节的齐次坐标。
"把点逆时针转 30°"和"把坐标系逆时针转 30°"得到的读数,正好互为逆变换。写代码前,先问自己:我是在搬点,还是在换坐标系?矩阵是从哪个坐标系到哪个坐标系?推荐在变量名里写清楚,例如 R_world_cam。
基向量的像放在列里。有些库按行优先存储矩阵;有些资料用行向量写成 \(\mathbf v^\top A\),这时一切都要转置。读别人代码时先确认约定。
8小练习
9延伸阅读
- 3Blue1Brown, Essence of Linear Algebra — 第 3 章(线性变换)与第 13 章(基变换)
- G. Strang, Introduction to Linear Algebra, Ch. 8 — 线性变换
- K. Lynch & F. Park, Modern Robotics, Ch. 3 — 刚体运动与坐标系
- J. Ström et al., Immersive Linear Algebra — 带交互插图的线代教材