4、平移向量与齐次坐标:平移向量的物理意义、齐次坐标的引入、4x4外参矩阵的构成

好,咱们接着聊。上一节我们把旋转聊透了,这一节该聊聊“平移”了。你想想看,一个刚体在三维空间里,不光要转,还得挪地方。摄像头装在车上,车往前开,摄像头的位置就在变。这个“位置变化”,就是平移向量要干的事。

4.1 平移向量的物理意义

平移向量,说白了就是告诉你:从坐标系A的原点,走到坐标系B的原点,该怎么走。

举个例子。我车上装了个摄像头,摄像头坐标系的原点,相对于车体坐标系的原点,可能偏左10厘米、偏上5厘米、往前20厘米。那这个平移向量就是 (0.1, 0.05, 0.2),单位是米。就这么简单。

但这里有个坑,我当年刚入行时踩过。平移向量的方向,取决于你从谁到谁。从车体到摄像头,和从摄像头到车体,方向是反的。你写代码时一旦搞反,整个标定结果就全乱了。嗯,这个一定要注意。

⚠️ 避坑指南: 我曾经在项目里,因为平移向量的符号搞反了,导致融合出来的点云全跑到地底下去了。排查了整整两天才发现是平移向量方向写反了。所以,写代码前先画个图,标清楚谁是谁的原点。

4.2 为什么要引入齐次坐标?

好,问题来了。我们之前有旋转矩阵R(3x3),现在又有平移向量t(3x1)。想把一个点从摄像头坐标系变换到车体坐标系,公式是:

P_车体 = R * P_摄像头 + t

这个公式本身没问题。但你想过没有,如果我们有一连串的变换呢?比如从摄像头到车体,再从车体到世界,再从世界到另一个传感器。每次都要写一个“旋转+平移”的式子,代码写起来很啰嗦,而且不好合并。

为什么会这样?因为旋转是乘法,平移是加法,两种运算混在一起,没法用一个矩阵统一表达。

那怎么办?数学家们想了个办法:给坐标多加一个维度。

原本三维点 (x, y, z),变成四维 (x, y, z, 1)。这个“1”就是齐次坐标的最后一个分量。有了它,平移就能写成乘法了。

💡 核心思想: 齐次坐标的本质,就是把“旋转+平移”这个组合运算,统一成一个4x4矩阵的乘法。这样,多个变换就能连乘在一起,简洁又高效。

4.3 4x4外参矩阵的构成

好了,现在我们把旋转矩阵R(3x3)和平移向量t(3x1)拼到一起,再加一行 [0 0 0 1],就得到了一个4x4的矩阵。这就是外参矩阵的完整形态:

外参矩阵 = [ R   t ]
           [ 0   1 ]

展开写就是:

| r11  r12  r13  tx |
| r21  r22  r23  ty |
| r31  r32  r33  tz |
|  0    0    0    1  |

这个矩阵,就是摄像头坐标系到车体坐标系的“桥梁”。你拿摄像头看到的一个点,左乘这个矩阵,就得到了它在车体坐标系下的位置。

我个人习惯把这个矩阵叫做“刚体变换矩阵”。因为它只包含旋转和平移,不包含缩放或剪切,保持了物体的形状不变。

💡 小技巧: 验证外参矩阵对不对,有个简单方法。你把摄像头坐标系的原点 (0,0,0) 转成齐次坐标 (0,0,0,1),左乘外参矩阵,得到的结果就是平移向量本身。如果这个结果和你预期的摄像头安装位置对不上,那矩阵肯定有问题。

4.4 知识体系总览

为了让你更直观地理解这一章的内容,我画了一张图,把平移向量、齐次坐标、外参矩阵的关系串起来:

外参矩阵知识体系 平移向量 t 物理意义:原点偏移 维度:3x1 齐次坐标 解决:旋转+平移统一 形式:(x, y, z, 1) 外参矩阵 构成:[R | t] + [0 0 0 1] 维度:4x4 引入 构成 最终效果 P_车体 = 外参矩阵 × P_摄像头(齐次坐标形式) 应用场景 多传感器融合 · 标定板检测 · 自动驾驶感知

4.5 代码示例:构建外参矩阵

光说不练假把式。我给你写一段Python代码,演示怎么用旋转矩阵和平移向量拼出4x4外参矩阵:

import numpy as np

# 假设旋转矩阵R(单位矩阵,表示没有旋转)
R = np.eye(3)

# 平移向量t:摄像头在车体坐标系中的位置
# 假设摄像头装在车顶,偏左0.1米,偏高0.05米,往前0.2米
t = np.array([[0.1],
              [0.05],
              [0.2]])

# 构建4x4外参矩阵
T = np.vstack([
    np.hstack([R, t]),
    np.array([0, 0, 0, 1])
])

print("外参矩阵:")
print(T)

# 测试:将摄像头坐标系原点变换到车体坐标系
P_cam = np.array([0, 0, 0, 1])  # 齐次坐标
P_vehicle = T @ P_cam
print(f"摄像头原点在车体坐标系中的位置:{P_vehicle[:3].flatten()}")
# 输出应该是 [0.1, 0.05, 0.2]

这段代码跑出来,你会看到摄像头原点被准确地映射到了平移向量的位置。嗯,这就是外参矩阵的魔力。

4.6 本章小结

  • 平移向量:描述两个坐标系原点之间的偏移,方向要搞对。
  • 齐次坐标:给三维点加一个维度,让平移也能用乘法表达。
  • 4x4外参矩阵:旋转+平移的完美统一,是传感器标定的核心工具。

下一节我们会聊到“内参矩阵”,那是摄像头自己内部的参数。但别急,先把外参吃透。外参搞不明白,后面全是白搭。我当年就是吃了这个亏,标定出来的数据怎么看怎么不对,最后发现是外参矩阵里平移向量的符号写反了。嗯,你记住这个教训就好。

可可精品资料库