第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)。深度图的每个像素值,代表该点到相机的距离。
深度相机的工作原理主要有三种:
- 结构光法:投射红外光斑,通过变形计算深度。代表产品:Kinect v1
- 飞行时间法(ToF):发射红外光脉冲,测量飞行时间。代表产品:Kinect v2、Intel RealSense
- 双目视觉法:用两个摄像头,通过视差计算深度。代表产品: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建图、远距离避障 |
| 深度相机 | 信息丰富、视野宽、便宜 | 怕强光、计算量大、精度一般 | 人机交互、近距离避障 |
实际项目中,我很少只用一种传感器。通常是激光雷达做主力,超声波补盲区,深度相机做视觉识别。多传感器融合才是王道。
知识体系总览
下面这张图,帮你理清本章的核心逻辑:
嗯,这一章的内容就到这里。三种传感器各有千秋,没有谁绝对好。关键是根据你的应用场景,选对工具,避开那些我踩过的坑。