VINS-Mono+Fusion源码解析系列(十九):视觉重投影约束

本文详细解析了VINS-Mono中视觉重投影的理论与实践,包括从第i帧到第j帧的转换过程,以及重投影误差的计算。重点介绍了为何采用逆深度来描述3D点,并探讨了视觉重投影误差对待优化量的雅可比矩阵的计算方法。

1. VINS-Mono中的视觉重投影

(1)理论分析

​ 如下图所示,由于VINS-Mono中滑窗里面维护的位姿是IMU坐标系下的位姿,因此对于当前第iii帧中的特征点,一方面先通过逆深度投影到第iii帧的相机归一化坐标系中,然后通过相机与IMU之间的外参投影到第iii帧IMU坐标系中,再通过IMU坐标系之间的转换得到它在第jjj帧IMU坐标系中的投影(实际上是先转换到世界坐标系中,然后再从世界坐标系转换到第jjj帧IMU坐标系中),然后通过相机与IMU之间的外参将其转换到第jjj帧相机坐标系中,最后通过逆深度投影到第jjj帧归一化坐标系上。另一方面,通过光流追踪法可获得第iii帧归一化坐标系中的特征点在第jjj帧归一化坐标系中的位置,通过这两个点可计算出重投影误差。
在这里插入图片描述
 通过以上分析可知,VINS-Mono中视觉重投影约束有:第iii帧和第jjj帧的(IMU)位姿,相机与IMU之间的外参以及3D地图点的逆深度。

​ 上述转换过程可通过如下公式进行描述:
[xcjycjzcj1]=Tbc−1Twbj−1TwbiTbc[1λuci1λvci1λ1]          第i帧归一化坐标系  →  第j帧相机坐标系 \left[\begin{array}{cc} x_{c_j} \\ y_{c_j} \\ z_{c_j} \\ 1 \end{array} \right] = T_{bc}^{-1}T_{wb_j}^{-1}T_{wb_i}T_{bc}\left[\begin{array}{cc} \frac{1}{\lambda}u_{c_i} \\ \frac{1}{\lambda}v_{c_i} \\ \frac{1}{\lambda} \\ 1 \end{array} \right] \ \ \ \ \ \ \ \ \ \ 第i帧归一化坐标系 \ \ \rightarrow \ \ 第j帧相机坐标系 xcjycjzcj1 =Tbc1Twbj1TwbiTbc λ1uciλ1vciλ11           i帧归一化坐标系    j帧相机坐标系
​ 其中,(ui,vi)(u_i,v_i)(ui,vi)是通过特征点提取或追踪以及去畸变得到的第iii帧归一化坐标系下的特征点坐标,[1λuci1λvci1λ1]\left[\begin{array}{cc} \frac{1}{\lambda}u_{c_i} \\ \frac{1}{\lambda}v_{c_i} \\ \frac{1}{\lambda} \\ 1 \end{array} \right] λ1uciλ1vciλ11 表示第iii帧的相机坐标系下的三维空间点,1λ\frac{1}{\lambda}λ1为对应的逆深度,[xcjycjzcj1]\left[\begin{array}{cc} x_{c_j} \\ y_{c_j} \\ z_{c_j} \\ 1 \end{array} \right] xcjycjzcj1 表示第jjj帧的相机坐标系下的三维空间点。
上述公式的具体含义如下:

Tbc[1λuci1λvci1λ1]T_{bc}\left[\begin{array}{cc} \frac{1}{\lambda}u_{c_i} \\ \frac{1}{\lambda}v_{c_i} \\ \frac{1}{\lambda} \\ 1 \end{array} \right]Tbc λ1uciλ1vciλ11 表示将第iii帧相机坐标系下的三维空间点转换到第iii帧IMU的body坐标系下,TwbiTbc[1λuci1λvci1λ1]T_{wb_i}T_{bc}\left[\begin{array}{cc} \frac{1}{\lambda}u_{c_i} \\ \frac{1}{\lambda}v_{c_i} \\ \frac{1}{\lambda} \\ 1 \end{array} \right]TwbiTbc λ1uciλ1vciλ11 表示第iii帧对应的body坐标系下的三维空间点转换到世界坐标系下,Twbj−1TwbiTbc[1λuci1λvci1λ1]T_{wb_j}^{-1}T_{wb_i}T_{bc}\left[\begin{array}{cc} \frac{1}{\lambda}u_{c_i} \\ \frac{1}{\lambda}v_{c_i} \\ \frac{1}{\lambda} \\ 1 \end{array} \right]Twbj1TwbiTbc λ1uciλ1vciλ11 表示第iii帧对应的世界坐标系下的三维空间点转换到第jjj帧body坐标系下,Tbc−1Twbj−1TwbiTbc[1λuci1λvci1λ1]T_{bc}^{-1}T_{wb_j}^{-1}T_{wb_i}T_{bc}\left[\begin{array}{cc} \frac{1}{\lambda}u_{c_i} \\ \frac{1}{\lambda}v_{c_i} \\ \frac{1}{\lambda} \\ 1 \end{array} \right]Tbc1Twbj1TwbiTbc λ1uciλ1vciλ11 表示第jjj帧body坐标系下的点转换到第jjj帧相机坐标系下,由此实现将第iii帧相机坐标系下的点转换到第jjj帧相机坐标系下。另外,优化的状态量是在IMU的body坐标系下的。
​ 简而言之,先将第iii帧的相机坐标系下转换到body坐标系下,然后body坐标系之间有一个相互转换(从第iii帧转换到第jjj帧,其中要转换到世界坐标系下作为中转),最后再从body坐标系下转换到第jjj帧相机坐标系下。

