VINS-MONO
文章平均质量分 87
可即
这个作者很懒,什么都没留下…
展开
-
VINS中IMU预积分推导
VINS 中的 IMU 预积分推导和代码解读转载 2022-10-19 16:22:06 · 707 阅读 · 0 评论 -
ZED2运行VINS-MONO初试
上篇博客,已经完成ZED2的标定,获取相关标定参数,将在此基础上进行VINS的相关修改,实现使用ZED2运行VINS-MONO一 VINS-MONO环境搭建因为系统环境从ubuntu18.04更改为ubuntu20.04,故需重新搭建环境,可采用数据集测试环境。具体可根据VINS-MONO实践1)ceres 编译报错 error: ‘integer_sequence’ is not a member of ‘std’在编译一些用到ceres的项目的时候会报错 error: ‘integer_seq原创 2021-11-29 14:56:34 · 1582 阅读 · 5 评论 -
evo评测VINS-MONO---TUM数据集
为了想测试室外场景下VINS-MONO定位精度情况,室外环境的KITTY数据集因无时间戳,EVO测评较困难。故选择TUM数据集,outdoors1~8(户外):在校园内的室外场景拍摄,但是数据包里只在开始和结束有真实值,没办法与真值全程评测。(outdoors4)所以再选择个室内 room1~6(室内):对应有5个图像序列,整个过程都带有运动捕捉系统提高的真实值进行测试。(room4)修改VINS-mono轨迹保存代码直接输出的结果格式并不能用EVO工具进行评估,需要修改代码,将其输出格式改为tum原创 2021-09-26 17:12:15 · 3414 阅读 · 7 评论 -
evo评测VINS-MONO---指标解析、算法精度分析(数据集)
上篇博文已通过代码修改、数据格式转换、数据测试实现使用evo评测VINS-MONO,该篇将详细介绍evo评测出的数据指标,以及VINS-MONO在数据集下的精度情况。EVO评价指标介绍绝对轨迹误差(ATE:abosulte trajectory error):直接计算相机位姿的真实值与SLAM系统的估计值之间的差,程序首先根据位姿的时间戳将真实值和估计值进行对齐, 然后计算每对位姿之间的差值, 并最终以图表的形式输出, 该标准非常适合于评估视觉 SLAM 系统的性能。相对位姿误差(RPE:relati原创 2021-09-17 16:29:32 · 6118 阅读 · 11 评论 -
evo评测VINS-MONO---代码修改、数据格式转换、数据测试
数据格式(data formal):TUM/EuRoC/Kitti数据集格式转换原创 2021-09-13 15:52:06 · 6283 阅读 · 7 评论 -
主流VIO框架分析及VINS部分解析
本文为搜集的资料整理:C0包含位姿和运动信息;对于T0来说,不仅受rv10、rv11的视觉影响,也受rb01的IMU的影响。上述方式繁琐,故引入因子图,便于思路梳理和理解。引入因子图是为了方便宏观的把握SLAM的框架和问题是如何建立的,避免陷入到一些细节里,被细节迷惑。f2去掉后引入相关约束...原创 2021-09-02 15:04:11 · 945 阅读 · 0 评论 -
VINS-MONO理论学习---紧耦合后端非线性优化
基于滑动窗的紧耦合后端非线性优化:将视觉约束、IMU约束、闭环约束放到一个大的目标函数中进行非线性优化,求解出滑动窗口中所有帧的PVQ、bias等。在视觉约束和IMU约束中,基本思想是找到优化状态向量,然后通过视觉残差和IMU测量残差分别对状态向量求导,获得视觉和IMU预积分的Jacobian和协方差矩阵。一、VIO残差函数的构建1、需要优化的状态向量:状态向量包括滑动窗口内的所有相机状态(位置P、旋转Q、速度V、加速度偏置ba、陀螺仪偏置bw)、相机到IMU的外参、所有3D点的逆深度:第一个式原创 2021-08-13 17:32:26 · 985 阅读 · 0 评论 -
VINS-MONO代码解读---回环检测与重定位、四自由度位姿图优化
本文主要介绍VINS的闭环检测重定位与位姿图优化部分,作为系列文章的最后一节。回环检测的关键就是如何有效检测出相机曾经经过同一个地方,这样可以避免较大的累积误差,使得当前帧和之前的某一帧迅速建立约束,形成新的较小的累积误差。由于回环检测提供了当前数据与所有历史数据的关联,在跟踪算法丢失后,还可以利用重定位。主要分为两部分:回环检测与重定位、4-DOF的位姿图优化:第一部分主要是为了通过回环检测找到当前帧和候选帧的联系,并通过简单的紧耦合重定位将局部滑动窗口移动与过去的位姿对齐。第二部分是为了保证基于原创 2021-08-11 15:02:22 · 1719 阅读 · 0 评论 -
VINS-MONO代码解读---基于滑动窗口的紧耦合后端非线性优化 optimization()+滑动窗slideWindow()
本讲是VINS最核心部分了,前面经历了1)视觉跟踪feature_tracker、IMU预积分integrationBase类;2)初始化中SFM纯视觉估计滑动窗中所有帧的位姿和3D路标点深度、SFM与IMU预积分松耦合对齐求解初始化参数。在完成前面的初始化环节后,本节将进行第3部分,基于滑动窗的紧耦合后端非线性优化:将视觉约束、IMU约束、闭环约束放到一个大的目标函数中进行非线性优化,求解出滑动窗口中所有帧的PVQ、bias等。在视觉约束和IMU约束中,基本思想是找到优化状态向量,然后通过视觉残差原创 2021-08-11 10:36:29 · 3289 阅读 · 0 评论 -
VINS-MONO代码解读---初始化2:视觉惯性松耦合初始化 visualIntialAlign()
visualIntialAlign()函数视觉惯性联合初始化这篇文章主要集中在讨论视觉部分和IMU部分之间的关联,如何对两部分进行对齐,使得系统完成初始化。目录理论:视觉IMU对齐流程其中,步骤1的在线Cam到IMU的外参标定qbc 参考之前的博客。1、陀螺仪零偏bg标定2、优化 速度v、重力g和尺度初始化s。我们得到了陀螺仪偏置bias的初始校准,需要将陀螺仪偏置bg代入到IMU预积分重新计算预积分3、重力矢量修正代码流程bool Estimator::visualInitial原创 2021-08-09 14:52:18 · 1091 阅读 · 1 评论 -
VINS-MONO代码解读---初始化1:视觉SFM详解 processImage()+initialStructure()
Estimator类视觉部分流程图本文将重点讲解ProcessImage()函数1.检查两帧的视差判断是否为关键帧f_manager.addFeatureCheckParallax()在feature_manager.cpp中已经解释2.IMU预积分 IntegrationBase 在 IMU离散中值预积分中解释3.在线标定外参 CalibrationExRotation 在线Cam到IMU的外参标定 InitialEXRotation类 中已经解释本节将重点介绍初始化部分。/** *原创 2021-08-09 10:46:05 · 1091 阅读 · 1 评论 -
VINS-MONO代码解读---在线Cam到IMU的外参标定InitialEXRotation类
本问对estimator类中最主要的函数processImage()的相机到IMU的外参矩阵的进行代码讲解。前面两讲知识储备主要讲了IMU预积分相关的integrationBase类以及图像特征点管理器feature_manager.cpp,本节将对processImage()的相机到IMU的外参矩阵的代码讲解。当外参完全不知道的时候,VINS也可以在线对其进行估计(rotation),先在processImage内进行初步估计,然后在后续优化时,会在optimize函数中再次优化。目录我们首先来回原创 2021-08-05 13:59:11 · 1065 阅读 · 1 评论 -
VINS-MONO代码解读---特征点管理feature_manager.cpp
本文对estimator.cpp中的feature_manager.cpp进行介绍,主要是对特征点管理。特征点管理器主要就是FeatureManager类涉及到的类的成员函数:一、FeatureManager、FeaturePerId、FeaturePerFrame1、三者关系f_manager是特征管理器类的对象FeatureManager f_manager;//特征管理器类这里f_mangager.feature主要指的是一个list容器feature_manager.h主要三个类原创 2021-08-04 17:15:35 · 1332 阅读 · 0 评论 -
VINS-MONO代码解读---processIMU()+intergrationBase类+imu_factor.h
本节主要包含IMU预积分的残差、Jacobian和协方差,主要代码部分为processIMU()+intergrationBase类+imu_factor.hprocessIMU()实现了IMU的预积分,通过中值积分得到当前PQV作为优化初值本文目录第一个问题,为什么要IMU积分?IMU获取的是加速度和角速度,通过对IMU测量量的积分操作,能够获得机器人的位姿信息。IMU测量值包括加速度计得到的线加速度和陀螺仪得到的角速度。其中 t下标表示在IMU坐标系下,并受到加速度偏置ba、陀螺仪偏置bw和原创 2021-08-04 11:24:37 · 1152 阅读 · 0 评论 -
VINS-MONO代码解读---状态估计器vins_estimator
本文主要介绍VINS的状态估计器模块(estimator),主要在代码中/vins_estimator节点的相关部分实现。这个模块可以说是VINS的最核心模块,从论文的内容上来说,里面的内容包括了VINS的估计器初始化、基于滑动窗口的非线性优化实现紧耦合,即论文第五章(V. ESTIMATOR INITIALIZATION)第六章(VI. TIGHTLY-COUPLED MONOCULAR VIO)。此外还包括了关键帧的选择,即论文第四章(IV. MEASUREMENT PREPROCESSING A.原创 2021-08-02 16:09:35 · 2189 阅读 · 3 评论 -
VINS-MONO代码解读---前端feature_tracker
feature_tracker是vins的前端,它的目录在src/ feature_tracker下,功能主要是获取摄像头的图像帧,并按照事先设定的频率,把cur帧上满足要求的特征点以sensor_msg::PointCloudPtr的格式发布出去,以便RVIZ和vins——estimator接收。这个package下面主要包括4个功能:feature_tracker——包含特征提取/光流追踪的所有算法函数;feature_tracker_node——特征提取的主入口,负责一个特征处理节点的功能;p原创 2021-07-29 14:51:10 · 1195 阅读 · 0 评论 -
VINS-MONO代码解读---数据结构sensor_msgs
在看VINS-Mono的代码时,觉得非常有必要整理总结一下其中不同的数据结构,尤其是各种sensor_msgs的格式与具体含义。标准msg结构1、std_msgs/Headerfrom file:std_msgs/Header.msg一般在Image/PointCloud/IMU等各种传感器数据结构中都会出现的头信息Definition:uint32 seq # sequence ID: consecutively increasing ID time stamp #时间戳 stamp.se原创 2021-07-21 14:49:50 · 1155 阅读 · 0 评论 -
VINS-Mono代码解读---启动文件launch、参数配置文件yaml
前言本文将首先对euroc.launch和euroc_config.yaml文件进行代码解读,对VINS中的启动文件launch和参数配置文件yaml进行详细介绍,主要为了了解VINS的启动和运行需要提供哪些参数,若是想用自己的传感器运行VINS,又需要修改哪些参数?启动文件euroc.launchVINS在正常工作时一般存在三个节点:“/fature_tracker”、“/vins_estimator”、“/pose_graph”,而VINS的启动文件launch在文件夹VINS-Mono-mast原创 2021-07-21 11:23:21 · 1374 阅读 · 1 评论 -
VINS-MONO实践
**VINS-MONO实践**1.配置ros(运行VINS需要,记得换源,会快一些)sudo apt-get install ros-melodic-cv-bridge ros-melodic-tf ros-melodic-message-filters ros-melodic-image-transport解释:cv-bridge在ROS图像消息和OpenCV图像之间转换。message-filters一组消息过滤器,根...原创 2021-07-06 11:14:40 · 1172 阅读 · 1 评论 -
VINS-MONO概述
VINS-Mono是HKUST的Shen Shaojie团队开源的一套Visual-Inertial融合定位算法,https://github.com/HKUST-Aerial-Robotics/VINS-Mono,是用紧耦合方法实现的,通过单目+IMU恢复出尺度,效果很好,接下来对会该算法框架逐步解析,以便二次开发。那么为什么要进行视觉与IMU的融合呢,自己总结的主要有以下几点:视觉与IMU的融合可以借助IMU较高的采样频率,进而提高系统的输出频率。视觉与IMU的融合可以提高视觉的鲁棒性,如视觉S原创 2021-07-19 17:48:34 · 13671 阅读 · 0 评论