Python g2o——什么';VertexSE3和VertexSE3Expmap之间的区别是什么?

Python g2o——什么';VertexSE3和VertexSE3Expmap之间的区别是什么?,python,g2o,Python,G2o,我是g2o库的新手,我正在努力将姿势添加到顶点:( 我使用了python版本的g2o,这是我编写的代码 类型错误发生在此行:v\u se3.set\u estimate(pose) 我发现使用v_se3=g2o.VertexSE3Expmap()而不是g2o.VertexSE3()时可以添加顶点 但是我不确定g2o.VertexSE3Expmap()到底是什么意思 这就是我的问题 为什么VertexSE3()在这里不起作用 g2o.VertexSE3和g2o.VertexSE3Expmap之间有

我是g2o库的新手,我正在努力将姿势添加到顶点:(

我使用了python版本的g2o,这是我编写的代码

类型错误发生在此行:
v\u se3.set\u estimate(pose)

我发现使用
v_se3=g2o.VertexSE3Expmap()
而不是
g2o.VertexSE3()
时可以添加顶点

但是我不确定g2o.VertexSE3Expmap()到底是什么意思

这就是我的问题

  • 为什么
    VertexSE3()
    在这里不起作用

  • g2o.VertexSE3
    g2o.VertexSE3Expmap
    之间有什么区别

  • 使用四元数(numpy数组)添加顶点时应该做什么


  • 感谢

    vertexse3表示为Isometry3d,而vertexse3expmap在内部通过变换矩阵进行参数化,在外部通过其指数映射进行参数化


    因此,如果您将姿势表示为g2o.SE3Quat,则应使用vertexse3expmap。

    vertexse3表示为Isometry3d,而vertexse3expmap在内部通过变换矩阵进行参数化,在外部通过其指数贴图进行参数化

    因此,如果您将姿势表示为g2o.SE3Quat,则应使用vertexse3expmap

    import g2o
    import numpy as np
    
    solver = g2o.BlockSolverSE3(g2o.LinearSolverEigenSE3())
    solver = g2o.OptimizationAlgorithmLevenberg(solver)
    optimizer = g2o.SparseOptimizer()
    optimizer.set_algorithm(solver)
    
    trans = np.zeros(shape=[], dtype=np.float64)
    quat = g2o.Quaternion(np.array([1., 0., 0., 0.], dtype=np.float64))
    pose = g2o.SE3Quat(quat, trans)
    
    v_se3 = g2o.VertexSE()        
    v_se3.set_id(0)
    v_se3.set_estimate(pose)         # <- ERROR OCCURS HERE!
    optimizer.add_vertex(v_se3)
    
    Type error: set_estimate(): incompatible function arguments. The following argument types are supported:
        1. (self:g2o.BaseVertex_6_Isometry3D, et:g2o.Isometry3d) -> None