g2o使用总结关于边和顶点

本文介绍了如何使用g2o库进行图优化,重点关注顶点和边的定义。顶点代表待优化参数,通过setToOriginImpl()和oplusImpl()进行重置和更新。边则表示误差项,通过computeError()计算误差,linearizeOplus()计算雅克比矩阵。在构建优化问题时,设置顶点初始值,添加顶点和边到优化器,以解决非线性最小二乘问题。
摘要由CSDN通过智能技术生成

图优化是非线性最小二乘问题的另一种表达而已,使用g2o求解和Ceres很多地方都相似。

最小二乘问题的关键在于:已知观测数据(输入值,观测值),待估计参数及其初始值,误差项,雅克比矩阵,求解增量更新待估计参数,在不同的方法中去寻找对应,对于方法的理解即可迎刃而解。

定义顶点和边的类
1、构建顶点Vertex类:
顶点就是待优化的参数,重要的成员函数有:
setToOriginImpl() 将节点的值进行重置
oplusImpl()表达顶点的更新(待优化变量的更新

2、构建边Edge类:
边就是误差项,重要的函数有:
构造函数:用于接收已知数据的输入值,从而在computeError() 中书写
computeError() 计算误差项(其中_measurement用于接收观测值
linearizeOplus() 求解雅克比矩阵

添加顶点和边(其他构建图优化问题部分略,重点展示添加)

1、添加顶点:
创建顶点(指针)访问成员函数:
setEstimate(type) :设定初始值(迭代初始值)
setId(int) :定义顶点的节点编号

optimizer.addVertex( ):添加顶点

2、添加边:(注意边一般添加很多个,因为已知数据有很多组)

通过构造函数创建边(指针)访问成员函数,(同时传入了已知数据的输入值):
setId(i):定义边的编号,决定在H矩阵中的位置
setVertex(int, vertex):将顶点通过编号传入_vertices[]储存,并用于Class边中计算误差
setMeasurement()传入观测值
setInformation()信息矩阵

optimizer.addEdge( edge ):添加边

例子
slambook2/ch6/ceresCurveFitting.cpp

顶点:

//创建顶点类
class CurveFittingVertex: public g2o::BaseVertex<3, Eigen::Vector3d>//普通类继承模板类,顶点维度、类型
{
   
public:
    EIGEN_MAKE_ALIGNED_OPERATOR_NEW
    virtual void setToOriginImpl() // 重置
    {
   
        _estimate << 0,0,0;
    }
    
    
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值