vins 解读_VINS-mono详细解读

本文详细解读了VINS-mono单目视觉惯性里程计的实现原理,包括特征点跟踪、初始化过程(外参旋转计算、SFM、陀螺仪偏移、速度重力尺度对齐)、地图点优化及回环检测。通过对源码的分析,阐述了算法如何通过融合单目图像和IMU数据来获取精确的尺度和姿态估计。
摘要由CSDN通过智能技术生成

VINS-mono详细解读

极品巧克力

前言

Vins-mono是香港科技大学开源的一个VIO算法,https://github.com/HKUST-Aerial-Robotics/VINS-Mono,是用紧耦合方法实现的,通过单目+IMU恢复出尺度,效果非常棒。

感谢他们开源,我从中学到了非常多的知识。源码总共有15000多行,我在通读完程序之后,结合参考文献,把程序背后的算法理论都推导了一遍,总结成了本文,与各位分享。

本文目标读者:对vins-mono有一定了解的SLAM算法工程师。由于程序里有非常多的实现细节,建议读者在读本文前,先读一遍vins-mono的程序。

1.特征点跟踪

首先用cv::goodFeaturesToTrack在第一帧图像上面找最强的150个特征点,非极大值抑制半径为30。新的特征点都有自己的新的对应的id。然后在下一帧过来时,对这些特征点用光流法进行跟踪,在下一帧上找匹配点。然后对前后帧中这些匹配点进行校正。先对特征点进行畸变校正,再投影到以原点为球心,半径为1的球面上,再延伸到深度归一化平面上,获得最终校正后的位置。对于每对匹配点,基于校正后的位置,用F矩阵加ransac来筛选。然后再在匹配上的特征点之外的区域,用cv::goodFeaturesToTrack搜索最强的新的特征点,把特征点数量补上150个。

最后,把剩下的这些特征点,把图像点投影回深度归一化平面上,再畸变校正,再投影到球面上,再延伸到深度归一化平面上,得到校正后的位置。把校正后的位置发送出去。

特征点跟踪和匹配,就是前一帧到这一帧的,一帧帧继承下去。或者生成新的特征点。

2.初始化

2.1外参中的旋转

用机器人手眼标定的方法,计算出外参中的旋转。

其中

是陀螺仪预积分得到的,

是用8点法对前后帧对应的特征点进行计算得到的。详细见《Monocular Visual-Inertial State Estimation With Online Initialization and Camera-IMU Extrinsic Calibration》。

2.2 SFM

先在关键帧窗口里面,找到第l帧,第l帧与最后一帧有足够的像素位移,并且能用8点法算出旋转和位移。以l帧的姿态为世界坐标系。先从l帧开始与最后一帧进行三角定位,再用pnp估计出下一帧的位姿,下一帧再与最后一帧三角定位得出更多的三维点。重复到倒数第二帧。从l帧开始往第一帧,逐渐帧pnp,再与第l帧进行三角定位得到更多的三维点。每帧pnp时的位姿初值都用上一个关键帧的的位姿。剩下的那些还没有被三角定位的特征点,通过它被观察到的第一帧和最后一帧进行三角定位。

固定住l帧的位置和姿态,固定住最后一帧的位置。因为这时候的图像位姿和点的位置都不太准,所以用ceres统一一起优化图像位姿和三维点位置,优化重投影误差。优化的测量值是,特征点在每帧中被观察到的位置,可以转成重投影误差约束。有关的自变量是,每帧图像的位姿,特征点的三维坐标。

优化完成之后,即用ceres优化出这些关键帧的位姿和地图点后,再用pnp算出在这段时间区域内的所有图像的位姿。每个图像的计算都用下一个关键帧的位姿来当pnp的初值。

程序里面没有求雅克比,而是用自动求导的方法。

2.3 计算陀螺仪的偏移

在2.1中已经根据连续图像的相对旋转算出相机和IMU间的外参旋转了,现在要再根据上一节2.2中的SFM算出来的各帧图像的相对旋转来计算出陀螺仪的偏移。

就是根据前后帧之间的根据陀螺仪预积分出来的旋转

与基于SFM图像算出来的旋转转换到IMU坐标系的相对旋转

之间的向量差的两倍。

在程序里面,每次算出的图像的姿态

,都会转换成

。然后在计算相对IMU的姿态时,就用

这里是采用了近似计算的方法。其实就是把角度的残差转换成了角轴差的形式。详见《从角轴到四元数微分方程》和《on-manifold详细解读》。

这个

关于陀螺仪的偏移求导,得到雅克比矩阵。然后再根据高斯牛顿法算出陀螺仪偏移。

算出陀螺仪的偏移以后,对于每一幅图像,利用缓存的每一个IMU数据,重新计算这一段时间的每帧图像对应的预积分,雅克比矩阵和协方差矩阵。

雅克比矩阵的初值是单位阵,协方差矩阵的初值为零。雅克比矩阵每次都乘以一个状态转移矩阵。协方差矩阵每次都左右乘状态转移矩阵,再加上一个噪声矩阵,噪声矩阵就是加速度和陀螺仪噪声所形成的噪声协方差矩阵。

2.4速度,重力和尺度对齐

从2.3之后,认为陀螺仪是准确的,每帧图像的姿态也都是准确的。

速度,重力和尺度对齐,其实就是,每一帧对后一帧的位置,速度的预测值,与当前值的误差。当前值

的位置,是SFM位置

通过外参

计算过来,给的。与这有关的自变量是每帧的速度,重力,尺度。速度,重力,尺度,给的初值都是零。

以第一帧和第二帧为例。

因为速度,重力尺度的初值全部都是零,所以第一步,这里残差的计算可以简化成如下。

但雅克比的计算,还是得用原来的表达式算。

虽然给的初值是零࿰

VINS-Mono是一种基于单目相机的视觉惯性里程计系统,可以实现实时的相机姿态估计和轨迹重建。它采用了基于滑动窗口的非线性优化方法,并结合了IMU(惯性测量单元)的信息来提高姿态和位置的估计精度。下面对VINS-Mono的几个关键点进行详细介绍: 1. 单目相机:相比双目、RGB-D相机等多视角传感器,单目相机的成本更低,易于使用,并且可以适应更广泛的场景。但是单目相机只能提供2D的图像信息,需要通过计算来获取3D的姿态和位置信息。 2. 滑动窗口非线性优化:VINS-Mono使用滑动窗口非线性优化方法来处理视觉惯性里程计问题。它通过滑动窗口技术来管理视觉和IMU数据的历史信息,以便在优化过程中考虑它们的空间和时间相关性。同时,由于滑动窗口方法可以利用局部线性化和稀疏矩阵技术来加速优化,所以它具有高效的计算性能和优化精度。 3. IMU信息:IMU可以测量物体的角速度和线性加速度,这些信息可以提供更精确的姿态和位置估计。VINS-Mono使用IMU的信息来补偿相机的姿态误差,并将其与视觉信息进行联合优化,从而提高姿态和位置的估计精度。 4. 实时性:VINS-Mono可实现实时的相机姿态估计和轨迹重建,最高能达到50Hz的帧率。这得益于其高效的优化算法、滑动窗口技术和IMU信息融合策略。 总之,VINS-Mono是一种高效、准确且易于使用的单目视觉惯性里程计系统,可以广泛应用于机器人导航、自动驾驶等领域。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值