0、在 Frame::ComputeStereoFromRGBD( ) 函数中,计算 mvuRight[i] 原理??(待定双目)
1、ORBmatcher::DescriptorDistance() 这个函数内部计算汉明距离时用到的位操作需要待研究!(待定)
2、在 KeyFrame::ComputeBow() 中 如何根据关键点的描述子转换为词袋向量和特征向量。具体使用过程?(待定)
参考:https://www.cnblogs.com/luyb/p/6033196.html
3、在 MapPoint.h 中 cv::Mat mDescriptor; 这个变量的计算方式不知道为什么就选择那个描述子?有什么意义吗?(待定)
4、在 Tracking::TrackWithMotionModel() 里面,用的是匀速运动模型。如果换做 imu 与单目结合的话。这个如何让 Imu 提供一个初始值????(待定)
5、在 Tracking::TrackLocalMap() 函数中 1032 行左右。if 条件判断是不是太宽了???(待定)
6、在 LocalMapping::CreateNewMapPoints() 函数中 ratioFactor 表示什么?为什么前面要乘 1.5f?在 if(rationBaselineDepth<0.01)
这句话那两个问号处?以及在 if(ratioDist*ratioFactor<ratioOctave || ...) 这里代表什么含义?
7、在计算地图点的平均观测方向上。为什么要计算地图点到一个关键帧的光心向量,与平均方向向量的夹角小于 60 °???不在范围内就不行吗??比如在 ORBmatcher::Fuse(KeyFrame *pKF, const vector<MapPoint *> &vpMapPoints, const float th) 函数中就用了这个向量?有什么依据吗??
8、在 LoopClosing::DetectLoop() 函数中 vbConsistentGroup[iG] = true ;这里为什么不能多次加入???因为这里加入的是 CKF2 ...应该不会有影响才对啊???还有这句代码上面一行代码。这个明显可以发现 spCandidateGroup 会是相同的。只不过对应的一致性得分可能不同,这样不会有什么影响吗????
9、在 LoopClosing::CorrectLoop() 函数中 {} 括号之间的获得地图点时。第一个循环处。上面的问号?(没想明白!)
10、在 Optimizer::OptimizeEssentialGraph() 函数中,为什么在添加位姿节点时,将参考世界坐标帧没有固定住,也作为优化了???
111、在 LoopClosing::CorrectLoop () 函数中在 // Get Map Mutex
开始部分,为什么仅仅修正当前关键帧的临近关键帧?检测到的闭环到基准闭环帧之间的其他帧其实理论上也应该修正才对!
11、在计算 F21 时,就是 ComputeF21 函数,内部求解基本矩阵时,强迫约束的做法不太明白。当然基本原理是在 10 章的多视图几何里。(不会)
12、在 Pnpsolver::choose_control_points() 函数内部还不明白如何选取的 4 个控制点。在 PnPsolver:: compute_pose() 函数中计算 R t。然后调用的 find_betas_approx_1() 这几个类似的函数。还有 gauss_newton() 这个也没有弄明白!!还有是如何对应 N =1,2,3 的???(可以暂时不看)
13、在闭环时,局部建图线程剔除的关键帧是否对闭环优化有影响?从代码结果来看,代码内部并没有对不好的地图点以及不好的关键帧进行资源释放,有些地方可能关键帧已经剔除,但是因为没有释放,所以即使是坏的关键帧也可能进入到优化中。(暂时推测)代码中已经在 KeyFrame.h 中设置了变量,表明是否是冗余的了。跑数据集时,无法闭环有些地方还无法验证。
14、在 ComputeSim3() 函数中最后一个 if else 那里。只有有效匹配的点对数大于 40 才算是检测到了闭环,后面才允许调用 CorrectLoop() 纠正全局误差。但是判断的匹配点对数阈值如何确定?(待定)
15、在 ORBmatcher::Fuse() 函数中,调用 Replace() 函数时的条件会不会太简单?因为仅仅通过观测实际上有些不好的点其实还是会通过检测(目前没有想到更好的方案)