(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日
    浏览(33)
  • 【字节跳动青训营】后端笔记整理-1 | Go语言入门指南:基础语法和常用特性解析

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

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

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

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

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

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

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

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

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

    2024年02月07日
    浏览(38)
  • 【Postman入门指南】

    前言 Postman 提供了测试 API 的友好界面和功能,使用简单便捷,安全可靠。 目录 前言 一、Postman安装 二、Postman的基础功能 三、Postman的进阶功能 一、Postman安装 1、Postman安装 Postman在2018年之后不再支持浏览器版本,下载客户端,安装即可使用。 下载网址:Download Postman | Get

    2024年02月04日
    浏览(27)
  • Oracle 基础入门指南

      Oracle是一款由美国Oracle公司开发的关系型数据库管理系统。它支持SQL查询语言,并提供了丰富的功能和工具,用于管理大规模数据存储、处理和访问。Oracle被广泛应用于企业级应用中,包括金融、电信、零售等各行各业。 要开始学习Oracle,首先需要在计算机上安装Oracle数据

    2024年02月19日
    浏览(26)
  • Flutter入门指南

    笔者项目中使用Flutter的模块并不多。虽然笔者还没有机会在项目中正式使用Flutter,但是也在学习Flutter的一些基本用法。本文就是一篇Flutter的入门介绍,后续会写更多深入介绍的文章。Flutter可以通过一套代码库快速构建高质量、高性能的跨平台应用,支持iOS、Android、Web以及

    2024年04月10日
    浏览(32)
  • 网络渗透入门指南

    目录 简介: 1. 什么是网络渗透? 2. 渗透测试类型 1.黑盒测试 2.白盒测试 3.灰盒测试 3. 渗透测试步骤 3.1 信息收集 3.2 漏洞扫描与评估 3.3 漏洞利用 3.4 特权升级与持久性访问 3.5 横向移动 3.6 数据获取与报告 实例: 总结 在本篇博客中,我们将为读者提供网络渗透的入门知识。

    2024年02月14日
    浏览(28)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包