VertexSE3和VertexSE3Expmap有什么区别?



我真的是g2o库的新手,我很难将姿势添加到顶点:(

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

类型错误occs在此行中:v_se3.set_estimate(pose)

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

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

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

这些是我的问题,

  1. 为什么VertexSE3()在这里不工作?

  2. g2o.VertexSE3g2o.VertexSE3Expmap有什么区别?

  3. 我应该怎么做才能用四元数(numpy数组(添加顶点?

感谢

vertex e3表示为Isometry3d,而vertex e3expmap内部使用转换矩阵进行参数化,外部使用其指数映射进行参数化。

因此,如果您将姿势表示为g2o.SE3Quat,则可以使用vertex 3 expmap。

相关内容

  • 没有找到相关文章

最新更新