传感器与数据:相机模型(针孔、鱼眼)、IMU、激光雷达、RGB-D相机

做SLAM这么多年,我最大的感触就是:传感器选对了,项目就成功了一半。你想想看,数据质量直接决定了后端优化的天花板。今天咱们就把几种主流传感器掰开揉碎了聊一聊。

一、相机模型:针孔与鱼眼

相机是SLAM的眼睛。但不同眼睛看世界的方式不一样。

1. 针孔相机模型

这是最经典的模型。说白了就是小孔成像原理。光线穿过一个小孔,在成像平面上倒立成像。

数学上,我们用内参矩阵K来描述:

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

其中fx、fy是焦距,cx、cy是光心偏移。我个人习惯在标定时至少拍20张不同角度的棋盘格照片,这样内参才稳。

核心公式: 世界点P = (X,Y,Z) 投影到像素坐标 (u,v) 的过程:

u = fx * X/Z + cx

v = fy * Y/Z + cy

嗯,这里要注意:针孔模型假设光线是直线传播的。但实际镜头有畸变。径向畸变和切向畸变必须校正。我在项目中遇到过因为忘记校正畸变,导致地图漂移了半米的情况——从那以后我再也不敢跳过这步。

2. 鱼眼相机模型

鱼眼相机不一样。它的视场角可以到180度甚至更大。为什么?因为它故意引入了很大的畸变,把更多光线「挤」进传感器。

鱼眼模型常用的是等距投影模型:

r = f * θ

其中r是像点到光心的距离,θ是入射光线与光轴的夹角。说白了,针孔模型是r = f * tan(θ),鱼眼是r = f * θ。这个区别很关键。

我的经验: 鱼眼相机在室内SLAM中特别好用。因为墙角、走廊这些场景,大视场角能同时看到更多特征点。但标定要更仔细,我建议用Omnidirectional Camera Calibration Toolbox,比OpenCV自带的更准。

二、IMU:惯性测量单元

IMU测量加速度和角速度。它不依赖外部环境,所以是SLAM中「最后一道防线」——当视觉失效时,IMU还能撑一会儿。

IMU的数学模型:

a_measured = a_true + b_a + n_a
ω_measured = ω_true + b_g + n_g

b_a和b_g是零偏,n_a和n_g是噪声。零偏会随时间缓慢变化,这就是所谓的「bias random walk」。

避坑指南: 我曾经在无人机SLAM项目里,IMU的零偏没初始化好,结果起飞后3秒姿态就飘了。后来我养成了习惯:上电后静止采集2秒数据,取平均作为初始零偏估计。

IMU的积分过程也很关键。从t时刻到t+Δt:

位置: p(t+Δt) = p(t) + v(t)Δt + 0.5*a(t)Δt²
速度: v(t+Δt) = v(t) + a(t)Δt
姿态: R(t+Δt) = R(t) * exp(ω(t)Δt)

这里exp是李代数上的指数映射。你想想看,如果直接用欧拉角积分,万向锁问题会让你头疼死。

三、激光雷达

激光雷达直接测量距离,精度高,但稀疏。2D激光雷达扫一个平面,3D激光雷达扫多个平面。

激光雷达的核心原理是TOF(飞行时间):

距离 = 光速 × 飞行时间 / 2

常见的激光雷达数据格式:

参数 说明 典型值
线数 扫描线的数量 16线、32线、64线
视场角 水平和垂直范围 水平360°,垂直±15°
测距精度 距离测量误差 ±2cm
点云密度 每秒点数 30万~200万点/秒

我个人觉得,激光SLAM最大的优势是尺度确定。视觉SLAM有尺度模糊问题,激光雷达直接给距离,省心很多。但缺点也明显:在长走廊、玻璃墙等场景,激光会打飞或者穿透。

关键点: 激光雷达和IMU的联合标定非常重要。我曾经见过一个团队,激光和IMU的外参差了5度,建出来的地图整个是歪的。标定方法可以用Kalibr或者lidar_align工具包。

四、RGB-D相机

RGB-D相机同时输出彩色图和深度图。它解决了单目相机「不知道深度」的痛点。

深度获取方式主要有两种:

  • 结构光法: 投射红外散斑,通过散斑变形计算深度。代表:Kinect v1、Intel RealSense D415
  • TOF法: 发射红外脉冲,测量飞行时间。代表:Kinect v2、Azure Kinect

RGB-D相机的数据格式:

彩色图: 640×480 或 1280×720, 8位RGB
深度图: 640×480, 16位, 单位mm
有效距离: 0.5m ~ 5m (结构光) 或 0.5m ~ 8m (TOF)

嗯,这里有个坑:RGB-D相机的深度图在边缘区域噪声很大。我做过实验,距离超过4米后,深度误差会从±1cm飙升到±5cm。所以建议只使用有效距离内的数据。

我的习惯: 拿到RGB-D数据后,先做一步深度图滤波。用中值滤波去掉孤立噪点,再用双边滤波保持边缘。这样后续的点云生成质量会好很多。

五、传感器融合:为什么需要多传感器?

单一传感器都有短板。相机怕光照变化,IMU有漂移,激光雷达怕反射面,RGB-D相机有效距离短。所以现代SLAM系统基本都是多传感器融合。

我画了一张图,帮你理清各传感器的关系:

SLAM多传感器融合框架 针孔相机 鱼眼相机 IMU 激光雷达 RGB-D相机 传感器融合 视觉+惯性+激光 地图 + 轨迹 各传感器优势互补,提升鲁棒性

从这张图你能看到,不同传感器各自采集数据,然后送到融合模块。融合的方式可以是松耦合(各传感器独立估计,最后加权)或紧耦合(在优化框架里一起优化)。我个人更推荐紧耦合,精度更高,但计算量也更大。

总结一下: 没有完美的传感器,只有合适的组合。做SLAM项目时,先搞清楚你的场景需求——室内还是室外?动态还是静态?精度要求多高?然后选传感器组合。我见过太多人一上来就堆传感器,结果标定没做好,数据质量反而更差。

好了,这一章的内容就到这里。传感器是SLAM的基石,理解它们的特性和局限,比会调参数重要得多。


专注资料整理