G20
Kong Liangqian Lv6

后端中有两个主流的优化方法

  • 滤波器方法:早期SLAM主流方法,是存储量和状态量是平方增长关系,因为存储的是协方差矩阵,因此不适合大型场景。而 现在基于视觉的SLAM方案,路标点(特征点)数据很大,滤波方法根本吃不消,所以此时滤波的方法效率非常 低。
  • 图优化方法:现在主流的优化方法,图优化里面BA是起到了核心的作用,BA是稀疏的,可以加速。

在SLAM里,图优化一般分解为两个任务:

1、构建图。机器人位姿作为顶点,位姿间关系作为边。

2、优化图。调整机器人的位姿(顶点)来尽量满足边的约束,使得误差最小。

在图中,图的顶点就是机器人的一个位姿,边就是两个顶点的转换关系

第一步设置的内容为$H \Delta x=b$的求解方式

大概是有这些方法

1
2
3
4
5
6
LinearSolverCholmod :使用sparse cholesky分解法。继承自LinearSolverCCS
LinearSolverCSparse:使用CSparse法。继承自LinearSolverCCS
LinearSolverPCG :使用preconditioned conjugate gradient 法,继承自LinearSolver
LinearSolverDense :使用dense cholesky分解法。继承自LinearSolver
LinearSolverEigen: 依赖项只有eigen,使用eigen中sparse Cholesky 求解,因此编译好后可以方便的在其
他地方使用,性能和CSparse差不多。继承自LinearSolver

g2o/g2o/solver文件夹下可以看见相应的文件

第二步设置BlockSolver<>,他包含了线性的求解器

第三部设置总的求解器,并从GN, LM, DogLeg 中选一个,再用上述块求解器BlockSolver初始化。打开g2o/g2o/core/目录下的各个算法可以看见,均继承自OptimizationWithHessian,并且OptimizationWithHessian继承自OptimizationAlgorithm

第四部创建最大的求解器,稀疏优化器(SparseOptimizer),并用已定义求解器作为初始。

第五步设置顶点和边

 Comments