环境感知基础:传感器类型与数据预处理

大家好,我是你们的老朋友。今天我们来聊聊避障决策的“眼睛”——环境感知。说白了,机器人要避开障碍物,首先得知道周围有什么。我刚开始做这个方向时,总觉得算法才是核心,后来被现实狠狠教育了一顿——传感器数据都搞不定,再牛的决策算法也是白搭。

这一章,我们聚焦三个核心问题:用什么传感器看世界?怎么看?看完之后数据怎么处理才能用?

传感器类型:三种主流方案

我个人习惯把传感器分成三类:激光雷达、摄像头、超声波。它们各有脾气,也各有绝活。

1. 激光雷达(LiDAR)

激光雷达,说白了就是“用激光测距”。它发射激光束,碰到物体反射回来,通过时间差算出距离。我最早接触的是单线激光雷达,那时候觉得它像个“扫描仪”,一圈一圈地画地图。

优点:

  • 精度高,毫米级误差
  • 不受光照影响,晚上也能用
  • 直接输出点云数据,距离信息天然就有

缺点:

  • 贵!多线雷达动辄几万块
  • 怕灰尘、雨雾,反射率低的物体(比如黑色轮胎)容易丢数据
  • 无法识别颜色和纹理
我的经验: 在室内AGV项目中,我常用单线激光雷达做SLAM。但有一次在仓库里,黑色货架腿死活扫不到,后来加了反光贴纸才搞定。嗯,这里要注意:激光雷达对深色物体不太友好。

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),给每个数据打上时间戳。然后做插值或最近邻匹配。

避坑指南: 我曾经在项目中,激光雷达和摄像头的时间差有50毫秒,结果机器人高速运动时,障碍物位置偏差了10厘米。后来我用了硬件同步(PPS信号),才把误差降到1厘米以内。

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)。

注意: 标定不是一劳永逸的。机器人用久了,螺丝松动、碰撞都可能让外参变化。我习惯每次开机做一次快速标定检查,或者用在线标定算法实时修正。

知识体系总览

下面这张图,是我自己总结的环境感知知识结构。你可以把它当作本章的“地图”。

环境感知基础:知识体系 传感器类型 数据预处理 坐标变换 激光雷达(LiDAR) 摄像头(Camera) 超声波(Ultrasonic) 滤波去噪 时间同步 降采样与裁剪 旋转矩阵 R 平移向量 T 外参标定 核心逻辑:传感器 → 预处理 → 坐标统一 → 决策算法 每个环节都可能引入误差,需要反复调试 多传感器融合是趋势,但前提是每个传感器都“靠谱”

好了,这一章的内容就到这里。环境感知是决策算法的基础,传感器选型、数据预处理、坐标变换,每一步都马虎不得。我个人觉得,与其追求昂贵的传感器,不如把现有传感器的数据用好。下一章我们会聊到“障碍物检测与跟踪”,到时候这些预处理的数据就能派上用场了。

本章要点回顾:

  • 激光雷达:精度高,怕黑色物体,适合建图
  • 摄像头:信息丰富,怕光照变化,适合识别
  • 超声波:便宜,怕干扰,适合近场补盲
  • 数据预处理:滤波、时间同步、降采样,缺一不可
  • 坐标变换:用旋转矩阵和平移向量统一坐标系

可可精品资料库