(Bundle Adjustment) 优化器工具类,把所有的优化器接口都集中到这里了。
主要接口
全部为静态成员函数。
- 基础 BA, 给定关键帧和地图点。
void static BundleAdjustment( const std::vector<KeyFrame*> &vpKF, const std::vector<MapPoint*> &vpMP, int nIterations = 5, bool *pbStopFlag=NULL, const unsigned long nLoopKF=0, const bool bRobust = true);
- Global BA, 给定地图。
void static GlobalBundleAdjustemnt( Map* pMap, int nIterations=5, bool *pbStopFlag=NULL, const unsigned long nLoopKF=0, const bool bRobust = true);
- 局部 BA, 给定插入的关键帧和地图。
void static LocalBundleAdjustment(KeyFrame* pKF, bool *pbStopFlag, Map *pMap);
相比全局BA, 少了一些参数。
- 位姿优化:
int static PoseOptimization(Frame* pFrame);
- 优化本质图:
void static OptimizeEssentialGraph(Map* pMap, KeyFrame* pLoopKF, KeyFrame* pCurKF, const LoopClosing::KeyFrameAndPose &NonCorrectedSim3, const LoopClosing::KeyFrameAndPose &CorrectedSim3, const map<KeyFrame *, set<KeyFrame *>> &LoopConnections, const bool &bFixScale);
输入当前关键帧和找到的回环关键帧,做 Essential Graph 优化。
bFixScale
为真表示尺度需要优化(单目)。 - 优化 Sim3:
static int OptimizeSim3( KeyFrame* pKF1, KeyFrame* pKF2, std::vector<MapPoint *> &vpMatches1, g2o::Sim3 &g2oS12, const float th2, const bool bFixScale);