VINS代码笔记

本文详细解读VINS系统入口文件estimator_node.cpp中的关键流程,包括imu_callback、feature_callback和process函数。讲解了如何处理IMU数据进行预积分,特征点的处理,以及关键帧的选择与初始化过程,涉及IMU预积分、残差计算和视觉与IMU的对齐策略。
摘要由CSDN通过智能技术生成

         estimator_node.cpp系统入口

         首先找到main函数,读取参数,设置参数,

 imu_callback: 

 IMU测量的回调函数
 imu_msg [接受到的IMU消息]

          1. 执行con.notify_one();唤醒作用于process线程中的获取观测值数据的函数(怎么涉及到process线程的?)

          2. predict(imu_msg);对单次的IMU测量值做积分得到位移和姿态.      //imu_msg [采样时间内单次IMU测量值]

                2.1  un_acc_0, un_acc_1,un_gyr根据加速度计的观测值可得.然后采用中值//tmp_Q是local-->world 

                 2.2 tem_P和tem_V即下面的公式所得:

                

                      (这里的计算得到的pvq是估计值,注意是没有观测噪声和偏置的结果.)///作用是与下面预积分计算得到的pvq(考虑了观测噪声和偏置)做差得到残差。  这句话在下面做回应.

  raw_image_callback:

  只有进行闭环检测的时候才用到图像
  img_msg [回调的图像feature_callback

feature_callback:

   关键点回调函数]
   feature_msg [订阅的关键点]

process函数:

        1. getMeasurements()

                1.1 如果最新的IMU的数据时间戳小于最旧特征点的时间戳,则等待IMU刷新;如果最旧的IMU数据的时间戳大于最旧特征时间戳,则弹出旧图像

                1.2 这里IMU和Feature做了简单的对齐,确保IMU的时间戳是小于图像的 ; 在IMU buff中的时间戳小于特征点的都和该帧特征联合存入

       2. 遍历获取的Features和IMU测量数据,

     send_imu  (imu_msg [IMU数据])

                2.1  processIMU(dt ,linear_acceleration ,angular_velocity)

                         2.1.1 当滑窗不满的时候,把当前测量值加入到滑窗指定位置

                         2.1.2 残差和雅可比矩阵、协方差矩阵保存在pre_integrations中 (这里进入了头文件)

                 propagate (_dt[时间间隔]; _acc_1 [加速度计数据]; _gyr_1 [陀螺仪数据])            

                                          里面主要为  midPointIntegration 函数即:   中值法进行预积分

                                               最终的矩阵形式如下:具体推导见IMU预积分及残差雅克比计算

                                                

                                得到状态变化量

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值