首页 > 编程知识 正文

g2指令的用法,g2怎么用效果好

时间:2023-05-05 10:13:23 阅读:139437 作者:2093

1.G2O使用步骤

使用步骤图中的红色字体

创建第1步 线性求解器LinearSolver

基于图优化的贫民窟一般用于求解增量方程HX=b,但求解增量方程的最简单方法是雅可比矩阵h的逆,即:

X=-H.inv*b

但是,当雅克比矩阵维数大时,很难求出矩阵的逆,所以在这个步骤中主要用什么方法求解增加方程式,从图中可以看出,一般有3种方法PCG、CSparse、Sparse Cholesky。 具体来说:

使用linearsolvercholmod:sparsecholesky分解法。 从LinearSolverCCS继承

使用linearsolverdense:densecholesky分解法。 从线性服务器继承

LinearSolverEigen :依赖关系只有eigen,使用eigen中的Sparse Cholesky进行求解

使用linearsolvercsparse:csparse法。 从LinearSolverCCS继承

linearsolverpcg :使用preconditionedconjugategradient方法,从linearsolver继承

http://www.Sina.com/http://www.Sina.com /

块解算器内部包含线性解算器,由上面定义的线性解算器初始化; 这一步被认为是设定顶点的类型。 块解决程序有以下两种定义方法: 一个是指定固定变量的solver。

usingblocksolverpl=blocksolverblocksolvertraitsp,l;

请注意,其中p表示pose的维,l是流形manifold下的最小表示。 (表示landmark的维度

另一个是可变大小求解器,定义如下

usingblocksolverx=blocksolverpleigen :3360 dynamic,Eigen:Dynamic;

常用的有以下几种。

block solver _6_3:表示pose为6维,观测点为3维。 用于3d灌篮的BA

block solver _7_3:在block solver _6_ 3中添加了scale

block solver _3_2:表示pose为三维,观测点为二维

第2步 创建编写BlockSolver

这一步可以理解为用什么方法优化最卖命的冰棍求解增量; 一般的方法有高斯牛顿法、lm(LevenBerg-Marquardt )法、Dogleg法,为了不使求解器块解算器初始化而并用

第3步 创建稀疏优化空间优化器

创建稀疏优化程序,并使用定义的求解器作为解决方案方法

具体代码如下

//步骤1初始化g2o优化程序g2o :3360 sparseoptimizeroptimizer; //HX=b德尔塔方程,线性求解器采用什么方法求解德尔塔方程g2o :3360 block solver _6_ :3360线性求解器; //LinearSolverEigen依赖关系只有eigen,使用eigen中的sparse Cholesky求解,性能与CSparse基本相同: linear solver=ne wg2o 3: linearsolvereion 块解算器内部包含线性解算器,由以上定义的线性解算器进行初始化。 //定义增量方程自变量x的含义的BlockSolver_6_3是pose为六维且观测点为三维g2o :3360 block solver _6_3* solver _ ptr=ne wg2o 3603360360 block 采用solver _ ptr=ne wg2o 3360360 block solver//lm算法进行最玩命冰棍乘法优化,多级迭代最高增量g2o :3360 optimizationalgorithmleve solver=ne wg2o :计算optimizationalgorithmlevenber的optimizer.setalgorithm(solver ); 现在记录顶点和边的使用.

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。