视觉SLAM前端——ICP
视觉SLAM前端里程计之ICP,即已知多个匹配好的3D/3D点对,来估计相机的运动
当我们知道空间点在两个坐标系下的位置时,可以通过ICP来求解其相对位姿。ICP最初常用在激光SLAM中,因为激光可以获得3D位置,而不像视觉还需要经过相机的投影变换,但是从激光雷达获得的三维点云中,我们很难对两帧点云进行匹配,通常是寻找距离最近的点作为匹配点,所以称为迭代最近法(ICP)。当我们已知相机的位姿后,可以把相机坐标系下的特征点PicP_i^cPic转换到世界坐标系下,这与世界坐标系下对应的特征点PiwP_i^wPiw存在误差,即:
ei=Piw−(RwcPic+twc)e_i=P_i^w-(R_{wc}P_i^c+t_{wc})ei=Piw−(RwcPic+twc)
考虑所有特征点的误差,我们定义总误差为:
J(R,t)=12∑i=1n∥ei∥22J(R,t) =\frac 1 2\sum_{i=1}^n\|e_i\|_2^2J(R,t)=21i=1∑n∥ei∥22
我们的目标是寻找一个最优的RRR、ttt,使得总误差JJJ最小,即:
T∗=arg minR.tJ(R,t)T^*=\argmin_{R.t}J(R,t)T∗=R.targminJ(R,t)
这是一个非线性最小二乘问题,通常可以用非线性优化的方法进行求解,但对于ICP来说,我们还可以使用SVD分解的方式求出解析解。
SVD方法
首先我们先定义相机坐标系下和世界坐标系下所有3D特征点的质心分别为(注意质心是没有下标的):
Pc=1n∑i=1nPicP^c=\frac 1 n \sum_{i=1}^nP_i^cPc=n1i=1∑nPic Pw=1n∑i=1nPiwP^w=\frac 1 n \sum_{i=1}^nP_i^wPw=n1i=1∑nPiw
考虑第iii个误差项:
ei=Piw−(RwcPic+twc)=Piw−Pw+Pw−Rwc(Pic−Pc+Pc)−twc=Piw−Pw−Rwc(Pic−Pc)+Pw−(RwcPc+twc)=P′iw−RwcP′ic⏟eia+Pw−(RwcPc+twc)⏟eib\begin{aligned}e_i &=P_i^w-(R_{wc}P_i^c+t_{wc}) \\ &=P_i^w-P^w+P^w-R_{wc}(P_i^c-P^c+P^c)-t_{wc} \\ &=P_i^w-P^w-R_{wc}(P_i^c-P^c)+P^w-(R_{wc}P^c+t_{wc}) \\&=\underbrace{{P'}_i^w-R_{wc}{P'}_i^c}_{e_{ia}}+\underbrace{P^w-(R_{wc}P^c+t_{wc})}_{e_{ib}} \end{aligned} ei=Piw−(RwcPic+twc)=Piw−Pw+Pw−Rwc(Pic−Pc+Pc)−twc=Piw−Pw−Rwc(Pic−Pc)+Pw−(RwcPc+twc)=eia
P′iw−RwcP′ic+eib
Pw−(RwcPc+twc)
其中P′iw=Piw−Pw{P'}_i^w=P_i^w-P^wP′iw=Piw−Pw,P′ic=Pic−Pc{P'}_i^c=P_i^c-P^cP′ic=Pic−Pc,分别表示特征点在世界和相机坐标系下的去质心坐标。由于:
∑i=1neia=∑i=1n(P′iw−RwcP′ic)=0\sum_{i=1}^ne_{ia} =\sum_{i=1}^n({{P'}_i^w-R_{wc}{P'}_i^c})=0i=1∑neia=i=1∑n(P′iw−RwcP′ic)=0
那么总误差可以化简为:
J(R,t)=12∑i=1n∥ei∥22=12∑i=1n∥eia∥22+12∑i=1n∥eib∥22=Ja(R)+Jb(R,t)J(R,t) =\frac 1 2\sum_{i=1}^n\|e_i\|_2^2=\frac 1 2\sum_{i=1}^n\|e_{ia}\|_2^2+\frac 1 2\sum_{i=1}^n\|e_{ib}\|_2^2=J_a(R)+J_b(R,t)J(R,t)=21i=1∑n∥ei∥22=21i=1∑n∥eia∥22+21i=1∑n∥eib∥22=Ja(R)+Jb(R,t)
由于JaJ_aJa只与RRR有关,与ttt无关,我们可以先通过优化JaJ_aJa求得RRR,再带入Jb(R,t)=0J_b(R,t)=0Jb(R,t)=0,求得ttt。JaJ_aJa可进一步展开为:
Ja(R)=12∑i=1n∥P′iw−RwcP′ic∥22=12∑i=1n(P′iwTP′iw+P′icTRwcTRwcP′ic−2P′iwTRwcP′ic)J_a(R)=\frac 1 2\sum_{i=1}^n\|{P'}_i^w-R_{wc}{P'}_i^c\|_2^2=\frac 1 2\sum_{i=1}^n({{P'}_i^w}^T{P'}_i^w+{{P'}_i^c}^TR_{wc}^TR_{wc}{P'}_i^c-2{{P'}_i^w}^TR_{wc}{P'}_i^c)Ja(R)=21i=1∑n∥P′iw−RwcP′ic∥22=21i=1∑n(P′iwTP′iw+P′icTRwcTRwcP′ic−2P′iwTRwcP′ic)
由于前两项与RRR无关,所以优化目标可以简化为:
J′a(R)=−∑i=1nP′iwTRwcP′ic=−∑i=1ntr(RwcP′icP′iwT)=−tr(Rwc∑i=1nP′icP′iwT){J'}_a(R) =-\sum_{i=1}^n {{P'}_i^w}^TR_{wc}{P'}_i^c=-\sum_{i=1}^n tr(R_{wc}{P'}_i^c{{P'}_i^w}^T)=-tr( R_{wc} \sum_{i=1}^n{P'}_i^c{{P'}_i^w}^T)J′a(R)=−i=1∑nP′iwTRwcP′ic=−i=1∑ntr(RwcP′icP′iwT)=−tr(Rwci=1∑nP′icP′iwT)
令W=∑i=1nP′icP′iwTW=\sum_{i=1}^n{P'}_i^c{{P'}_i^w}^TW=∑i=1nP′icP′iwT,对WWW进行SVD分解,即W=UΣVTW=U\Sigma V^TW=UΣVT,Σ\SigmaΣ对应的奇异值从大到小排列。 根据最优性证明,当WWW满秩时,最优的R=UVTR=UV^TR=UVT,如果RRR行列式小于0,取负作为最优值。
非线性优化方法
由于ICP存在无穷多解或者唯一解,如果我们使用迭代的方法获取局部最优解,即为全局最优解,因此对于ICP问题,我们可以任意选定初始值并进行迭代。误差的一阶导数即雅克比矩阵为:
∂ei∂R=−(RwcPic)∧=(−Piw)∧,∂ei∂t=I\frac {\partial e_i} {\partial R}=-(R_{wc}P_i^c)^{\land}=(-P_i^w)^{\land},\frac {\partial e_i} {\partial t}=I∂R∂ei=−(RwcPic)∧=(−Piw)∧,∂t∂ei=I
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)