第二章 传感器原理(上):激光雷达工作原理
各位同学,今天我们来聊聊激光雷达。这东西在机器人圈子里,可以说是「眼睛」一样的存在。我刚开始做SLAM那会儿,用的还是单线激光雷达,扫一圈就一条线,现在想想真是简陋。但不管多先进的雷达,核心原理其实就那几样。
2.1 激光雷达的两大测距原理
激光雷达怎么测距离?说白了就两种主流方法:TOF(飞行时间法)和三角测距法。我当年在项目里两种都踩过坑,今天一并讲清楚。
2.1.1 TOF(飞行时间法)
TOF的原理特别直白:发射一束激光,打到物体上反射回来,记录时间差。光速是已知的,距离 = 光速 × 时间 / 2。嗯,就这么简单。
但实际做起来可没那么轻松。我印象很深,有一次调试一款16线TOF雷达,发现测距数据总在抖动。查了半天,原来是温度变化导致计时芯片的精度漂了。后来加了温补算法才稳住。
TOF的核心优势:
- 测距远,几十米到上百米没问题
- 不受物体颜色和纹理影响
- 精度高,通常厘米级
注意:TOF雷达对多机干扰比较敏感。我曾经在同一个场地放了两台雷达,结果互相串扰,点云里全是鬼影。解决办法要么错开调制频率,要么加时间同步。
2.1.2 三角测距法
三角测距就更有意思了。它不直接测时间,而是利用激光发射点和接收相机之间的几何关系。激光打到物体上,在相机成像平面形成一个光斑。物体越近,光斑位置偏移越大。通过三角公式就能算出距离。
你想想看,这方法成本低啊,早期很多扫地机器人用的就是这种。但缺点也很明显——测距范围有限,一般就几米。而且精度随距离增加急剧下降。我有个朋友做服务机器人,用了三角测距雷达,结果在空旷大厅里直接「瞎」了,因为远处根本测不准。
| 对比项 | TOF | 三角测距 |
|---|---|---|
| 测距范围 | 远(可达100m+) | 近(通常<10m) |
| 精度 | 高,厘米级 | 近距离高,远距离差 |
| 成本 | 高 | 低 |
| 抗干扰 | 中等 | 易受环境光影响 |
2.2 点云数据格式
激光雷达输出的原始数据,就是点云。每个点包含三维坐标 (x, y, z) 和反射强度 (intensity)。有些雷达还会带时间戳和通道号。
我最早接触点云时,用的是最简单的文本格式——每行一个点,x y z intensity。后来数据量大了,才发现这种格式太占空间。一个64线雷达每秒能产生上百万个点,文本存法分分钟撑爆硬盘。
实际工程中,常见格式有这么几种:
- PCD(Point Cloud Data):PCL库的标配,支持二进制和ASCII
- PLY(Polygon File Format):带颜色和法向量信息
- LAS/LAZ:测绘行业标准,压缩率高
- BIN(二进制裸数据):我最常用的格式,没有冗余头信息,解析快
我的习惯:做实时SLAM时,我一般用BIN格式存点云。每帧数据固定大小,内存映射直接读,速度比解析PCD快一个数量级。但调试阶段还是用PCD,方便可视化。
下面是一个简单的点云读取示例,用Python演示:
import numpy as np
def load_bin_pointcloud(file_path):
"""
加载二进制点云文件
格式:每行4个float32 (x, y, z, intensity)
"""
raw_data = np.fromfile(file_path, dtype=np.float32)
points = raw_data.reshape(-1, 4)
return points[:, :3], points[:, 3] # 返回坐标和强度
# 使用示例
xyz, intensity = load_bin_pointcloud("scan_001.bin")
print(f"点云数量:{len(xyz)}")
print(f"X范围:{xyz[:,0].min():.2f} ~ {xyz[:,0].max():.2f}")
2.3 常见激光雷达介绍
市面上激光雷达品牌很多,我挑几个有代表性的说说。
2.3.1 机械旋转式
这是最经典的形态。激光器和接收器装在旋转机构上,一边转一边扫。Velodyne的HDL-64E就是代表作,64线,360度视野。我当年第一次用这玩意儿,感觉就像开了天眼——周围环境一览无余。
但机械式有个致命伤:旋转部件容易坏。我在户外项目里,雷达轴承进过沙,直接卡死。后来换成了固态雷达,才省心不少。
2.3.2 固态/混合固态式
没有旋转部件,靠光学相控阵或微振镜来改变激光方向。Livox的Horizon系列就是典型。优点是寿命长、体积小。缺点是视场角有限,一般不到100度。
我记得有一次做AGV导航,用了三台Livox拼接,才覆盖了360度。嗯,成本确实上去了,但可靠性也上去了。
2.3.3 MEMS微振镜式
这种介于机械和固态之间。用微小的镜片振动来偏转激光束。速腾聚创的RS-LiDAR-M1就是MEMS方案。性价比不错,目前很多量产车在用。
| 类型 | 代表产品 | 线数 | 测距 | 适用场景 |
|---|---|---|---|---|
| 机械旋转 | Velodyne HDL-64E | 64 | 120m | 自动驾驶、高精地图 |
| 固态 | Livox Horizon | 非重复扫描 | 260m | 机器人、AGV |
| MEMS | 速腾聚创 M1 | 等效125线 | 150m | 量产车、机器人 |
选型建议:如果你做室内机器人,三角测距或低线数TOF就够了。室外自动驾驶,至少16线起步,最好64线以上。预算有限的话,MEMS方案是很好的折中。
2.4 本章知识体系
下面这张图,是我自己梳理的激光雷达知识结构。你把它存下来,后面学SLAM时会经常用到。
这张图把本章内容串起来了。从测距原理到底层数据格式,再到具体硬件选型,每一步都是后面做SLAM的基础。你把它理解透了,后面学点云配准、特征提取时,就会轻松很多。
避坑指南:我曾经在项目里犯过一个低级错误——没仔细看雷达的数据手册,以为所有雷达输出的点云都是按固定顺序排列的。结果换了一款雷达后,点云解析全乱套了。记住:拿到新雷达,第一件事就是看它的数据格式定义,别想当然。
好了,这一章就到这里。激光雷达的原理和格式,是后面所有算法的基础。下一章我们接着聊IMU的原理,那也是组合里程计里不可或缺的一环。
公众号:蓝海资料掘金营,微信deep3321