首先,ORBSLAM2里的优化都是基于图优化的,使用的第三方库为g2o,这里先介绍一下g2o简要使用流程,然后再来看看ORBSLAM2里的几个优化函数。
一、g2o
g2o是一个图优化求解库,它将优化问题表现为图的形式:包含顶点和边。
在slam问题里,BA中参与优化的参数有位姿和地图点坐标,在g2o中,我们将这些需要进行优化的变量设置为顶点,一般一张图像的位姿为一个顶点,这张图像上所能观察到的每一个地图点坐标都为顶点。其次顶点间用边来建立联系(位姿和地图点之间的联系),也就是用边来表示误差项(在vslam里的重投影误差)。这样就建立好了一个图优化问题,接下来选择对应的优化方法求解器进行求解。
二、Optimizer类
1、全局BA
// pMap中所有的MapPoints和关键帧做bundle adjustment优化
// 这个全局BA优化在本程序中有两个地方使用:
// a.单目初始化:CreateInitialMapMonocular函数
// b.闭环优化:RunGlobalBundleAdjustment函数
/**
* @brief bundle adjustment Optimization
*
* 3D-2D 最小化重投影误差 e = (u,v) - project(Tcw*Pw) \n
*