一步一步学习S-MSCKF(四)特征点三角化

S-MSCKF中观测更新的时机是在特征点跟踪丢失之后,其过程如下:

  • 检查跟踪丢失的特征点是否进行过三角化,若果没有,则求其进行三角化。
  • 根据上述已知的特征点坐标以及观测,得到状态量之间的约束,进行观测更新。
    这里介绍S-MSCKF中对特征点三角化的方法。

1 特征点三角化

特征点三角化分两步,第一步是根据对特征点的某两帧观测值对其坐标进行初始估计;第二步是根据对特征点的多帧观测对其坐标进行修正。

1.1 两帧约束求特征点三维坐标

如下示意图,已知测量得到的特征点 f f f C 1 C_1 C1中的归一化坐标为 ( z 1 ( 0 ) , z 2 ( 1 ) ) (z_1(0),z_2(1)) (z1(0),z2(1)),测量得到的特征点在 C 2 C_2 C2中的归一化坐标为 ( z 2 ( 0 ) , z 2 ( 1 ) ) (z_2(0),z_2(1)) (z2(0),z2(1)) C 2 C_2 C2 C 1 C_1 C1的转换矩阵为 [ R , t ] [R,t] [R,t],求特征点 f f f C 1 C_1 C1系中的深度 d d d

特征点 f f f C 1 C_1 C1系中的坐标可以表示为 d [ z 1 ( 0 ) , z 1 ( 2 ) , 1 ] T d[z_1(0),z_1(2),1]^T d[z1(0),z1(2),1]T,那么其在 C 2 C_2 C2中的坐标可以表示为 R d [ z 1 ( 0 ) , z 1 ( 2 ) , 1 ] T + t Rd[z_1(0),z_1(2),1]^T+t Rd[z1(0),z1(2),1]T+t,设 m = R [ z 1 ( 0 ) , z 1 ( 2 ) , 1 ] T m=R[z_1(0),z_1(2),1]^T m=R[z1(0),z1(2),1]T,那么特征点在 C 2 C_2 C2中可以表示为:

S = d m + t = [ d m ( 0 ) + t ( 0 ) d m ( 1 ) + t ( 1 ) d m ( 2 ) + t ( 2 ) ] S=dm+t=\left[\begin{matrix} dm(0)+t(0)\\ dm(1)+t(1)\\ dm(2)+t(2) \end{matrix}\right] S=dm+t=dm(0)+t(0)dm(1)+t(1)dm(2)+t(2)

