传感器基础:激光雷达工作原理、深度相机与点云、里程计与IMU、传感器融合基础
做机器人导航,传感器就是我们的「眼睛」和「耳朵」。没有好的感知,再牛的算法也是白搭。今天咱们就聊聊局部规划里最常用的几类传感器,以及怎么把它们「揉」在一起用。
核心观点:单一传感器总有短板,融合才是王道。激光雷达精度高但怕雨雾,相机信息丰富但缺深度,IMU不怕遮挡但会漂移。取长补短,才能让机器人在复杂环境里稳稳当当。
一、激光雷达工作原理
激光雷达,说白了就是「用光来测距」。它发射一束激光,打到物体上反射回来,通过计算时间差或者相位差,就能知道距离。
我个人习惯把激光雷达分成两类:
- 单线激光雷达:只扫描一个平面,适合室内平地导航。比如RPLIDAR A1/A2,便宜好用,但看不到地面上的坑。
- 多线激光雷达:同时扫描多个平面,能构建3D点云。比如Velodyne VLP-16,16根激光束,360°覆盖。我在项目中用过它做室外无人车,效果不错,就是价格有点「感人」。
工作原理其实不复杂。以最常见的TOF(飞行时间)法为例:
距离 = (光速 × 飞行时间) / 2
嗯,这里要注意:激光雷达的精度受环境光影响很大。大太阳底下,信噪比会下降。我曾经在正午测试一台单线雷达,结果数据全是噪点,后来加了遮光罩才搞定。
避坑指南:选型时别只看「测距距离」,还要看「测距精度」和「帧率」。室内导航10米够用,但精度最好在±2cm以内。帧率低于10Hz的话,机器人跑快了容易撞墙。
二、深度相机与点云
深度相机,就是能告诉你「每个像素离我有多远」的相机。常见的方案有三种:
| 类型 | 原理 | 代表产品 | 优缺点 |
|---|---|---|---|
| 双目立体视觉 | 两个摄像头视差计算深度 | ZED、Intel T265 | 无主动光源,室外可用;但纹理少的地方会失效 |
| 结构光 | 投射红外点阵,变形计算深度 | Kinect v1、RealSense D415 | 精度高,但室外强光下基本废掉 |
| TOF | 发射红外脉冲,测量飞行时间 | Kinect v2、RealSense D435i | 帧率高,抗干扰好,但分辨率偏低 |
点云是什么?就是一堆三维坐标点的集合。每个点包含(x, y, z)信息,有时候还有颜色或反射强度。深度相机输出的就是点云数据。
你想想看,点云数据量有多大?一个640×480的深度图,就是30万个点。直接处理肯定扛不住。所以要做预处理:
- 体素滤波:把空间划分成小格子,每个格子只保留一个点。我一般设格子边长0.05米,能减少90%的数据量。
- 直通滤波:只保留感兴趣区域内的点。比如机器人高度1米,那就只保留0.2~0.8米高度的点,去掉地面和天花板。
- 半径滤波:如果一个点周围邻居太少,大概率是噪点,直接干掉。
注意:深度相机在玻璃、镜面、黑色物体上会「失明」。我在项目中遇到过机器人对着玻璃门直接撞上去的情况——因为深度相机测不到玻璃,以为前面是空的。后来加了激光雷达做互补才解决。
三、里程计与IMU
里程计,就是估算机器人「走了多远」的模块。最常用的是轮式里程计,通过编码器计算轮子转了多少圈,再换算成位移。
但轮式里程计有个致命问题:打滑。地面有水、有沙,或者急转弯,编码器数据就不准了。误差会累积,跑个几十米就偏得离谱。
IMU(惯性测量单元)就不一样了。它测量加速度和角速度,不依赖外部环境。但IMU也有自己的毛病:
- 零偏:静止时输出不为零,需要校准
- 温漂:温度变化会导致测量值偏移
- 积分漂移:加速度积分两次得到位移,误差会随时间平方增长
说白了,轮式里程计短期准但长期漂,IMU短期不准但长期稳定(如果做得好)。两者正好互补。
我的经验:IMU上电后一定要做静态初始化,采集几秒钟数据计算零偏。我曾经偷懒没做,结果机器人原地转圈,里程计以为它走了十米远。嗯,从那以后我再也不敢省这一步了。
四、传感器融合基础
传感器融合,就是把多个传感器的数据「揉」在一起,得到更准确、更鲁棒的估计。最经典的方法就是卡尔曼滤波。
卡尔曼滤波的核心思想很简单:
- 预测:根据上一时刻的状态和运动模型,猜一下当前状态
- 更新:用传感器观测值来修正这个猜测
- 加权平均:预测和观测都有不确定性,谁的噪声小就信谁多一点
举个实际例子。机器人用轮式里程计预测位置,同时用激光雷达匹配地图得到观测位置。卡尔曼滤波会把两者融合:
// 伪代码示意
预测位置 = 上一位置 + 轮式里程计增量
观测位置 = 激光雷达匹配结果
融合位置 = 预测位置 + 卡尔曼增益 × (观测位置 - 预测位置)
卡尔曼增益就是那个「信谁多一点」的权重。它由预测噪声和观测噪声共同决定。
在ROS2里,最常用的融合工具是robot_localization包。它支持多种传感器输入,输出融合后的odom。我一般这样配置:
- 输入:轮式里程计(/odom)、IMU(/imu/data)
- 输出:融合后的里程计(/odometry/filtered)
- 频率:50Hz,满足局部规划的需求
关键点:传感器融合不是「越多越好」。加一个噪声大的传感器,反而会降低整体精度。我见过有人把三个IMU都怼进去,结果融合出来的数据还不如单个准。选传感器要「精」不要「多」。
最后,用一张图总结本章的知识体系:
这张图把四个传感器和融合的关系画得很清楚。每个传感器都有自己的强项和短板,融合之后才能输出稳定可靠的位姿估计,供局部规划使用。
一句话总结:激光雷达给距离,深度相机给点云,里程计给位移,IMU给姿态。卡尔曼滤波把它们拧成一股绳,机器人才能走得稳、避得开。
可可精品资料库