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

这篇具有很好参考价值的文章主要介绍了(1分钟速览)g2o入门指南--笔记版。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

编辑切换为居中

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

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

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

编辑切换为居中

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

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

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

编辑切换为居中

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

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

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

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

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

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

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

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

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

编辑切换为居中

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

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

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

编辑切换为居中

添加图片注释,不超过 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还是比较准确的。

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

编辑切换为居中

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

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

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

编辑切换为居中

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

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

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

编辑切换为居中

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

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

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

编辑切换为居中

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

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

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

编辑切换为居中

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

上面就是g2o的整体结构。

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

编辑切换为居中

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

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

g2o的使用分布介绍:

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

编辑切换为居中

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

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

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

编辑切换为居中

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

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

编辑切换为居中

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

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

编辑

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

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

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

编辑切换为居中

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

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

编辑切换为居中

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

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

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

编辑切换为居中

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

函数里面大致就是这样。

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

编辑切换为居中

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

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

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

编辑

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

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

以上做一个总结:

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

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

编辑切换为居中

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

然后针对顶点和边的关系,以及求导的内容,还是要多加练习才可。本篇博客到此结束。文章来源地址https://www.toymoban.com/news/detail-453255.html

到了这里,关于(1分钟速览)g2o入门指南--笔记版的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue3入门指南:零基础小白也能轻松理解的学习笔记

    配置 node.js 15.0 命令行创建命令 npm init vue@latest cd 项目名 npm install npm run dev cnpm下载方法,更快 设置 VSCode 自动保存 官方教程 VSCode + Volar 格式化代码:Shift + Alt + F .vscode:VSCode工具的配置文件 node_modules:Vue项目运行的依赖文件 public:资源文件夹(浏览器图标) src:源码文件

    2024年02月06日
    浏览(49)
  • 【字节跳动青训营】后端笔记整理-1 | Go语言入门指南:基础语法和常用特性解析

    **本人是第六届字节跳动青训营(后端组)的成员。本文由博主本人整理自该营的日常学习实践,首发于稀土掘金:🔗Go语言入门指南:基础语法和常用特性解析 | 青训营 本文主要梳理自 第六届字节跳动青训营(后端组)-Go语言原理与实践第一节(王克纯老师主讲) 。同时

    2024年02月13日
    浏览(61)
  • 数据结构入门指南:链表(新手避坑指南)

    目录 前言 1.链表 1.1链表的概念  1.2链表的分类 1.2.1单向或双向 1.2.2.带头或者不带头 1.2.33. 循环或者非循环 1.3链表的实现  定义链表 总结         前边我们学习了顺序表,顺序表是数据结构中最简单的一种线性数据结构,今天我们来学习链表,难度相较于顺序表会大幅增

    2024年02月15日
    浏览(56)
  • rabbitMQ入门指南:管理页面全面指南及实战操作

      在前一篇文章在centos stream 9环境中部署和使用rabbitMQ,我们已经详细介绍了如何在CentOS下安装和配置RabbitMQ,我们不仅启动了RabbitMQ服务,还通过插件安装了管理后台,并且登陆到管理页面。   RabbitMQ管理后台提供了一个直观的用户界面,允许我们查看和管理RabbitMQ服务器

    2024年02月12日
    浏览(50)
  • HarmonyOS云开发基础认证题目记录——包括第一期:Serverless基础、第二期:快速构建用户认证系统、第三期:云函数入门指南、第四期:云数据库入门指南、第五期:云存储入门指南。

    1. 【判断题】  应用架构的演进依次经历了微服务架构、单体架构、Serverless架构等阶段。 错误 2. 【判断题】  认证服务手机号码登录需要填写国家码。 正确 3. 【判断题】  认证服务在绑定微信账号后就不能再绑定QQ账号了。 错误 4. 【判断题】  云函数可以根据函数的实际

    2024年02月05日
    浏览(117)
  • (入门向)面向萌新的算法比赛入门指南

    算法是指解决问题或完成特定任务的一系列明确指令或步骤集合。它是一个定义良好、逐步执行的操作序列,用于将输入转换为输出。算法可用于计算、数据处理、自动化控制、问题解决等各个领域。 算法通常由一系列简单的操作组成,这些操作可以是基本的数学运算、逻辑

    2024年02月07日
    浏览(51)
  • Cartopy绘图入门指南

    嗨,你好,我是来自点点GIS的南南 我与Cartopy的认识起源于“气象水文科研猫”的这个推文,那时候的我觉得,用代码画地图好酷,arcgis就感觉low爆了。但是一直没有时间学习。前段时间放暑假,磕磕绊绊装完包以后就不想动弹了,折腾环境折腾的我头皮发麻。gdal和cartopy真的

    2024年02月06日
    浏览(165)
  • 领域驱动设计入门指南

    ​ 领域驱动设计(Domain-Driven Design,简称DDD)是一种软件架构风格,它强调在软件开发过程中紧密关注业务需求和领域知识。本文将简要介绍领域驱动设计的核心概念,帮助人开始学习和实践领域驱动设计。 什么是领域驱动设计? 领域驱动设计是一种软件开发方法,它侧重

    2024年02月11日
    浏览(38)
  • ES入门指南

    前言 本文章适用于未接触ES或接触较少的中高级开发工程师,以较低的学习成本,快速学习ES并在生产中应用为核心目的 本文章主要以实战维度展开,在不影响数据安全以及基本的性能危机的前提下,不会过多的涉及深层次的底层原理(但也会涉及一些基本的原理,防止出现类

    2023年04月08日
    浏览(66)
  • Go 语言入门指南

    学一门语言先看看helloworld吧,感觉go结合了好多语言的方式,写起来一会像python一会像c++,java差不多。反正语法挺奇特 go语言特点: 高性能、高并发 语法简单,学习曲线平缓 丰富的标准库 完善的工具链 静态链接 快速编译 跨平台 垃圾回收 首先听到老师说 go语言编译贼快,

    2024年02月15日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包