将特征点在 C 2 C_2 C2中的归一化坐标同时乘以 d m ( 2 ) + t ( 2 ) dm(2)+t(2) dm(2)+t(2),得到 S ′ S^{'} S,那么使 ∣ ∣ S − S ′ ∣ ∣ ||S-S^{'}|| SS最小即可。
S − S ′ = [ d m ( 0 ) + t ( 0 ) − z 2 ( 0 ) [ d m ( 2 ) + t ( 2 ) ] d m ( 1 ) + t ( 1 ) − z 2 ( 1 ) [ d m ( 2 ) + t ( 2 ) ] d m ( 2 ) + t ( 2 ) − [ d m ( 2 ) + t ( 2 ) ] ] = [ [ m ( 0 ) − z 2 ( 0 ) m ( 2 ) ] d − [ z 2 ( 0 ) t ( 2 ) − t ( 0 ) ] [ m ( 1 ) − z 2 ( 1 ) m ( 2 ) ] d − [ z 2 ( 1 ) t ( 2 ) − t ( 1 ) ] 0 ] S-S^{'}=\left[\begin{matrix} dm(0)+t(0)-z_2(0)\left[dm(2)+t(2)\right]\\ dm(1)+t(1)-z_2(1)[dm(2)+t(2)]\\ dm(2)+t(2)-[dm(2)+t(2)] \end{matrix}\right]= \left[\begin{matrix} [m(0)-z_2(0)m(2)]d-[z_2(0)t(2)-t(0)]\\ [m(1)-z_2(1)m(2)]d-[z_2(1)t(2)-t(1)]\\ 0 \end{matrix}\right] SS=dm(0)+t(0)z2(0)[dm(2)+t(2)]dm(1)+t(1)z2(1)[dm(2)+t(2)]dm(2)+t(2)[dm(2)+t(2)]=[m(0)z2(0)m(2)]d[z2(0)t(2)t(0)][m(1)z2(1)m(2)]d[z2(1)t(2)t(1)]0
也即是 ∣ ∣ A d − b ∣ ∣ ||Ad-b|| Adb最小即可:
d ^ = min ⁡ d   { [ d A ( 0 ) − b ( 0 ) ] 2 + [ d A ( 1 ) + b ( 1 ) ] 2 } = A ( 0 ) b ( 0 ) + A ( 1 ) b ( 1 ) A ( 0 ) 2 + A ( 1 ) 2 = ( A − 1 A ) − 1 A T b \hat d=\min_{d}\, \{ [dA(0)-b(0)]^2+[dA(1)+b(1)]^2 \}=\frac{A(0)b(0)+A(1)b(1)}{{A(0)}^{2}+{A(1)}^2}=(A^{-1}A)^{-1}A^{T}b d^=dmin{[dA(0)b(0)]2+[dA(1)+b(1)]2}=A(0)2+A(1)2A(0)b(0)+A(1)b(1)=(A1A)1ATb
所以得到特征点 f f f的三维坐标p的初始估计:
p ( 0 ) = z 1 ( 0 ) d , p ( 1 ) = z 1 ( 1 ) d , p ( 2 ) = d p(0)=z_1(0)d ,\quad p(1)=z_1(1)d ,\quad p(2)=d p(0)=z1(0)d,p(1)=z1(1)d,p(2)=d

1.2 多帧约束

因为某个特征点在滑动窗口中并不一定只被两帧观测到,所以我们需要根据特征点在多个相机中的观测来进一步优化特征点的三维坐标。

为了提高数值计算的稳定性,特征点的坐标这里采用逆深度表示。比如特征点在某相机坐标系中的坐标为 [ X , Y , Z ] T [X,Y,Z]^{T} [X,Y,Z]T,那么其逆深度表示为 [ α , β , ρ ] T = [ X Y , Y Z , 1 Z ] T [\alpha,\beta,\rho]^{T}=[\frac{X}{Y},\frac{Y}{Z},\frac{1}{Z}]^{T} [α,β,ρ]T=[YX,ZY,Z1]T

设特征点为 f j f_{j} fj,选取相机系 C n C_n Cn参考系,那么 f j f_j fj在相机系 C i C_i Ci的坐标为:
C i p f j = C ( C n C i q ) C n p f j + C i p C n ^{C_i}p_{f_j}=C{(^{C_i}_{C_n}q)}{^{C_n}p_{f_j}}+{^{C_i}p_{C_n}}\\ Cipfj=C(CnCiq)Cnpfj+CipCn
将逆深度带入得到:
C i p f j = C n Z j ( C ( C n C i q ) [ C n X j C n Z j C n Y j C n Z j 1 ] + 1 C n Z j C i p C n ) = C n Z j ( C ( C n C i q ) [ α j β j 1 ] + ρ j C i p C n ) = C n Z j [ h i 1 ( α j , β j , ρ ) h i 2 ( α j , β j , ρ ) h i 3 ( α j , β j , ρ ) ] ^{C_i}p_{f_j}= {^{C_n}Z_{j}}\left(C({^{C_i}_{C_n}q}) \left[ \begin{matrix} \frac{^{C_n}X_j}{^{C_n}Z_j} \\ \frac{^{C_n}Y_j}{^{C_n}Z_j} \\ 1 \end{matrix} \right] +{\frac{1}{^{C_n}Z_j}}{^{C_i}p_{C_n}}\right)= {^{C_n}Z_{j}}\left(C({^{C_i}_{C_n}q}) \left[ \begin{matrix} \alpha_j \\ \beta_j \\ 1 \end{matrix} \right] +{\rho _j}{^{C_i}p_{C_n}}\right)\\ = {^{C_n}Z_{j}}\left[\begin{matrix} h_{i1}(\alpha_j,\beta_j,\rho) \\ h_{i2}(\alpha_j,\beta_j,\rho) \\ h_{i3}(\alpha_j,\beta_j,\rho) \end{matrix}\right] Cipfj=CnZjC(CnCiq)CnZjCnXjCnZjCnYj1+CnZj1CipCn=CnZjC(CnCiq)αjβj1+ρjCipCn=CnZjhi1(αj,βj,ρ)hi2(αj,βj,ρ)hi3(αj,βj,ρ)

那么 f j f_j fj C i C_i Ci系中的观测为:(忽略内参,这里使用归一化坐标)
z i ( j ) = 1 h i 3 ( α j , β j , ρ ) [ h i 1 ( α j , β j , ρ ) h i 2 ( α j , β j , ρ ) ] + n i ( j ) z^{(j)}_{i}=\frac{1}{h_{i3}(\alpha_j,\beta_j,\rho)}\left[\begin{matrix} h_{i1}(\alpha_j,\beta_j,\rho) \\ h_{i2}(\alpha_j,\beta_j,\rho) \end{matrix}\right]+n_i^{(j)} zi(j)=hi3(αj,βj,ρ)1[hi1(αj,βj,ρ)hi2(αj,βj,ρ)]+ni(j)
f j f_j fj C 1 , . . . , C m C_1,...,C_m C1,...,Cm系下的观测值为 z 1 ( j ) , . . . , z m ( j ) z^{(j)}_1,...,z^{(j)}_m z1(j),...,zm(j),那么我们可以构建一个最小二乘问题:
min ⁡ 1 2 ∑ i = 1 m ∣ ∣ e i ( α j , β j , ρ j ) ∣ ∣ 2 = min ⁡ 1 2 ∑ i = 1 m ∣ ∣ z i ( j ) − z ^ i ( j ) ∣ ∣ 2 \min \frac{1}{2}\sum_{i=1}^{m}||e_i(\alpha_j,\beta_j,\rho_j)||^2=\min \frac{1}{2}\sum_{i=1}^{m}||z_i^{(j)}-\hat z_i^{(j)}||^2 min21i=1mei(αj,βj,ρj)2=min21i=1mzi(j)z^i(j)2
其中 z ^ i ( j ) \hat z^{(j)}_i z^i(j)为:
z ^ i ( j ) = 1 h i 3 ( α ^ j , β ^ j , ρ ^ ) [ h i 1 ( α ^ j , β ^ j , ρ ^ ) h i 2 ( α ^ j , β ^ j , ρ ^ ) ] \hat z^{(j)}_{i}=\frac{1}{h_{i3}(\hat \alpha_j,\hat \beta_j,\hat \rho)}\left[\begin{matrix} h_{i1}(\hat \alpha_j,\hat \beta_j,\hat \rho) \\ h_{i2}(\hat \alpha_j,\hat \beta_j,\hat \rho) \end{matrix}\right] z^i(j)=hi3(α^j,β^j,ρ^)1[hi1(α^j,β^j,ρ^)hi2(α^j,β^j,ρ^)]
其中误差对优化参数的雅可比矩阵为:
J i = ∂ e i ∂ ( α ^ j , β ^ j , ρ ^ j ) = − ∂ z ^ i ( j ) ∂ h ∂ h ∂ ( α ^ j , β ^ j , ρ ^ j ) = − ∂ z ^ i ( j ) ∂ h [ ∂ h ∂ α ^ j ∂ h ∂ β ^ j ∂ h ∂ ρ ^ j ] = − [ 1 h i 1 ( α ^ j , β ^ j , ρ ^ j ) 0 − h i 1 ( α ^ j , β ^ j , ρ ^ j ) h i 3 2 ( α ^ j , β ^ j , ρ ^ j ) 0 1 h i 3 ( α ^ j , β ^ j , ρ ^ j ) − h i 2 ( α ^ j , β ^ j , ρ ^ j ) h i 3 2 ( α ^ j , β ^ j , ρ ^ j ) ] [ C ( C n C i q ) ( 1 0 0 ) C ( C n C i q ) ( 0 1 0 ) C i p C n ] J_i=\frac{\partial e_i}{\partial (\hat \alpha_j,\hat \beta_j,\hat \rho_j)}= -\frac{\partial \hat z_i^{(j)}}{\partial h}\frac{\partial h}{\partial (\hat \alpha_j,\hat \beta_j,\hat \rho_j)}= -\frac{\partial \hat z_i^{(j)}}{\partial h} \left[\begin{matrix} \frac{\partial h}{\partial \hat \alpha_j} & \frac{\partial h}{\partial \hat \beta_j} &\frac{\partial h}{\partial \hat \rho_j} \end{matrix}\right]= \\ -\left[\begin{matrix} \frac{1}{h_{i1}(\hat \alpha_j,\hat \beta_j,\hat \rho_j)} & 0 & -\frac{h_{i1}(\hat \alpha_j,\hat \beta_j,\hat \rho_j)}{h_{i3}^2(\hat \alpha_j,\hat \beta_j,\hat \rho_j)} \\ 0 & \frac{1}{h_{i3}(\hat \alpha_j,\hat \beta_j,\hat \rho_j)} & -\frac{h_{i2}(\hat \alpha_j,\hat \beta_j,\hat \rho_j)}{h_{i3}^2(\hat \alpha_j,\hat \beta_j,\hat \rho_j)} \end{matrix}\right] \left[\begin{matrix} C(^{C_i}_{C_n}q)\left(\begin{matrix}1\\ 0\\ 0\end{matrix}\right)& C(^{C_i}_{C_n}q)\left(\begin{matrix}0\\ 1\\ 0\end{matrix}\right)& ^{C_i}p_{C_n} \end{matrix}\right] Ji=(α^j,β^j,ρ^j)ei=hz^i(j)(α^j,β^j,ρ^j)h=hz^i(j)[α^jhβ^jhρ^jh]=hi1(α^j,β^j,ρ^j)100hi3(α^j,β^j,ρ^j)1hi32(α^j,β^j,ρ^j)hi1(α^j,β^j,ρ^j)hi32(α^j,β^j,ρ^j)hi2(α^j,β^j,ρ^j)C(CnCiq)100C(CnCiq)010CipCn
整体Jacobian矩阵和残差向量为:
J = [ J 1 J 2 ⋮ J m ] e = [ e 1 e 2 ⋮ e m ] J=\left[\begin{matrix}J_1 \\ J_2 \\ \vdots \\ J_m \end{matrix}\right] \quad e=\left[\begin{matrix}e_1 \\ e_2 \\ \vdots \\ e_m \end{matrix}\right] J=J1J2Jme=e1e2em
利用Levenberg-Marquart方法迭代:
( J H J + λ I ) δ = J H e (J^{H}J+\lambda I)\delta =J^H e (JHJ+λI)δ=JHe
( α ^ j , β ^ j , ρ ^ j ) = ( α ^ j , β ^ j , ρ ^ j ) + δ (\hat \alpha_j,\hat \beta_j,\hat \rho_j)=(\hat \alpha_j,\hat \beta_j,\hat \rho_j)+\delta (α^j,β^j,ρ^j)=(α^j,β^j,ρ^j)+δ
最后将 C n C_n Cn坐标系下的特征点坐标转换到世界坐标系下:
G p ^ f j = 1 ρ ^ j C ( G C n q ^ ) T [ α ^ j β ^ j 1 ] + G p ^ C n ^G\hat p_{f_j}=\frac{1}{\hat \rho_j}{C(^{C_n}_G\hat q)}^T \left[\begin{matrix} \hat \alpha_j \\ \hat \beta_j \\ 1 \end{matrix}\right]+ {^G\hat p_{C_n}} Gp^fj=ρ^j1C(GCnq^)Tα^jβ^j1+Gp^Cn

参考文献

(1) A Multi-State Constraint Kalman Filter for Vision-aided Inertial Navigation
(2) Robust Stereo Visual Inertial Odometry for Fast Autonomous Flight
(3) Indirect Kalman Filter for 3D Attitude Estimation

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值