2. 外参标定基础
大家好,欢迎来到第二讲。
上一讲我们聊了多传感器融合为什么容易飘,说白了就是传感器各自为政,谁也不服谁。那怎么让它们「对齐」呢?这就得靠外参了。
我个人习惯把外参比作「翻译官」。激光雷达说「前方3米有障碍」,相机说「图像右下角有个物体」,IMU说「我感受到的加速度是这样的」——它们说的都是真话,但用的坐标系不一样。外参就是那个能把一种语言翻译成另一种语言的工具。
2.1 什么是外参?
外参,全称是「外部参数」。它描述的是两个传感器坐标系之间的相对位置和姿态关系。
举个例子:你的车上装了一个激光雷达和一个相机。激光雷达有自己的坐标系(L系),相机也有自己的坐标系(C系)。外参就是告诉你:从L系到C系,需要怎么旋转、怎么平移。
我遇到过不少新手,把内参和外参搞混。内参是传感器自身的属性,比如相机的焦距、畸变系数,这些出厂就定了。外参是传感器之间的相对关系,装车之后才确定,而且一旦安装位置变了,外参就得重新标。
核心要点:
- 内参:传感器自己的「内部坐标系」参数
- 外参:传感器之间的「相对坐标系」变换关系
- 外参标定:就是求解这个变换关系的过程
2.2 旋转矩阵:描述「转了多少」
先说说旋转。两个坐标系之间,通常不是完全对齐的。激光雷达可能朝前装,相机可能朝右偏了10度。这个「偏了多少」就是旋转关系。
旋转矩阵,用数学语言说,是一个3x3的正交矩阵。它的每一列代表一个坐标轴在另一个坐标系中的投影。
嗯,听起来有点绕。我换个说法:
你面前有个立方体,你把它绕X轴转30度。原来在(1,0,0)位置的点,转完之后去了哪里?旋转矩阵就是干这个的——它告诉你每个点的新坐标。
// 绕Z轴旋转θ角的旋转矩阵
R_z(θ) = [
[cosθ, -sinθ, 0],
[sinθ, cosθ, 0],
[0, 0, 1]
]
我在项目中遇到过一个问题:旋转矩阵有9个元素,但实际自由度只有3个(绕X、Y、Z轴各转多少)。所以直接用9个参数去优化,很容易过参数化,导致标定结果不稳定。后来我改用四元数或者轴角表示,就好多了。这个后面会细讲。
小技巧:旋转矩阵有个重要性质——它的逆等于它的转置。也就是说,如果你知道从A到B的旋转矩阵R,那么从B到A的旋转矩阵就是R的转置。这在标定中经常用到,可以省掉一次矩阵求逆的计算。
2.3 平移向量:描述「挪了多少」
旋转搞定了,接下来是平移。两个传感器的安装位置不可能完全重合,激光雷达在车顶,相机在前挡风玻璃后面,IMU在底盘——它们之间有个物理距离。
平移向量就是一个3x1的向量,表示从一个坐标系原点到另一个坐标系原点的偏移量。单位通常是米。
比如:t = [0.5, 0.0, 0.3]^T 表示在X方向偏移了0.5米,Z方向偏移了0.3米。
你想想看,如果旋转矩阵搞错了,点云投影到图像上会「转圈」;如果平移向量搞错了,点云会「整体偏移」。两者都会导致融合结果不准。
注意:平移向量的单位必须统一。我见过有人把激光雷达的平移写成毫米,相机的写成米,结果标定出来的外参完全不对。检查数据时一定要确认单位。
2.4 齐次坐标变换:把旋转和平移打包
旋转矩阵R和平移向量t,单独用着没问题。但实际计算中,我们经常需要连续变换:从激光雷达到IMU,再从IMU到车身,最后到世界坐标系。
如果每次都先旋转再平移,写起来很麻烦。于是就有了齐次坐标变换矩阵。
说白了,就是把3x3的旋转矩阵和3x1的平移向量,拼成一个4x4的矩阵:
T = [
[R(0,0), R(0,1), R(0,2), t(0)],
[R(1,0), R(1,1), R(1,2), t(1)],
[R(2,0), R(2,1), R(2,2), t(2)],
[0, 0, 0, 1 ]
]
同时,把三维点 [x, y, z]^T 扩展成齐次坐标 [x, y, z, 1]^T。这样,一次矩阵乘法就完成了旋转+平移。
为什么最后一行是 [0,0,0,1]?这是为了保持变换的线性性质。如果你做两次变换,直接把两个4x4矩阵乘起来就行,非常方便。
我曾经在调试一个多传感器融合系统时,发现点云和图像总是对不上。查了两天,最后发现是齐次变换矩阵的最后一列写错了——平移向量的顺序搞反了。嗯,这种低级错误,犯过一次就再也不会犯了。
2.5 知识体系总览
下面这张图,把这一讲的核心逻辑串起来了:
2.6 实际应用中的注意事项
讲完了理论,说点实战中容易踩的坑。
第一,旋转矩阵的数值稳定性。直接用9个参数去优化,很容易出现非正交矩阵(也就是不再是合法的旋转矩阵)。我建议用四元数或者轴角做优化,最后再转成旋转矩阵。
第二,平移向量的参考点。不同传感器的原点定义可能不同。比如相机的原点在光心,激光雷达的原点在扫描中心。标定前一定要搞清楚每个传感器的坐标系定义。
第三,齐次变换的链式法则。如果你有3个传感器,A到B的变换是T_AB,B到C的变换是T_BC,那么A到C的变换就是T_AC = T_AB * T_BC。注意乘法的顺序,先乘的离目标更近。
一句话总结:外参就是传感器之间的「坐标翻译器」。旋转矩阵管方向,平移向量管位置,齐次变换矩阵把两者打包,方便连续运算。标定的本质,就是找到这个翻译器的最优参数。