文章目录
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全局优化。
雅克比矩阵代表了:
误差函数对于位姿扰动的雅可比矩阵,决定着下一步最优迭代估计时,位姿增量的方向。