第七章——VINS系统初始化

本文详细介绍了视觉惯性导航系统(VINS)的初始化过程,包括相机与IMU旋转外参的求取、加速度bias的最小化以及初始帧重力方向的确定。通过构建最小二乘问题并引入鲁棒核函数,解决了由于噪声和bias带来的误差。同时,讨论了初始化中的几个关键疑问,如重力加速度方向不准的影响以及为什么未初始化加速度bias和平移外参。

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

前言

这一章主要内容是讲的VINS系统初始化的事,内容上还是比较全面丰满的,有一些有疑问的点我之后读了代码会在博客里补上。一句话总结初始化:以优化量与观测值构建残差,提取优化量构成最小二乘问题

内容

1. IMU和相机旋转外参 q b c q_{bc} qbc以及角速度计(陀螺仪)的bias

在这一部分的初始化过程中,我们已知的信息有:

  1. 相机以一定频率采样得到的帧图像(可提取出相机旋转信息)
  2. IMU以一定频率采样得到的角速度值(同样可提取出IMU旋转信息)

旋转外参 q b c q_{bc} qbc我们认为在相机位移过程中是不会改变的,如果 q b c q_{bc} qbc给的准,那么对于每一帧匹配的相机和IMU旋转信息,我们从相机帧k->相机帧k+1->IMU帧k+1,或是从相机帧k->IMU帧k->IMU帧k+1的旋转变换的误差应该是趋向于0的,所以我们构建了如下所示的最小二乘问题求取 q b c q_{bc} qbc
在这里插入图片描述
这里加入了鲁棒核函数,具体鲁棒核函数的构造这里我不截了,说一下思路:以上述误差角进行阈值的判断

同样基于上面的已知信息,在这里我们还多知道一个前提,也就是 q b c q_{bc} qbc,本来是可以精确计算出各个旋转矩阵的,但是由于bias的存在, q b k b k + 1 q_{b_kb_{k+1}} qbkbk+1将存在误差,从而导致转一个圆回来后的旋转矩阵不是单位矩阵。每两帧都将提供一个误差信息,我们希望找到一个bias使得所有帧的误差最小化(也就相当于静止初始化的求平均过程),因此我们构建了如下所示的最小二乘问题:
在这里插入图片描述
有关于该问题对于bias的雅可比矩阵我本来是有所疑问的,感谢这位博主的讲解手写VIO-初始化第三部分,另外强推该博主的手写VIO专栏,都是高质量的梳理代码逻辑的文章,这里我把博主关于这个问题如何化成Ax=b的形式的推导记录在下面:
在这里插入图片描述

2. 初始化关键帧相机的速度,初始帧的重力方向、相机相对位移转化到世界坐标系的尺度信息

在这个问题中,我们已知的信息又多了两个:各关键帧之间的平移信息,也就是说相机的相对平移以及IMU关于速度和位置的预积分我们都是知道的。
这里新增了一项VINS中关于初始帧重力方向的处理,把它处理成已知一维信息的二维约束问题,相当于把可变量减少了一维,构建的优化量如下:
在这里插入图片描述
我们可以利用上面的已知信息,根据预积分公式,计算出预积分的值,再与IMU给出的预积分结果形成残差
构建的最小二乘形式如下:
在这里插入图片描述
根据优化给出的初始帧重力加速度方向,我们可以把相机初始帧对齐到世界坐标系下,从而以世界坐标系来进行相关操作

3. VINS初始化存在的一些疑问以及解答

  • Q1:优化给出的初始帧重力加速度方向是不准的,那么对齐过程也是不准的,这会对后续优化过程带来哪些影响
  • A1:在后续对齐过程中,我们使用的不再是 R W C 0 R_{WC_0} RWC0,而是对应帧到世界坐标系的旋转矩阵,而这个是后端优化过程中的优化量,所以是在不断修正的,也就是对齐过程是不断变好的,初始给定的不准也将被修正
  • Q2:加速度 bias 为何没有估计
  • A2:因为相对于重力加速度,加速度bias是否初始化的影响很小,所以忽略了它的初始化
  • Q3:平移外参数 p b c p_{bc} pbc 为何没有初始化
  • A3:平移是一个线性函数,它的初始值是多少不会影响优化曲线,这与旋转初始值是不同的,所以我们可以不关心它的初始值(也可以把它放在之后的优化量中去得到)
### VINS框架的初始化过程 VINS(Visual-Inertial Navigation System)是一种融合视觉和惯性测量单元(IMU)数据的导航系统,其初始化过程是整个算法的关键环节之一。以下是关于VINS初始化方法及其配置的相关说明: #### 1. 静态与动态初始化的区别 在实际应用中,VINS初始化被划分为静态初始化和动态初始化两种方式[^2]。 - **静态初始化**:适用于设备处于静止状态的情况,通常可以在1秒内完成。此阶段主要通过IMU预积分计算重力加速度的方向来估计初始姿态,并利用少量特征点观测值进一步优化参数。 - **动态初始化**:当传感器存在运动时采用该策略。相比静态模式更加复杂,因为需要额外考虑运动带来的不确定性影响。 #### 2. IMU预积分的作用 为了减少噪声干扰并提高效率,在VINS初始化过程中引入了IMU pre-integration技术[^3]。这项技术允许我们仅需存储一段时间内的加速度计读数以及陀螺仪增量角度即可重建完整的轨迹信息而无需保存每一步的具体数值变化情况。这不仅降低了内存消耗还加快了后续处理的速度。 #### 3. 初始结构构建 (Initial Structure Construction) 函数`initialStructure()`负责启动整个初始化流程[^1]。它主要包括以下几个方面的工作: - 获取当前时刻所有可用图像帧上的角点位置; - 对这些匹配成功的对应关系执行三角化操作得到三维空间坐标表示形式; - 基于上述结果初步设定世界原点的位置作为参考系起点; #### 4. 平移与旋转的同时求解 除了确定系统的起始方位外,还需要同步估算出摄像头相对于全局坐标轴之间的偏移量即所谓的“平移”。这是因为即使知道了物体如何转动也无法直接得知它们具体位于何处除非同时也明确了两者间的距离关系[^4]。 #### 5. 尺度估计实现细节 针对尺度问题,VINS-Mono项目提供了专门用于测试初始化规模节点(TestInitScaleNode),其中实现了独立版本的尺寸评估逻辑并与原始论文描述有所区别但总体思路保持一致[^5]。特别值得注意的是,由于摄像机光学特性所限,最终得出结论显示在其本地视角范围内,"重力"矢量实际上指向Y轴负半轴方向而非传统意义上的Z向下垂线方向. ```cpp // 示例代码片段展示可能涉及到的部分核心运算步骤伪码 Eigen::Vector3d g_in_cam; // Camera frame gravity vector estimation result. g_in_cam << 0,-9.81,0; ``` 以上就是有关VINS框架下初始化相关内容概述,请根据实际情况调整学习重点深入研究特定领域知识点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值