Normal Distribution Transform
NDT是点云匹配中一种重要的方法。不同于ICP等方法,NDT并不需要事先建立landmark之间的对应关系。
对于ICP匹配方法:
- 寻找两帧数据间的匹配关系,假设有N对匹配关系${(\mathbb x_{target}^i, \mathbb x_{source}^i)}_{i=1}^n$
- 优化目标$\min_{T} \Sigma_{i=1}^{n}| \mathbb x_{target}^i - T \mathbb x_{source}^i|^2$
点云中,寻找到正确的匹配关系并不容易,所以通常只是用这种方法做粗略估计。
因为点云表达了结构信息,而基于结构匹配会更容易得到稳定的结果。NDT就是一种基于结构的方法。
NDT主要思路是根据参考点云构建一个多元高斯分布,如果变换参数能使得两幅点云数据匹配的比较好,那么变换后的点在参考点云中的概率密度会很大。所以NDT中主要优化的是使得概率密度求和最大的变换参数。
NDT算法及推导过程:
由于三维空间中变换矩阵的求导涉及到李群,李代数,这部分这里不赘述,如若不太容易理解,可以转换到二维平面下考虑。有时为了简便考虑,也可以使用四元数或者是直接使用RPY角近似计算。
NDT中使用RPY角替代旋转矩阵求导,主要是使用旋转矩阵不容易求海塞矩阵。
-
将参考点云划分成若干个指定大小的网格,并计算每个网格的多维正太分布参数(均值和方差):
-
对于某一个点$p$经过变换T,得到对应点$q$,则$q$的坐标为:
-
根据高斯分布计算$q$的概率密度: 所以最终的目标函数为: 所以优化目标为: 为了求得T,考虑到维度比较小,可以使用牛顿优化算法对式(5)做优化。所以需要计算S关于T的一阶导和二阶导。
-
我们计算s对q的一阶导数有:
令$\mathbb g(\mathbb x_q) = \mathbb x_q - \mathbb u$,则
$\mathbb x_q$关于T的导数可以参考李代数部分内容,这里就不展开了。所以,有
接着需要计算s对q的二阶导数,实值函数的二阶导,是一个方阵:
下面来看$\frac{\partial Q^{-1} g(\mathbb x_q)}{\partial \mathbb x_q}$的求导,这里是一个向量值函数对向量求导,根据矩阵相容原理及求导基本法则,我们知道结果一定是一个n*n的矩阵,假设: 且$Q^{-1}$是一个对称矩阵, 对$\mathbb a_i^T \mathbb g(\mathbb x_q)$求导,这是一个实值函数,有: 所以有: 所以,式(10)有: 接着按照链式求导,有: 根据式(9)和式(16)我们就能构造出一阶雅克比矩阵和Hessian矩阵,然后利用梯度下降法求解。
NDT中变换矩阵求导
在三维空间中,可以使用6维向量表示一个三维变换$\mathbb p_6 = [t_x, t_y, t_z, \phi_x, \phi_y, \phi_z]^T$,
其中: $c_i= \mathbb cos(\phi_i), s_i = \mathbb sin(\phi_i)$
这里我们假设旋转顺序为$z-y-z$,所以对应的三维变换可以表示为: 所以式(18)的一阶导(雅克比矩阵)可以表示为: 其中: 式(18)的二阶导(海塞矩阵)为: 其中:
Ref
[1] . The Three-Dimensional Normal-Distributions Transform — an Efficient Representation for Registration, Surface Analysis, and Loop Detection