传感器基础:机器人感知世界的“眼睛”

大家好,我是你们的老朋友。今天咱们聊聊传感器。说实话,做机器人避障这么多年,我最大的感触就是——传感器选对了,项目就成功了一半。你想想看,算法再牛,如果传感器数据是坨垃圾,那输出结果也只能是垃圾。这就是所谓的“垃圾进,垃圾出”。

这一章,我会带你逐一拆解几种主流传感器:激光雷达、深度相机、超声波和红外。最后再聊聊传感器融合——嗯,这才是真正让机器人“开窍”的关键。

一、激光雷达(LiDAR):精度之王

激光雷达,英文叫LiDAR,全称是Light Detection And Ranging。说白了,就是通过发射激光束,测量目标距离。原理其实很简单:发射一束激光,打到物体上反射回来,记录时间差,乘以光速再除以2,距离就出来了。

核心公式:距离 = (光速 × 飞行时间) / 2

我个人习惯把LiDAR分成两类:机械旋转式和固态式。机械式的,就是那个顶上有个旋转小帽子的,像扫地机器人头顶那个小蘑菇。固态式的呢,没有旋转部件,靠电子扫描,体积更小、寿命更长。

数据格式方面,LiDAR输出的通常是点云数据。每个点包含三个信息:

  • x, y, z:三维空间坐标
  • intensity:反射强度,可以用来区分不同材质
  • ring:线束编号(多线LiDAR才有)

我在项目中遇到过一件事:有一次用16线LiDAR做室外导航,结果下雨天数据全是噪点。后来才发现,雨滴对激光的反射太强了,导致大量假点。所以,LiDAR在雨雾天气下性能会大打折扣,这点一定要注意。

避坑指南:我曾经在室内用单线LiDAR做SLAM,结果遇到玻璃墙直接“穿模”了。因为激光会穿透透明玻璃,导致测距失效。后来我换成了带反射强度过滤的方案,才勉强解决。如果你也遇到玻璃障碍物,建议配合其他传感器一起用。

二、深度相机(RGB-D):看得见,摸得着

深度相机,也叫RGB-D相机。它不仅能拍彩色照片,还能告诉你每个像素离你有多远。常见的原理有三种:

  1. 结构光法:投射红外光斑,通过光斑变形计算深度。代表产品:Kinect v1、Intel RealSense。
  2. 飞行时间法(ToF):发射红外脉冲,测量飞行时间。代表产品:Kinect v2、苹果Face ID。
  3. 双目立体视觉:两个摄像头模拟人眼,通过视差计算深度。代表产品:ZED相机。

我个人比较偏爱ToF方案,因为它在室内外都能用,而且不受环境光影响太大。但结构光在强光下基本就废了——你想想看,太阳光里也有红外成分,直接把投射的红外光斑淹没了。

数据格式方面,RGB-D相机输出的是对齐后的彩色图和深度图。深度图每个像素值代表该点到相机的距离,单位通常是毫米。举个例子:

// 假设深度图中的一个像素值为 850
// 表示该点距离相机 850mm,也就是 0.85 米
uint16_t depth_value = depth_image.at<uint16_t>(y, x);
float distance_m = depth_value / 1000.0f;

注意:深度相机的有效测距范围通常有限。比如Intel RealSense D435,有效距离只有0.1米到10米。超出这个范围,数据就不可靠了。我见过有人拿它做室外远距离避障,结果数据全是噪声,白白浪费了算力。

三、超声波与红外传感器:便宜但够用

这两种传感器,说白了就是“穷人的避障方案”。虽然精度不如LiDAR和深度相机,但在某些场景下,它们反而更靠谱。

特性 超声波传感器 红外传感器
工作原理 发射超声波,接收回波 发射红外光,检测反射强度
测距范围 2cm ~ 4m 10cm ~ 1.5m
精度 ±1cm左右 ±5cm左右
受环境光影响 大(强光下失效)
受材质影响 吸音材料(如海绵)会失效 黑色物体吸收红外,测距不准
典型应用 扫地机器人沿墙、倒车雷达 近距离避障、人感检测

我记得有一次做教育机器人,预算有限,只能用超声波。结果发现,如果两个超声波传感器靠得太近,它们会互相干扰——一个发射的信号被另一个接收了,导致测距错误。解决方案是分时复用,让它们轮流工作。

红外传感器呢,我建议只用在室内近距离场景。为什么?因为阳光里的红外成分太强了,室外基本没法用。而且黑色物体对红外吸收严重,测距结果会偏大。你想想看,一个黑色桌腿,红外传感器可能测出1米,实际只有0.5米,这避障能靠谱吗?

四、传感器融合:1+1 > 2

好了,单个传感器的优缺点你都知道了。那问题来了:怎么让它们协同工作?这就是传感器融合要干的事。

传感器融合,说白了就是取长补短。比如:

  • LiDAR精度高,但怕玻璃和雨雾
  • 深度相机能识别颜色和纹理,但测距范围有限
  • 超声波不怕光,但精度低、有盲区
  • 红外便宜,但受环境影响大

把它们的数据融合在一起,就能得到更稳定、更可靠的感知结果。常见的融合方法有:

  1. 卡尔曼滤波:最经典的融合算法,适合线性系统
  2. 扩展卡尔曼滤波(EKF):处理非线性系统,比如机器人转弯时的状态估计
  3. 粒子滤波:适合非高斯分布的场景,比如全局定位
  4. 贝叶斯融合:基于概率论的融合方法,简单直观

我个人习惯用EKF做传感器融合。为什么?因为大多数机器人的运动模型都是非线性的,EKF正好能处理。而且实现起来不算太复杂,适合工程落地。

核心思想:传感器融合不是简单地把数据平均一下,而是根据每个传感器的置信度,加权融合。置信度高的传感器,权重就大;置信度低的,权重就小。这样即使某个传感器突然失效,整体系统也不会崩。

下面这张图,是我自己总结的传感器融合知识框架,你可以看看:

传感器融合知识框架 激光雷达 (LiDAR) 深度相机 (RGB-D) 超声波传感器 红外传感器 数据预处理:去噪、时间戳对齐、坐标系统一 融合算法 卡尔曼滤波 | 扩展卡尔曼滤波 | 粒子滤波 | 贝叶斯融合 输出:融合后的障碍物位置、速度、置信度 应用:路径规划、避障决策、地图构建

你看,整个流程就是:多个传感器采集数据 → 预处理(去噪、对齐) → 融合算法处理 → 输出融合结果 → 用于避障决策。每一步都很关键,缺一不可。

我的经验:刚开始做融合时,别一上来就上EKF或粒子滤波。先试试简单的加权平均,看看效果。如果不行,再逐步升级算法。我见过太多人一上来就搞复杂算法,结果调参调到崩溃,最后发现简单的方案反而更稳定。

好了,这一章的内容就到这里。传感器是机器人感知的基础,选对传感器、用好融合方法,你的避障算法就成功了一大半。下一章我们会深入讲点云处理,到时候再聊。


公众号:蓝海资料掘金营,微信deep3321