第1章:传感器基础——激光雷达、IMU、轮式里程计与标定

各位同学,欢迎来到《激光雷达SLAM建图与定位技术实战》的第一章。

做SLAM,说白了就是让机器人回答三个问题:“我在哪?”、“周围长什么样?”、“我该怎么走?”。而要回答这些问题,首先得搞清楚我们手头的传感器能提供什么信息。

这一章,我们就来聊聊最核心的几种传感器:激光雷达、IMU、轮式里程计,以及它们之间的标定。嗯,这部分是基础,但也是后面所有算法能跑通的前提。

1.1 激光雷达:SLAM的“眼睛”

激光雷达,英文叫LiDAR,是SLAM系统里最可靠的传感器之一。它直接测量距离,精度高,不受光照影响。我个人习惯把激光雷达比作“尺子”,一把能快速旋转的尺子。

1.1.1 工作原理:TOF vs 三角法

市面上主流的激光雷达,工作原理分两种:TOF(飞行时间法)三角法

TOF法,顾名思义,就是发射一束激光,打到物体上反射回来,测量这束光飞了多久。光速是恒定的,时间乘以光速再除以2,就是距离。

公式很简单:

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

TOF雷达的优点是测距远(几十米到上百米),精度高,抗干扰能力强。我在项目中用过16线和32线的TOF雷达,效果很稳定。缺点是成本高,对时间测量电路要求极高。

三角法则不同。它利用激光发射点和接收相机之间的基线,通过几何三角关系计算距离。激光打到物体上,在相机成像平面形成一个光斑。物体越近,光斑位置偏移越大。

它的优点是近距离(比如0.1-10米)精度非常高,而且成本低。很多扫地机器人用的就是三角法雷达。但缺点也很明显——远了就不行,而且容易受环境光干扰。

核心区别总结:

特性 TOF法 三角法
测距原理 光飞行时间 三角几何
有效距离 远(>10m) 近(<10m)
近距离精度 一般
成本
典型应用 自动驾驶、AGV 扫地机器人

我的经验:如果你做室内小场景SLAM,预算有限,三角法雷达完全够用。但要做室外或大场景,老老实实上TOF。我曾经在一个项目中为了省钱用了三角法雷达做室外建图,结果阳光一强,数据全是噪点,最后不得不返工换雷达。

1.2 IMU惯性测量单元:SLAM的“内耳”

IMU,全称Inertial Measurement Unit,通常包含三轴加速度计三轴陀螺仪。它测量的是自身的加速度和角速度,不依赖外部环境。

你想想看,激光雷达在快速旋转时,或者机器人经过颠簸路面时,点云会变形。这时候IMU就派上用场了。它能提供高频的运动信息,用来补偿激光雷达的运动畸变。

IMU有两个致命缺点:

  • 零偏(Bias):即使静止不动,IMU的输出也不是零,有一个固定的偏移。这个偏移会随时间漂移。
  • 积分误差:加速度积分得速度,速度积分得位移。每次积分都会累积误差,时间一长,位置就飞了。

所以,IMU不能单独用来做长时间定位,但它是多传感器融合中不可或缺的一环。我个人习惯把IMU当作“短距离内的精确运动估计器”,配合激光雷达或视觉,效果非常好。

避坑指南:我曾经在一个项目中,IMU的零偏没有校准好,导致激光雷达点云去畸变后,墙壁都变成了弧形。后来花了整整两天时间重新做IMU标定,才把问题解决。所以,拿到IMU的第一件事,就是做静态零偏标定。

1.3 轮式里程计:最朴素的定位方式

轮式里程计,就是通过编码器测量轮子转了多少圈,结合轮子半径,计算出机器人走了多远、转了多少弯。

公式也很直观:

位移 = 轮子周长 × 编码器脉冲数 / 每圈脉冲数

对于差速轮机器人,左右轮的速度差决定了旋转角速度。

轮式里程计的优点:

  • 更新频率高(通常100Hz以上)
  • 短距离内精度不错
  • 成本低,几乎每台机器人都有

缺点:

  • 轮子打滑时,数据完全不可信
  • 长时间运行,累积误差严重
  • 无法感知侧向滑动

嗯,这里要注意:轮式里程计在光滑地面或地毯上,误差会急剧增大。我建议在做SLAM时,不要把轮式里程计当作主要定位源,而是作为辅助信息,比如用来初始化或做短时间预测。

1.4 传感器标定简介:让它们“说同一种语言”

传感器标定,说白了就是找到不同传感器之间的相对位姿关系。比如激光雷达装在机器人前方,IMU装在底盘中心,它们之间的平移和旋转是多少?

如果不做标定,激光雷达测到的障碍物位置,和IMU估计的机器人位置,就对不上。你想想看,这会导致建图出现重影,定位也会飘。

常见的标定内容:

  • 激光雷达-IMU标定:确定LiDAR坐标系和IMU坐标系之间的旋转和平移。常用工具如lidar_alignkalibr
  • 激光雷达-轮式里程计标定:确定LiDAR坐标系和机器人基座坐标系的关系。通常通过手动测量或运动学约束来求解。
  • IMU内参标定:校准加速度计和陀螺仪的零偏、尺度因子等。可以用imu_utils工具。

标定的核心思想:让传感器同时观测同一个目标(比如一个标定板或一个特征点),然后通过优化算法,求解出它们之间的变换矩阵。这个过程,本质上就是一个最小二乘问题。

我记得刚开始做SLAM时,总觉得标定是浪费时间,直接拿默认参数就跑。结果数据一塌糊涂,折腾了半个月才发现是标定没做好。从那以后,我养成了一个习惯:每次换传感器或重新安装,第一件事就是重新标定

我的建议:对于初学者,可以先从lidar_align这个开源工具入手。它只需要你录制一段包含激光雷达和IMU数据的bag文件,然后跑一下脚本,就能得到标定结果。虽然不一定是最优的,但足够让你把SLAM跑起来。

本章小结

这一章我们聊了三种核心传感器:

  • 激光雷达:提供精确的距离信息,TOF适合远距离,三角法适合近距离低成本场景。
  • IMU:提供高频的加速度和角速度,用于运动补偿和短时间估计,但存在零偏和积分误差。
  • 轮式里程计:简单可靠,但怕打滑,适合做辅助定位。
  • 传感器标定:是融合的前提,千万别跳过。

下一章,我们将进入实战,搭建ROS环境,并编写第一个激光雷达数据读取节点。到时候,你会亲手看到激光雷达点云在Rviz中显示出来。