VINS-Mono前端效果探索

为了征服Lvi-sam,  今天先学习它的子部分,vins-mono.

第一次运行感觉,初始化的时候感觉很卡,原因不明,可能是因为在做自动标定?

无人机的数据集中,感觉主要还是包含纹理丰富的数据,在其他场景的性能确实不好说。

问题:

图像里的蓝点和红点是不是有什么不同的含义?=> 看了一下rostopic,有path_2和3两个。这是什么含义呢?
VINS-Mono前端效果探索_第1张图片

VINS-Mono前端效果探索_第2张图片

通过rqt_graph打印出node,可以看出,主要包括三个node,feature_tracker, vins_estimator和pose_graph三个节点。

 

 

再来看看全部的topic

VINS-Mono前端效果探索_第3张图片

重新看project代码

1.看makelists

2. 看launch file

3. 根据上图,先选择看主要的node,然后看每个subscriber对应的callback。先看后端node,需要留意多个线程锁的管理。

4. 然后看前端的node,还是要看cmakelists,可以看到针对img,主要的处理是进行了光流的跟踪,除此之外,还用到了good feature to track去寻找shi-omas角点。

关注一下图片处理的几个步骤,

1.自适应局部直方图均衡化

简单的理解:增加图像对比度。

深刻的理解:目前还没,大概就是把一幅图像的直方图分布变为近似均匀分布。

调节参数可以增加对比度,同时,也会增加噪点。好像它只能处理单通道图像?

    cv::Mat dst;
    //cv::cvtColor(img,dst,cv::COLOR_BGR2GRAY);
    cv::Ptr clahe = cv::createCLAHE(30.0, cv::Size(8, 8));
    clahe->apply(img, dst);
    return dst;


 

接下来一个函数是calcOpticalFlowPyrLK

看了一下它对应的opencv_doc, 它的作用是根据光流法得到新的时刻的特征点的位置。

通过金字塔+ lk跟踪得到匹配点。

看一下函数的api,可以发现它的输出包括下一个时刻点的位置。

VINS-Mono前端效果探索_第4张图片

关于lk光流法,我认为它的问题在于它基于的假设在很多动态的slam场景都是不合适的。因为tracking point很有可能来自动态物体。

VINS-Mono前端效果探索_第5张图片

刚开始针对这个过程有个疑问,因为这个函数的输入是疏散的点,但是哪里能找到得到这些点呢,后来发现,track的提取是在之后进行的。。。也可能理解错了。

通过光流法得到异常点后,就可以通过F矩阵来去除异常点。注意,计算F矩阵有几种方式(8点法,ransac等),点多的话选择ransac是不错的。

接着,通过goodFeaturetoTrack获取其他点。 goodfeaturetotrack的作用,提取特征点...

 

来看一下,经过增加对比度后提取的特征点的样子。

经过测试发现,如果对比度增加过大,确实会导致噪点过多,然后被误识别成角点。

采用Harris角点检测,发现,效果和不启动Harris没有太大区别。

 

VINS-Mono前端效果探索_第6张图片

阶段性总结:

  • 直观的了解了vins-mono前端的代码和效果。
  • 了解了lk光流法,和harris角点提取的思想(但是没有深入了解)
  • 对于lk方法作为视觉前端基于的假设表示怀疑-->场景和特征点都有可能在运动-->
  • 认可weisong大佬提出的vins改进的观点

TODO

  • 想通过视频观测动态帧的效果(这也是必须的。。。)
  • 需要搞明白前端和后端的关联

你可能感兴趣的:(VINS-Mono前端效果探索)