Lambda Twist: An Accurate Fast Robust Perspective Three Point (P3P)Solver
0.引言
特征点的3D可以由三角化或者RGBD相机获取。因此双目或RGBD的视觉里程计中可以直接使用PnP估计相机运动,而在单目视觉里程计中,必须先进行初始化然后才能使用PnP。
⎣⎡uxuy1⎦⎤=λK⋅[Rt]⎣⎢⎢⎡xyz1⎦⎥⎥⎤
首先需要弄清楚,3D-2D求解的结果是什么?
-
1.⎣⎢⎢⎡xyz1⎦⎥⎥⎤为上一帧特征点在世界坐标系下的坐标,Pw;
-
2.[R,t]为world系到camera系的变换Tcw;
-
3.K为相机内参,⎣⎡uxuy1⎦⎤为下一帧的像素坐标系,λ为相机坐标系下的逆深度;
-
4.怎么求两帧之间的相对位姿变换?
a.把上一帧当做世界坐标系
b.TC1C2=TWC1−1TWC2
即是,PnP只能求解当前帧到世界坐标系下的变换,要求取前后帧的变换,还需要经过一次转换。同时需要注意的是,wc是更常用的!
1.DLT求解PnP
⎣⎡uxuy1⎦⎤=λK⋅[Rt]⎣⎢⎢⎡xyz1⎦⎥⎥⎤=λ⎣⎡p1p5p9p2p6p10p3p7p11p4p8p12⎦⎤⎣⎢⎢⎡xyz1⎦⎥⎥⎤=λ⎣⎡p0Tp1Tp2T⎦⎤x
⇒ux=p2Txp0Tx,uy=p2Txp1Tx⇒{p0Tx−p2Tx⋅ux=0p1Tx−p2Tx⋅uy=0
⇒[xT00xT−xTux−xTuy]⎣⎡p0p1p2⎦⎤=0
齐次最小二成得到⎣⎡p0p1p2⎦⎤
投影矩阵:
P=K⋅[Rt]=⎣⎡p1p5p9p2p6p10p3p7p11p4p8p12⎦⎤=⎣⎡p0Tp1Tp2T⎦⎤
P=K⋅[Rt]=K⋅[R−Rc]=[M−Mc]M=QR⇒K,R⇒t
2.P3P求解
参考十四讲.
3.Lambda Twist
λiyi=Rxi+t,i∈{1,2,3}
其中,xi为3D点,yi为2D点。同时将yi归一化处理:∣yi∣=1。则有:
λiyi−λjyj=R(xi−xj),⇒
∣∣λiyi−λjyj∣∣2=∣xi−xj∣2=defaij,⇒λi2+λj2−2bij=aijbij=defyiTyjij i.e. {12,13,23}。此时,就只剩下λi为变量。式中bij与aij几何意义分别为,像素点i,j的投影光线夹角的余弦,三维点xi,xj之间的距离平方。如果3D不共线,则aij>0,∀ij
3.1.三个非齐次二次多项式
上式中深度参数λi的约束可以表达为:
Λ⊤M12Λ=a12,Λ⊤M13Λ=a13,Λ⊤M23Λ=a23
其中:M12=⎝⎛1−b120−b1210000⎠⎞,M13=⎝⎛10−b13000−b1301⎠⎞,M23=⎝⎛00001−b230−b231⎠⎞
此时只关注当λi>0时的解。同时舍去复数解,λ1,λ2,λ3>0.
3.2.两个齐次二次多项式
公式太多了,就不重复造*了,看论文吧。
整体算法流程: