如何使用正态分布变换
在本教程中,我们将介绍如何使用正态分布变换 (NDT) 算法来确定两个超过 10 万点的大型点云之间的刚性变换。NDT 算法是一种注册算法,它将标准优化技术应用于三维点的统计模型,以确定两个点云之间最可能的注册。有关 NDT 算法内部工作原理的更多信息,请参阅 Martin Magnusson 博士的博士论文:"三维正态分布变换--用于注册、表面分析和环路检测的高效表示法"。
Loaded 112586 data points from room_scan1.pcd
Loaded 112624 data points from room_scan2.pcd
Filtered cloud contains 12433 data points from room_scan2.pcd
Normal Distributions Transform has converged:1 score: 0.679887
代 码
首先,下载数据集 room_scan1.pcd 和 room_scan2.pcd,并将其保存到磁盘中。这些点云包含从不同角度对同一房间进行的 360 度扫描。
这段代码的目标是进行3D点云的对齐,主要使用了PCL库中的一种基于正态分布变换(NDT)的方法。
主要流程如下:
首先,它从两个PCD文件("room_scan1.pcd" 和 "room_scan2.pcd")中加载点云数据,这两个文件分别代表了同一个房间从两个不同的视角进行扫描得到的点云数据。
然后,对第二个扫描的点云数据进行滤波处理,大约减小到原始大小的10%,以提高配准的速度。这一步是通过使用近似体素网格滤波器来实现的,设置其叶子的大小为0.2x0.2x0.2。
初始化正态分布变换(NDT),并设置其参数。其中:
设置变化的最小差值为0.01。
设置More-Thuente线搜索的最大步长为0.1。
设置NDT网格结构(VoxelGridCovariance)的分辨率为1.0。
设置最大配准迭代次数为35。
设定滤波过后的点云作为需要对齐的点云。
设定第一个扫描得到的点云作为目标点云。
设置初始估计值。通过机器人测距得到初始估计值,也就是第一个扫描和第二个扫描之间大约的平移和旋转。
对点云进行配准处理,计算出使输入点云对齐到目标点云所需的刚性变换。
使用找到的变换对未过滤的输入点云进行变换,并保存变换后的输入云。
初始化点云可视化器,并设置背景颜色为黑色。
设置点云的颜色,使目标点云为红色ÿ