(1分钟速览)g2o入门指南--笔记版

文章介绍了SLAM后端优化中g2o框架的基本使用,包括创建线性求解器、构建块求解器、选择优化算法如LM、GN和DogLeg,以及顶点和边的定义与操作。读者将学习如何通过g2o进行图优化,理解图优化的步骤和参数设置,并了解外点剔除与一元边的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在slam后端中,优化的框架很多,有ceres,g2o,gtsam这些。要想真正掌握slam后端的优化内容,这些框架是必不可少的上手练习的内容。本文则介绍有关g2o的相关内容,作为一个入门指南,目标:大家阅读完以后,大体知道g2o写代码的时候有几步,然后图是怎么画的,一条边连接啥节点,最后自己会求导即可。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

上面这幅图,简单地介绍了一下g2o里面有啥,圆圈是啥,边是啥大家看一下上面的图即可。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

这个地方还存在一个版本上的问题,大家可以自行网上搜索一下相关的版本。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

上面这幅图敲重点,是g2o在程序里的书写的步骤,大家新上手的同学可以按照上面的操作来实操一遍,加深印象。

1.创建一个线性求解器linearsolver

2.然后将上面这个linearsolver作为参数,创建blocksolver

3.然后再见上面的blocksolver作为参数,创建solver

4.然后再创建optimizer,当然这里是solver作为参数

5.然后下面就是顶点vertex和边edge的一个循环,然后设置ID,是否边缘化,边连接哪些顶点的内容

6.设置优化参数,开始执行优化,一般就是optimize(40),里面的数字表示优化多少次。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

针对顶点部分的改写,大家可以参考上面这幅图片。上面的函数里面主要改写oplusImpl和setToOriginImpl这两个,当然其中还有read()和write()函数,这些的话可以写成空的函数体。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

上面这是边的相关说明,一般要重写computeError(),然后下面的函数根据情况也进行相关重写。

//LM

g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg( solver_ptr )

;

//GN

g2o::OptimizationAlgorithmGaussNewton* solver = new g2o::OptimizationAlgorithmGaussNewton(

solver_ptr );

//DogLeg

g2o::OptimizationAlgorithmDogleg* solver = new g2o::OptimizationAlgorithmDogleg( solver_ptr );

上面这三段代码是优化器的选择,分别是LM、GN和DogLeg方法。这里面的话GN计算的效率还可以,经过我的实验,DogLeg是最快的,然后LM是最慢的,然后GN和Dogleg差不多,但是精度的话,Dogleg还是比较准确的。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

上面这些都是一些小参数,大家可以根据日常练习的代码来自主选择里面参数的内容。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

上面是g2o代码优化的一般步骤,大家可以仔细看看,每一步定义出来的变量都基本会作为下一步的参数,然后这样层层递归下去。最后用optimizer.optimize(100)来进行优化,就是进行100次迭代优化,这里的100是自己设置的,大家可以根据优化的场景来进行调参。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

这里也有进行外点剔除的操作,是用huber核函数来进行的,这个里面有个参数,这个参数是根据是用的场景来定的。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

这个图要理解一下,图中的边为一元边,这个的意思就是说,在求一个二次函数的拟合问题的时候,这里的abc三个参数进行拟合求解,那么此时这里的边就是自己指向自己的,就是所谓的一元边。通常一元边在因子图中配合着先验因子出现的。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

上面就是g2o的整体结构。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

上面这幅图可以看一下,有关g2o的结构说明。

g2o的使用分布介绍:

编辑切换为居中

添加图片注释,不超过 140 字(可选)

这个可以记一下,有关g2o是怎么搞的,一般按照上面的步骤,知道求导的表达式以后,一般优化是不成问题的。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

编辑切换为居中

添加图片注释,不超过 140 字(可选)

编辑

添加图片注释,不超过 140 字(可选)

这个当然要include一下头文件。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

编辑切换为居中

添加图片注释,不超过 140 字(可选)

最后就是添加图中的边和顶点,然后启动optimizer.optimize()即可。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

函数里面大致就是这样。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

这是添加相应的顶点和边。

编辑

添加图片注释,不超过 140 字(可选)

最后优化一下,就可以了。

以上做一个总结:

针对g2o的步骤就根据下面这个图来进行即可。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

然后针对顶点和边的关系,以及求导的内容,还是要多加练习才可。本篇博客到此结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值