4、传感器模型:针孔相机模型、激光雷达模型、IMU测量模型
各位同学,今天我们聊聊传感器模型。说实话,这是整个外参标定里最基础、也最绕不开的一环。你想想看,如果连传感器怎么“看”世界的都不知道,那标定出来的外参,说白了就是瞎蒙。
我个人习惯,每次拿到一个新传感器,第一件事就是把它当成一个“黑盒子”,先搞清楚它的输入输出关系。今天我们就拆开三个最常见的盒子:针孔相机、激光雷达、IMU。
4.1 针孔相机模型
针孔相机模型,嗯,这个名字很形象。就是一个小孔,光线穿过它,在后面的成像平面上投影。我刚开始做视觉SLAM时,总觉得这个模型太理想化了,后来才发现,它其实是所有复杂相机模型的“地基”。
核心公式其实就一个:
// 世界坐标系到像素坐标系的映射
// [u, v, 1]^T = K * [R|t] * [X, Y, Z, 1]^T
// 其中K是内参矩阵:
K = [fx, 0, cx;
0, fy, cy;
0, 0, 1]
这里fx、fy是焦距,cx、cy是光心偏移。我在项目中遇到过一个问题:用标定板算出来的fx和fy,跟厂家给的datasheet对不上。后来发现,是因为我用的图像分辨率跟标定时的分辨率不一致。记住,内参是跟分辨率绑定的,换分辨率就要重新标定。
重要概念:畸变模型
针孔模型是线性的,但真实镜头有畸变。我们通常用径向畸变和切向畸变来补偿:
- 径向畸变:k1, k2, k3 三个参数,主要来自镜头曲率
- 切向畸变:p1, p2 两个参数,来自镜头安装偏差
我的经验:标定畸变参数时,一定要用棋盘格覆盖整个视野。我曾经只拍了中间区域,结果边缘畸变完全没标出来,导致后续融合时边缘误差巨大。
4.2 激光雷达模型
激光雷达的模型,说白了就是“一束光,一个点”。每个激光束发射出去,碰到物体反射回来,根据飞行时间算出距离。但这里有个坑:激光雷达的坐标系定义各家不一样。
我常用的激光雷达模型是这样的:
// 激光雷达点云生成模型
// 对于第i个激光束,其方向由水平角α和垂直角θ决定
// 测量距离为r,则点云坐标为:
x = r * cos(θ) * cos(α)
y = r * cos(θ) * sin(α)
z = r * sin(θ)
// 注意:不同厂家对α和θ的零点定义不同
// Velodyne的α=0指向车头,Hesai的可能指向车尾
你想想看,如果坐标系定义搞错了,那外参标定出来的结果,可能直接差个180度。我曾经在项目里就吃过这个亏,两台激光雷达融合后,点云直接“劈叉”了。
避坑指南:拿到激光雷达后,第一件事就是验证它的坐标系定义。找个墙角,手动测量几个点的距离,跟点云数据对比一下。这一步花不了10分钟,但能省下后面几天的调试时间。
另外,激光雷达还有个重要的特性:回波模式。单回波、双回波、最强回波,不同模式下点的精度和数量都不一样。我建议在外参标定时,统一用单回波模式,减少不确定性。
4.3 IMU测量模型
IMU,惯性测量单元。它测量的是加速度和角速度。但说实话,IMU的数据如果不做处理,直接拿来用,那基本是“废的”。为什么?因为IMU有三大误差:零偏、尺度因子、噪声。
IMU的测量模型可以写成:
// IMU测量模型
// 加速度计:
a_meas = a_true + b_a + n_a + s_a * a_true
// 陀螺仪:
ω_meas = ω_true + b_g + n_g + s_g * ω_true
// 其中:
// b_a, b_g: 零偏(bias),随时间缓慢变化
// n_a, n_g: 白噪声
// s_a, s_g: 尺度因子
这里最让人头疼的是零偏。它不是一个固定值,而是随着温度、时间漂移的。我记得有一次做车载标定,早上标好的外参,下午就偏了。查了半天,发现是IMU零偏漂移导致的。
关键点:IMU的零偏是“时变”的。所以在外参在线标定中,我们通常把零偏也作为状态量,跟外参一起估计。这就是为什么很多标定算法里,状态向量里既有外参,又有IMU bias。
另外,IMU的坐标系定义也很重要。加速度计的轴方向,陀螺仪的旋转方向,不同厂家可能不一样。我建议在代码里显式定义一个“IMU坐标系约定”,然后所有数据都转成这个约定。
4.4 三种模型的对比与融合
好了,三种模型都讲完了。我们来对比一下:
| 传感器 | 测量量 | 主要误差 | 更新频率 | 外参标定难点 |
|---|---|---|---|---|
| 针孔相机 | 像素坐标 (u,v) | 畸变、量化噪声 | 10-60 Hz | 需要纹理特征 |
| 激光雷达 | 3D点 (x,y,z) | 测距噪声、多路径 | 5-20 Hz | 需要几何特征 |
| IMU | 加速度、角速度 | 零偏、噪声、尺度 | 100-1000 Hz | 零偏时变 |
你想想看,这三种传感器各有各的脾气。相机怕没光,激光雷达怕下雨,IMU怕温度变化。但把它们融合在一起,就能互相弥补。这就是多传感器融合的魅力所在。
下面这张图,是我自己总结的三种传感器模型在标定中的关系:
嗯,这张图其实想表达一个意思:三种模型不是孤立的。在标定过程中,相机提供纹理约束,激光雷达提供几何约束,IMU提供运动约束。三者联合优化,才能得到稳定可靠的外参。
我的建议:在实际项目中,不要试图一次性把所有模型都搞完美。先让相机和激光雷达能对上,再慢慢加入IMU。分步走,出问题了也好排查。
好了,这一节的内容就到这里。传感器模型是标定的基础,理解透了,后面的联合标定算法才能用得顺手。记住,模型越准确,标定结果越可靠。