您的位置:首页 > 移动开发

ORBSLAM2代码学习(4):localmapping线程

2020-03-06 17:37 1431 查看

注意:localmapping线程处理的是每一个从tracking线程送过来的kf。而tracking线程处理的是每一个frame。

步骤1:检查是否有kf从tracking中送入。

如果没有就不做处理。
如果有就进行下面的步骤。

步骤2:对新送入的关键帧进行处理。

2.1 计算该关键帧的bow向量。
2.2 将tracking线程局部地图(与localmapping线程中的局部地图不同)中跟踪到的mappoints与该关键帧进行关联。
2.3更新关键帧间的连接关系,Covisibility图和Essential图(tree)
2.4将该关键帧插入到loaclmapping中的地图中去。

步骤3:剔除该kf中的不好的mappoints

不好的mappoints是值在论文中提到的不复合规则的mappoints。

步骤4:通过三角化再生成一些mappoints

因此这个kf中的mappoints分别来自:
1、本身的mappoints;2、tracking线程中localmap中的mappoints;3、和三角化生成的mappoints。

如果已经处理完队列中的最后的一个关键帧,则检查并融合当前关键帧和相邻关键帧重复的mappoints,如果队列中还有等待处理的kf,则重复进行步骤2,3,4。

如果已经处理完队列中的最后的一个关键帧 且localmapping 线程未被要求停止,则进行局部BA优化,并删除冗余的关键帧。(疑问:什么时候localmapping 线程会被要求停止。)如果队列中还有等待处理的kf,则重复进行步骤2,3,4。

参考

  • 点赞
  • 收藏
  • 分享
  • 文章举报
stephen_ojbk 发布了12 篇原创文章 · 获赞 0 · 访问量 141 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: