一、传感器基础:SLAM的“眼睛”与“耳朵”
做SLAM这么多年,我越来越觉得,传感器就是机器人的“感官”。没有好的感官,再牛的算法也白搭。今天咱们就来聊聊这四种最核心的传感器:激光雷达、IMU、轮式里程计和相机。
说白了,这四种传感器各有各的脾气。你得摸透它们的性子,才能让它们好好配合。
1.1 激光雷达:测距的“硬汉”
激光雷达的工作原理,其实没那么神秘。就是发射一束激光,打到物体上反射回来,根据时间差算距离。嗯,就这么简单。
核心原理:TOF(飞行时间法)
激光发射→物体反射→接收器捕获。光速是恒定的,所以时间差直接换算成距离。
关键公式:
距离 = (光速 × 飞行时间) / 2
除以2是因为光走了个来回。
数据特性:
- 稀疏性:16线激光雷达一帧也就几万个点,跟相机比差远了
- 精度高:毫米级,我见过最好的能做到±2cm
- 不受光照影响:黑夜里照样干活,这点比相机强太多
- 怕反射:玻璃、镜面、水面,这些是激光雷达的“克星”
我的经验:做室内导航时,我习惯把激光雷达装在机器人前方30cm高处。太低容易被地面杂物干扰,太高又测不到桌腿。这个高度是我试了三次才定下来的。
避坑指南:我曾经在玻璃幕墙的大厅里做测试,激光雷达直接“瞎”了。后来加了反光条才搞定。记住,透明物体是激光雷达的天敌。
1.2 IMU:惯性测量单元
IMU这东西,说白了就是个“感觉器官”。它感受加速度和角速度,但不直接告诉你位置。
核心组成:
- 加速度计:测三轴加速度
- 陀螺仪:测三轴角速度
- 磁力计(可选):测方向
数据特性:
| 参数 | 典型值 | 说明 |
|---|---|---|
| 零偏稳定性 | 10°/h(消费级) | 静止时陀螺仪输出不归零 |
| 噪声密度 | 0.01 m/s²/√Hz | 加速度计白噪声 |
| 更新频率 | 100-1000 Hz | 比激光雷达快得多 |
核心问题:IMU有累积误差。你想想看,加速度积分一次得速度,再积分得位置。每次积分都带误差,时间一长,位置就飘到天边去了。
我的用法:IMU我一般只用来做短时间内的姿态估计,或者跟其他传感器做融合。单独用IMU做定位?那是在给自己挖坑。
1.3 轮式里程计
轮式里程计,说白了就是“数轮子转了多少圈”。每个轮子装个编码器,转一圈发N个脉冲。
工作原理:
位移 = 轮子周长 × 脉冲数 / 每圈脉冲数
数据特性:
- 短距离准:几米内误差很小
- 长距离飘:打滑、轮胎磨损都会引入误差
- 更新快:通常100Hz以上
- 成本低:一个编码器几十块钱
避坑指南:我曾经在瓷砖地面上做测试,机器人一转弯就打滑,里程计数据直接废了。后来加了IMU做辅助,才把这个问题解决。记住,轮式里程计最怕打滑。
1.4 相机模型与图像数据
相机嘛,大家都熟悉。但做SLAM用的相机,跟手机拍照不太一样。
针孔相机模型:
这是最基础的模型。说白了就是小孔成像原理。
// 相机投影公式
u = fx * X/Z + cx
v = fy * Y/Z + cy
// 其中:
// (X,Y,Z) 是三维空间点
// (u,v) 是图像像素坐标
// fx,fy 是焦距
// cx,cy 是光心坐标
图像数据特性:
- 信息丰富:一张图几十万个像素,每个像素有RGB值
- 受光照影响大:太亮过曝,太暗欠曝
- 有畸变:镜头边缘的物体变形
- 帧率有限:通常30fps,运动快了会模糊
我的习惯:做视觉SLAM时,我一般先用标定板把相机畸变参数算出来。不标定?那你重建出来的地图都是弯的。
知识体系总览
这四种传感器各有千秋,我画了张图帮你理清关系:
你看,没有哪个传感器是完美的。激光雷达精度高但稀疏,IMU快但会飘,轮式里程计便宜但怕打滑,相机信息丰富但怕光照变化。做SLAM的核心,就是让它们取长补短。
总结一下:
- 激光雷达:建图的“主力军”
- IMU:短时间内的“救火队员”
- 轮式里程计:低成本下的“辅助选手”
- 相机:视觉SLAM的“眼睛”
记住,没有最好的传感器,只有最合适的组合。