1. DetectLoop

这里有个ConsistenGroup概念,比较难懂。这里是最让人迷惑的地方。一旦vbConsistentGroup为真,其他帧的spCanditateGroup就进不来了。

if(!vbConsistentGroup[iG])
{
ConsistentGroup cg = make_pair(spCandidateGroup,nCurrentConsistency);
vCurrentConsistentGroups.push_back(cg);
vbConsistentGroup[iG]=true; //this avoid to include the same group more than once
}

2. ComputeSim3

不太明白为什么都使用Sim3去计算相对位姿。在双目和RGBD情况下,地图点深度已知,可以不优化Scale的啊。关于sim3的优化,请参考此博客与paper:sim3优化paper。这里面用到了三种不同的匹配方法:

 int nmatches = matcher.SearchByBoW(mpCurrentKF,pKF,vvpMapPointMatches[i]);

//为了找到更多的匹配点,用于优化
matcher.SearchBySim3(mpCurrentKF,pKF,vpMapPointMatches,s,R,t,7.5);
    //从回环帧和它的邻域帧里,得到更多地图点,并与当前帧匹配,如果内点多于某个阈值,则接受这个loop
// Retrieve MapPoints seen in Loop Keyframe and neighbors
vector<KeyFrame*> vpLoopConnectedKFs = mpMatchedKF->GetVectorCovisibleKeyFrames();
vpLoopConnectedKFs.push_back(mpMatchedKF);
mvpLoopMapPoints.clear();
for(vector<KeyFrame*>::iterator vit=vpLoopConnectedKFs.begin(); vit!=vpLoopConnectedKFs.end(); vit++)
{
KeyFrame* pKF = *vit;
vector<MapPoint*> vpMapPoints = pKF->GetMapPointMatches();
for(size_t i=0, iend=vpMapPoints.size(); i<iend; i++)
{
MapPoint* pMP = vpMapPoints[i];
if(pMP)
{
if(!pMP->isBad() && pMP->mnLoopPointForKF!=mpCurrentKF->mnId)
{
mvpLoopMapPoints.push_back(pMP);
pMP->mnLoopPointForKF=mpCurrentKF->mnId;
}
}
}
} // Find more matches projecting with the computed Sim3
matcher.SearchByProjection(mpCurrentKF, mScw, mvpLoopMapPoints, mvpCurrentMatchedPoints,10);

3. EssentialGraph 的意义

  Optimizer::OptimizeEssentialGraph(mpMap, mpMatchedKF, mpCurrentKF, NonCorrectedSim3, CorrectedSim3, LoopConnections, mbFixScale);

只优化位姿,里面包含当前回环边信息,所有帧与父边信息,它的回环边信息,以及共视边信息。优化所有帧位姿。

最新文章

  1. JavaScript基础知识总结(二)
  2. js实现去重字符串
  3. centos下 Vim快捷键操作命令大全
  4. mac电脑忘记账户名密码解决方法
  5. JS-unicode编码转换
  6. 使用Spring Profile和Mybatis进行多个数据源(H2和Mysql)的切换
  7. DOM 添加 / 更新 / 删除 XML (CURD)
  8. 用python+selenium导入excel文件
  9. 解决Eclipse一直loading workbench无法启动的问题
  10. 27.编写一个Animal类,具有属性:种类;具有功能:吃、睡。定义其子类Fish 和Dog,定义主类E,在其main方法中分别创建其对象并测试对象的特性。
  11. Linux的eth0,eth1,eth2,lo详解
  12. NOIP 2019 RP++
  13. 51Nod1309 Value of all Permutations 期望
  14. 解决nuxt.js新建项目报错的问题
  15. 回顾HashMap
  16. python 叠加装饰器详解
  17. 23种设计模式之单例模式(Singleton)
  18. 1.Log4j入门
  19. 通过cmd命令安装、卸载、启动和停止Windows Service(InstallUtil.exe)
  20. 【云栖大会】阿里巴巴集团CTO张建锋:用计算和数据去改变整个世界

热门文章

  1. java随机数Math.random()
  2. https://blog.csdn.net/eguid_1/article/category/6270094
  3. Linux之lrzsz命令的安装
  4. Vue-选项卡切换
  5. python-zmail发送邮件
  6. es6 新语法分享给爱前端的伙伴
  7. Ubuntu Visual code安装与使用
  8. php quotemeta()函数 语法
  9. paper 159:文章解读:From Facial Parts Responses to Face Detection: A Deep Learning Approach--2015ICCV
  10. Linux Bash Shell快速入门 (三)