第1章 点云基础与传感器原理
各位同学,咱们今天聊聊激光雷达的根。说白了,就是搞清楚两件事:这玩意儿怎么看到东西的,以及它吐出来的数据长什么样。我做了这么多年点云处理,发现很多坑其实都出在最基础的概念上。别急,咱们一个一个来。
1.1 激光雷达工作原理
激光雷达,英文叫 LiDAR(Light Detection And Ranging)。名字已经告诉你了——用光来测距。但具体怎么测?主流方案就两种:TOF(飞行时间法)和三角法。
1.1.1 TOF 飞行时间法
TOF 的原理特别直白。你对着目标打一束激光,记下发射时间 t₁。激光碰到物体反射回来,接收器收到信号,记下时间 t₂。光速 c 是已知的,那距离 d 就是:
d = c × (t₂ - t₁) / 2
除以 2 是因为光走了个来回。嗯,这里要注意:时间差测量精度直接决定了测距精度。1 纳秒的误差,对应大约 15 厘米的距离偏差。
TOF 的优点是测距远(几百米)、速度快。目前车规级激光雷达几乎全是 TOF 方案。
1.1.2 三角法
三角法就有点不一样了。它不直接测时间,而是利用几何关系。激光器发射一束光到目标,反射光被一个位置敏感的探测器(比如 CMOS 相机)接收。目标距离不同,光斑在探测器上的位置就不同。通过三角几何,就能算出距离。
三角法的优势是近距离精度极高(微米级),但距离一远就不行了——光斑太弱,位置分辨不出来。所以它主要用于工业检测、3D 扫描仪这类场景。
| 对比项 | TOF | 三角法 |
|---|---|---|
| 测距原理 | 光飞行时间 | 三角几何 |
| 典型测距范围 | 0.1m - 300m+ | 0.01m - 10m |
| 近距离精度 | 厘米级 | 微米级 |
| 远距离性能 | 优秀 | 差 |
| 典型应用 | 自动驾驶、机器人 | 工业测量、3D 扫描 |
1.2 点云数据格式
激光雷达扫出来的原始数据,就是一堆三维点。每个点通常包含 x、y、z 坐标,还可能带强度、时间戳、颜色等信息。但怎么存?业界有几种常见格式。
1.2.1 PCD 格式
PCD 是 Point Cloud Library(PCL)的亲儿子。文本格式,可读性好。一个典型的 PCD 文件长这样:
# .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 5
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 5
DATA ascii
0.0 0.0 0.0 100
1.0 0.0 0.0 200
0.0 1.0 0.0 150
0.0 0.0 1.0 180
1.0 1.0 1.0 220
头部是元数据,告诉你每个字段叫什么、什么类型、有多少个点。后面是数据体。我个人习惯用 PCD 做调试——打开就能看,方便。
1.2.2 PLY 格式
PLY(Polygon File Format)是图形学领域的标准。它比 PCD 更灵活,可以存多边形、颜色、法向量。如果你要做可视化或网格重建,PLY 是首选。
PLY 也分 ASCII 和二进制两种。二进制体积小,加载快。我建议:开发调试用 ASCII,产品部署用二进制。
1.2.3 BIN 格式
BIN 就是纯二进制,没有头部,没有元数据。你拿到一个 .bin 文件,必须事先知道它的结构——比如每个点占 16 字节(4 个 float:x, y, z, intensity)。
为什么用 BIN?快。没有解析开销,直接内存映射就能读。KITTI 数据集用的就是 BIN 格式。我在做实时系统时,全部转成 BIN 来读写。
| 格式 | 可读性 | 体积 | 加载速度 | 适用场景 |
|---|---|---|---|---|
| PCD | 高 | 大 | 慢 | 调试、小数据 |
| PLY | 中 | 中 | 中 | 可视化、网格 |
| BIN | 低 | 小 | 快 | 实时、大数据 |
1.3 坐标系与标定基础
点云里的坐标,不是随便定义的。你得搞清楚它是在哪个坐标系下说的。不然,你算出来的距离、角度全是错的。
1.3.1 常见坐标系
- 激光雷达坐标系:原点在雷达中心,x 轴朝前,y 轴朝左,z 轴朝上(右手系)。这是雷达自己看世界的坐标系。
- 车体坐标系:原点在车辆后轴中心,x 轴朝前,y 轴朝左,z 轴朝上。这是车辆本身的坐标系。
- 世界坐标系:固定在大地上的坐标系,比如 UTM 坐标系。这是全局定位用的。
你想想看,雷达装在车上,车在世界上跑。三个坐标系之间需要互相转换。怎么转?靠外参标定。
1.3.2 外参标定
外参就是雷达坐标系到车体坐标系的旋转和平移。通常用一个 4×4 的齐次变换矩阵 T 来表示:
T = [ R t ]
[ 0 1 ]
其中 R 是 3×3 旋转矩阵,t 是 3×1 平移向量。标定的过程,就是找到这个 T。
怎么标?常见方法有:
- 手动测量:用卷尺量位置,用角度尺量朝向。精度低,但简单。
- 基于标定物:放一个棋盘格或立方体,同时用雷达和相机(或已知位置)观测,解算 T。
- 基于 SLAM:让车跑一圈,用 SLAM 估计轨迹,同时优化雷达外参。这是目前最常用的方法。
1.4 本章知识体系
下面这张图,把本章的核心逻辑串起来了。你从传感器原理出发,理解数据怎么来的;然后掌握数据格式,知道怎么存和读;最后搞定坐标系,知道数据在哪个空间里。这三块是点云处理的基石。
好了,第1章的内容就到这里。你理解了激光雷达怎么测距,知道了三种常见数据格式的区别,也搞清楚了坐标系和标定的基本概念。这些是后面所有章节的基础。别小看这些基础——我见过太多人因为坐标系搞错,浪费了整整一周的调试时间。嗯,打好地基,后面才能盖高楼。