基于高斯牛顿的点-点,点-线,点到面ICP过程推导

基于高斯牛顿的点-点,点-线,点到面ICP过程推导

简介

最近在学习深蓝学院的<<多传感器融合定位>>这一课程,本身也是个半路出家的SLAM小白,也挺感兴趣的,就尝试一下了,目前做了两章作业,其中第一章有道题需要自己手写ICP或者NDT的匹配,因为PCL_ICP默认是使用SVD分解的,所以这里尝试使用高斯牛顿的迭代法来求解点-点的ICP匹配,同时结合之前看的LIVOX-LOAM里面的匹配,有个用点到面,点到线的匹配,在这里做个总结。
自己也是个小白,如果这里有什么地方错误的还请大家指教,请轻喷,我及时改正!再有就是要感谢高翔博士,贺一家博士的VIO课程,对后端优化讲解的很清楚,再就是<<多传感器融合定位>>课程的任乾任大佬的开源分享。
更新不易,如需转载,请著名出处,谢谢。

1 回顾

1.1 优化问题

对于一个多维的最小二乘优化问题,我们希望寻找一个 x \pmb x xxx,能够使得目标函数达到最小,即:
arg min ⁡ x F ( x ) = arg min ⁡ x ( Σ i = 1 n 1 2 ∣ ∣ f i ( x ) ∣ ∣ 2 ) (1) {\underset {\pmb x}{\operatorname {arg\,min} }}\pmb F(\pmb x) ={\underset {\pmb x}{\operatorname {arg\,min} }}(\Sigma_{i=1}^n \frac{1}{2}||f_i(\pmb x)||^2) \tag{1} xxxargminFFF(xxx)=xxxargmin(Σi=1n21fi(xxx)2)(1)
传统的求解最小化问题就是对(1)其求导,将其泰勒展开可以得到:
F ( x + Δ x ) = F ( x ) + ∂ F ( x ) ∂ x Δ x + Δ x T ∂ F 2 ( x ) 2 ! ∂ x 2 Δ x + O ( ( Δ x ) 3 ) (2) F(x+\Delta x) = F(x) + \frac{\partial F(x)}{\partial x}\Delta x + \Delta x^T\frac{\partial F^2(x)}{2!\partial x^2}\Delta x + O((\Delta x)^3)\quad \quad \quad \tag{2} F(x+Δx)=F(x)+xF(x)Δx+ΔxT2!x2F2(x)Δx+O((Δx)3)(2)
将(2)求关于 Δ x \Delta x Δx的导数令其为0,忽略高阶项,可以得到:
g ( x ) + H ( x ) Δ x = 0 , 其 中 g ( x ) = ( ∂ F ( x ) ∂ x ) T , H ( x ) = ∂ F 2 ( x ) ∂ x 2 (3) g(x) + H(x)\Delta x = 0,其中g(x) =(\frac{\partial F(x)}{\partial x})^T,H(x) =\frac{\partial F^2(x)}{\partial x^2}\quad \quad \tag{3} g(x)+H(x)Δx=0g(x)=(xF(x))TH(x)=x2F2(x)(3)
根据公式(3)可以得到迭代值,如此循环迭代,直到达到收敛条件(收敛次数,收敛精度)就退出
Δ x = − H − 1 ( x ) ∗ g ( x ) (4) \Delta x = -H^{-1}(x)*g(x) \tag{4} Δx=H1(x)g(x)(4)

1.2 高斯牛顿法

