高翔【自动驾驶与机器人中的SLAM技术】学习笔记(十二)拓展图优化库g2o(二)顶点vertex

转载来源:从零开始一起学习SLAM | 掌握g2o顶点编程套路

小白:师兄,上一次将的g2o框架

从零开始一起学习SLAM | 理解图优化,一步步带你看懂g2o代码

真的很清晰,我现在再去看g2o的那些优化的部分,基本都能看懂了呢!

师兄:那太好啦,以后多练习练习,加深理解

小白:嗯,我开始编程时,发现g2o的顶点和边的定义也非常复杂,光看十四讲里面,就有好几种不同的定义,完全懵圈状态。。。师兄,能否帮我捋捋思路啊

师兄:嗯,你说的没错,入门的时候确实感觉很乱,我最初也是花了些时间才搞懂的,下面分享一下。

一、g2o的顶点(Vertex) 从哪里来的?

师兄:在《g2o: A general Framework for (Hyper) Graph Optimization》这篇文档里,我们找到那张经典的类结构图。也就是上次讲框架用到的那张结构图。其中涉及到顶点 (vertex) 的就是下面 加了序号的3个东东了。

图片

小白:记得呢,这个图很关键,帮助我理清了很多思路,原来来自这篇文章啊

师兄:对,下面我们一步步来看吧。先来看看上图中和vertex有关的第①个类: HyperGraph::Vertex,在g2o的GitHub上(https://github.com/RainerKuemmerle/g2o),它在这个路径

g2o/core/hyper_graph.h

这个 HyperGraph::Vertex 是个abstract vertex,必须通过派生来使用。如下图所示

图片

然后我们看g2o 类结构图中第②个类,我们看到HyperGraph::Vertex 是通过类OptimizableGraph 来继承的, 而OptimizableGraph的定义在

g2o/core/optimizable_graph.h

我们找到vertex定义,发现果然,OptimizableGraph 继承自 HyperGraph,如下图所示

图片

不过,这个OptimizableGraph::Vertex 也非常底层,具体使用时一般都会进行扩展,因此g2o中提供了一个比较通用的适合大部分情况的模板。就是g2o 类结构图中 对应的第③个类:

BaseVertex

那么它在哪里呢? 在这个路径:

g2o/core/base_vertex.h

图片

小白:哇塞,原来是这样抽丝剥茧的呀,学习了,授人以鱼不如授人以渔啊!

师兄:嗯,其实就是根据那张图结合g2o GitHub代码就行了

二、g2o的顶点(Vertex) 参数如何理解?

小白:那是不是就可以开始用了?

师兄:别急,我们来看看参数吧,这个很关键。

我们来看一下模板参数 D 和 T,翻译一下上图红框:

D是int 类型的,表示vertex的最小维度,比如3D空间中旋转是3维的,那么这里 D = 3:

我补充一些:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值