4. 传感器模型:针孔相机、IMU、GPS与激光雷达

传感器融合这事儿,说白了就是让不同传感器互相补台。但补台之前,你得先搞清楚每个传感器的“脾气”——也就是它的数学模型。我做了这么多年机器人感知,见过太多融合方案翻车,根源往往不是算法不行,而是传感器模型没建对。

这一章,咱们把四种最常用的传感器模型掰开揉碎讲清楚:针孔相机、IMU、GPS、激光雷达。嗯,每个模型我都会结合项目里踩过的坑来说。

4.1 针孔相机模型

相机模型是视觉SLAM和三维重建的基石。最经典的,就是针孔模型。

核心思想:三维空间点通过光心投影到成像平面上。说白了,就是小孔成像的数学表达。

数学上,一个三维点 P = (X, Y, Z) 投影到像素坐标 p = (u, v) 的过程分三步:

  1. 世界坐标系 → 相机坐标系:通过外参矩阵 [R|t] 变换。
  2. 相机坐标系 → 归一化平面:除以 Z 得到归一化坐标 (x, y)。
  3. 归一化平面 → 像素坐标系:通过内参矩阵 K 映射。

内参矩阵 K 长这样:

K = [fx  0  cx]
    [ 0  fy  cy]
    [ 0   0   1]

其中 fx, fy 是焦距(像素单位),cx, cy 是光心偏移。我当年刚入门时,总搞不清 fx 和 fy 为什么不一样——后来才知道,这是传感器像素不是正方形导致的。

避坑指南:我曾经在一个项目里直接用厂家标称的内参,结果三维重建误差大得离谱。后来重新用棋盘格标定了一遍,才发现出厂数据和实际使用环境差了 3% 左右。记住:内参一定要现场标定,别偷懒。

实际相机还有畸变——主要是径向畸变(桶形/枕形)和切向畸变。畸变模型一般用多项式拟合:

x_distorted = x * (1 + k1*r^2 + k2*r^4 + k3*r^6) + 2*p1*x*y + p2*(r^2 + 2*x^2)
y_distorted = y * (1 + k1*r^2 + k2*r^4 + k3*r^6) + p1*(r^2 + 2*y^2) + 2*p2*x*y

k1, k2, k3 是径向畸变系数,p1, p2 是切向畸变系数。你想想看,如果不做畸变校正,直接用原始图像做特征匹配,那误差会累积到后面的位姿估计里,越跑越偏。

4.2 IMU 测量模型

IMU(惯性测量单元)提供加速度和角速度。它不像相机那样“看”外部环境,而是测量自身的运动。但IMU有个毛病——漂移。

IMU的测量模型可以写成:

a_m = a_true + b_a + n_a + g
ω_m = ω_true + b_g + n_g

其中:

  • a_m, ω_m:测量值
  • a_true, ω_true:真实值
  • b_a, b_g:零偏(bias),随时间缓慢变化
  • n_a, n_g:高斯白噪声
  • g:重力加速度(这个要特别注意,加速度计测的是“比力”,包含重力)

重要提醒:IMU的零偏不是常数!它会随温度、时间漂移。我做过一个无人机项目,起飞前IMU零偏标定得好好的,飞了10分钟后偏了0.5度/秒——积分出来的姿态直接歪了30度。所以,融合方案里一定要在线估计零偏。

IMU的积分模型(预积分)在VINS和ORB-SLAM3里用得很多。简单说,就是把两帧图像之间的IMU测量值积分起来,作为约束。我个人习惯用中值积分,精度比欧拉积分高,计算量又比四阶龙格-库塔小。

4.3 GPS 定位模型

GPS提供的是位置信息,但精度有限——民用GPS一般在2-5米,差分GPS(DGPS)可以到厘米级。

GPS的测量模型相对简单:

z_gps = p_true + n_gps

其中 p_true 是真实位置(通常是经纬高),n_gps 是测量噪声。但这里有个坑:GPS的噪声不是白噪声,它有时间相关性——也就是所谓的“多路径效应”和“电离层延迟”。

GPS类型 精度 更新频率 典型应用
民用GPS 2-5 m 1-10 Hz 手机导航、车载定位
DGPS 10-50 cm 1-10 Hz 农业机械、测绘
RTK-GPS 1-5 cm 5-20 Hz 自动驾驶、无人机精准起降

在传感器融合中,GPS通常作为“低频校正”。比如在VIO(视觉惯性里程计)里,GPS每1秒给一个位置约束,把IMU积分累积的漂移拉回来。我曾经在一个园区自动驾驶项目里,只用VIO跑了3公里,位置误差到了20米——加上GPS后,误差直接降到1米以内。

经验之谈:GPS的坐标系转换是个容易出错的地方。经纬高(LLA)要转成地心地固(ECEF),再转成局部东北天(ENU)。我建议在融合框架里统一用ENU坐标系,这样位置和姿态的物理意义更直观。

4.4 激光雷达点云模型

激光雷达(LiDAR)通过发射激光束并测量返回时间,得到周围环境的点云。每个点包含三维坐标和反射强度。

激光雷达的测量模型:

p_lidar = R * p_world + t + n_lidar

其中 R 和 t 是激光雷达相对于世界坐标系的位姿,n_lidar 是测量噪声。但实际中,激光雷达的噪声模型比这复杂——它跟距离、入射角、目标材质都有关系。

我整理了几种主流激光雷达的参数对比:

参数 机械式(如HDL-64) 固态(如Livox Horizon) MEMS(如Valeo SCALA)
线数 16-128 1(非重复扫描) 4-8
视场角 360°×30° 81.7°×25.1° 145°×5°
测距精度 ±2 cm ±2 cm ±5 cm
点频 ~1.3M pts/s ~240k pts/s ~50k pts/s

点云模型在融合中的关键问题是“数据关联”——也就是怎么把不同时刻、不同视角的点云对应起来。常用的方法有ICP(迭代最近点)和NDT(正态分布变换)。

注意:激光雷达点云存在“运动畸变”。如果雷达在运动过程中扫描,一帧点云里的点其实对应不同时刻的位姿。我做过一个高速移动机器人项目,没做运动补偿,结果建图全是拖影。解决办法是用IMU或轮式里程计给每个点插值位姿。

4.5 四种传感器模型对比

四种传感器各有长短,融合就是取长补短。下面这张表帮你快速对比:

传感器 测量内容 优点 缺点 典型融合角色
针孔相机 图像(纹理/特征) 信息丰富、成本低 受光照影响、无深度 视觉里程计、闭环检测
IMU 加速度/角速度 高频、不受环境干扰 漂移严重 短时间积分、运动预测
GPS 位置 无累积误差 低频、精度有限、有遮挡 全局校正
激光雷达 三维点云 精确深度、全天候 成本高、稀疏纹理 建图、定位、障碍物检测

4.6 知识体系总览

下面这张图把四种传感器模型的核心逻辑串起来了。你一看就明白:每个传感器输出什么、怎么建模、融合时怎么用。

传感器模型知识体系 针孔相机 IMU GPS 激光雷达 图像 + 内参 + 畸变 加速度 + 角速度 + 零偏 经纬高 + 精度等级 点云 + 强度 + 运动畸变 针孔投影 + 畸变校正 预积分 + 零偏估计 LLA→ECEF→ENU ICP/NDT + 运动补偿 传感器融合 位姿估计 / 建图 / 导航