第2章:激光雷达基础
大家好,我是这门课的主讲。今天咱们聊聊激光雷达——这个在SLAM领域里最核心的传感器之一。
说实话,我最早接触激光雷达是在2016年,那时候一个16线激光雷达要十几万,现在想想真是天价。但技术发展快啊,现在几千块就能买到不错的固态雷达了。好,不扯远了,咱们直接进入正题。
2.1 激光雷达工作原理
激光雷达,英文叫LiDAR(Light Detection And Ranging)。说白了,就是通过发射激光,测量激光从发射到返回的时间,从而计算出目标的距离。
目前主流的测距原理有两种:TOF(飞行时间法)和三角测距法。
2.1.1 TOF测距原理
TOF的原理非常简单:
距离 = 光速 × 飞行时间 / 2
激光发射器发出一束激光脉冲,打到目标后反射回来,被接收器捕获。我们记录下这个时间差Δt,乘以光速c,再除以2(因为光走了来回),就得到了距离。
我在项目中遇到过一个问题:TOF雷达在强光环境下容易失效。为什么?因为太阳光里也包含近红外成分,会干扰接收器。后来我们加了窄带滤光片,效果好了很多。
核心要点:TOF测距精度主要取决于时间测量的精度。1纳秒的时间误差,对应约15厘米的距离误差。所以高精度TOF雷达需要皮秒级的时间测量芯片。
2.1.2 三角测距原理
三角测距是另一种思路。它不测时间,而是测角度。
激光器发射一束光,打到目标上形成光斑。这个光斑被一个CMOS相机拍摄到。激光器、相机、目标点三者构成一个三角形。已知激光器和相机的基线长度B,以及光斑在图像上的偏移量Δx,就可以通过三角公式计算出距离。
距离 = B × f / Δx
其中f是相机焦距。
嗯,这里要注意:三角测距的精度和距离成反比。目标越远,Δx越小,误差越大。所以三角测距雷达一般只适合近距离(<10米)场景。
我的建议:如果你做室内机器人导航,三角测距雷达性价比很高。但做自动驾驶或室外大场景建图,老老实实上TOF雷达。
2.1.3 两种方案对比
| 对比项 | TOF | 三角测距 |
|---|---|---|
| 测距范围 | 远(可达200m+) | 近(通常<10m) |
| 精度 | 厘米级,随距离变化小 | 近距离毫米级,远距离快速下降 |
| 抗环境光 | 较好(加滤光片后) | 较差 |
| 成本 | 高 | 低 |
| 典型产品 | Velodyne、禾赛、速腾 | RPLIDAR、Slamtec |
2.2 点云数据格式
激光雷达采集到的数据,我们叫它点云。每个点包含三维坐标(x, y, z)和反射强度(intensity)。
最常见的点云格式有几种,我给大家梳理一下:
2.2.1 PCD格式
PCD是Point Cloud Data的缩写,由PCL库推广使用。它的结构很清晰:
# .PCD v0.7 - Point Cloud Data file format
VERSION 0.7
FIELDS x y z intensity
SIZE 4 4 4 4
TYPE F F F F
COUNT 1 1 1 1
WIDTH 640
HEIGHT 1
POINTS 640
DATA ascii
0.123 0.456 1.789 128
0.234 0.567 1.890 200
...
我个人习惯用PCD格式做中间存储,因为它兼容性好,PCL库直接读写。
2.2.2 LAS/LAZ格式
这是测绘行业的标配格式。LAS是二进制格式,LAZ是它的压缩版。如果你做室外大场景建图,最后输出给GIS系统,大概率要用LAS格式。
2.2.3 ROS中的点云消息
在ROS里,点云用sensor_msgs::PointCloud2消息传递。它的结构是:
Header header
PointField[] fields # x, y, z, intensity, ring, time等
uint32 height # 1表示无序点云
uint32 width # 点的数量
uint8[] data # 二进制数据
uint32 point_step # 每个点的字节数
uint32 row_step # 每行的字节数
我曾经踩过的坑:ROS的PointCloud2消息里,字段顺序不一定是x,y,z,intensity。有些雷达厂商会把intensity放在前面。如果你直接按固定偏移读数据,会读到错误的值。一定要先解析fields数组,再按字段名取数据。
2.3 主流激光雷达产品介绍
市面上的激光雷达产品很多,我按应用场景给大家分个类:
2.3.1 机械旋转式激光雷达
这类雷达通过电机带动激光收发模块旋转,实现360°扫描。线数从16线到128线不等。
- Velodyne(威力登):老牌厂商,VLP-16(16线)是经典产品,很多高校实验室都在用。优点是稳定,缺点是贵。
- 禾赛科技:国产之光,Pandar系列性能很强。Pandar64在自动驾驶领域用得很多。
- 速腾聚创:RS-LiDAR系列,性价比不错。RS-16是很多机器人公司的入门选择。
2.3.2 固态激光雷达
没有旋转部件,靠光学相控阵或MEMS微振镜实现扫描。体积小、寿命长、成本低。
- Livox(览沃):大疆旗下,Mid-40和Horizon系列。非重复扫描模式很有意思,能覆盖更大的视场角。
- Ouster:OS系列,数字激光雷达,每个点还包含信号质量信息。
2.3.3 单线激光雷达
只扫描一个平面,常用于室内导航和避障。
- 思岚科技(Slamtec):RPLIDAR系列,三角测距,性价比极高。A1、A2、S1我都用过,做室内建图完全够用。
- 北醒光子:TF系列,单点测距模块,适合做避障传感器。
我的选型建议:预算有限做室内SLAM,选RPLIDAR A2(约2000元)。做室外自动驾驶,至少16线起步,推荐速腾RS-16或禾赛Pandar40。做科研验证,Livox Mid-40性价比很高,而且非重复扫描对建图质量有提升。
2.4 本章知识体系
下面这张图总结了本章的核心内容,我画成了SVG,方便大家理解:
这张图把本章的三个核心模块串起来了。你想想看,搞懂工作原理,你才知道怎么选雷达;掌握数据格式,你才能正确处理数据;了解产品,你才能做工程落地。三者缺一不可。
一句话总结:激光雷达就是机器人的眼睛。TOF和三角测距是两种不同的"看"法,点云是它"看到"的世界,而选对产品,是让这双眼睛真正好用的关键。