一、点云数据基础

做自动驾驶和机器人感知这些年,我接触最多的数据形式就是点云。说实话,刚入行那会儿,我对着密密麻麻的坐标点也是一头雾水。但搞懂了它的本质,你会发现——点云其实就是三维世界的「像素」。

1.1 什么是点云

点云,说白了就是一堆三维坐标点的集合。每个点用 (x, y, z) 表示它在空间中的位置。你想想看,激光雷达扫一圈,每个激光束碰到物体反弹回来,就记录一个点。成千上万个点拼在一起,就形成了周围环境的「轮廓素描」。

我在项目中遇到过一位同事,他总把点云想象成「三维照片」。普通照片每个像素有RGB颜色,点云每个点除了坐标,还可以带强度值、颜色值、甚至时间戳。嗯,这个比喻挺贴切的。

核心概念: 点云 = 空间坐标点 + 属性信息(强度、颜色、法向量等)

1.2 点云的数据结构

点云的数据结构其实不复杂。我习惯把它理解成一张表格——每一行是一个点,每一列是一种属性。

点索引 x y z 强度 RGB
0 1.23 4.56 7.89 128 (255,0,0)
1 2.34 5.67 8.90 200 (0,255,0)
... ... ... ... ... ...

实际工程中,我们常用两种数据结构:

  • 无序点云:点之间没有拓扑关系,就是一堆散点。处理起来简单,但丢失了邻域信息。
  • 有序点云:按扫描线顺序排列,类似图像的像素矩阵。比如Velodyne的64线激光雷达,每帧数据就是64×N的矩阵。这种结构能直接利用图像算法,效率高不少。
我的经验: 做障碍物检测时,我建议优先用有序点云。它保留了扫描线的结构信息,做地面分割和聚类时能省不少事。

1.3 点云的存储格式

点云存成什么格式?这个问题我踩过坑。早期我用纯文本存点云,一个10万点的文件就几十MB,读写慢得要命。后来才摸清楚主流格式的门道。

PCD格式

PCD是Point Cloud Library(PCL)的亲儿子。它支持ASCII和二进制两种存储方式。我个人习惯用二进制格式,体积小、读写快。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 100000
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 100000
DATA binary
...(二进制数据)

PLY格式

PLY(Polygon File Format)是图形学领域的常客。它比PCD多了一个优势——可以存储多边形网格。如果你做三维重建,PLY是首选。我记得有一次做高精地图项目,地图供应商给的就是PLY格式,里面包含了路面三角网格。

LAS格式

LAS是测绘和遥感领域的标准格式。它专门为激光雷达数据设计,支持分类标签(比如地面、建筑、植被)。做自动驾驶时,我经常用LAS格式存储标注好的训练数据。它的压缩率很高,一个1GB的原始点云,存成LAS可能只有200MB。

格式 适用场景 优点 缺点
PCD PCL处理、算法开发 读写快、PCL原生支持 不支持网格
PLY 三维重建、图形学 支持网格、颜色 文件较大
LAS 测绘、自动驾驶标注 压缩率高、带分类标签 解析库较少
避坑指南: 我曾经因为格式选错,导致数据转换花了整整两天。如果你做实时系统,千万别用ASCII格式——读写速度能差10倍以上。

1.4 点云可视化工具

做感知算法,可视化是刚需。你看不到点云,怎么调试?我常用的工具有这几个:

  • PCL Visualizer:PCL自带的可视化工具,轻量级,适合快速查看点云。我写算法时经常用它做实时显示。
  • CloudCompare:开源神器,支持点云编辑、配准、分割。做标注和数据分析时,我离不开它。
  • Open3D:Python生态的宠儿。如果你用Python做算法原型,Open3D的可视化接口非常友好。
  • RViz:ROS生态的标准可视化工具。做自动驾驶系统集成时,RViz是标配。

我个人最常用的是Open3D。为什么?因为它一行代码就能显示点云,还能交互旋转、缩放。你想想看,调试时能快速看到结果,效率提升不是一星半点。

import open3d as o3d

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

# 可视化
o3d.visualization.draw_geometries([pcd])
小技巧: 用Open3D可视化时,可以按颜色显示强度值。这样能一眼看出哪些区域反射强(比如路牌),哪些区域反射弱(比如路面)。

知识体系总览

下面这张图,是我梳理的点云数据基础的知识结构。你可以把它当作本章的「地图」。

点云数据基础 什么是点云 三维坐标点集合 每个点带属性信息 数据结构 无序点云 vs 有序点云 属性表结构 存储格式 PCD / PLY / LAS ASCII vs 二进制 可视化工具 PCL Visualizer CloudCompare Open3D RViz 核心:理解点云本质 → 选对数据结构 → 用对存储格式 → 善用可视化工具

嗯,以上就是点云数据基础的全部内容。搞懂了这些,后面讲障碍物检测算法时,你就能更顺畅地跟上节奏。记住一句话:点云是三维感知的「原材料」,原材料处理不好,后面再牛的算法也白搭。

可可精品资料库