2. 传感器基础:相机成像原理(小孔模型)、激光雷达测距原理(TOF)
各位同学,欢迎来到第二讲。
做传感器融合,说白了就是让车子的眼睛(相机)和耳朵(激光雷达)能对上话。但要让它们好好配合,你得先搞清楚它们各自是怎么看世界的。这一讲,我们就来聊聊这两个传感器的“底层逻辑”。
2.1 相机成像:小孔模型
相机是怎么把三维世界塞进一张二维照片里的?
嗯,最经典的模型就是小孔成像。你想想看,初中物理课上那个暗箱实验,蜡烛火焰倒着映在屏幕上——就是这个原理。
核心思想: 光线沿直线传播,穿过一个小孔,在后面的成像平面上形成倒立的实像。
但在实际相机里,我们不会真的用一个小孔。因为小孔进光量太少,拍出来的照片太暗。所以现代相机用透镜组来代替小孔,既能聚光,又能矫正畸变。不过,在数学建模时,我们依然把它抽象成小孔模型。
2.1.1 坐标系与投影
要理解小孔模型,你得先搞明白四个坐标系:
- 世界坐标系:我们生活的真实三维空间,单位是米。
- 相机坐标系:以相机光心为原点,Z轴指向镜头前方。
- 图像坐标系:在成像平面上,以物理尺寸(毫米)为单位。
- 像素坐标系:我们最终看到的图像,以像素为单位,原点在左上角。
从世界坐标到像素坐标,中间经历了一系列的刚体变换和投影变换。我个人习惯把整个过程拆成三步:
- 外参变换:把世界坐标的点,转到相机坐标系下。说白了就是确定相机在哪儿、朝哪儿看。
- 内参投影:把相机坐标系下的3D点,投影到成像平面上。这一步由相机内参矩阵K决定。
- 去畸变:由于透镜的存在,实际图像会有畸变(主要是径向畸变和切向畸变),需要校正。
公式长这样(你不需要死记,但得知道它代表什么):
// 小孔模型投影公式(齐次坐标形式)
// [u, v, 1]^T = K * [R|t] * [X, Y, Z, 1]^T
// 其中:
// K = [fx, 0, cx;
// 0, fy, cy;
// 0, 0, 1] // 内参矩阵
// [R|t] 是外参矩阵(旋转+平移)
我的经验: 内参矩阵里的 fx, fy 是焦距(以像素为单位),cx, cy 是光心偏移。我在项目里见过有人把 cx, cy 直接设为图像中心,结果标定出来的外参总是有偏差。记住,cx, cy 是标定出来的,不是猜出来的。
2.1.2 畸变模型
为什么照片边缘的直线会变弯?这就是畸变。
- 径向畸变:光线在透镜边缘弯曲得更厉害,产生“桶形”或“枕形”畸变。
- 切向畸变:透镜与成像平面不平行,导致图像倾斜。
校正公式通常用泰勒级数展开:
// 径向畸变校正
x_corrected = x * (1 + k1*r^2 + k2*r^4 + k3*r^6)
y_corrected = y * (1 + k1*r^2 + k2*r^4 + k3*r^6)
// 切向畸变校正
x_corrected = x + [2*p1*x*y + p2*(r^2 + 2*x^2)]
y_corrected = y + [p1*(r^2 + 2*y^2) + 2*p2*x*y]
避坑指南: 我曾经在标定一个广角相机时,只用了2个径向畸变参数(k1, k2),结果图像边缘的校正效果很差。后来加了k3,效果才明显改善。对于鱼眼相机,甚至需要用到k4、k5、k6。别偷懒,参数够用才行。
2.2 激光雷达测距:TOF原理
激光雷达(LiDAR)是怎么知道障碍物有多远的?
说白了,就是“扔个球出去,等它弹回来,算时间”。这个“球”就是激光脉冲。
2.2.1 TOF(Time of Flight)基本原理
TOF,飞行时间法。原理非常简单:
- 激光器发射一束极短的激光脉冲。
- 脉冲打到目标物体上,反射回来。
- 接收器检测到回波信号。
- 计算发射和接收的时间差 Δt。
- 距离 d = c * Δt / 2 (c是光速,除以2是因为光走了个来回)。
你想想看,光速是3×10^8 m/s,如果目标在100米外,光来回一趟只需要约0.67微秒。所以激光雷达的计时精度必须非常高,通常要达到皮秒(10^-12秒)级别。
关键点: 激光雷达测的是“单程距离”,但时间差是双程的,所以一定要除以2。这个错误我见过新手犯过,算出来距离直接翻倍。
2.2.2 激光雷达的点云数据
一束激光只能测一个点。那怎么得到周围环境的完整轮廓呢?
答案是:让激光转起来。
- 机械旋转式:通过电机带动激光器旋转,扫描一圈得到360°的点云。Velodyne、Hesai的经典方案。
- 固态式:没有旋转部件,通过光学相控阵(OPA)或微振镜(MEMS)来改变激光方向。体积小、寿命长,但视场角有限。
- 混合固态:比如转镜式,内部有旋转镜面,但外壳不动。兼顾了性能和可靠性。
每个激光点包含的信息:
| 字段 | 含义 | 单位 |
|---|---|---|
| x, y, z | 三维坐标(通常以激光雷达自身为原点) | 米 |
| intensity | 反射强度(与目标材质、颜色、距离有关) | 无单位(0-255) |
| ring | 激光线束编号(多线激光雷达特有) | 整数 |
| timestamp | 该点的时间戳(用于去畸变) | 秒 |
我的经验: 别小看intensity这个字段。在夜间或弱光环境下,相机可能看不清车道线,但激光雷达的反射强度可以帮你区分路面和标线。我在做车道线检测时,就靠这个字段做了不少文章。
2.2.3 激光雷达的优缺点
没有完美的传感器,激光雷达也一样。
- 优点:
- 直接测距,精度高(厘米级)。
- 不受光照影响,白天黑夜都能用。
- 能提供3D结构信息。
- 缺点:
- 成本高(虽然这几年降了不少)。
- 受天气影响大(雨、雾、雪会衰减激光信号)。
- 点云稀疏,尤其是远距离。
- 无法获取颜色、纹理信息。
所以,相机和激光雷达是天然的互补关系。相机提供丰富的语义信息(颜色、纹理、类别),激光雷达提供精确的几何信息(距离、形状)。融合起来,才能让自动驾驶系统既看得清,又看得准。
2.3 本章知识体系
为了让你更直观地理解这两个传感器的工作原理,我画了一张图:
这张图把两个传感器的核心流程串在了一起。左边是相机,从三维世界到二维像素;右边是激光雷达,从发射脉冲到三维点云。最终,它们都要汇聚到“联合标定”这一步——也就是我们这门课的核心。
好了,这一讲就到这里。记住,理解传感器原理是标定的第一步。下一讲,我们会深入聊聊标定板的设计和特征点提取。到时候见。