在slam后端中,优化的框架很多,有ceres,g2o,gtsam这些。要想真正掌握slam后端的优化内容,这些框架是必不可少的上手练习的内容。本文则介绍有关g2o的相关内容,作为一个入门指南,目标:大家阅读完以后,大体知道g2o写代码的时候有几步,然后图是怎么画的,一条边连接啥节点,最后自己会求导即可。
编辑切换为居中
添加图片注释,不超过 140 字(可选)文章来源:https://www.toymoban.com/news/detail-453255.html
上面这幅图,简单地介绍了一下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 字(可选)
然后针对顶点和边的关系,以及求导的内容,还是要多加练习才可。本篇博客到此结束。文章来源地址https://www.toymoban.com/news/detail-453255.html
到了这里,关于(1分钟速览)g2o入门指南--笔记版的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!