VINS初始化

本文深入解析VINS-Mono视觉惯性里程计的初始化过程,涵盖相机与IMU相对旋转求解、纯视觉初始化、陀螺仪偏置标定、速度及重力向量初始化等关键步骤,为读者提供全面的技术指导。

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

         系统的初始化主要恢复出尺度、重力、速度以及IMU的bias.因为视觉(SFM)在初始化的过程中有着较好的表现,所以在初始化的过程中主要以SFM为主,然后将IMU的预积分结果与其对齐,即可得到较好的初始化结果。
    系统的初始化主要包括三个环节:求取相机与IMU之间的相对旋转、相机初始化(局部滑窗内的SFM,包括没有尺度的BA)、IMU与视觉的对齐(IMU预积分中的 α等和相机的translation)。

          纯视觉初始化,首先构建一个滑动窗口,包含一组数据帧。论文中提及使用的是对极几何模型的5点法求解单目相机的相对变换,包括相对旋转和无尺度信息的位移。其实基本上每个单目模型都是使用对极几何在初始化中求解两帧的相对变换,这里需要注意的是旋转是具有尺度不变性的(其实就是单位旋转,不会有尺度信息,你仔细想想是不是?)。然后三角化得到相应的3d点坐标,有这些3d点和滑动窗口中其他的帧的2d点就可以进行PNP求解获得滑动窗口中的所有的位姿和特征点3d坐标,至此,纯视觉初始化就完成了。

       一    相对旋转部分

         相机部分通过本质矩阵恢复出R_{ck+1}^{ck},IMU部分通过预积分得到的旋转矩阵R_{bk+1}^{bk},

      这两个测量满足:

                      (R_{c}^{b}个人理解是左侧是R bk+1到 ck+1的转换,右侧是R bk到 ck的)

     

        

 然后多组数据获得一个方程组:

      

  可以获得解 q{_{c}^{^{b}}}.

求解过程中,涉及到w

         

 

       二   视觉与IMU对齐

           (1)      陀螺仪偏置标定

                 通过两种测量:陀螺仪的预积分和跟视觉的SFM计算出的旋转之间的误差做最小二乘,得到陀螺仪的偏置(忽略噪声的影响).

            即:

                  

           其中:

                  

           两种旋转测量几乎相等:

                     

           移项得:

                    

            取虚部,在进行最小二乘求解,即可得到 δbw:

                    

          注意这个地方得到的只是Bias的变化量,需要在滑窗内累加得到Bias的准确值.(这句话待理解)

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

          (2)       初始化速度、重力向量 g和尺度因子

               在这个步骤中,要估计系统的速度、重力向量以及尺度因子。所以系统的状态量可以写为:

                   

     上面的状态量都是在 c0 相机坐标系下.

              预积分的测量:

                                    (1)

           前面已经得到了IMU相对于相机的旋转,假设IMU到相机的平移量(这个等看完代码再补充.不太理解的地方),那么可以很容易地将相机坐标系下的位姿转换到IMU坐标系下:

                                    (2)

              由(1)公式转到c0坐标系下可得:

                 (3)

              由(2)公式可得:

              (4)

               将(4)代入到(3)可得:

                    (5)

             同理可得:

                     (6)

            将(5)(6)公式移项可得:

             

             然后写成矩阵形式:

               

          稍加转换就是论文中的形式啦:

             

           最后求解最小二乘问题:

          

       这个最小二乘的问题是:每一帧对下一帧的IMU预测的误差与视觉SFM的误差的和

     

           (3)重力优化

            

           

       参考:

            wangshuailpp的博客-初始化部分

            VINS-Mono代码分析总结

            VINS-mono详细解读

### 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、付费专栏及课程。

余额充值