ORB-SLAM2源码学习:KeyFrame.cc③: void KeyFrame::AddConnection更新连接权重
前言
这是一个简单的更新权重的一个函数,在更新共视关系时被调用。
1.函数声明
void KeyFrame::AddConnection(KeyFrame *pKF, const int &weight)
它接受一个关键帧和对应的权重,实际调用时是用当前的关键帧和权重来更新与当前关键共视的关键帧的权重。
2.函数定义
1.如果之前没有记录到权重信息就新建连接。
2.如果形参传入的权重与之前不一致就更新连接。
3.如果权重一致则不用更新连接。
根据上述情况来执行相应操作
最后如果权重发生了变化就要调用UpdateBestCovisibles函数来更新最佳共视关系也就是对共视关键帧和权重的那两个列表重新进行排序。
/*
为当前关键帧新建或更新和其他关键帧的连接权重
pKF 和当前关键帧共视的其他关键帧
weight 当前关键帧和其他关键帧的权重(共视地图点数目)
*/
void KeyFrame::AddConnection(KeyFrame *pKF, const int &weight)
{
{
// 互斥锁,防止同时操作共享数据产生冲突
unique_lock<mutex> lock(mMutexConnections);
// 新建或更新连接权重
if(!mConnectedKeyFrameWeights.count(pKF))
// count函数返回0,说明mConnectedKeyFrameWeights中没有pKF,新建连接
mConnectedKeyFrameWeights[pKF]=weight;
else if(mConnectedKeyFrameWeights[pKF]!=weight)
// 之前连接的权重不一样了,需要更新
mConnectedKeyFrameWeights[pKF]=weight;
else
return;
}
// 连接关系变化就要更新最佳共视,主要是重新进行排序
UpdateBestCovisibles();
}
结束语
以上就是我学习到的内容,如果对您有帮助请多多支持我,如果哪里有问题欢迎大家在评论区积极讨论,我看到会及时回复。