第1章:激光雷达基础
大家好,我是你们这门课的主讲。今天咱们聊聊激光雷达——这个SLAM系统里最核心的传感器之一。
说实话,我最早接触激光雷达是在2016年,那时候一台16线机械雷达要十几万,现在想想真是贵得离谱。但没办法,做SLAM离不开它。你想想看,没有好的数据输入,再牛的算法也是白搭。
1.1 激光雷达工作原理
激光雷达怎么测距的?说白了就两种主流方案:TOF(飞行时间法)和三角测距法。
TOF测距原理
TOF的原理特别简单:发射一束激光,打到物体上反射回来,记录时间差。距离 = 光速 × 时间差 / 2。
嗯,这里要注意,除以2是因为光走了个来回。
核心公式:
d = c × Δt / 2
其中:
d = 距离(米)
c = 光速(≈ 3×10⁸ m/s)
Δt = 发射到接收的时间差(秒)
我在项目中遇到过一个问题:TOF雷达在强光环境下容易受干扰。特别是正午太阳直射的时候,测量值会跳来跳去。后来我加了滤波和曝光时间自适应,才算稳住。
我的经验:TOF雷达适合中远距离(几十米到上百米),精度一般在厘米级。室内外都能用,但强光下要注意。
三角测距原理
三角测距就有点不一样了。它利用激光发射器和接收器之间的固定基线,通过几何三角关系算距离。
具体来说:激光打到物体上,反射光落在接收器(一般是CMOS或CCD)的某个像素位置。物体越近,光斑偏移越大。用相似三角形就能算出来。
核心公式:
d = b × f / x
其中:
d = 距离
b = 基线长度(发射器与接收器间距)
f = 透镜焦距
x = 光斑在成像面上的偏移量
三角测距有个特点:近距离精度高,远距离精度下降很快。我做过对比测试,5米以内三角测距能到毫米级,但超过10米就开始飘了。
避坑指南:我曾经在室外项目里用了三角测距雷达,结果阳光一强,接收器上的光斑根本看不清。后来我换成了TOF方案。所以,室外场景优先选TOF。
1.2 激光雷达分类
激光雷达按结构分,主要有三大类:机械式、固态、MEMS。我一个个说。
机械式激光雷达
机械式就是有个旋转电机,带着激光收发模块转圈。最典型的就是Velodyne的HDL-64E,64线,转一圈能扫几十万个点。
- 优点:视场角360°,点云密度高,技术成熟
- 缺点:有机械旋转部件,寿命有限,体积大,成本高
- 典型应用:自动驾驶测试车、高精度地图采集
我记得2018年做园区无人车时,用的就是16线机械雷达。那玩意儿转起来嗡嗡响,但数据是真稳。
固态激光雷达
固态激光雷达没有旋转部件,靠电子扫描或者面阵成像。比如Flash LiDAR,一次发射照亮整个视场,用焦平面阵列接收。
- 优点:体积小,寿命长,成本低
- 缺点:视场角有限(一般120°以内),探测距离较短
- 典型应用:服务机器人、AGV、消费级产品
我的建议:如果你做室内机器人,固态雷达性价比很高。但要做自动驾驶,还是得机械式或者混合固态。
MEMS激光雷达
MEMS(微机电系统)算是机械式和固态的混合体。它用微小的振镜来偏转激光束,实现扫描。
- 优点:体积小,成本适中,可靠性比机械式好
- 缺点:振镜容易受振动影响,视场角有限
- 典型应用:车载辅助驾驶、低速无人车
说实话,MEMS是我个人比较看好的方向。它平衡了性能和成本,未来可能会成为主流。
1.3 激光雷达点云数据格式
激光雷达输出的数据叫点云。每个点包含三维坐标和强度信息。
最常见的格式是PCD和LAS,但在SLAM里,我们更多直接处理二进制流。
标准点云结构
// 一个典型的点云点结构
struct PointXYZI {
float x; // X坐标(米)
float y; // Y坐标(米)
float z; // Z坐标(米)
float intensity; // 反射强度(0-255)
};
嗯,这里要注意,不同雷达的坐标系定义可能不一样。有的雷达Z轴朝上,有的朝前。我踩过这个坑——第一次融合IMU数据时,发现坐标系对不上,查了半天才发现是雷达坐标系定义不同。
常见数据格式对比
| 格式 | 特点 | 适用场景 |
|---|---|---|
| PCD | 文本/二进制,支持多种字段 | PCL库处理、可视化 |
| LAS | 二进制,压缩率高 | 测绘、地理信息系统 |
| PLY | 支持颜色和法向量 | 三维重建、渲染 |
| BIN | 纯二进制,无头信息 | 实时SLAM、嵌入式系统 |
核心知识点总结:
- TOF测距:适合中远距离,室外首选
- 三角测距:近距离精度高,室内好用
- 机械式:360°视场,但贵且寿命有限
- 固态/MEMS:体积小,成本低,视场有限
- 点云格式:PCD最常用,BIN最轻量
好了,这一章的内容就这些。下一章我们会深入讲点云预处理——怎么去噪、怎么降采样、怎么提取地面。这些都是SLAM里绕不开的基础操作。
公众号:蓝海资料掘金营,微信 deep3321