第三章:传感器与感知——机器人的“眼睛”与“耳朵”
各位同学,大家好。今天我们聊聊机器人感知世界的那点事儿。
你想想看,一个机械臂要在地图里找到自己,还要避开障碍物,它靠什么?靠的就是传感器。说白了,传感器就是机器人的感官系统。没有它们,机械臂就是个“睁眼瞎”。
我个人习惯把传感器分成三类:测距的、看图像的、算位置的。今天咱们就一个一个掰开揉碎了讲。
3.1 激光雷达(LiDAR)—— 距离感最准的“眼睛”
激光雷达,英文叫 LiDAR(Light Detection And Ranging)。原理很简单:发射激光束,碰到物体反射回来,算时间差,就知道距离了。
我在项目中遇到过一件事:有一次调试AGV小车,激光雷达装在底盘前方,结果总是撞到低矮的障碍物。后来发现,雷达安装角度低了,扫描平面刚好在障碍物上方扫过去。嗯,这里要注意——安装高度和角度,直接影响感知效果。
- 扫描范围: 常见 270° 或 360°。室内导航用 270° 够用,室外建议 360°。
- 角分辨率: 0.1° ~ 1°。分辨率越高,点云越密,但数据量也大。
- 最大测距: 室内 10~30m,室外可达 100m+。
- 扫描频率: 10Hz ~ 40Hz。频率越高,动态响应越好。
说白了,激光雷达就是给机器人画一张“距离地图”。它不关心物体是什么颜色、什么材质,只关心“多远”。
3.2 深度相机(RGB-D)—— 看得见,还知道有多远
深度相机,说白了就是普通摄像头加了个“测距功能”。它输出两种数据:一张彩色图(RGB),一张深度图(Depth)。
深度图里每个像素的值,代表那个点到相机的距离。你想想看,有了这个,机械臂就能知道“前面那个杯子离我 0.5 米”。
常见的深度相机技术有三种:
| 技术类型 | 原理 | 典型产品 | 优缺点 |
|---|---|---|---|
| 结构光 | 投射红外点阵,根据变形算深度 | Kinect v1 | 室内精度高,室外受阳光干扰 |
| ToF(飞行时间) | 发射红外光脉冲,算往返时间 | Kinect v2, Intel L515 | 速度快,但分辨率偏低 |
| 双目立体视觉 | 两个摄像头视差计算深度 | ZED, Intel D435i | 室外可用,但计算量大 |
深度相机的好处是信息丰富。你不仅能知道“前面有障碍”,还能知道“那是个红色的箱子”。这对物体识别、抓取任务特别有用。
3.3 里程计(轮式/视觉)—— 机器人怎么知道自己走了多远?
里程计,说白了就是“计步器”。机器人每走一步,它都记下来。但问题来了——步数不准怎么办?
3.3.1 轮式里程计
轮式里程计靠编码器。编码器装在电机轴上,轮子转一圈,编码器输出固定数量的脉冲。数脉冲,就能算出轮子转了多少圈,再乘以轮子周长,就是移动距离。
听起来很完美?其实不然。
我做过一个测试:让机器人直线走 10 米,轮式里程计告诉我走了 9.7 米。差了 0.3 米。为什么?因为轮子打滑、地面不平、轮胎磨损……这些都会导致误差累积。
- 轮子打滑(最常见)
- 轮胎气压变化导致周长不准
- 地面凹凸不平
- 编码器分辨率有限
3.3.2 视觉里程计
视觉里程计,就是用摄像头图像来推算运动。它跟踪图像中的特征点(比如墙角、桌角),看这些点怎么移动,反推出相机自己的运动。
说白了,就是“看风景走路”。你盯着远处的山,山在画面里往左移,说明你在往右走。
视觉里程计的优点是不受轮子打滑影响。但缺点也很明显:光线不好时容易失效,纹理太少的地方也跟踪不上。
3.4 IMU(惯性测量单元)—— 机器人的“内耳”
IMU 包含加速度计和陀螺仪。加速度计测“加速度”,陀螺仪测“角速度”。
你想想看,有了加速度,积分一次就是速度,再积分一次就是位移。有了角速度,积分一次就是角度。理论上,IMU 可以算出完整的位姿。
但现实很残酷——IMU 的积分误差会随时间快速累积。你让它静止不动,积分 10 秒后,它可能告诉你“你已经走了 5 米”。
IMU 还有一个重要用途:检测姿态。机械臂的末端执行器是否水平?机器人是否在爬坡?这些靠 IMU 的加速度计就能判断。
3.5 传感器融合——1+1 > 2
单个传感器都有短板。激光雷达怕玻璃、怕镜面;深度相机怕强光;里程计怕打滑;IMU 怕漂移。
怎么办?融合!
最常见的融合方式是卡尔曼滤波(Kalman Filter)。它把多个传感器的数据“加权平均”,权重由传感器的不确定性决定。你越信任哪个传感器,它的权重就越高。
举个例子:机器人直线行驶时,轮式里程计比较准,卡尔曼滤波就多信它一点。当机器人转弯时,轮子容易打滑,卡尔曼滤波就多信 IMU 的角速度数据。
- 低频高精度传感器(如激光雷达)负责修正长期漂移
- 高频低精度传感器(如 IMU)负责填充短期数据
- 视觉传感器提供语义信息(“那是个门”而不是“那有个障碍”)
我个人习惯在项目初期,先把每个传感器单独调试通。确认每个传感器都能输出合理数据后,再做融合。否则,一旦融合结果不对,你根本不知道是哪个传感器出了问题。
好了,这一章的内容就到这里。传感器是机器人的感官,选对、用好、融合好,你的机械臂才能真正“感知”这个世界。