slam学习之路--VINS

slam学习之路——VINS

论文阅读笔记

vins是一种鲁棒多功能的单目视觉-惯导状态估计器。论文里分四个部分来讲述的
第一部分是VINS前端,负责对每一帧新图像提取特征点、跟踪并整合两帧之间所有的IMU数据。
第二部分是初始化,提供初始值(位姿、速度、重力矢量等)。
第三部分主要是非线性图优化,通过优化所有的视觉、惯性信息来优化滑动窗口的状态。
第四部分负责回环检测和位姿图优化。

MESUREMENT Preprocessing

Vision Processing
对于new image,使用KLT稀疏光流跟踪
同时检测新的角点,维持每张image中features数量在100~300之间
setting a minimum separation of pixel来实现均匀分布
使用RANSAC算法进行外点剔除
选择关键帧标准:1个是average parallax(平均视差)超过某一阈值,2个是tracking quality低于某一阈值
IMU Pre-integration
引入IMU偏置校正,IMU预积分部分的雅可比一方面用于预积分的更新,另一方面可计算预积分测量的协方差。
SFM(structure from motion)
从相机的运动来确定目标的空间和几何关系,恢复位姿和特征点位置

Initialization

Visual Sfm in Slide Window
选择一个滑窗,在最后一帧和滑窗中找寻跟踪到的点数大于30的,并且视差超过20的,然后进行5点法本质矩阵初始化。
三角化这两帧所跟踪到的所有特征点=>pnp估计每一帧的位姿
采用全局BA优化重投影误差
Visual-Inertial Alignment
陀螺仪偏差校准
速度、重力、尺度初始化
重力细化

Tightly-coupled nonlinear optimization

状态初始化后,使用基于滑窗的非线性估计器估计,采用ceres求解该非线性优化问题。

Ioop Closure

IMU可提供横滚角和俯仰角,所以累计drift只产生4个*度(x,y,z和航向角),直接在这4个*度上优化位姿图。

VINS编译运行过程

首先,在电脑上安装了ROS系统(略)
1、创建工作空间的步骤:

mkdir -p ~/vins/src        
cd ~/vins/src   
catkin_init_workspace    

2、安装VINS编译所需要的依赖

VINS的依赖项主要有 ceres ,opencv , eigen

3、编译VINS

cd ~/vins/src     
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Mono.git      
cd ../
catkin_make 

4、运行VINS
打开三个终端

第一个终端:

source ~/vins/devel/setup.bash  
roslaunch vins_estimator euroc.launch 

第二个终端:

source ~/vins/devel/setup.bash 
roslaunch vins_estimator vins_rviz.launch 

第三个终端:

source ~/vins/devel/setup.bash 
rosbag play YOUR_PATH_TO_DATASET/MH_01_easy.bag  

5、运行结果
slam学习之路--VINS

上一篇:论文笔记_S2D.61_VIL-SLAM_立体视觉惯性激光雷达同时定位和建图


下一篇:研究自动驾驶技术的算法需要哪些知识?