第二章:传感器与感知——让机器人“看见”世界

做机器人这么多年,我最大的感触就是:没有好的感知,再牛的算法也是白搭。你想想看,一个盲人就算脑子再聪明,走路也得撞墙。传感器就是机器人的眼睛和耳朵,选对了,事半功倍;选错了,后面全是坑。

今天咱们就聊聊四种最常见的避障传感器:激光雷达、深度相机、超声波、红外。我会把它们的原理、优缺点、选型要点,以及怎么构建环境感知模型,一次性讲透。

核心观点:没有完美的传感器,只有合适的组合。多传感器融合才是王道。

2.1 激光雷达(LiDAR)——精度之王

激光雷达的原理其实很简单:发射激光束,打到物体上反射回来,通过时间差算距离。说白了就是“激光测距仪转着圈扫”。

我个人的习惯是,室内移动机器人首选单线激光雷达。为什么?因为便宜、稳定、够用。我在2019年做过一个仓储AGV项目,用的就是单线激光雷达,配合自适应蒙特卡洛定位,精度能做到±2cm,完全够用。

但要注意,激光雷达也有坑:

  • 单线 vs 多线:单线只能扫一个平面,适合室内平地;多线能扫三维,适合户外或复杂地形,但价格翻好几倍
  • 机械式 vs 固态:机械式有旋转部件,寿命有限;固态式没活动部件,但视场角小
  • 抗干扰能力:强光下、雨雾天,激光雷达性能会下降

选型建议:室内平地用单线(如RPLIDAR A1/A2),户外或无人机用多线(如Velodyne VLP-16),预算有限可以考虑固态激光雷达。

2.2 深度相机——看得更“立体”

深度相机和普通相机最大的区别是:它不仅能拍出颜色,还能知道每个像素离你多远。常见的原理有三种:

  • 双目立体视觉:两个摄像头像人眼一样,通过视差算深度。优点是成本低,缺点是计算量大,弱光下表现差
  • 结构光:投射红外点阵,通过变形算深度。精度高,但室外强光下基本废了
  • ToF(飞行时间法):发射红外光脉冲,测反射时间。速度快,但分辨率低

我记得有一次做服务机器人项目,客户要求识别桌面上的杯子。我一开始用单线激光雷达,结果杯子太细,根本扫不到。后来换成Intel RealSense D435,用深度图做目标检测,效果立竿见影。

避坑指南:我曾经在户外项目里用过结构光相机,结果大太阳底下直接“瞎了”。后来才明白,结构光只适合室内。户外老老实实用双目或ToF。

2.3 超声波传感器——便宜但“笨”

超声波传感器,说白了就是蝙蝠的回声定位。发射超声波,等回声回来,算时间差。优点很明显:便宜(几块钱一个)、不怕光线、能测透明物体(比如玻璃)。

但缺点也很致命:

  • 精度低:一般只能到厘米级,而且有盲区(太近测不到)
  • 串扰严重:多个超声波同时工作会互相干扰
  • 受环境影响大:温度、湿度、空气流动都会影响

我建议,超声波只适合做近距离辅助避障(比如离墙30cm以内),或者用来检测透明障碍物。千万别指望它做主传感器。

2.4 红外传感器——简单但局限

红外传感器分两种:一种是测距的(红外测距传感器),一种是检测热源的(被动红外)。

红外测距的原理和激光类似,但用的是红外LED而不是激光。优点是便宜、功耗低,缺点是精度差、距离短(一般不超过1.5米)、受环境光影响大。

我在一个扫地机器人项目里试过红外,结果发现它在深色地毯上基本失效——因为深色吸光,反射信号太弱。后来果断换成了超声波+激光的组合。

一句话总结:红外适合做“有/无”检测(比如检测有没有人经过),不适合做精确测距。

2.5 传感器选型对比表

传感器类型 精度 测距范围 成本 适用场景 主要缺点
单线激光雷达 ±2cm 0.1-25m 室内平地导航 只能扫一个平面
多线激光雷达 ±3cm 0.1-100m 户外、自动驾驶 贵、体积大
深度相机(双目) ±1cm@1m 0.3-10m 室内物体识别 弱光差、计算量大
深度相机(结构光) ±0.5mm@1m 0.1-5m 室内高精度建模 室外失效
深度相机(ToF) ±2cm 0.1-10m 动态场景 分辨率低
超声波 ±1cm 0.02-5m 极低 近距离避障、透明物体 串扰、精度低
红外 ±5cm 0.05-1.5m 极低 简单检测 受环境光影响大

2.6 构建环境感知模型

有了传感器,怎么把数据变成机器人能理解的环境模型?这里我分享一个我常用的流程:

  1. 数据采集:传感器原始数据(激光点云、深度图、超声波距离值)
  2. 数据预处理:去噪、滤波、坐标变换
  3. 特征提取:从点云中提取障碍物轮廓,从深度图中提取物体位置
  4. 地图构建:把多帧数据融合成全局地图(占用栅格地图是最常用的)
  5. 障碍物表示:用矩形、圆形或多边形表示障碍物,方便路径规划

我个人最喜欢用占用栅格地图(Occupancy Grid Map)。它把环境分成一个个小格子,每个格子存一个概率值:0表示空闲,1表示占用,0.5表示未知。简单、直观、好维护。

实战技巧:在ROS里,用gmappingcartographer包可以快速建图。我一般先用激光雷达建一个2D占用栅格地图,再用深度相机补充3D信息,这样效率最高。

下面是我画的一个环境感知模型构建流程图,帮你理清思路:

环境感知模型构建流程 激光雷达 深度相机 超声波 红外 数据预处理:去噪、滤波、坐标变换、时间同步 特征提取:障碍物轮廓、物体位置、边缘检测 地图构建:占用栅格地图 / 点云地图 / 拓扑地图

嗯,这里要注意一点:多传感器融合不是简单地把数据堆在一起。你得考虑每个传感器的坐标系、时间戳、数据频率。我一般用ROS的tf库做坐标变换,用message_filters做时间同步,这样能保证数据对齐。

核心原则:激光雷达做主定位和远距离避障,深度相机做物体识别和近距离避障,超声波和红外做盲区补充。各司其职,互相配合。

最后说一句:传感器选型和感知模型构建,没有标准答案。每个项目都有自己的特殊性。我的建议是:先搞清楚你的机器人要干什么、在什么环境下工作、预算多少,然后再选传感器。别盲目追求高精度,够用就好。


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