本文仅仅分析了一下两组点云做好匹配好了之后, 如何解算RT, 并不涉及匹配过程,详细的匹配,下次再出一篇博客
ICP 求解旋转矩阵 ( R ) 的步骤
给定两个点云集合 ( P = {p_1, p_2, …, p_n} )(源点云)和 ( Q = {q_1, q_2, …, q_n} )(目标点云),ICP 的目标是通过找到旋转矩阵 ( R ) 和平移向量 ( t ),使得源点云在经过刚体变换后,最小化与目标点云之间的距离平方和:
E ( R , t ) = ∑ i = 1 n ∥ q i − ( R p i + t ) ∥ 2 E(R, t) = \sum_{i=1}^{n} \| q_i - (R p_i + t) \|^2 E(R,t)=i=1∑n∥qi−(Rpi+t)∥2
其中:
- ( R ∈ \in ∈ SO(3) ) 是 3D 旋转矩阵。
- ( t ∈ \in ∈ R \mathbb{R} R ) 是 3D 平移向量。
求解旋转矩阵 ( R ) 的步骤
1. 计算质心
计算两个点云集合的质心 ( μ P \mu_P μP) 和 ( μ Q \mu_Q μQ):
μ P = 1 n ∑ i = 1 n p i , μ Q = 1 n ∑ i = 1 n q i \mu_P = \frac{1}{n} \sum_{i=1}^{n} p_i, \quad \mu_Q = \frac{1}{n} \sum_{i=1}^{n} q_i μP=n1i=1∑npi,μQ=n1i=1∑nqi
2. 去质心
对每个点都减去相应的质心,得到去质心后的点集 ( P’ ) 和 ( Q’ ):
p i ′ = p i − μ P , q i ′ = q i − μ Q p'_i = p_i - \mu_P, \quad q'_i = q_i - \mu_Q pi′=pi−μP,qi′=qi−μQ
3. 计算协方差矩阵 ( H )
这里可以解释一下为什么求解协方差矩阵,原因参考的SLAM 14讲的第七章
使用去质心后的点集 ( P’ ) 和 ( Q’ ),构建协方差矩阵 ( H ),注意是每对点的外积的和:
H = ∑ i = 1 n p i ′ q i ′ T H = \sum_{i=1}^{n} p'_i {q'_i}^T H=i=1∑npi′qi′T
此处 ( H ) 是 3x3 的矩阵,它包含了两个点云之间的协方差信息。
4. SVD 分解
对协方差矩阵 ( H ) 进行奇异值分解:
H = U Σ V T H = U \Sigma V^T H=UΣVT
其中:
- ( U ) 和 ( V ) 是 3x3 的正交矩阵。
- ( Σ \Sigma Σ) 是 3x3 的对角矩阵,包含奇异值。
5. 计算旋转矩阵 ( R )
旋转矩阵 ( R ) 可以通过 SVD 的结果求得:
R = V U T R = V U^T R=VUT
但是,如果 ( det ( R ) = − 1 \det(R) = -1 det(R)=−1),则说明产生了反射矩阵,此时需要对 ( V ) 的最后一列取反:
R = V [ 1 0 0 0 1 0 0 0 − 1 ] U T R = V \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & -1 \end{bmatrix} U^T R=V 10001000−1 UT
平移向量 ( t )
旋转矩阵 ( R ) 求解完毕后,平移向量 ( t ) 可以通过以下公式计算:
t = μ Q − R μ P t = \mu_Q - R \mu_P t=μQ−RμP
目标函数总结
通过最小化目标函数 ( E(R, t) ),我们可以逐步通过迭代方式求解旋转矩阵 ( R ) 和平移向量 ( t ),使得源点云经过变换后与目标点云对齐。这就是 ICP 算法求解刚体变换的核心步骤。