由于海森矩阵 H H H的求解不方便,有些函数很难去求解二次导数,所以,可以用一种新的迭代方式求解 Δ x \Delta x Δx,即对子函数 f ( x ) f(x) f(x)进行一阶泰勒展开,原函数转化为:
arg min ⁡ x ( Σ i = 1 n 1 2 ∣ ∣ f i ( x + Δ x ) ∣ ∣ 2 ) = arg min ⁡ x Σ i = 1 n ( f i ( x ) + J i ( x ) Δ x ) ) 2 = arg min ⁡ x Σ i = 1 n ( f i T ( x ) ∗ f ( x ) + 2 ∗ f i T ( x ) J ( x ) Δ x + Δ x T J T ( x ) ∗ J ( x ) Δ x ) 设 G ( Δ x ) = Σ i = 1 n ( f i T ( x ) ∗ f ( x ) + 2 ∗ f i T ( x ) J ( x ) Δ x + Δ x T J T ( x ) ∗ J ( x ) Δ x ) g i ( Δ x ) = f i T ( x ) ∗ f ( x ) + 2 ∗ f i T ( x ) J ( x ) Δ x + Δ x T J T ( x ) ∗ J ( x ) Δ x (5) {\underset {\pmb x}{\operatorname {arg\,min} }}(\Sigma_{i=1}^n \frac{1}{2}||f_i(\pmb x +\Delta x)||^2) \\ = {\underset {\pmb x}{\operatorname {arg\,min} }}\Sigma_{i=1}^n (f_i(x)+J_i(x)\Delta x))^2 \\ = {\underset {\pmb x}{\operatorname {arg\,min} }}\Sigma_{i=1}^n (f_i^T(x)*f(x)+2*f_i^T(x)J(x)\Delta x + \Delta x^TJ^T(x)*J(x)\Delta x) \\ 设G(\Delta x) = \Sigma_{i=1}^n(f_i^T(x)*f(x)+2*f_i^T(x)J(x)\Delta x + \Delta x^TJ^T(x)*J(x)\Delta x) \\ g_i(\Delta x) = f_i^T(x)*f(x)+2*f_i^T(x)J(x)\Delta x + \Delta x^TJ^T(x)*J(x)\Delta x \\ \quad \quad \tag{5} xxxargmin(Σi=1n21fi(xxx+Δx)2)=xxxargminΣi=1n(fi(x)+Ji(x)Δx))2=xxxargminΣi=1n(fiT(x)f(x)+2fiT(x)J(x)Δx+ΔxTJT(x)J(x)Δx)G(Δx)=Σi=1n(fiT(x)f(x)+2fiT(x)J(x)Δx+ΔxTJT(x)J(x)Δx)gi(Δx)=fiT(x)f(x)+2fiT(x)J(x)Δx+ΔxTJT(x)J(x)Δx(5)
g i ( Δ x ) g_i(\Delta x) gi(Δx)关于 Δ x \Delta x Δx的导数令其为0:
∂ g i ( x ) ∂ Δ x = 2 ∗ J T ( x ) f ( x ) + 2 ∗ J T ( x ) J ( x ) ∗ Δ x = 0 所 以 有 : Δ x = − ( J T ( x ) J ( x ) ) − 1 ∗ ( J T ( x ) ∗ f ( x ) ) (6) \frac{\partial g_i(x)}{\partial \Delta x} = 2*J^T(x)f(x)+2*J^T(x)J(x)*\Delta x = 0 \\ 所以有: \Delta x = -(J^T(x)J(x))^{-1}*(J^T(x)*f(x)) \tag{6} Δxgi(x)=2JT(x)f(x)+2JT(x)J(x)Δx=0:Δx=(JT(x)J(x))1(JT(x)f(x))(6)

1.3 点云匹配问题

​ 点云匹配是为了找到两组点云 P = { p 1 , p 2 , . . . , p n } P = {\{p_1,p_2,...,p_n\}} P={ p1,p2,...,pn} Q = { q 1 , q 2 , . . . , q m } Q={\{q_1,q_2,...,q_m\}} Q={ q1,q2,...,qm}之间的关系,一种是对应点之间的匹配,即在 Q Q Q里的每一个点都已知和 P P P中的某个点匹配,在视觉里面,根据特征点可以这样匹配,还有一种是不对应点的匹配,就是不知道 P P P Q Q Q的对应关系,这里讨论不知道对应关系的情况,因为在雷达中,都不知道点与点的对应关系。
匹配的目的是为了最小化点与点,点与线,点与面的距离:

1.3.1 点到点的模型:

arg min ⁡ R , t = 1 2 Σ i = 1 n ∣ ∣ R ∗ q i + t − p c l o s e t ∣ ∣ 2 (7) {\underset {R,\pmb t}{\operatorname {arg\,min} }} = \frac{1}{2}\Sigma_{i=1}^n||R*\pmb q_i+\pmb t - \pmb p_{closet}||^2 \quad \quad \tag{7} R,tttargmin=21Σi=1nRqqqi+t

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值