VINS代码结构

文章目录

1.总体框架

  • ar_demo:AR上层应用
  • benchmark_publisher:发布数据集中参考值
  • camera_mode:各类相机模型
  • config:硬件、系统配置文件
  • support_files
  • feature_trackers :图像接收和特征点提取与跟踪
  • pose_graph
  • vins_estimator

在ros运行中,只运行三个节点:

feature_trackers: 主要用于图像特征点提取跟踪。
vins_estimator:主要的类为Estimator

  • 开启了新的线程名称为measurement_process,函数名为process(),来做前端VI里程计。里面调用了process_image(),来进行初始化,当solver_flag=INITIAL时,进行初始化。
    滑窗中的(0, 1, …, N)关键帧,0是时间最长的关键帧,N是最新关键帧
    pose_graph:主要的类为Pose_graph
  • 开启第0个新的线程,在创建Posegraph类的时候进行初始化时开启,名称为t_optimazation,函数为optimaza4DoF(),用来全局四自由度的优化。
  • 开启第一个新的线程名称为keyboard_command_process,函数名为command(),来做键盘控制。
  • 开启第二个新的线程名称为measurement_process,函数名为process(),用来闭环检测

Pose_graph类
重要的成员:

list<KeyFrame *> keyframelist;  //关键帧数据库
BriefDatabase db;
BriefVocabulary* voc;

进行重定位流程:
(1).在滑窗中取最新的关键帧,进行loop_detection()。如果检测出loop,就向Estimator发送Pose_graph/match_points(里面包含了闭环前后的变换矩阵),并且关键帧里面的数据结构has_loop会被置为True,loop_index设置为与之闭环的旧关键帧的序号。
(2).同步的Estimator节点,会接收到闭环帧的特征点空间位置,将这些约束加入当前的滑窗进行局部的BA优化。
(3).当时此时Pose_graph的关键帧数据并没有记录这个有闭环的关键帧。
(4).当Estimator中滑窗继续滑动,边缘掉了一个关键帧,而这个关键帧的has_loop
,就进行4Dof全局优化。

雅克比矩阵代表了:
误差函数对于位姿扰动的雅可比矩阵,决定着下一步最优迭代估计时,位姿增量的方向。

猜你喜欢

转载自blog.csdn.net/huanghaihui_123/article/details/85035583