首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Unix系统上的G2O BlockSolver初始化崩溃

Unix系统上的G2O BlockSolver初始化崩溃
EN

Stack Overflow用户
提问于 2018-08-01 15:12:10
回答 1查看 236关注 0票数 0

我有一个项目,它拥有和使用G2O库,它运行在两个平台(win/Unix)上。

(窗口已通过/ UNIX崩溃)

我们可以在这两个平台上看到以下几行:

代码语言:javascript
运行
复制
g2o::SparseOptimizer optimizer;
g2o::BlockSolver_6_3::LinearSolverType * linearSolver;

linearSolver = new g2o::LinearSolverDense<g2o::BlockSolver_6_3::PoseMatrixType>();

下一步,在window os中,我们有以下内容:

代码语言:javascript
运行
复制
g2o::BlockSolver_6_3 * solver_ptr = new g2o::BlockSolver_6_3(linearSolver);
g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg(solver_ptr);

但是Unix系统不能编译这些行,因为它说

my_file_G2o.cpp: *在成员函数'int Refiner_G2O::refinePose中( cv::Mat&,const std::vector >&,const std::Refiner_G2O::refinePose&,const cv::Mat&,float,my_file_G2o.cpp ->不匹配调用G2O//G2O/core/block_Solver.h:199:0文件中的^,G2o/include/g2o/core/block_solver.hpp:40:1注:候选人:有性状的 g2o::BlockSolver::BlockSolver(std::unique_ptr) = g2o::BlockSolverTraits<6,3>;类型名称特征::LinearSolverType= g2o::LinearSolver > BlockSolver::BlockSolver(std::unique_ptr linearSolver)

当我看到这些错误时,我用这个新块完成了Unix代码。

代码语言:javascript
运行
复制
auto solver_ptr = g2o::make_unique<g2o::BlockSolver_6_3>(linearSolver); // [SEGFAULT LINE]
auto solver = g2o::make_unique<g2o::OptimizationAlgorithmLevenberg>(solver_ptr);
optimizer.setAlgorithm(solver.get());

所以现在,我可以构建/运行,但是我遇到了一个SEGFAULT行标记的分段错误。

编辑:在逐步调试和调试构建之后,我有一些新闻信息:

代码语言:javascript
运行
复制
g2o::SparseOptimizer optimizer; // debug says: "optimize: g2o::SparseOptimize
g2o::BlockSolver_6_3::LinearSolverType * linearSolver = NULL; // debug says : linearSolver: NULL
linearSolver = new g2o::LinearSolverDense<g2o::BlockSolver_6_3::PoseMatrixType>(); // debug says:  linear solver: 0x7fe39cba9140

if (linearSolver == NULL) // debug says : not null.
    exit (84);
auto solver_ptr = g2o::make_unique<g2o::BlockSolver< g2o::BlockSolver_6_3 >>(linearSolver);

// DEBUG -->,在这里,用"step in“he to this”/usr/include/c+6/bit/move.h“,在ligne 48中我们可以看到这个函数:

代码语言:javascript
运行
复制
`template<typename T, typename ...ArgTs>
 std::unique_ptr<T> make_unique(ArgTs&& ...args) //DEBUG says: args#0: 
 -var-create: unable to create variable object.
  {
    return std::unique_ptr<T>(g2o::make_unique<T>(std::forward<ArgTs> 
    (args)...));
   };`

他错了是因为她有个坏的args。

我不明白,为什么?如果有人有一个想法,我想了解如何在窗口工作,而不是在Unix系统,将感觉很好,如果你帮助。

LINUX版本: Ubuntu 16.04

CMAKE版本: 3.11.4

诚挚的问候,

EN

回答 1

Stack Overflow用户

发布于 2018-08-03 11:48:59

已解决:

G2O优化:

代码语言:javascript
运行
复制
g2o::SparseOptimizer optimizer;

auto linearSolver = std::make_unique<g2o::LinearSolverDense<g2o::BlockSolver_6_3::PoseMatrixType>>();

auto solver = new g2o::OptimizationAlgorithmLevenberg(std::make_unique<g2o::BlockSolver_6_3>(std::move(linearSolver)));

optimizer.setAlgorithm(solver);

MISC.H:

代码语言:javascript
运行
复制
template<typename T, typename ...ArgTs>
std::unique_ptr<T> make_unique(ArgTs&& ...args)
{
  return std::unique_ptr<T>(new T(std::forward<ArgTs>(args)...));
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51636816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档