Point Cloud

**点云(point cloud)**是一组 3D 点 {Xi}\{\mathbf{X}_i\}XiR3\mathbf{X}_i \in \mathbb{R}^3,可选地携带逐点属性,如颜色、表面法向量或回波强度(LiDAR)。它是最简单、最通用的 3D 地图表示方式:没有连接关系,没有网格结构,只是环境表面的采样点集合。

点从何而来

X=d[(ucx)/fx(vcy)/fy1]\mathbf{X} = d \begin{bmatrix} (u - c_x)/f_x \\ (v - c_y)/f_y \\ 1 \end{bmatrix}

单帧 VGA 深度图就能产生约 30 万个点,因此稠密点云对内存的需求很大,需要空间索引结构(kd 树或体素哈希图,如 PCL 和 Open3D 中所用的那样)。

核心操作

降采样(体素栅格滤波)。 将空间划分为边长为 \ell 的立方体;用其质心替换立方体内的所有点。这限制了点的密度,去除了冗余,并使得后续处理(ICP、法向量估计)变得可行。

通过局部 PCA 估计法向量。 对每个点,收集其 kk 个最近邻,构造局部协方差矩阵

C=1ki=1k(pipˉ)(pipˉ)TC = \frac{1}{k} \sum_{i=1}^{k} (\mathbf{p}_i - \bar{\mathbf{p}})(\mathbf{p}_i - \bar{\mathbf{p}})^T

并取 CC最小特征值对应的特征向量作为表面法向量(局部散布最小的方向)。特征值之比还给出了局部平面度/曲率的度量,例如可用于在 LiDAR 里程计中挑选边缘特征还是平面特征。

最近邻搜索。 对应关系搜索(ICP 的内层循环)需要快速的最近邻查询,由 kd 树或体素哈希提供支持。

配准(registration)。 通过估计刚体变换 (R,t)(R, \mathbf{t}) 使 iqi(Rpi+t)2\sum_i \lVert \mathbf{q}_i - (R\mathbf{p}_i + \mathbf{t}) \rVert^2 最小化,可以将两片点云对齐——当对应关系已知时,可通过对交叉协方差矩阵进行 SVD 求得闭式解,否则需要通过重新匹配进行迭代求解(ICP)。

优势与劣势

这正是稠密 SLAM 系统通常将点云用作输入/中间表示,并将其融合为体素(TSDF/占据栅格)地图或面元(surfel)地图以形成持久模型的原因。

对SLAM的意义

动手实践

相关条目