传感器基础:激光雷达、相机与IMU

大家好,我是你们这门课的老朋友。今天我们来聊聊传感器的那些事儿。

做地图构建,说白了就是让机器人「看懂」周围的世界。那它靠什么看?就是靠这些传感器。我个人习惯把传感器比作机器人的眼睛和耳朵——没有它们,后面再牛的算法也是白搭。

核心观点:传感器选型决定了你整个系统的上限。算法再好,也救不了烂数据。

传感器基础 · 知识体系 激光雷达 LiDAR TOF / 三角测距 点云数据格式 机械式 / 固态 线数 & 视场角 强度值 & 环号 相机 Camera 单目 / 双目 / 深度 针孔模型 & 畸变 视差 & 深度估计 RGB-D 结构光/ToF 帧率 & 分辨率 IMU & 里程计 加速度计 + 陀螺仪 零偏 & 噪声 预积分理论 轮式里程计 多传感器融合 互补 融合

一、激光雷达(LiDAR)原理与数据格式

激光雷达这东西,名字听着高大上,原理其实不复杂。它朝外发射一束激光,打到物体上弹回来,接收器记录时间差。光速是已知的,时间差一算,距离就出来了。这就是最经典的 TOF(飞行时间) 原理。

还有一种叫 三角测距法,靠的是激光发射点和接收器之间的几何关系来算距离。这种方案成本低,但精度和距离都不如 TOF。我在项目中遇到过用三角测距雷达做室内建图,一到阳光直射的地方就崩了——环境光干扰太严重。所以室外场景,老老实实上 TOF。

个人经验:选激光雷达时,别光看线数。视场角、帧率、测距精度、强度值分辨率,这些参数在实际融合中往往更关键。我曾经为了省预算选了16线雷达,结果建图时地面点太多,滤波调到吐。

数据格式方面,最常见的输出是 点云(Point Cloud)。每个点包含:

  • xyz 坐标:三维空间位置
  • intensity(强度值):反射回来的光强,可以用来区分路面和车道线
  • ring(环号):多线雷达中,这条激光属于第几圈
  • timestamp(时间戳):每个点的时间,用于去畸变

举个实际例子,Velodyne 的 VLP-16 输出的点云结构大概长这样:

// 伪代码示意
struct Point {
    float x;        // 单位:米
    float y;
    float z;
    float intensity; // 0-255
    uint16_t ring;   // 0-15
    double timestamp; // 微秒级
};

嗯,这里要注意:不同厂家的雷达,强度值的含义可能不一样。有的归一化到 0-1,有的是 0-255,还有的是 0-65535。做算法前一定要先看 datasheet,不然你写出来的特征提取全是错的。

二、相机原理:单目、双目与深度相机

相机这东西,大家天天用手机拍照,但做 SLAM 用的相机和手机相机有本质区别吗?有,也没有。核心原理都是 针孔模型——光线通过一个小孔,在成像平面上倒立成像。

但问题来了:单目相机拍出来的是一张 2D 图片,它天生缺少深度信息。你想想看,一张照片里,远处的人和近处的杯子,在像素上怎么区分?分不出来。这就是单目 SLAM 的尺度不确定性——你建出来的地图,不知道真实大小。

双目相机 怎么解决这个问题?它模仿人的两只眼睛。左右两个相机同时拍,同一个物体在左右图像上的位置有差异,这个差异叫 视差。视差越大,物体越近。通过三角测量,就能算出深度。

核心公式:深度 Z = (基线长度 B × 焦距 f) / 视差 d

基线越长,深度精度越高,但相机体积也越大。这是个 trade-off。

我在项目中用过双目做室外建图,最头疼的是 立体匹配 这一步。纹理稀疏的区域(比如白墙),左右图根本匹配不上,深度图全是黑洞。后来我加了个先验——用 IMU 预测的深度做引导,才勉强搞定。

深度相机(RGB-D) 就粗暴多了。它直接给你输出每个像素的深度值。主流方案有两种:

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

避坑指南:我曾经在户外用 RGB-D 相机做建图,结果大太阳底下深度值全是 NaN。深度相机对强环境光非常敏感,室内神器,室外基本废掉。如果你要做室外建图,老老实实上激光雷达或者双目。

相机还有一个绕不开的话题——畸变。镜头不是完美的针孔,拍出来的图像会有径向畸变(桶形/枕形)和切向畸变。做 SLAM 之前,必须先做相机标定,拿到内参和畸变系数。我建议用 OpenCV 的棋盘格标定法,拍个二三十张不同角度的图,跑一遍就出结果。

三、IMU 与里程计

IMU 全称是惯性测量单元,里面装了一个 加速度计 和一个 陀螺仪。加速度计测线加速度,陀螺仪测角速度。把这两个数据积分,理论上就能算出位置和姿态。

但理论很丰满,现实很骨感。IMU 有个致命问题——零偏 和 噪声。你想想看,加速度计哪怕有 0.01 m/s² 的零偏,积分 10 秒后位置误差就累积到 0.5 米了。再跑一分钟,位置都不知道飘到哪去了。

所以 IMU 不能单独用,它必须和其他传感器融合。最常见的做法是 IMU 预积分——把两帧图像之间的 IMU 数据提前积好,作为约束加入到优化方程里。这样既利用了 IMU 的高频信息,又避免了长时间积分漂移。

我的习惯:做 VIO(视觉惯性里程计)时,IMU 的初始化非常关键。我一般会让机器人先静止 2-3 秒,采集一组静态数据来估计零偏。这一步做不好,后面整个系统都是歪的。

轮式里程计 就简单多了。它靠轮子上的编码器,记录轮子转了多少圈,结合轮径算出移动距离。好处是短时间精度高,没有漂移。坏处是——轮子打滑就完蛋。我在项目中遇到过机器人在地砖上急转弯,轮子空转,里程计以为走了 1 米,实际才挪了 0.3 米。后来我加了 IMU 做辅助,检测到角速度异常时就降低轮式里程计的权重。

最后说一句,传感器融合不是简单的「取平均」。你得理解每个传感器的误差特性,用卡尔曼滤波或者因子图优化,把不同来源的信息按置信度加权融合。这才是地图构建的核心功底。

传感器 优点 缺点 典型应用场景
激光雷达 精度高、不受光照影响 成本高、无纹理信息 室外建图、自动驾驶
单目相机 成本低、信息丰富 尺度不确定、弱纹理失效 AR、室内视觉SLAM
双目相机 可测深度、户外可用 计算量大、基线限制 室外导航、无人机
深度相机 直接输出深度、帧率高 强光失效、距离有限 室内建图、机器人抓取
IMU 高频、不受环境干扰 积分漂移、零偏不稳定 多传感器融合、运动估计
轮式里程计 短时精度高、无漂移 打滑失效、只能测平面 轮式机器人、AGV

好了,传感器这块我们就聊到这。每种传感器都有自己的脾气,摸透了它们,你才能搭出靠谱的建图系统。

可可精品资料库