第一讲:课程导论与点云基础

大家好,我是你们这门课的主讲人。在自动驾驶行业摸爬滚打了七八年,处理过的点云数据少说也有几十TB了。今天咱们正式开篇,聊聊激光雷达点云检测这件事儿到底在做什么。

说实话,我刚入行那会儿,点云处理还是个挺小众的方向。那时候开源工具少,很多代码都得自己一行行写。现在好多了,有Open3D、PCL这些成熟的库,但核心原理其实没变过。这一讲,我们先打好地基。

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

激光雷达的工作原理,说白了就是“发射-反射-接收”这三个步骤。它向周围发射激光束,打到物体上再反射回来,通过计算时间差来测距。这个原理跟蝙蝠的回声定位有点像,只不过蝙蝠用声波,我们用光波。

我遇到过不少刚入行的同学问:“激光雷达和摄像头到底有什么区别?” 你想想看,摄像头是被动接收环境光,晚上或者逆光的时候就抓瞎了。激光雷达是主动发射激光,不受光照影响,这是它最大的优势。

目前主流的激光雷达有几种类型:

  • 机械旋转式:64线、128线那种,顶部有个旋转的“小风扇”。优点是视野广,360度全覆盖。缺点是贵,而且有机械磨损。
  • 固态式:没有旋转部件,靠电子扫描。体积小、成本低,但视场角有限。
  • 混合固态:介于两者之间,目前量产车用得比较多。

避坑指南:我曾经在项目里吃过亏——选型时只看了线数,没关注点云密度分布。结果发现远距离的点稀疏得可怜,目标检测根本做不好。记住,线数不等于一切,要看有效探测距离内的点云密度。

点云数据格式:PCD vs PLY

拿到激光雷达的数据后,我们得把它存下来。最常见的两种格式是PCD和PLY。

PCD格式是Point Cloud Library(PCL)的亲儿子。它的结构很简单,头部是元数据,后面是点数据。我个人的习惯是,做算法原型验证时用PCD,因为PCL库直接支持,读写方便。

PLY格式是斯坦福大学搞出来的,最初用于3D扫描。它比PCD多了一个“面”的概念,可以存储网格信息。如果你要做三维重建或者渲染,PLY更合适。

来看看两种格式的对比:

特性 PCD PLY
存储结构 纯点云 点云+网格
文件大小 较小 较大(含面信息)
读取速度 中等
适用场景 检测、跟踪 重建、渲染
库支持 PCL原生 Open3D、MeshLab

实际项目中,我建议你两种格式都掌握。因为不同传感器厂商给的数据格式不一样,有的给PCD,有的给PLY,还有的给自定义二进制格式。嗯,这里要注意:拿到数据后第一件事就是检查坐标系和单位,我踩过这个坑——有一次没注意单位是毫米还是米,结果画出来的点云缩放了1000倍。

点云可视化:Open3D vs PCL

做点云处理,可视化是刚需。你总得看看自己的算法效果怎么样吧?

Open3D是我现在最常用的工具。它用Python接口,代码简洁,可视化效果也漂亮。比如加载一个点云并显示,只需要几行代码:

import open3d as o3d

# 读取点云
pcd = o3d.io.read_point_cloud("example.pcd")

# 可视化
o3d.visualization.draw_geometries([pcd])

PCL是C++的库,功能更全,但代码量也更大。同样的功能在PCL里要写十几行。不过PCL的算法库非常丰富,滤波、分割、配准这些都有现成的实现。

我个人建议:做快速原型和调试用Open3D,做工程部署用PCL。当然,如果你对性能要求极高,PCL的C++实现会更快一些。

小技巧:可视化时记得调整点的大小和颜色。我习惯用Z轴高度来着色,这样能直观看出物体的高度信息。Open3D里设置 pcd.colors = o3d.utility.Vector3dVector(colors) 就能自定义颜色。

课程项目总览

这门课不是光讲理论,我们会做一个完整的项目。从数据采集到模型部署,走通整个流程。

整个项目的技术栈是这样的:

  • 数据层:KITTI数据集 + 自采数据
  • 预处理层:滤波、降采样、地面去除
  • 检测层:PointPillars / VoxelNet 等模型
  • 跟踪层:卡尔曼滤波 + 匈牙利匹配
  • 可视化层:Open3D 实时显示

下面这张图展示了我们课程的知识体系:

课程知识体系结构 激光雷达原始数据 点云预处理(滤波/降采样/地面去除) 3D目标检测(PointPillars / VoxelNet) 多目标跟踪(卡尔曼滤波 + 匈牙利匹配) 可视化与结果输出 第1-2章 第3-4章 第5-7章 第8-9章 第10章

从这张图你可以看到,整个课程是层层递进的。先学会怎么处理原始数据,再学检测算法,最后做跟踪和可视化。每一步都建立在前面知识的基础上。

重要提醒:这门课需要你具备一定的Python基础,最好也了解一点C++。如果你只会Python也没关系,大部分代码我会提供Python版本。但PCL部分需要C++,我会尽量给出两种语言的实现。

好了,第一讲就到这里。下一讲我们会真正动手,用Open3D加载并可视化你的第一个点云文件。到时候记得准备好数据,我们实战见。


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