g2o - в чем разница между VertexSE3 и VertexSE3Expmap? - PullRequest
0 голосов
/ 08 апреля 2020

Я действительно новичок в библиотеке g2o и пытаюсь добавить позу в вершину: (

Я использовал python версию g2o, и это код, который я написал.

Ошибка типа в этой строке: 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.VertexSE3 и g2o.VertexSE3Expmap?

  3. Что мне нужно сделать, чтобы добавить вершину с кватернионом (numpy массив)?

Спасибо

...