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
=Tbc−1Twbj−1TwbiTbc
λ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]Twbj−1TwbiTbc
λ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]Tbc−1Twbj−1TwbiTbc
λ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=
zcjxcj−ucjzcjycj−vcj
其中,(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}] Tbc−1Twbj−1TwbiTbc=[RbcT0−RbcTtbc1][RwbjT0−RwbjTtwbj1][Rwbi0twbi1][Rbc0tbc1] =[RbcTRwbjT0−RbcT

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

被折叠的 条评论
为什么被折叠?



