第3章:传感器模型——机器人的“感官世界”

大家好,我是你们的老朋友。今天我们来聊聊避障算法的“眼睛”和“耳朵”——传感器模型。

说实话,我见过太多同学一上来就调算法,结果传感器数据都没搞明白。嗯,这就像闭着眼睛走路,摔跤是迟早的事。我个人习惯是,先花时间把传感器的脾气摸透,再动手写代码。

这一章,我们聚焦三种最常用的传感器:超声波、激光雷达、深度相机。它们各有各的脾气,也各有各的用武之地。

3.1 超声波传感器:便宜但“不简单”

超声波传感器,说白了就是靠“回声定位”。它发射一束人耳听不到的高频声波,然后等它碰到物体弹回来。通过计算发射和接收的时间差,就能算出距离。

公式很简单:

距离 = (声速 × 时间差) / 2

注意要除以2,因为声波走了个来回。

我在项目中遇到过一个坑:超声波对软性物体(比如海绵、布料)几乎无效。声波被吸收了,回波太弱,传感器直接报错。你想想看,如果机器人前面是一块窗帘,超声波可能完全“看不见”它。

⚠️ 避坑指南
我曾经在扫地机器人项目里,用超声波检测地毯边缘。结果地毯太厚,声波被吸收,机器人直接撞了上去。后来我加了红外传感器做互补,才解决这个问题。

超声波的主要参数:

参数 典型值 说明
测量范围 2cm - 4m 近处有盲区,远处精度下降
精度 ±1cm 受温度、湿度影响
波束角 15° - 30° 角度越大,越容易串扰
💡 个人经验
如果你用多个超声波传感器,记得分时触发。否则它们互相干扰,测出来的数据全是乱的。我一般让它们轮流“说话”,间隔至少50ms。

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

激光雷达,简称LiDAR。它用激光束代替声波,精度高了一个数量级。它发射激光脉冲,测量反射回来的时间,原理和超声波类似,但用的是光速。

为什么激光比超声波准?因为光速是恒定的,不受温度影响。而且激光束很细,可以精确测量小物体。

激光雷达输出的数据叫点云。说白了,就是一堆三维坐标点 (x, y, z)。每个点代表激光打到物体上的位置。

一个典型的2D激光雷达点云数据长这样:

// 伪代码:激光雷达数据
scan = {
  angle_min: -135°,    // 起始角度
  angle_max: 135°,     // 结束角度
  angle_increment: 0.5°, // 角度分辨率
  ranges: [2.3, 2.5, 2.8, ...], // 每个角度对应的距离
  intensities: [100, 95, 80, ...] // 反射强度
}

我记得第一次用激光雷达做避障时,发现玻璃墙完全测不到。激光直接穿透玻璃,打到后面的墙上去了。嗯,这就是所谓的“透明物体问题”。

🔑 核心要点
激光雷达的精度取决于两个因素:
1. 角分辨率(角度步长越小,点云越密)
2. 测距精度(通常±2cm以内)

常见的激光雷达类型:

  • 2D激光雷达:只扫一个平面,适合室内导航
  • 3D激光雷达:多线束,能扫出立体环境,但价格贵
  • 固态激光雷达:没有旋转部件,寿命长,但视场角小
⚠️ 避坑指南
我曾经在室外用2D激光雷达,结果地面不平,雷达扫到了地面上的杂草,误判为障碍物。后来我加了高度滤波,只保留一定高度范围内的点云。

3.3 深度相机:RGB-D数据

深度相机,也叫RGB-D相机。它同时输出两样东西:一张彩色图(RGB)和一张深度图(Depth)。深度图的每个像素值,代表该点到相机的距离。

深度相机的工作原理主要有三种:

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

RGB-D数据长这样:

// 伪代码:RGB-D数据
rgb_image = [640x480x3]  // 彩色图像
depth_image = [640x480]  // 深度图像,每个像素是距离(毫米)

// 将深度图转为点云
for each pixel (u, v):
    z = depth_image[u][v]  // 深度值
    x = (u - cx) * z / fx  // 相机内参
    y = (v - cy) * z / fy
    point_cloud.append([x, y, z])

我个人习惯用深度相机做近距离避障(1米以内)。因为它的视野宽,能看清整个场景。但远距离精度不如激光雷达。

🔑 核心要点
深度相机的三大痛点:
1. 受环境光影响大(阳光下基本废掉)
2. 对纯色/反光表面无效
3. 计算量大(尤其是双目视觉)

三种传感器的对比:

传感器 优点 缺点 典型场景
超声波 便宜、不怕光、能测透明物体 精度低、有盲区、易串扰 近距离避障、液位检测
激光雷达 精度高、速度快、不受光照影响 贵、怕玻璃、怕雨雾 SLAM建图、远距离避障
深度相机 信息丰富、视野宽、便宜 怕强光、计算量大、精度一般 人机交互、近距离避障
💡 个人经验
实际项目中,我很少只用一种传感器。通常是激光雷达做主力,超声波补盲区,深度相机做视觉识别。多传感器融合才是王道。

知识体系总览

下面这张图,帮你理清本章的核心逻辑:

传感器模型知识体系 超声波传感器 激光雷达 (LiDAR) 深度相机 (RGB-D) 原理:回声定位 特点:便宜、有盲区 避坑:软物体吸收、串扰 原理:激光飞行时间 输出:点云数据 (x,y,z) 避坑:玻璃、地面杂草 原理:结构光/ToF/双目 输出:RGB + 深度图 避坑:强光、反光表面 多传感器融合 没有完美的传感器,只有合理的组合

嗯,这一章的内容就到这里。三种传感器各有千秋,没有谁绝对好。关键是根据你的应用场景,选对工具,避开那些我踩过的坑。


专注资料整理