VINS一步一步来 | 框架图

本文深入探讨VINS系统,一种视觉惯性融合的SLAM解决方案,由中国人研发。文章分为数据预处理、初始化、局部非线性联合优化、闭环检测及全局位姿图优化五大部分,详细讲解VINS的学习难点与实践步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

VINS是视觉惯性结合的SLAM系统的典范,该系统也是中国人开发的,接下来很长一段时间小狼会带着你一步一步踏踏实实得走进VINS,走进VIO领域! 

总的来说,VINS因为涉及IMU与视觉融合,预积分等理论,它的学习坡度要比ORBSLAM陡峭的多!希望看官不要灰心也不要急躁,毕竟人与人的知识水平/经验/资源什么的还是差别很大的……        

 

 

分为五个部分: 

  • 数据预处理
  • 初始化
  • 局部非线性联合优化 
  • 闭环检测
  • 全局位姿图优化  
<think>我们正在讨论VINS框架的组成和原理。根据引用[1],VINS-Mono的系统框架由四个主要模块构成:观测预处理模块(Measurement Preprocessing)、初始化模块(Initialization)、局部视觉-惯性里程计融合模块(Local Visual-inertial Odometry with Relocalization)和全局优化模块(Global Pose Graph Optimization and Reuse)。同时,引用[2][3][4]提供了更多细节。 下面我将详细解释VINS框架的结构和工作原理: ### 一、VINS框架的组成(系统架构) 根据引用[1],VINS-Mono的系统框架包含以下四个模块: 1. **观测预处理模块(Measurement Preprocessing)** - **功能**:处理原始传感器数据,包括图像和IMU数据。 - **图像处理**:使用OpenCV进行特征提取(如Harris角点或Shi-Tomasi角点)和光流跟踪(如金字塔LK光流)[^4]。 - **IMU处理**:进行预积分计算,将高频IMU数据积分成帧间运动约束[^4]。 2. **初始化模块(Initialization)** - **挑战**:单目VINS需要加速度激励来估计尺度,且系统高度非线性(引用[2])。 - **步骤**: - 纯视觉SFM初始化:构建初始地图和相机位姿。 - IMU参数标定:估计陀螺仪零偏、尺度因子和重力方向[^4]。 - 视觉-惯性对齐:将视觉结构与IMU轨迹对齐,恢复尺度、速度和重力向量[^4]。 3. **局部视觉-惯性里程计融合模块(Local VIO)** - **核心**:紧耦合的优化框架,融合视觉观测和IMU预积分约束。 - **优化变量**:滑动窗口内的相机位姿、速度、IMU零偏和特征点深度[^4]。 - **残差项**: - **视觉重投影残差**:特征点在相邻帧间的投影误差。 - **IMU预积分残差**:相邻关键帧之间的IMU运动预测误差。 - **边缘化**:移除旧状态时保留约束信息,避免信息丢失[^4]。 4. **全局优化模块(Global Optimization)** - **回环检测**:通过词袋模型(BoW)识别已访问场景[^4]。 - **重定位**:利用回环匹配结果修正漂移。 - **位姿图优化**:将回环约束加入全局位姿图中进行优化[^1]。 ### 二、VINS框架的工作原理 #### 1. 数据预处理流程 ```mermaid graph LR A[图像数据] --> B[特征提取与跟踪] C[IMU数据] --> D[预积分计算] B --> E[特征点去畸变/均匀化] D --> F[IMU误差传递] ``` #### 2. 初始化过程(引用[2][4]) - **纯视觉初始化**:通过5点法或8点法计算基础矩阵,三角化特征点构建初始地图。 - **视觉-惯性对齐**: - **步骤1**:通过IMU预积分获取相邻帧间的相对旋转。 - **步骤2**:求解尺度$s$和重力向量$\mathbf{g}$的优化问题: $$ \min_{s, \mathbf{g}} \sum \| \mathbf{v}_{visual}^k - (s \cdot \mathbf{v}_{imu}^k + \mathbf{g} \Delta t_k) \|^2 $$ - **步骤3**:细化重力方向(将重力向量投影到地球坐标系)[^4]。 #### 3. 紧耦合VIO优化(核心) - **滑动窗口优化模型**(引用[3][4]): $$ \min_{\mathcal{X}} \left( \sum_{k} \| \mathbf{r}_{imu}(\mathcal{X}) \|_{\Sigma_{imu}}^2 + \sum_{l} \| \mathbf{r}_{visual}(\mathcal{X}) \|_{\Sigma_{visual}}^2 \right) $$ 其中: - $\mathcal{X}$:状态变量(位姿、速度、零偏等) - $\mathbf{r}_{imu}$:IMU预积分残差 - $\mathbf{r}_{visual}$:视觉重投影残差 - **IMU残差公式**(连续时间): $$ \mathbf{r}_{imu} = \begin{bmatrix} \delta \boldsymbol{\theta} \\ \delta \mathbf{v} \\ \delta \mathbf{p} \end{bmatrix} = \begin{bmatrix} \log(\mathbf{R}_{imu}^{-1} \mathbf{R}_{visual}) \\ \mathbf{v}_{imu} - \mathbf{v}_{visual} \\ \mathbf{p}_{imu} - \mathbf{p}_{visual} \end{bmatrix} $$ #### 4. 回环检测与全局优化 - **词袋模型**:将图像特征转换为向量,通过相似度检测回环。 - **紧耦合重定位**:将回环匹配的特征点作为额外约束加入优化问题[^4]。 ### 三、关键技术创新点 1. **IMU预积分技术**(引用[4]) - 避免重复积分,将IMU数据转换为相对运动约束。 - 误差传递模型考虑零偏变化。 2. **自适应特征均匀化** - 通过网格划分保持特征点均匀分布,提高跟踪鲁棒性。 3. **滑动窗口边缘化** - 使用Schur补移除旧状态,保留先验信息。 ### 四、性能特点 - **精度**:紧耦合方案融合精度高于松耦合(引用[1][3])。 - **鲁棒性**:IMU约束使系统在纹理缺失或快速运动时仍能工作。 - **实时性**:在i7处理器上可达30fps。 ### 五、典型应用场景 | 场景 | 适用模块 | |--------------------|-------------------| | 无人机自主导航 | 完整VINS框架 | | AR/VR定位 | 局部VIO | | 移动机器人建图 | 全局优化+回环 | ```cpp // 简化的VIO优化伪代码(Ceres Solver) ceres::Problem problem; for (auto &imu_residual : imu_residuals) { problem.AddResidualBlock(imu_residual, NULL, poses, speeds, biases); } for (auto &vision_residual : vision_residuals) { problem.AddResidualBlock(vision_residual, new CauchyLoss(0.5), poses, features); } ceres::Solve(options, &problem, &summary); // 调用Ceres求解 ``` > 图例:红色为IMU轨迹,蓝色为视觉轨迹,绿色为融合后轨迹[^1] --- §§相关问题§§ 1. VINS中的IMU预积分如何避免零偏变化带来的误差? 2. 为什么VINS初始化需要足够的加速度激励? 3. 滑动窗口边缘化在VINS中如何实现? 4. 如何评估VINS系统在不同场景下的定位精度? 5. VINS-Mono与VINS-Fusion在架构上有哪些关键区别?</think>### VINS框架的结构与工作原理详解 #### 一、系统框架组成(基于VINS-Mono) 根据引用[1][2][4],VINS-Mono的核心架构包含四个关键模块: 1. **观测预处理模块(Measurement Preprocessing)** - **图像处理**:使用OpenCV进行特征提取(Harris/Shi-Tomasi角点)和光流跟踪(金字塔LK算法) - **IMU处理**:对高频IMU数据进行预积分计算,生成帧间运动约束 - **关键技术**: - 特征点去畸变与均匀化处理 - 外点剔除机制(剔除误匹配特征) - 双向光流检查确保跟踪可靠性[^4] 2. **初始化模块(Initialization)** - **核心挑战**:解决单目视觉的尺度不确定性和IMU-相机外参标定[^2] - **三阶段流程**: 1. **纯视觉初始化**:通过SFM构建初始地图 2. **IMU参数标定**:估计陀螺仪零偏和尺度因子 3. **视觉-惯性对齐**:求解尺度$s$、重力向量$\mathbf{g}$和速度$\mathbf{v}$的优化问题: $$ \min_{s,\mathbf{g},\mathbf{v}} \sum \| \mathbf{p}_{visual} - (s \cdot \mathbf{p}_{imu} + \mathbf{v}t + \frac{1}{2}\mathbf{g}t^2) \|^2 $$ 3. **局部VIO融合模块(Local Visual-inertial Odometry)** - **紧耦合优化**:在滑动窗口内联合优化以下变量[^1][^3]: - 相机位姿 $\mathbf{T} \in SE(3)$ - 速度 $\mathbf{v}$ - IMU零偏 $\mathbf{b}$ - 特征点逆深度 $\rho$ - **残差项构成**: - **视觉重投影残差**:$$\mathbf{r}_{vis} = \pi(\mathbf{T} \cdot \mathbf{X}) - \mathbf{z}_{pixel}$$ - **IMU预积分残差**:$$\mathbf{r}_{imu} = \log(\Delta \mathbf{R}_{meas}^{-1} \Delta \mathbf{R}_{pred})$$ 4. **全局优化模块(Global Pose Graph Optimization)** - **回环检测**:采用词袋模型(BoW)进行场景识别[^4] - **紧耦合重定位**:将回环约束转化为优化问题中的附加残差项 - **位姿图优化**:使用Ceres Solver优化全局位姿一致性 ```mermaid graph LR A[传感器数据] --> B[观测预处理] B --> C[初始化模块] C --> D[局部VIO融合] D --> E[全局优化] E --> F[地图&位姿输出] ``` #### 二、核心工作原理 1. **紧耦合优化框架** - 建立包含所有状态变量的统一代价函数[^1][^3]: $$ \min_{\mathcal{X}} \left( \sum \|\mathbf{r}_{imu}\|_{\Sigma_{imu}}^2 + \sum \|\mathbf{r}_{vis}\|_{\Sigma_{vis}}^2 + \|\mathbf{r}_{prior}\|^2 \right) $$ 其中$\mathcal{X} = \{\mathbf{T}, \mathbf{v}, \mathbf{b}, \rho\}$为优化变量集 2. **IMU预积分技术(关键创新)** - 避免重复积分:将IMU数据转换为相对运动增量 - 误差状态传递:建立预积分量的协方差传播模型 - 零偏雅可比计算:处理IMU零偏随时间变化的问题[^4] 3. **滑动窗口管理** - 窗口大小:通常保持10-15个关键帧 - 边缘化策略:移除旧帧时保留其约束信息作为先验 - 关键技术:使用Schur补实现高效边缘化 4. **鲁棒性增强机制** - 自适应特征跟踪:根据运动速度调整光流金字塔层数 - 外点剔除:基于RANSAC的几何一致性检验 - 故障恢复:重定位模块应对跟踪丢失场景 #### 三、技术特点总结 | 特性 | 说明 | |---------------------|----------------------------------------------------------------------| | **紧耦合** | 视觉和IMU在优化层直接融合,精度高于松耦合[^1] | | **非线性优化** | 使用Ceres Solver解决高维非线性最小二乘问题 | | **跨平台性** | 支持Linux/ROS/Android等多平台部署 | | **实时性** | 在i7处理器上可达30fps处理速度 | | **多传感器支持** | VINS-Fusion扩展支持双目/GPS融合[^1] | #### 四、典型工作流程示例 ```cpp // 简化版VINS-Mono处理流程 while (new_data_arrived()) { // 1. 预处理 preprocess_image(feature_tracking); // OpenCV光流跟踪 imu_preintegration(gyro, acc); // IMU预积分 // 2. 初始化(仅首帧执行) if (!initialized) { visual_initialization(); visual_inertial_alignment(); } // 3. 局部VIO优化 ceres::Problem problem; add_imu_residuals(problem); // 添加IMU约束 add_vision_residuals(problem); // 添加视觉约束 ceres::Solve(problem); // 求解优化 // 4. 全局优化(触发回环时) if (loop_detected()) { relocalization(); pose_graph_optimization(); } } ``` > **可视化效果**:红色轨迹表示IMU原始数据,绿色为VINS优化后的轨迹[^2] #### 五、适用场景对比 | 场景 | 适用模块 | 说明 | |---------------------|------------------------|--------------------------| | 无人机室内导航 | 局部VIO+全局优化 | 依赖视觉/IMU,无需GPS | | 移动AR定位 | 局部VIO | 低延迟,高频率位姿输出 | | 大规模场景建图 | 全局优化+回环检测 | 消除长期漂移 | | 传感器标定 | 初始化模块 | 在线估计IMU-相机外参 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值