G2O的使用步骤

1.G2O使用步骤

使用步骤如上图中的红色字体

第1步 创建一个线性求解器LinearSolver

基于图优化的SLAM一般都是用来求解增量方程HX=b,而求解增量方程最简单的方法是直接求解雅克比矩阵H的逆即:

                                                                           △X=-H.inv*b

但是由于当雅克比矩阵维度较大时,矩阵求逆就会很困难,因此这一步主要利用什么方法进行求解增量方程,从图中可得,一般有三类方法PCG,CSparse,Sparse Cholesky,具体:

LinearSolverCholmod :使用Sparse Cholesky分解法。继承自LinearSolverCCS

LinearSolverDense :使用Dense Cholesky分解法。继承自LinearSolver

LinearSolverEigen: 依赖项只有eigen,使用eigen中Sparse Cholesky 求解

LinearSolverCSparse:使用CSparse法。继承自LinearSolverCCS

LinearSolverPCG :使用preconditioned conjugate gradient 法,继承自LinearSolver

第2步 创建BlockSolver

BlockSolver 内部包含 LinearSolver,用上面我们定义的线性求解器LinearSolver来初始化;这步可以认为是设置顶点的类型。BlockSolver里面有两种定义方式,一种是指定的固定变量的solver,如下:

using BlockSolverPL = BlockSolver< BlockSolverTraits<p, l> >;

其中p代表pose的维度(注意一定是流形manifold下的最小表示),l表示landmark的维度

另一种是可变尺寸的solver,定义如下

using BlockSolverX = BlockSolverPL<Eigen::Dynamic, Eigen::Dynamic>;

比较常用的有这几种:

BlockSolver_6_3 :表示pose 是6维,观测点是3维。用于3D SLAM中的BA

BlockSolver_7_3:在BlockSolver_6_3 的基础上多了一个scale

BlockSolver_3_2:表示pose 是3维,观测点是2维

第3步 创建总求解器solver

这一步可以理解为采用什么方法进行最小二成优化求解增量;一般的方法有高斯牛顿(GaussNewton)法,LM(Levenberg–Marquardt)法、Dogleg法,并用上免得求解器BlockSolver初始化

第4步 创建稀疏优化器SparseOptimizer

创建稀疏优化器,并采用已定义求解器作为求解方法

具体代码如下

    // Step 1 初始化g2o优化器
    g2o::SparseOptimizer optimizer;
    // H△X=b增量方程,linearSolver就是采用什么方法求解增量方程
    g2o::BlockSolver_6_3::LinearSolverType * linearSolver;
    // LinearSolverEigen 依赖项只有eigen,使用eigen中sparse Cholesky 求解,性能和CSparse差不多
    linearSolver = new g2o::LinearSolverEigen<g2o::BlockSolver_6_3::PoseMatrixType>();
    // BlockSolver 内部包含 LinearSolver,用上面我们定义的线性求解器LinearSolver来初始化。
    // 定义增量方程中的自变量X含义 BlockSolver_6_3 表示pose 是6维,观测点是3维
    g2o::BlockSolver_6_3 * solver_ptr = new g2o::BlockSolver_6_3(linearSolver);

    // 选用LM算法进行最小二乘优化,通过多步迭代计算最好的增量
    g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg(solver_ptr);
    optimizer.setAlgorithm(solver);

下次记录顶点和边的使用.....

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值