2. 传感器模型:针孔相机模型、畸变模型、激光雷达模型、IMU模型
做传感器标定这么多年,我越来越觉得——不懂传感器模型,标定就是瞎蒙。你想想看,连传感器怎么成像、怎么测距、怎么输出数据都不清楚,怎么可能把外参标得准?
这一章,咱们就把四种最常用的传感器模型掰开揉碎了讲。我会结合自己踩过的坑,帮你把每个模型的本质搞清楚。
2.1 针孔相机模型——最经典的成像模型
针孔相机模型,说白了就是小孔成像的数学版本。光线穿过一个小孔,在后面的成像平面上形成倒立的像。嗯,这里要注意——我们平时用的相机,其实都在模拟这个过程。
2.1.1 四个坐标系
我个人习惯把针孔模型拆成四个坐标系来看:
- 世界坐标系(W):真实世界的三维坐标,单位米
- 相机坐标系(C):以相机光心为原点,Z轴指向前方
- 图像坐标系(I):成像平面上的物理坐标,单位毫米
- 像素坐标系(P):图像上的像素位置,单位像素
为什么要分这么细?因为标定就是在这四个坐标系之间来回跳转。我在项目中遇到过,有人直接把世界坐标当成相机坐标用,结果标出来的外参偏差了十几厘米。
2.1.2 投影公式
从三维点到像素,核心就三步:
// 1. 世界坐标 -> 相机坐标(外参)
P_c = R * P_w + t
// 2. 相机坐标 -> 图像坐标(投影)
x = f * X_c / Z_c
y = f * Y_c / Z_c
// 3. 图像坐标 -> 像素坐标(内参)
u = fx * x + cx
v = fy * y + cy
这里 fx, fy 是焦距的像素表示,cx, cy 是光心偏移。我建议你记住一个关键点:针孔模型本质是相似三角形,所有公式都是从这个几何关系推导出来的。
核心要点:针孔模型假设光线是直线传播的,没有畸变。但现实中的镜头都有畸变,所以我们需要畸变模型来修正。
2.2 畸变模型——镜头不完美的补偿方案
你想想看,如果镜头真的像针孔一样完美,那标定就简单多了。可惜现实中的镜头都有各种畸变。我最早做标定时,就吃过这个亏——没加畸变模型,结果重投影误差一直降不下去。
2.2.1 径向畸变
径向畸变是镜头曲率造成的,越靠近图像边缘越明显。分两种:
- 桶形畸变:图像向外凸出,像桶一样
- 枕形畸变:图像向内凹陷,像枕头一样
数学上,我们用多项式来建模:
x_distorted = x * (1 + k1*r² + k2*r⁴ + k3*r⁶)
y_distorted = y * (1 + k1*r² + k2*r⁴ + k3*r⁶)
其中 r² = x² + y²,k1, k2, k3 是畸变系数。一般用前两个就够了,第三个是给鱼眼镜头准备的。
2.2.2 切向畸变
切向畸变是镜头和成像平面不平行造成的。公式如下:
x_distorted = x + [2*p1*x*y + p2*(r² + 2*x²)]
y_distorted = y + [p1*(r² + 2*y²) + 2*p2*x*y]
p1, p2 是切向畸变系数。我在项目中遇到过,有些廉价相机的切向畸变特别大,不加的话标定精度直接崩掉。
我的经验:标定相机时,先只标径向畸变,看看重投影误差。如果误差还大,再加切向畸变。别一上来就全上,容易过拟合。
2.3 激光雷达模型——点云是怎么来的
激光雷达和相机完全不同。它不靠成像,而是靠发射激光束并测量返回时间。说白了,就是给每个方向测一个距离。
2.3.1 机械式激光雷达模型
以16线激光雷达为例,每个激光器有固定的垂直角度 θ,电机旋转提供水平角度 φ。测距得到 r,那么三维坐标就是:
X = r * cos(θ) * sin(φ)
Y = r * sin(θ)
Z = r * cos(θ) * cos(φ)
嗯,这里要注意——不同厂家的激光雷达,坐标系定义可能不一样。Velodyne和禾赛的坐标系就不同,标定前一定要确认。
2.3.2 固态激光雷达模型
固态激光雷达没有旋转部件,而是通过光学相控阵或微振镜来改变光束方向。模型更复杂,但本质还是:角度 + 距离 = 三维点。
我曾经标定过一款固态激光雷达,它的视场角只有120°,而且边缘点云密度明显下降。这种非均匀性,在标定时要特别注意。
避坑指南:激光雷达的点云是离散的,不像相机有连续的像素。标定时,一定要确保标定物在点云中有足够多的点,否则角度估计会很不准。
2.4 IMU模型——加速度计和陀螺仪
IMU(惯性测量单元)是唯一一个不依赖外部信号的传感器。它测量的是自身的加速度和角速度。但IMU有个致命问题——漂移。
2.4.1 加速度计模型
理想情况下,加速度计输出的是比力(specific force):
a_measured = a_true + g + b_a + n_a
其中:
a_true:真实加速度g:重力加速度(这个很重要,IMU永远测得到重力)b_a:零偏(bias),随时间缓慢变化n_a:白噪声
我建议你记住一点:静止时,加速度计测到的是重力。利用这个特性,我们可以标定IMU的初始姿态。
2.4.2 陀螺仪模型
陀螺仪测量角速度:
ω_measured = ω_true + b_g + n_g
零偏 b_g 是IMU最大的敌人。我曾经用一款消费级IMU做标定,静止10分钟,陀螺仪的零偏就漂了0.5°/s。这种IMU,你想想看,积分出来的角度能准吗?
关键认知:IMU不能单独用来做长期定位,但短时间内的相对运动非常准。所以多传感器融合时,IMU通常用来做帧间约束,而不是绝对测量。
2.5 四种模型的对比与选择
为了让你看得更清楚,我整理了一个对比表:
| 传感器 | 输出数据 | 主要误差源 | 标定难点 |
|---|---|---|---|
| 针孔相机 | 像素坐标 (u,v) | 畸变、噪声 | 内参+畸变联合标定 |
| 激光雷达 | 三维点 (X,Y,Z) | 测距噪声、角度误差 | 点云稀疏时的匹配 |
| IMU加速度计 | 三轴加速度 | 零偏、噪声 | 零偏的时变性 |
| IMU陀螺仪 | 三轴角速度 | 零偏、噪声 | 积分漂移 |
做多传感器标定时,我一般先单独标定每个传感器的内参,然后再做外参联合标定。这样问题可以分而治之,排查起来也方便。
一个小技巧:如果你手头有多个相机和激光雷达,可以先标定相机-相机的外参,再标定激光雷达-相机的外参。分步走,比一次性标定所有传感器要稳定得多。
2.6 本章知识体系
下面这张图,是我梳理的四种传感器模型的核心逻辑。你可以把它当作一个快速索引:
这张图把四种模型的核心要素都串起来了。你可以把它当作一个快速参考,标定时随时回来看看。
好了,四种传感器模型就讲到这里。记住一句话:模型是标定的基础,基础不牢,地动山摇。下一章咱们会讲如何用这些模型做外参标定,到时候你就知道这些知识有多重要了。