G20
后端中有两个主流的优化方法
- 滤波器方法:早期SLAM主流方法,是存储量和状态量是平方增长关系,因为存储的是协方差矩阵,因此不适合大型场景。而 现在基于视觉的SLAM方案,路标点(特征点)数据很大,滤波方法根本吃不消,所以此时滤波的方法效率非常 低。
- 图优化方法:现在主流的优化方法,图优化里面BA是起到了核心的作用,BA是稀疏的,可以加速。
在SLAM里,图优化一般分解为两个任务:
1、构建图。机器人位姿作为顶点,位姿间关系作为边。
2、优化图。调整机器人的位姿(顶点)来尽量满足边的约束,使得误差最小。
在图中,图的顶点就是机器人的一个位姿,边就是两个顶点的转换关系
第一步设置的内容为$H \Delta x=b$的求解方式
大概是有这些方法
1 | LinearSolverCholmod :使用sparse cholesky分解法。继承自LinearSolverCCS |
在g2o/g2o/solver
文件夹下可以看见相应的文件
第二步设置BlockSolver<>
,他包含了线性的求解器
第三部设置总的求解器,并从GN, LM, DogLeg 中选一个,再用上述块求解器BlockSolver初始化。打开g2o/g2o/core/
目录下的各个算法可以看见,均继承自OptimizationWithHessian
,并且OptimizationWithHessian
继承自OptimizationAlgorithm
第四部创建最大的求解器,稀疏优化器(SparseOptimizer),并用已定义求解器作为初始。
第五步设置顶点和边
Comments