PCL中NDT(Normal Distributions Transform)论文及源码解析

PCL中NDT(Normal Distributions Transform)论文及源码解析

 

  • PCL库中NDT模块代码结构如下

分成两部分,其中ndt.hpp中实现了ndt算法的配准过程:计算点所在概率函数及其梯度,并实现高斯牛顿法的最优化求解过程。另一部分voxel_grid_covariance.hpp实现了一个基于体素率波器的正交分布变换,实现了将离散的点云转换为连续的地图。这一过程也被成为NDT(Normal Distributions Transform),其效果如下:

上图是对2D激光点云进行NDT后生成的概率图中的一部分,其中蓝色的点代表采集到的点云,红黄的代表对应生成的高斯概率分布。NDT将2维空间分割为网格(每个网格中点的数量大于5或其他),计算网格中点的均值以及协方差。使用计算出来的均值以及协方差生成对应的高斯分布概率密度,代表网格中对应位置存在点在真实世界中的可能性。

上图中展示了3D点云数据经过NDT的结果,其中左侧是原始点云数据,右侧是经过NDT变换后生成的概率密度地图。

 

NDT配准通过最优化的方法优化两幅3D点云数据(目标点云,输入点云)间的旋转矩阵(从输入点云转换到目标点云之间的旋转矩阵),使的输入点云进行空间变换后新生成的点云所在位置存在点的概率密度之和最大。即其优化的目标函数形式如下:

其中T(P, xk)代表输入点云中某一个点xk,经过旋转矩阵p的转移后所在的空间坐标。其中p()代表根据目标点云计算出来的点的概率分布密度。

整个NDT算法的流程如下:

  • 【初始化】
  • 构建网格结构B
  • 对目标点云中的所有点进行如下操作
  •     找到该点所对应的网格,并将该点存储到该网格之中。
  •  
  • 对网格结构B当中的某一个网格bi计算:
  •     网格中所有点的均值以及协方差,具体计算公式如下:
  •     
  •  
  • 【配准】
  • While 拟合成功 do
  •     Score = 0
  •    g = 0
  •     H = 0
  •     对输入点云中的每一个点:
  •         寻找经过T转换后的点所在的网格位置
  •         
  •         更新g和H
  •     
  •     计算并更新p

 

NDT的扩展:

  • 固定尺度离散化
  • Oct尺度离散化
  • 迭代的离散化
  • 聚类离散化
  • 不同的离散化对NDT影响很大:较大的网格无法用高斯模型来表示真实世界的曲面形状。网格太小,可能高斯模型完全被噪声决定。
  • Linked cell :使用kDtree存储网格,加速查找邻居速度
  • 三次线性插值:用附近点和自己概率函数的三次线性插值值代替自己的概率,为了克服离散化带来的影响

图中左侧为原来的概率分布,右边为经过三次线性插值后的概率分布,使得概率比密度分布更加平滑。减少导数不存在的情况。

 

 

PCL(Point Cloud Library)是一个开源的点云处理库,拥有丰富的功能和算法,可以用于激光扫描仪、RGB-D相机等设备采集的点云数据处理。 NDT(Normal Distributions Transform)是一种点云配准方法,用于将不同视角的点云数据配准在同一个坐标系下,以实现建图和定位。 回环检测是指在建图过程,通过判断当前扫描到的点云与之前存储的点云数据之间的差异,来检测是否发生了回环。回环检测对于建立大规模的点云地图和精确的定位至关重要。 在PCL,使用NDT算法进行回环检测的步骤如下: 1. 预处理:对每一帧新扫描到的点云数据进行滤波、降采样等预处理操作,以减少噪声和点云数据量。 2. 特征提取:从预处理后的点云数据提取特征,例如表面法线、曲率等,以描述点云的局部特征。 3. 特征匹配:将当前帧的特征与之前的点云地图的特征进行匹配,寻找匹配度较高的特征点对。 4. 姿态估计:基于特征匹配的结果,通过最小化误差函数来估计当前帧相对于之前帧的姿态变换。 5. 迭代优化:使用迭代优化算法,对姿态估计的结果进行优化,进一步提高姿态的准确性。 6. 回环检测:根据优化后的姿态估计结果,判断当前扫描到的点云是否与之前存储的点云数据发生了回环。 通过以上步骤,PCL的NDT回环检测算法可以实现对建图过程的回环进行检测和处理,从而提高点云建图的准确性和鲁棒性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值