2. 传感器模型:针孔相机模型、畸变模型、激光雷达模型、IMU模型

做传感器标定这么多年,我越来越觉得——不懂传感器模型,标定就是瞎蒙。你想想看,连传感器怎么成像、怎么测距、怎么输出数据都不清楚,怎么可能把外参标得准?

这一章,咱们就把四种最常用的传感器模型掰开揉碎了讲。我会结合自己踩过的坑,帮你把每个模型的本质搞清楚。

2.1 针孔相机模型——最经典的成像模型

针孔相机模型,说白了就是小孔成像的数学版本。光线穿过一个小孔,在后面的成像平面上形成倒立的像。嗯,这里要注意——我们平时用的相机,其实都在模拟这个过程。

2.1.1 四个坐标系

我个人习惯把针孔模型拆成四个坐标系来看:

  1. 世界坐标系(W):真实世界的三维坐标,单位米
  2. 相机坐标系(C):以相机光心为原点,Z轴指向前方
  3. 图像坐标系(I):成像平面上的物理坐标,单位毫米
  4. 像素坐标系(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 本章知识体系

下面这张图,是我梳理的四种传感器模型的核心逻辑。你可以把它当作一个快速索引:

传感器模型知识体系 针孔相机模型 • 世界→相机→图像→像素 • 相似三角形投影 • 内参: fx, fy, cx, cy • 外参: R, t • 重投影误差最小化 畸变模型 • 径向畸变: k1,k2,k3 • 切向畸变: p1,p2 • 桶形/枕形畸变 • 畸变矫正流程 • 联合标定策略 激光雷达模型 • 机械式: θ, φ, r • 固态: 相控阵/微振镜 • 点云生成原理 • 坐标系定义差异 • 非均匀密度处理 IMU模型 • 加速度计: a+g+b+n • 陀螺仪: ω+b+n • 零偏漂移特性 • 重力矢量约束 • 帧间约束应用 标定核心流程 单独内参标定 → 传感器对联合标定 → 多传感器全局优化 四种模型各有特点,但标定的本质都是:建立数学模型 → 采集数据 → 优化参数 我的经验:先吃透一个模型,再触类旁通。别贪多,嚼不烂。

这张图把四种模型的核心要素都串起来了。你可以把它当作一个快速参考,标定时随时回来看看。

好了,四种传感器模型就讲到这里。记住一句话:模型是标定的基础,基础不牢,地动山摇。下一章咱们会讲如何用这些模型做外参标定,到时候你就知道这些知识有多重要了。