​ 此时(第jjj帧),基于逆深度的重投影误差归一化平面上的估计值 减去 观测值)为:
rc=[xcjzcj−ucjycjzcj−vcj] r_c=\left[\begin{array}{cc} \frac{x_{c_j}}{z_{c_j}}-u_{c_j} \\ \frac{y_{c_j}}{z_{c_j}}-v_{c_j} \end{array} \right] rc= zcjxcjucjzcjycjvcj
​ 其中,(xcj,ycj,zcj)(x_{c_j},y_{c_j},z_{c_j})(xcj,ycj,zcj)为经过上述公式估计得到的第jjj帧相机坐标系下的三维空间点坐标,(ucj,vcj)(u_{c_j},v_{c_j})(ucj,vcj)表示在第jjj帧下观测到的(通过特征提取或光流追踪以及去畸变)相机归一化平面上的点坐标。

将上述公式使用旋转和平移表示,具体过程如下:
Tbc−1Twbj−1TwbiTbc=[RbcT−RbcTtbc01][RwbjT−RwbjTtwbj01][Rwbitwbi01][Rbctbc01]                                   =[RbcTRwbjT−RbcTRwbjTtwbj−RbcTtbc01][RwbiRbcRwbitbc+twbi01]                                      =[RbcTRwbjTRwbiRbcRbcTRwbjT(Rwbitbc+twbi)−RbcTRwbjTtwbj−RbcTtbc01]              =[RbcTRwbjTRwbiRbcRbcT[RwbjT(Rwbitbc+twbi−twbj)−tbc]01][xcjycjzcj]=RbcTRwbjTRwbiRbcpci+RbcT[RwbjT(Rwbitbc+twbi−twbj)−tbc] T_{bc}^{-1}T_{wb_j}^{-1}T_{wb_i}T_{bc} = \left[\begin{array}{cc} R_{bc}^T & -R_{bc}^Tt_{bc} \\ 0 & 1\end{array} \right] \left[\begin{array}{cc} R_{wb_j}^T & -R_{wb_j}^Tt_{wb_j} \\ 0 & 1\end{array} \right] \left[\begin{array}{cc} R_{wb_i} & t_{wb_i} \\ 0 & 1\end{array} \right] \left[\begin{array}{cc} R_{bc} & t_{bc} \\ 0 & 1\end{array} \right] \ \ \ \ \ \ \ \\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ = \left[\begin{array}{cc} R_{bc}^TR_{wb_j}^T & -R_{bc}^TR_{wb_j}^Tt_{wb_j}-R_{bc}^Tt_{bc} \\ 0 & 1\end{array} \right] \left[\begin{array}{cc} R_{wb_i}R_{bc} & R_{wb_i}t_{bc}+t_{wb_i} \\ 0 & 1\end{array} \right] \ \ \ \ \ \ \ \\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ = \left[\begin{array}{cc} R_{bc}^TR_{wb_j}^TR_{wb_i}R_{bc} & R_{bc}^TR_{wb_j}^T(R_{wb_i}t_{bc}+t_{wb_i})-R_{bc}^TR_{wb_j}^Tt_{wb_j}-R_{bc}^Tt_{bc} \\ 0 & 1\end{array} \right] \\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ = \left[\begin{array}{cc} R_{bc}^TR_{wb_j}^TR_{wb_i}R_{bc} & R_{bc}^T[R_{wb_j}^T(R_{wb_i}t_{bc}+t_{wb_i}-t_{wb_j})-t_{bc}] \\ 0 & 1\end{array} \right] \\ \left[\begin{array}{cc} x_{c_j} \\ y_{c_j} \\ z_{c_j} \end{array} \right] = R_{bc}^TR_{wb_j}^TR_{wb_i}R_{bc}p_{c_i} + R_{bc}^T[R_{wb_j}^T(R_{wb_i}t_{bc}+t_{wb_i}-t_{wb_j})-t_{bc}] Tbc1Twbj1TwbiTbc=[RbcT0RbcTtbc1][RwbjT0RwbjTtwbj1][Rwbi0twbi1][Rbc0tbc1]                                   =[RbcTRwbjT0RbcT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值