前端:新路标点的三角化

已知:若干个关键帧中,某些像素点对应了同一个路标点(换言之,某一个路标点被若干个关键帧观测到)(像素点之间的对应关系或关联,可以通过光流跟踪、特征匹配等得到)。
将该已知数学化:已知第 k k k帧上该像素的归一化平面坐标 P c k = [ u k , v k , 1 ] T , ( k = 1 , 2 , ⋯   , n ) P_{c_k}=[u_k,v_k,1]^T,(k=1,2,\cdots,n) Pck=[uk,vk,1]T,(k=1,2,,n),且已知第 k k k帧(相对于世界坐标系的)位姿 T k = [ R k , t k ] 3 × 4 T_k=[R_k,t_k]_{3\times 4} Tk=[Rk,tk]3×4,求该路标点的世界坐标系下的坐标 P w = [ X , Y , Z , 1 ] T P_w=[X,Y,Z,1]^T Pw=[X,Y,Z,1]T(取齐次坐标)。
【注意】此处得位姿是 T c w T_{cw} Tcw,我们知道在【VINS课件及代码】中位姿得定义是 T w c T_{wc} Twc,因此需要一步转换!! R c w = R w c T , t c w = − R w c T t w c R_{cw}=R^T_{wc},t_{cw}=-R^T_{wc}t_{wc} Rcw=RwcT,tcw=RwcTtwc


根据投影关系:
λ k P c k = T k P w , ( k = 1 , 2 , ⋯   , n ) \lambda_kP_{c_k}=T_kP_w, \quad(k=1,2,\cdots,n) λkPck=TkPw,(k=1,2,,n)

式中, λ k \lambda_k λk为第 k k k帧坐标系下新路标点的深度值,是未知量(但同时我们不关心,应该消去该未知量)。
展开:
λ k [ u k v k 1 ] = [ T k , 11 T k , 12 T k , 13 T k , 14 T k , 21 T k , 22 T k , 23 T k , 24 T k , 31 T k , 32 T k , 33 T k , 34 ] P w [ λ k u k λ k v k λ k ] = [ T k , 1 T T k , 2 T T k , 3 T ] P w \begin{aligned} \lambda_k \begin{bmatrix} u_k \\ v_k \\1 \end{bmatrix} &= \begin{bmatrix} T_{k,11} & T_{k,12} & T_{k,13} & T_{k,14} \\ T_{k,21} & T_{k,22} & T_{k,23} & T_{k,24}\\ T_{k,31} & T_{k,32} & T_{k,33} & T_{k,34}\\ \end{bmatrix}P_w \\ \begin{bmatrix} \lambda_k u_k \\ \lambda_k v_k \\ \lambda_k \end{bmatrix} &= \begin{bmatrix} T^T_{k,1}\\ T^T_{k,2}\\ T^T_{k,3}\\ \end{bmatrix} P_w \end{aligned} λkukvk1λkukλkvkλk=Tk,11Tk,21Tk,31Tk,12Tk,22Tk,32Tk,13Tk,23Tk,33Tk,14Tk,24Tk,34Pw=Tk,1TTk,2TTk,3TPw

消去 λ k \lambda_k λk得:
[ u k T k , 3 T y v k T k , 3 T y ] = [ T k , 1 T T k , 2 T ] P w [ u k T k , 3 T − T k , 1 T v k T k , 3 T − T k , 2 T ] P w = 0 \begin{aligned} \begin{bmatrix} u_k T^T_{k,3}y \\ v_k T^T_{k,3} y \end{bmatrix} &= \begin{bmatrix} T^T_{k,1}\\ T^T_{k,2} \end{bmatrix} P_w \\ \begin{bmatrix} u_k T^T_{k,3} - T^T_{k,1} \\ v_k T^T_{k,3} - T^T_{k,2} \end{bmatrix} P_w&= 0 \end{aligned} [ukTk,3TyvkTk,3Ty][ukTk,3TTk,1TvkTk,3TTk,2T]Pw=[Tk,1TTk,2T]Pw=0

每一帧可以贡献上述两个方程,将 n n n帧都罗列出来,如下:
[ u 1 T 1 , 3 T − T 1 , 1 T v 1 T 1 , 3 T − T 1 , 2 T u 2 T 2 , 3 T − T 2 , 1 T v 2 T 2 , 3 T − T 2 , 2 T ⋯ ⋯ u n T n , 3 T − T n , 1 T v n T n , 3 T − T n , 2 T ] P w = 0 D P w = 0 \begin{aligned} \begin{bmatrix} u_1 T^T_{1,3} - T^T_{1,1} \\ v_1 T^T_{1,3} - T^T_{1,2} \\ u_2 T^T_{2,3} - T^T_{2,1} \\ v_2 T^T_{2,3} - T^T_{2,2} \\ \cdots \\ \cdots \\ u_n T^T_{n,3} - T^T_{n,1} \\ v_n T^T_{n,3} - T^T_{n,2} \\ \end{bmatrix} P_w &= 0 \\ D P_w &=0 \end{aligned} u1T1,3TT1,1Tv1T1,3TT1,2Tu2T2,3TT2,1Tv2T2,3TT2,2TunTn,3TTn,1TvnTn,3TTn,2TPwDPw=0=0

解上述线性方程即可求得新路标点得齐次坐标 P w P_w Pw


【注】:因为我们确定有非零解,故应该有 r a n k ( D ) = 3 rank(D)=3 rank(D)=3;在非常理想情况下(即观测无噪声、位姿估计准确)或许可以实现。但是!! 实际情况却是观测有噪声,位姿估计有误差,故一般情况下是 r a n k ( D ) = 4 rank(D)=4 rank(D)=4,此时去求解该齐次方程,只能得到零解!!

那么,如何才能从含有一定“噪声”的方程组 D P w = 0 DP_w=0 DPw=0中,求解得到非零解P_w呢?
【转化】为寻找最小二乘解:
min ⁡ y ∥ D y ∥ 2 2 , s . t . ∥ y ∥ = 1 \min_{y} \| Dy \|^2_2, \quad s.t. \| y\|=1 yminDy22,s.t.y=1

该式的含义为,寻找使得 D y Dy Dy的二范数取得最小值得 y y y,且这个 y y y得模长为1(该条件主要是为了规避 y y y为零解得情况)。

此处直接给出结论: y = U 4 y=U_4 y=U4即为该最小二乘问题得解。
其中 U 4 U_4 U4为对 D T D D^TD DTD进行奇异值分解得到的奇异值 σ 4 \sigma_4 σ4对应的向量(或酉矩阵第4列)。


取得 y = U 4 y=U_4 y=U4,只需同除以第四个元素,转化为齐次坐标即可。

【对奇异值得一些理解】

每个矩阵 A A A都可以表示为一系列秩为1的“小”矩阵的和,而奇异值则是“小”矩阵前的权重,衡量了某个“小”矩阵对于 A A A的权重。

奇异值分解特征值分解的区别:
所有的矩阵都可以进行奇异值分解,而只有方阵才可以进行特征值分解。
当所给的矩阵是对称的方阵时, A T = A A^T=A AT=A,奇异值分解和特征值分解的结果是相同的。即,对称矩阵的特征值分解是所有奇异值分解的一个特例。但是二者还是存在一些小的差异,奇异值分解需要对奇异值从大到小的排序,且奇异值均大于等于零。
Matlab代码:
对于特征值分解 [v,d] = eig(A) , 即 A = v*d*inv(v)
对于奇异值分解,其分解的基本形式为 [u,s,v] = svd(C), C = u*s*v'.
若C阵为对称的方阵, 则有 u = v; 所以有 C = v*s*v'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值