环境感知基础:传感器类型与数据预处理
大家好,我是你们的老朋友。今天我们来聊聊避障决策的“眼睛”——环境感知。说白了,机器人要避开障碍物,首先得知道周围有什么。我刚开始做这个方向时,总觉得算法才是核心,后来被现实狠狠教育了一顿——传感器数据都搞不定,再牛的决策算法也是白搭。
这一章,我们聚焦三个核心问题:用什么传感器看世界?怎么看?看完之后数据怎么处理才能用?
传感器类型:三种主流方案
我个人习惯把传感器分成三类:激光雷达、摄像头、超声波。它们各有脾气,也各有绝活。
1. 激光雷达(LiDAR)
激光雷达,说白了就是“用激光测距”。它发射激光束,碰到物体反射回来,通过时间差算出距离。我最早接触的是单线激光雷达,那时候觉得它像个“扫描仪”,一圈一圈地画地图。
优点:
- 精度高,毫米级误差
- 不受光照影响,晚上也能用
- 直接输出点云数据,距离信息天然就有
缺点:
- 贵!多线雷达动辄几万块
- 怕灰尘、雨雾,反射率低的物体(比如黑色轮胎)容易丢数据
- 无法识别颜色和纹理
2. 摄像头
摄像头就像机器人的眼睛。它能看到颜色、纹理、形状,甚至能识别出“那是个水杯”还是“那是个灭火器”。
优点:
- 信息丰富,能识别物体类别
- 便宜,一个工业相机几百块
- 可以做人脸识别、交通标志识别
缺点:
- 受光照影响大,逆光、暗光下表现差
- 没有直接的深度信息,需要双目或结构光
- 计算量大,处理一帧图像可能需要几十毫秒
3. 超声波
超声波传感器,原理和蝙蝠一样。它发射超声波,碰到物体反射回来,通过时间差算距离。你想想看,它是不是很像“声纳”?
优点:
- 便宜,一个几块钱
- 不怕透明物体(比如玻璃门),激光雷达反而会穿透
- 近距离(0.1-3米)精度不错
缺点:
- 远距离精度差,发散角大(像个喇叭)
- 容易受干扰(比如两个超声波同时发射会串扰)
- 无法区分物体形状
传感器对比:一张表说清楚
| 特性 | 激光雷达 | 摄像头 | 超声波 |
|---|---|---|---|
| 测距精度 | 高(毫米级) | 低(需双目) | 中(厘米级) |
| 环境适应性 | 不受光照,怕雨雾 | 受光照影响大 | 不受光照,怕干扰 |
| 成本 | 高 | 低 | 极低 |
| 输出数据 | 点云(3D坐标) | 图像(像素) | 距离值(标量) |
| 典型应用 | SLAM、建图 | 目标识别、语义分割 | 近场避障、停车辅助 |
数据预处理:让传感器“说人话”
传感器拿到的原始数据,说白了就是一堆“噪音”。我见过很多新手,拿到激光雷达数据直接丢给算法,结果定位飘得妈都不认识。数据预处理,就是把这些原始数据变成干净、可用的信息。
1. 滤波去噪
激光雷达的点云里,经常有“飞点”——就是突然冒出来的孤立点。摄像头图像里,有椒盐噪声、高斯噪声。怎么办?
- 激光雷达: 用半径滤波或统计滤波。比如,一个点周围3厘米内没有其他点,就认为是噪声,删掉。
- 摄像头: 用中值滤波或高斯滤波。中值滤波对付椒盐噪声特别好,高斯滤波适合平滑图像。
代码示例:PCL点云半径滤波
// C++ PCL 半径滤波示例
pcl::RadiusOutlierRemoval<pcl::PointXYZ> ror;
ror.setInputCloud(cloud);
ror.setRadiusSearch(0.03); // 3厘米半径
ror.setMinNeighborsInRadius(2); // 至少2个邻居
ror.filter(*cloud_filtered);
2. 时间同步
多传感器融合时,时间不同步是个大坑。摄像头是30帧/秒,激光雷达是10Hz,超声波可能只有5Hz。你想想看,如果激光雷达看到障碍物时,摄像头还在看上一帧的画面,那融合出来的位置就是错的。
我习惯的做法是:用一个统一的时钟源(比如ROS的Time),给每个数据打上时间戳。然后做插值或最近邻匹配。
3. 数据裁剪与降采样
激光雷达一帧可能有几十万个点,全部处理太慢了。摄像头一帧图像几百万像素,也没必要全分析。所以,我们要做裁剪和降采样。
- 激光雷达: 只保留感兴趣区域(比如前方5米、左右2米),然后用体素滤波降采样(比如每个1厘米立方体只保留一个点)。
- 摄像头: 裁剪掉天空和地面,只保留障碍物可能出现的区域。然后缩小分辨率(比如从1920x1080降到640x480)。
坐标变换:把数据对齐到同一个世界
每个传感器都有自己的坐标系。激光雷达的坐标系是“以雷达为中心”,摄像头是“以镜头为中心”,超声波是“以探头为中心”。要让它们的数据能一起用,必须统一到一个坐标系下。
说白了,就是做矩阵乘法。每个传感器都有一个“外参”——相对于机器人基座的旋转和平移矩阵。
坐标变换公式:
P_base = R * P_sensor + T
其中:
- P_sensor:传感器坐标系下的点
- R:旋转矩阵(3x3)
- T:平移向量(3x1)
- P_base:机器人基座坐标系下的点
我刚开始做标定时,总觉得手动测量外参就够了。后来发现,哪怕差1度,10米外的障碍物就偏了17厘米。所以,我建议用自动标定工具(比如ROS的camera_calibration、lidar_camera_calibration)。
知识体系总览
下面这张图,是我自己总结的环境感知知识结构。你可以把它当作本章的“地图”。
好了,这一章的内容就到这里。环境感知是决策算法的基础,传感器选型、数据预处理、坐标变换,每一步都马虎不得。我个人觉得,与其追求昂贵的传感器,不如把现有传感器的数据用好。下一章我们会聊到“障碍物检测与跟踪”,到时候这些预处理的数据就能派上用场了。
本章要点回顾:
- 激光雷达:精度高,怕黑色物体,适合建图
- 摄像头:信息丰富,怕光照变化,适合识别
- 超声波:便宜,怕干扰,适合近场补盲
- 数据预处理:滤波、时间同步、降采样,缺一不可
- 坐标变换:用旋转矩阵和平移向量统一坐标系