一家之言,仅作分享,如有不合理或需要改进的地方,欢迎各位讨论。

前言

点云配准的方法有相关性扫描匹配,ICP,以及NDT。前两种在我之前的博客中已经有了简单介绍,
相关性扫描匹配CSM与分支限界多种形式ICP问题的ceres实例应用 这里将对NDT(Normal Distribution Transform)正态分布变化进行介绍。相比于ICP,NDT对比较差的初始值也可以完成更好的估计。

一、与ICP、CSM的区别

不论是ICP还是CSM,要想有更好的配准效果,就需要假设环境的大部分是不变的。但是实际中,无论是行驶的车辆还是行人,都会带来小部分的环境变化,为了解决这种细微的差异,NDT会有更好的效果。
NDT的这种transform的核心思想是将点云映射到平滑表面来表示,使用一组局部概率密度函数(PDF)来描述,每个PDF描述表面的一部分的形状。NDT的代价函数是指点云在有着PDF的BaseMap下的概率之和要尽可能的大。
NDT不需要消耗大量代价计算最近邻搜索匹配点,它只需要计算点在最近的cell中PDF的值即可。

二、基本流程

python 点云IPC匹配 ndt点云匹配_机器学习

  1. 将reference scan在空间上划分成多个网格。
  2. 将reference scan中的点云投影在网格上,并计算每个网格的概率密度函数。计算方法为计算该网格内所有点云的均值向量python 点云IPC匹配 ndt点云匹配_python 点云IPC匹配_02与协方差矩阵python 点云IPC匹配 ndt点云匹配_概率密度函数_03,python 点云IPC匹配 ndt点云匹配_概率密度函数_04,python 点云IPC匹配 ndt点云匹配_概率密度函数_05,其中python 点云IPC匹配 ndt点云匹配_python 点云IPC匹配_06表示该网格内的点。则该网格的概率密度函数为python 点云IPC匹配 ndt点云匹配_机器学习_07
  3. 将current scan的点云按照转换矩阵python 点云IPC匹配 ndt点云匹配_机器学习_08坐标转换到reference scan坐标系下,其中python 点云IPC匹配 ndt点云匹配_机器学习_08中的位姿变化值python 点云IPC匹配 ndt点云匹配_点云_10正是要优化的量。
  4. 计算current scan中的每个点转换后距离最近的Cell,并计算得出相应的概率密度函数的值python 点云IPC匹配 ndt点云匹配_概率密度函数_11,其中python 点云IPC匹配 ndt点云匹配_概率密度函数_12表示current scan中的点python 点云IPC匹配 ndt点云匹配_人工智能_13经过位姿变化python 点云IPC匹配 ndt点云匹配_点云_10后在reference scan坐标系下的值。
  5. 那么最佳的位姿变化值python 点云IPC匹配 ndt点云匹配_点云_10应该最大化似然函数:python 点云IPC匹配 ndt点云匹配_概率密度函数_16,即最小化负对数似然python 点云IPC匹配 ndt点云匹配_人工智能_17
  6. 使用牛顿法优化位姿变化参数python 点云IPC匹配 ndt点云匹配_点云_10以最小化这个负对数似然。

三、优化建议

NDT的BaseMap中的网格尺寸在计算中会有很大的影响,过大会影响精度,过小会增大计算量。可以通过点云聚类将basemap划分为大小不同的网格,这样每个网格的PDF将 会更加符合实际情况,在关联配准时会更加准确。