关键帧。非常重要的数据结构,主要参与到如下逻辑中:

  • 位姿设置与获取
  • 共视图构建
  • 生成树
  • 回环边关联
  • 地图点关联

主要接口如下:

  • KeyFrame(Frame &F, Map* pMap, KeyFrameDatabase* pKFDB); 构造函数,接收 Frame, Map 和 KeyFrameDatabase. Frame 自然是 KeyFrame 的关键成员,而 Map 指针是用于处理地图点的, 关键帧数据库用于回环。

  • 位姿处理: Set, Get(位置、位姿逆、相机光心、双目中心、旋转、平移).

  • void ComputeBoW();

  • 共视图操作:
    • void AddConnection(KeyFrame* pKF, const int &weight); 添加边,看到边上有权重
    • void EraseConnection(KeyFrame* pKF); 删除边,给定的是指针
    • 更新: void UpdateConnections(); void UpdateBestCovisibles()
    • 获取关键帧,包括获取连接的关键帧集合、列表、Best-N 关键帧、权重 w 范围的关键帧
    • 获取边的权重: int GetWeight(KeyFrame* pKF); 权重为整型
  • 生成树操作: 添加、删除、获取、判断是否有子节点;改变、获取父节点

  • 回环边操作:添加回环边、获取有回环边的关键帧集合

  • 地图点操作:添加、删除、替换、获取地图点(观测)

  • 关键点操作:GetFeaturesInArea, UnprojectStereo, 对 Frame 操作的代理

  • 是否 Bad 的操作:是否运行设置 Bad;设置、判断 Bad.