1. 课程导论与点云基础:激光雷达工作原理、点云数据格式与坐标变换

大家好,欢迎来到这门课。我是你们的老朋友,一个在自动驾驶感知领域摸爬滚打了好几年的工程师。今天咱们正式开始第一讲,聊聊激光雷达和点云的那些基础事儿。

说实话,我刚入行那会儿,面对一堆密密麻麻的点云数据,心里也是发怵的。但后来我发现,只要把底层原理搞明白,这东西其实没那么玄乎。咱们这节课,就是帮你把这层窗户纸捅破。

1.1 激光雷达是怎么“看”世界的?

激光雷达,英文叫 LiDAR,说白了就是“激光+雷达”。它不像摄像头那样拍照片,而是主动发射激光束,然后接收反射回来的信号。

为什么会这样?因为激光的速度是恒定的(光速),我们只要记录下发射和接收的时间差,就能算出目标的距离。这就是最核心的原理——飞行时间法(ToF)

核心公式:距离 = (光速 × 飞行时间) / 2

除以2是因为激光走了个来回。

我在项目中遇到过一个问题:雨天的时候,激光打到雨滴上会产生大量噪点。嗯,这里要注意,ToF 原理虽然简单,但实际工程中要考虑多回波、环境光干扰等问题。

目前主流的激光雷达,按扫描方式分主要有这么几种:

  • 机械旋转式: 像个小风扇一样转圈扫描。Velodyne 的经典款就是代表。优点是视场角大,缺点是机械结构容易坏。
  • 固态式(MEMS/Flash): 没有旋转部件,靠芯片控制光束偏转。成本低、体积小,是未来的趋势。
  • 混合固态(转镜式): 介于两者之间,目前很多量产车在用。

你想想看,一个 64 线的激光雷达,每秒能发出几十万个点。这些点组合在一起,就形成了我们常说的“点云”。

1.2 点云数据格式:PCD 和 PLY

拿到点云数据后,总得有个文件存起来吧。行业里最常见的两种格式就是 PCDPLY

我个人习惯用 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 1000
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 1000
DATA ascii
0.1 0.2 0.3 50
0.4 0.5 0.6 120
...

看到没?头部是元信息,告诉程序这个文件有多少点、每个点有哪些字段。后面就是具体的数据了。这里有个小细节:intensity 字段代表反射强度,不同材质的物体反射率不同,这个信息在障碍物分类时很有用。

避坑指南: 我曾经因为没注意 PCD 文件头部的 VIEWPOINT 字段,导致点云坐标全部偏移。如果你从不同视角采集的数据要融合,一定要检查这个值。

PLY 格式呢?它更通用一些,支持多边形网格。如果你要做三维重建或者渲染,PLY 会更合适。但单纯做障碍物检测,PCD 就够用了。

两种格式的对比,我整理了个表格:

特性 PCD PLY
主要用途 点云处理(PCL) 三维模型/网格
支持字段 灵活自定义 标准字段+自定义
二进制支持
文件大小 较小(二进制) 较大(含网格信息)
我的推荐 ⭐ 日常开发首选 ⭐ 可视化/建模用

1.3 坐标系与坐标变换基础

做感知,最头疼的就是坐标系。一辆车上至少有四个坐标系:

  • 激光雷达坐标系(LiDAR Frame): 原点在雷达中心,x轴朝前,y轴朝左,z轴朝上。
  • 车身坐标系(Vehicle Frame): 原点在后轴中心,x轴朝前,y轴朝左,z轴朝上。
  • 相机坐标系(Camera Frame): 原点在相机光心,z轴朝前(看你怎么定义)。
  • 世界坐标系(World Frame): 通常是大地坐标系,比如UTM。

说白了,你要把激光雷达检测到的障碍物位置,告诉规划控制模块,就得把点云坐标从雷达坐标系变换到车身坐标系。这个过程就是 坐标变换

数学上,坐标变换用 旋转矩阵 R平移向量 t 来表示。一个点从坐标系A变换到坐标系B,公式是:

P_B = R * P_A + t

这里 R 是 3x3 的矩阵,t 是 3x1 的向量。如果你学过线性代数,应该不陌生。没学过也没关系,咱们在后面的课程里会手把手教你用代码实现。

重要提醒: 坐标变换的顺序不能乱!先旋转,后平移。而且旋转矩阵必须是正交矩阵(R^T = R^(-1))。我见过有人把顺序搞反,结果障碍物飞到天上去。

在实际工程中,我们通常用 齐次坐标 来简化计算。把旋转和平移合并到一个 4x4 的变换矩阵里:

| R  t |
| 0  1 |

这样,一次矩阵乘法就能搞定变换。PCL 里提供了现成的函数,比如 pcl::transformPointCloud(),非常方便。

我记得有一次做多雷达融合,两个雷达的安装位置有偏差。我手动标定后,用齐次变换矩阵把点云对齐,效果立竿见影。嗯,这就是坐标变换的魅力。

小结

这节课咱们聊了三个核心点:

  1. 激光雷达用 ToF 原理测距,机械式和固态式各有优劣。
  2. PCD 格式适合点云处理,PLY 适合三维建模。
  3. 坐标变换是感知的基础,用齐次矩阵可以优雅地解决。

下一节课,咱们会动手写代码,读取一个真实的 PCD 文件,并把它可视化出来。到时候你就知道,点云其实没那么神秘。

好了,今天就到这儿。有什么问题,欢迎在评论区留言。咱们下节课见!


公众号:蓝海资料掘金营,微信deep3321