izhengfan / se2lam

(ICRA 2019) Visual-Odometric On-SE(2) Localization and Mapping
https://github.com/izhengfan/se2lam
MIT License
404 stars 108 forks source link

bug 疑惑 #25

Closed menglitanhua closed 4 years ago

menglitanhua commented 4 years ago

你好,不好意思,英文水平有限,只能用汉语陈述, GlobalMapper.cpp 文件 926行,OptKFPairMatch的实现逻辑是固定_pKF1的可视地图点,根据_pKF1和_pKF2的匹配关系构建优化边,优化_pKF1和_pKF2的位姿后,删除边chi2>5.0的特征匹配关系和可视地图点? 假如存在可视地图点被认为是离散点而被清除,则1010行numMatch的大小会缩小,1019-1023代码实现如下 _vPt3MPs.clear(); for (int j=0; j<numMatch; j++) { g2o::Vector3D Pt3MPj = estimateVertexXYZ(optimizer, j+2); _vPt3MPs.push_back(Pt3MPj); } 其通过如此方式获取非离散MPs,可能取到已经因离散而要被清除的点,尽管最终所得的MPs的数目是正确的。正确的实现感觉应该是: 1.删除1010行代码,numMatch保持初始map匹配大小 2. 1020行之后增加校验该可视地图点是否因产生离散边要被删除,如   _vPt3MPs.clear(); for (int j=0; j<numMatch; j++) { if(sIdMPin1Outlier.find(vIdMPin1[j])!=sIdMPin1Outlier.end()) continue; g2o::Vector3D Pt3MPj = estimateVertexXYZ(optimizer, j+2); _vPt3MPs.push_back(Pt3MPj); } 麻烦你确认一下我的理解是不是正确?谢谢。

izhengfan commented 4 years ago

感谢指正,我研究了一下,你说的应该是对的,回头更新一下代码

izhengfan commented 4 years ago

已修,欢迎review😉