第一章:点云数据基础与传感器原理

大家好,我是你们这门课的主讲。在激光雷达这个行当摸爬滚打了快十年,踩过的坑比见过的点云还多。今天咱们开篇不讲虚的,直接聊点实在的——你手里那堆点云数据,到底是怎么来的?

1.1 激光雷达工作原理

说白了,激光雷达就是个“光学尺子”。它发射一束激光,打到物体上弹回来,通过计算时间差或者三角关系,算出距离。目前主流的有两种玩法:TOF和三角测距。

TOF(飞行时间法)

这个原理最直观。我打个比方:你对着山谷喊一声,听回声的时间就能估算距离。TOF激光雷达就是这么干的——发射激光脉冲,记录反射回来的时间,乘以光速再除以2,距离就出来了。

我在项目里用过Velodyne的64线雷达,就是典型的TOF方案。它的优势是探测距离远,能到200米以上,户外强光下也能工作。缺点嘛,成本高,而且对时间测量精度要求极高——光速是3×10⁸ m/s,你要测1厘米的精度,时间分辨率得做到67皮秒。嗯,这活儿不简单。

三角测距法

这个原理更“接地气”。激光发射器、物体、接收器(一般是CMOS相机)构成一个三角形。激光打到物体上,在接收器上成像的位置会偏移,通过几何关系就能算出距离。

我早期做室内机器人时用过这种方案。优点是近距离精度高,成本低,适合几十厘米到几米的范围。但一到户外,阳光一强,接收器就“瞎”了。你想想看,太阳光比激光强太多了,信噪比直接崩掉。

对比项 TOF 三角测距
测距范围 远(可达200m+) 近(通常<10m)
精度 厘米级 毫米级(近距离)
抗环境光
成本
我的建议:做自动驾驶选TOF,做室内SLAM可以看看三角测距。别搞反了,否则项目会很难受。

1.2 点云数据格式

拿到激光雷达数据后,怎么存?市面上常见的格式有三种:PCD、PLY、BIN。我一个个说。

PCD格式

这是Point Cloud Library(PCL)的亲儿子。文本格式可读性好,二进制格式体积小。我个人习惯用二进制PCD,因为读写快,而且PCL直接支持。

# .pcd文件头示例
VERSION .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
POINTS 1000
DATA ascii
1.0 2.0 3.0 128
...

PLY格式

这个格式最早是斯坦福大学搞出来的,常用于三维模型。它支持顶点和面片,还能存颜色信息。如果你做点云可视化或者三维重建,PLY是个好选择。

BIN格式

说白了就是纯二进制,没有头文件,直接存float数组。KITTI数据集用的就是这种。好处是体积最小,读写最快。坏处是——你得自己知道数据排布。我曾经因为字节对齐问题,解析错了整整一周的数据,后来才发现是结构体没对齐。

避坑指南:用BIN格式时,一定要确认数据是行主序还是列主序,以及每个字段的字节数。我曾经在KITTI数据上吃过这个亏。

1.3 点云坐标系与坐标变换

点云数据本身没有“方向感”,它只是一堆(x,y,z)坐标。但坐标系怎么定义,直接决定了后续处理的难度。

常见坐标系

  • 激光雷达坐标系:通常以雷达中心为原点,x轴朝前,y轴朝左,z轴朝上(右手系)。但不同厂家可能有差异,比如有些把z轴朝下。
  • 车体坐标系:以车辆后轴中心为原点,x轴朝前,y轴朝左,z轴朝上。
  • 世界坐标系:通常是UTM坐标系或者经纬度,用于多帧拼接。

坐标变换

说白了就是矩阵乘法。一个点从激光雷达坐标系转到车体坐标系,需要旋转矩阵R和平移向量t。公式很简单:

P_car = R * P_lidar + t

但实际项目中,标定参数往往不准。我记得有一次,因为雷达安装支架变形,标定参数偏了0.5度,导致点云投影到图像上差了20个像素。嗯,调了三天才发现是机械问题。

核心要点:坐标变换的精度取决于标定精度。别迷信标定文件,定期做在线标定校准才是正道。

1.4 常见开源数据集介绍

做深度学习,没有数据就是纸上谈兵。下面这三个数据集,我建议你至少玩熟一个。

KITTI

这是自动驾驶领域的“MNIST”。2012年发布,至今仍是基准。包含点云、图像、GPS/IMU数据。点云是64线Velodyne HDL-64E采集的,BIN格式。我入门时就是拿KITTI练手的,它的标注质量很高,但场景相对单一——主要在德国卡尔斯鲁厄市区。

nuScenes

这个数据集我特别喜欢。它用了32线激光雷达,但关键是有1000个场景,每个场景20秒,覆盖了波士顿和新加坡。它的标注包含23个类别,还有雷达和摄像头数据。我个人觉得,nuScenes的多样性比KITTI好很多。

Waymo Open Dataset

Waymo的数据集是“土豪”级别的。用了5个激光雷达(1个中距+4个近距),点云密度极高。它有1150个场景,每个场景20秒,标注了车辆、行人、自行车等。但有个问题——数据量太大,普通显卡根本跑不动。我建议先下个子集试试。

数据集 激光雷达 场景数 标注类别 格式
KITTI 64线 ~15k帧 8类 BIN
nuScenes 32线 1000场景 23类 BIN+JSON
Waymo 5个雷达 1150场景 4类 TFRecord
我的建议:新手先从KITTI入手,数据量适中,社区成熟。等把模型跑通了,再上nuScenes或者Waymo。
第一章:点云数据基础与传感器原理 传感器原理 数据格式 坐标系与变换 TOF / 三角测距 PCD / PLY / BIN 坐标变换矩阵 开源数据集 KITTI nuScenes Waymo

好了,第一章的内容就到这里。点云的世界很大,咱们慢慢聊。记住,理解数据是怎么来的,比直接调模型重要得多。下一章,我会带大家亲手搭建一个点云处理环境,把KITTI数据读进来看看。

专注资料整理